Shortcuts
Defaults, Settings → Keyboard, and the settings.json chord language.
Every static command has a default chord or is unbound (null — palette only). Change them
in Settings → Keyboard: click a shortcut, press the new combo. Escape while recording
clears it (unbound).
Hold-modifier session numbers are not recorded that way: they always follow Settings → General (Cmd/Super, Ctrl, or both).
Defaults
mod means the shortcut modifier picked in Settings → General, and every chord below
follows it — pick once, the whole catalog moves. On a Mac with the default Both that is
⌘ or Ctrl; off a Mac the same slot is the Super (Windows) key, so the choice reads
Super / Ctrl / Both there.
On Linux, Super belongs to the window manager: Both deliberately leaves it out (Hyprland grabs its own chords, and a swallowed key-up used to leave the sidebar numbers stuck), and choosing Super hands the app whatever your compositor does not already claim. A single command can always be rebound to any other key under Settings → Keyboard.
| Action | Default |
|---|---|
| Open command palette | mod+k |
| Close command palette | escape |
| Open settings | mod+comma |
| Close settings | escape (same key as close palette; Settings closes if the palette is not open) |
| Toggle sidebar | mod+b |
| Close session | mod+w |
| New terminal | mod+n |
| Paste into terminal | mod+v — an image in the clipboard is handed to the agent as ^V, the way a native terminal does, so Claude Code or pi picks the image up itself |
| Copy terminal selection | mod+shift+c — never mod+c, which is the interrupt every shell expects on Linux. The selection belongs to xterm, so the focused terminal answers |
| New project | mod+shift+n |
| New window for a connection | mod+alt+n — opens the palette on the machines; one window per machine, an open one is brought to the front |
| Next / previous project | mod+arrowdown / mod+arrowup — walks the sidebar, wrapping around; empty projects are skipped |
| Move session up / down | mod+shift+arrowup / mod+shift+arrowdown — reorders the sidebar like a drag; at the top or bottom of a project the session moves into the next one |
| Move project up / down | mod+shift+pageup / mod+shift+pagedown — moves the whole project, sessions and all |
| Remove focused block | mod+backspace |
| Focus block left / right / up / down | mod+alt+arrowleft … mod+alt+arrowdown |
| Swap block left / right / up / down | mod+alt+shift+arrowleft … |
| Toggle block fullscreen | mod+alt+f |
| Zoom in / out one level | mod+alt+i / mod+alt+o |
| Jump to session 1…9 | mod+1 … mod+9 |
| Open the board | mod+shift+b — the kanban of agent tasks (GPUI app) |
| New board task | mod+shift+t |
| Start the selected card | mod+enter — in the New task form: add and start |
| Open PR / merge / send feedback | mod+shift+p / mod+shift+m / mod+shift+enter — only while the board is open |
| Open the card's session | mod+o — only while the board is open, so the shell keeps Ctrl+O elsewhere. It opens over the board; mod+o again closes it (Escape stays the agent's) |
| Show the session full view | mod+shift+o — from the board or its session window, back to the terminal layout |
| Mark the session done | mod+shift+d — only while the board is open: a session (not a task card) goes to Done, pressed again it goes back to Review. It leaves Done by itself when its agent starts working again |
| Delete the card | unbound — palette, or the Review screen |
| Rename session / project | unbound — palette |
Remove empty project (Remove project: …) | unbound — palette; context menu on empty row |
| Show in folder / copy path | unbound — palette |
| Save layout | unbound — palette |
| Focus next block | unbound — palette |
Session 10 and up use the same hold-mod overlay: type the full number. See
Jumping sessions.
Click a block header to focus it (accent border), or use ⌃⌥←↑↓→. ⌃⌥⇧ arrows swap, ⌃⌥F
goes fullscreen, ⌃⌫ removes. How the grid reacts (edge rule, splits, repack, move … top right)
is on Tiling blocks.
Block chords add Alt on purpose: plain Ctrl+arrows stay with the shell (word-jump), and
Super+arrows / Super+F belong to the window manager. Because they are mod+alt+…, the same
keys work on a Mac and on Linux. New shortcuts show up even if your settings.json was saved
before they existed; Settings → Keyboard lists them.
Hold-⌘ session numbers jump sidebar sessions. Arrow chords move blocks on the current pane. They do not clash.
settings.json
App-wide knobs live in one file. Keyboard settings write keybindings here.
{
"version": 1,
"overlayModifier": "both",
"keybindings": {
"palette.open": "mod+k",
"pane.close": "mod+w",
"pane.rename": null
}
}| Field | Meaning |
|---|---|
overlayModifier | "cmd" (⌘ on a Mac, Super elsewhere) | "ctrl" | "both" — sidebar numbers and every mod+… chord |
keybindings | command id → chord string, or null to unbind |
| unknown ids | kept, so you can bind a dynamic id like add:files by hand |
New commands in the app appear with their defaults without wiping your file.
Chord language
| Token | Meaning |
|---|---|
mod | follows overlayModifier |
cmd ctrl alt shift | explicit modifiers (super, meta and win are accepted spellings of cmd) |
escape comma backspace space | named keys |
| other | one key, case-insensitive (k, 1, arrowleft) |
Examples: mod+k, cmd+shift+n, escape.
In Settings, Escape clears a recording. To bind Escape itself, set "escape" in the JSON.
Launchers (Claude, Cursor, …) keep their own store — Settings → Launchers — not this file. They still show up as New: … rows in the palette.