Keyboard and the palette
The app is meant to be driven without the pointer. Everything the
pointer can reach is in the palette, the terminals themselves are one
digit away, and if you ever can't remember a binding,
⌘⇧/ puts the whole list on screen — this
was gated on discoverability more than on any missing chord.
The palette — ⌘K
An empty palette leads with the ↵ again ghost, the terminal you last jumped to, one key away. Behind it are the verbs that act across every terminal at once — close all the idle ones, tell every idle agent to continue, accept every waiting prompt, walk the triage queue, collect recent errors into the scratchpad.
Spawning answers here too, the whole of it:
- a plain terminal, or any model in your agent roster;
- your own saved terminals, and the same again in a fresh worktree;
the project's saved commands, and its scheduled jobs on demand;
the terminals it remembers closing, reopened by name with how long ago they went.
The git chips are verbs as well — push and pull appear only when the
counters have something to move, wearing
↑3 / ↓2 as
their subtitle. The rest is the quieter chrome, finally findable: rename
and close, open in your editor, reveal, copy path, view on GitHub,
favorite, hide, settings, arming remote control, terminal text size.
Start typing and the terminals join in, fuzzy-ranked against the verbs:
jump rows wearing their live status dot, and projects to open. Lead with
> to browse the verbs alone. The
catalogue is longer than the rows it shows, on purpose — an empty
palette offers the primary set and the long tail waits for a needle,
because a list you scan should be the handful you would have reached
for.
Searching inside terminals
Three or more characters and the palette also matches what is inside your terminals — every session whose buffer or scrollback contains the text, literal and case-insensitive, joins the results as a Found in … row with its freshest matching line as the subtitle. This is the “which one printed that error” case. Name and verb matches keep the top of the list, with a few slots reserved so a page of name matches can never crowd the content hits out. Buffers are snapshotted once when the palette opens, so the search costs nothing per keystroke.
Inside one terminal
- Find — ⌘F
⌘Ksays which session said it;⌘Fsays where. A small bar floats over the terminal in front of you, searching live as you type with the match scrolled into view, ↵ and ⇧↵ stepping through, and an honest “3 of 14” beside the field. Esc hands the keyboard straight back to the shell, and the query is remembered for the next⌘F.- Jump to prompt — ⌘↑ / ⌘↓
Walk the terminal command by command. Every prompt records where it landed, and the jump puts the previous or next one at the top of the viewport — the head of a long build's output in one press instead of fifty wheel turns.
⌘↓past the last prompt lands back on the live bottom.- Quick run — ⌘P
The
git pullyou would otherwise open a whole terminal for while an agent holds the one you're in. Type one command and it runs in a live panel floated over the corner, in the selected terminal's exact directory, worktree and all. The panel never takes focus and the selection never moves. It runs as a one-shot, so a clean finish ends with a real exit code and the panel folds itself away after a readable beat; a failure leaves a live prompt sitting in its own output, ready to click into and keep as an ordinary terminal. Fire a second before the first has folded and they stack up the edge rather than stealing each other's spot.⌘⇧Mis the persistent sibling — see the monitor dock.
Switching terminals
⌘1–⌘9 land
on a terminal by its place in the menu. Those places move — attention
gravity keeps re-sorting the menu — so hold ⌘ on its own
for a second and each terminal's digit is drawn on its row, and on
the panes on screen. The mapping is read rather than remembered, which
is what makes a moving number survivable: you never have to have guessed
it. A chord is not a hold, so a second modifier, any keystroke, or
⌘-tabbing away takes the numbers straight back down, and
⌘K never flashes them.
Past nine, ⌘⇧] and
⌘⇧[ step through the whole menu, wrapping
at both ends.
Every binding
| Key | Does |
|---|---|
| ⌘1–⌘9 | Go to a terminal by its place in the menu (hold ⌘ to see the numbers) |
| ⌘⇧] / ⌘⇧[ | Next / previous terminal |
| ⌘↩ | Answer the terminal in front of you |
| ⌘⇧A | Turbo — let this agent's prompts answer themselves |
| ⌘J | Triage the next terminal that needs you |
| ⌘T | New terminal in the current project — the type you last picked from + |
| ⌘⇧T | The same, as a general terminal with no project |
| ⌘N / ⌘⇧N | The plain pair — just a shell, in the project or outside one |
| ⌘K | Command palette |
| ⌘P | Quick run |
| ⌘⇧M | Monitor — a persistent, docked ⌘P |
| ⌘D | Split a second terminal beside the current one |
| ⌘] | Move the keyboard between split panes |
| ⌘⇧W | Collapse the split |
| ⌘F | Find in this terminal |
| ⌘↑ / ⌘↓ | Jump to the previous / next prompt |
| ⇧PageUp / ⇧PageDown | A page of scrollback |
| ⌘⇧↑ / ⌘⇧↓ | The top / bottom of the scrollback (⌘Home / ⌘End also work) |
| ⌘⇧C | Copy the last command's output |
| ⌘⇧K | Clear this terminal — screen and scrollback, since ⌘K is the palette here |
| ⌘L | Filter the project menu |
| ⌘⇧O | Add a project |
| ⌘W | Close the focused terminal — falls through to closing the window when nothing is selected |
| ⌘/ | Toggle the scratchpad beside the terminal |
| ⌘= / ⌘- / ⌘0 | Terminal text size — the app's own size is a separate dial in Settings ▸ Appearance |
| ⌘⇧P | Ports — what's listening, and the processes that outlived their terminal |
| ⌘⇧/ | The whole list, on screen |
| ⌘, | Settings |
| ⌘Q | Quit — with a warning while anything is still running |