Repository navigation
Onyx 0.20
Before you update
- Update every Mac that shares a home host. 0.20 adds hosts and
settings to the shared state, and an Onyx older than 0.20 trims fields it
doesn't know when it writes the file back. From 0.20 on, they're kept. - Reinstall the bridge on your hosts when CONNECTIONS says "update
available" (bridge protocol 5, below).
Finding what Onyx can do
- What's New. After an update, Onyx shows a card once listing what
arrived since you last looked, with "Show me" for the features it can put
on screen. It's in the Help menu and the command palette afterwards. New
installs get the tour instead. - Tips where features live. A one-line NEW tip appears where a new
feature is used: in the file browser ("⌘V pastes files copied in
Finder"), on an open file, in the monitor's agenda pane, and in the
status bar under the terminal. Each place shows one tip at a time. A tip
goes away for good once you use the feature or close it, in every
window. - More of the command palette finds features by what they do: today's
calendar in the monitor, the file browser as a tree, cycling the side
panel's width, What's New and the walkthrough.
Shared state and your other Macs
- API tokens are in the Keychain now, not in Onyx's preferences file.
Your GitHub, GitLab, Timing and flowtree tokens move over the first time
they're used. They stay on this Mac, and they still never travel in the
shared state. - More of your settings follow you between Macs through the home host:
the PR draft filter, which reminder lists show and whether only items
due soon do, the agenda pane, the extra clocks and the 12-hour clock,
the GitHub repos and GitLab projects (with their usernames and "mine
only"), the flowtree controller, and the first window's Timing projects.
Window layout, where alerts go and anything else about one desk stay on
each Mac. A Mac syncing settings for the first time adopts the ones
already on the host rather than overwriting them. - A copy of the shared state written by a newer Onyx is no longer
trimmed by an older one. Fields and settings it doesn't know are kept. - A built-in SSH client. Settings → Hosts → SSH client can move
shared-state sync — or every remote call except terminals: git, files,
stats, docker — onto Onyx's own SSH client instead of OpenSSH. It reads your ~/.ssh/config and
known_hosts, signs in with an Ed25519 or ECDSA key (not RSA, not through
ssh-agent), and refuses a host reached through ProxyJump rather than
connecting around it. OpenSSH stays the default.
Hosts
- Reach a host through another. Settings → Hosts → edit a host →
Reach through picks any host you've already added as its tunnel
host. Host, port and user are then as the tunnel host sees them — a name
or address on its network. The connection rides the tunnel host's
existing connection, so the tunnel host still gets no more than its two.
A tunneled host waits while its tunnel host is down or paused, and is
never tried directly. Chains work (A through B through C); the picker
leaves out choices that would loop. The host list shows "via ",
and says so when a tunnel host has been removed. Key setup goes through
the tunnel too. The built-in SSH client doesn't follow tunnels yet;
those hosts stay on OpenSSH. - Removing a host no longer clears every favorite. It kept only the
favorites it could match to a session's internal id, which none of them
were since favorites moved to user@host keys — so removing any host
emptied the bar, and a paused or offline host's favorites went with it.
Now only the removed host's own favorites go.
Page watches
- The "512GB M5 Ultra Mac Studio" preset is gone. That option has
shipped. A watch you made from it stays in your list until you delete
it.
Side panel
- The divider shows it can be dragged. It has a grip, lights up under
the pointer, and says what it does when hovered. Double-click resets
the panel to its default width. - Each window remembers its panel width across launches, on this Mac.
⌘\ still steps through preset widths, and the window remembers those
too.
Claude sessions
- A Claude started with
su -orsudo -iuinside your tmux is listed
under its tmux session instead of just the machine name. Switching
accounts hides tmux from the agent's hooks, so the bridge sends its
process ancestry and Onyx asks your tmux which pane it's in. Hosts need
the new bridge (protocol 5), so they show "update available" until
reinstalled.OnyxMCP --originshows what a hook on that host reports.
Timing
-
Agent hours beside your own. With a flowtree controller set up
(Settings), the monitor's Timing section adds an agents column: the
wall-clock time flowtree jobs ran this week across every workstream, per
day, and the 4-week and 30-day averages. It has its own color and icon
and sits behind a divider. Simple mode gets an agents tile at the end
of the bottom strip.- It isn't drawn in the bar chart. Jobs in parallel each count in full,
so agents can log far more than 24 hours in a day, and one scale for
both would flatten your bars. - Days are counted in this Mac's time zone, so they line up with
Timing's. A job that runs past midnight is split between the days.
Jobs still running count their time so far. A job whose worker has
gone silent stops counting at its last heartbeat. - Needs a controller with
GET /api/stats/daily. An older controller
shows a one-line note instead of zeros.
- It isn't drawn in the bar chart. Jobs in parallel each count in full,
-
Up to three Timing.app projects at once. Settings → Monitor → Filter
Projects now takes up to three top-level projects, in the order you
choose them (each chip shows its place). Each one gets its own bars and
numbers:- The week chart has one bar per project for each day, side by side,
each split by that project's subprojects as before. A thin strip in
the project's color under each bar, matching the dots in the header,
tells them apart. - The legend is the union of every selected project's subprojects (and
the projects themselves, when time is logged to them directly), most
time first, whichever project it's under. It wraps onto more lines
when it needs to. - The numbers are columns: one per project plus a total, each with
the week's hours above its hours per day (with the 4-week and 30-day
averages in small type), and the column's label underneath, so it
can't be confused with the legend's subproject names. Fewer projects
means fewer, wider columns. One project gets a single column, since
its total would repeat it. - In the simple layout, the corner widget repeats once per project,
with the project's name above it. Every tile has its colored bar,
including a project whose time is all in one subproject, where the
bar is solid. It used to appear only when there was more than one
part.
"All" still clears the selection, and a single project looks exactly as
it did before. An existing single-project filter carries over. - The week chart has one bar per project for each day, side by side,
-
Projects with no color in Timing keep the same fallback color: from
launch to launch, and between a bar and its legend dot. The fallback
used to come from a hash that changes every launch, and the chart and
legend each chose their own. -
The simple monitor's charts stay above the bottom strip. They were
sized without counting their own titles and spacing, so they ran down
behind the strip's text. With the memory chart on, the Timing tiles'
labels were half covered. Each chart's full height is now counted, and
nothing in the chart area can draw past it. -
Fleet charts per machine go side by side past three machines. In the
simple layout, four or more machines used to be stacked in one column
that never fit the screen. Now a column holds at most three machines:
four are split 2 + 2, five are split 3 + 2. -
The simple monitor's bottom strip shows PR jobs in flight, as well as
containers. A PR with a job running or queued gets a pill with its
branch and the job's name, colored as in the side panel: blue for
running, amber for queued. Click a pill to open the PR. The strip's
three slots go to whatever matters most right now. A container doing
real work (about a third of a core or more) comes before a PR's job,
and a PR's job comes before an idle container. A PR the side panel is
already listing doesn't take a slot. Slots don't flip back and forth
when two things are about equally busy. A long branch name is shortened
from the prefixes first:experiment/quant-welfare/phase-1shows as
expe/quan/phase-1. If it still doesn't fit, it is cut inside the last
part:feature/delta-consolidationshows asfeat/delta-…dation. -
Din the detailed monitor switches to simple mode and opens the side
panel. It used to toggle the side panel without leaving the detailed
layout, where there is no side panel. The change couldn't be seen, and
the panel was off the next time simple mode came up.R(reminders due
soon) likewise does nothing in simple mode, which has no list for it to
filter. The hint line under the clock lists only the keys that do
something in the current layout. -
The side panel's PR lines no longer name the workflow, only the
running or queued job, leaving more room for the branch. Hover a PR line
to see the workflow. -
Renaming a session no longer leaves a copy under its old name. The
terminal stays attached through the rename and keeps its activity clock.
Before, the old name stayed in the session list beside the new one. -
Shift-Return makes a new line in Claude Code instead of submitting.
Onyx now sends Shift-Return as ESC CR (Meta-Return), the sequence
Claude Code reads as a line break. It passes through tmux unchanged. In
a zsh prompt it adds a line to the command being edited. -
⌃⇥ cycles tmux sessions, and ⇧⇥ now goes to the terminal by
default, so Claude Code's permission-mode switch works out of the box.
This applies to existing installs too — if you want ⇧⇥ to cycle
sessions again, turn it back on in Settings → General → Keyboard. -
Paste files into the file browser. Copy files or folders in Finder
with ⌘C, click into the file browser, and press ⌘V. They upload to the
folder being shown, the same as dropping them there. ⌘V with text on
the clipboard works as it always has. -
The monitor's agenda pane can show today's calendar instead of
Reminders. PressAwith the monitor up, or click CALENDAR in the
pane's header. That's the reminders column in the detailed layout, and
the list in simple mode's side panel. In simple mode,Aalso opens the
side panel. The detailed layout shows the whole day, with past events
dimmed and the current event highlighted. Simple mode shows only what's
left of the day. Onyx asks for calendar access the first time you switch
to the calendar, not at launch. -
Choose which calendars the agenda pane shows. Settings → Reminders
& Calendar lists every calendar this Mac can see, grouped by account,
each with a checkbox. All are on by default, and a calendar added later
shows up without a trip to Settings. The choice is per Mac. If the list
is empty, the pane now says so: Onyx sees only the calendars in
Calendar.app, so a Google or Outlook calendar you only use in a browser
needs adding in System Settings → Internet Accounts. Calendars that
arrived after access was granted no longer stay invisible until a
relaunch. -
Edit files from the file browser. Open a text file and click Edit.
It opens in a full-window editor; ⌘S saves it back to the host. Esc
closes, and asks first if there are unsaved changes. Before saving, Onyx
checks whether the file changed on the host since you opened it. If it
did, you choose: overwrite it, or reload and lose your edits. A save
writes into the existing file, so it keeps its permissions and
ownership, and a symlink stays a symlink. The new bytes are on the
host's disk before the file is touched. Line endings and every other
byte you didn't edit are kept exactly. Files over 2 MB, or that aren't
UTF-8 text, open read-only with an explanation. -
The file browser can show a folder as a tree. Click the tree button
in its toolbar. Folders open in place when clicked, and each folder's
contents are fetched the first time you open it. Files open as usual.
"Open as folder" in a folder's right-click menu makes it the folder
shown. The choice is remembered. -
Download from the file viewer gets the right file when the file was
opened from search. It used to look for a file of that name in the
folder being shown.