Keyboard shortcuts¶
Every keyboard shortcut in the web client, grouped the same way as the in-app help.
Some shortcuts bind different keys per platform: Mac / iPad uses Cmd, Windows / Linux uses Ctrl, and a few bindings are literal and identical everywhere. Where a row shows two columns, both are listed; where it shows one combo, it works on all platforms.
In-app help and customization
Open the command palette (Ctrl+Shift+P / Cmd+Shift+P, or F1 on Windows/Linux) or type /help to see the same list inside the app. Every binding can be rebound in Settings → Shortcuts (Ctrl+,); your overrides are synced to the server, so they follow you across browsers and devices.
iPad-reserved Cmd combos
iPadOS reserves some Cmd chords at the OS level (for example Cmd+,, Cmd+W, Cmd+Tab) — they never reach the web app, even in the PWA. Shortcuts that would collide keep an additive literal Ctrl binding as the iPad-safe fallback (e.g. Settings is Ctrl+, everywhere and Cmd+, on macOS proper).
Sessions & Tabs¶
| Action | Mac / iPad | Windows / Linux |
|---|---|---|
| New session | Cmd+T | Ctrl+T |
| Quick switcher | Cmd+K / Cmd+P | Ctrl+K / Ctrl+P |
| Open dialog (projects & sessions) | Cmd+O | Ctrl+O |
| Command palette | Cmd+Shift+P | Ctrl+Shift+P / F1 |
| Grid switcher (cycle forward) | Alt+Tab | Ctrl+Shift+] |
| Grid switcher (cycle backward) | Alt+Shift+Tab | Ctrl+Shift+[ |
| Close tab | Alt+W (both) or Cmd+W | Alt+W (both) or Ctrl+W |
| Reopen last closed tab | Cmd+Shift+T | Ctrl+Shift+T |
| Clone session | Cmd+N | Ctrl+Shift+N |
| New scratch tab | Ctrl+N | Ctrl+N |
| Previous tab | Cmd+[ | Ctrl+[ |
| Next tab | Cmd+] | Ctrl+] |
| Switch to tab 1–9 | Cmd+1 … Cmd+9 | Ctrl+1 … Ctrl+9 |
Note
Cmd+W closes the browser tab on macOS browsers — it only reaches the app in the PWA / standalone wrapper, which is why Alt+W exists as the universal close-tab binding. On Windows/Linux, clone is Ctrl+Shift+N because Ctrl+N is taken by "new scratch tab" (and Ctrl+N is deliberately literal on Mac too, where the Ctrl layer is mostly free).
Panels¶
| Action | Mac / iPad | Windows / Linux |
|---|---|---|
| Toggle terminal | Ctrl+` / Ctrl+\ | Ctrl+` / Ctrl+\ |
| New terminal | Ctrl+Shift+` / Ctrl+Shift+C / Cmd+Shift+C | Ctrl+Shift+` / Ctrl+Shift+C |
| Toggle rail menu (sidebar) | Cmd+B | Ctrl+B |
| File explorer | Alt+F | Alt+F |
| Log explorer | Alt+L | Alt+L |
| Git panel | Alt+G | Alt+G |
| Active sessions | Alt+S | Alt+S |
| Cost analytics | Alt+4 | Alt+4 |
| Discussion thread | Alt+/ | Alt+/ |
| Browser widget | Alt+B | Alt+B |
| Debug console | Alt+D | Alt+D |
| Eruda dev tools | Alt+Shift+D | Alt+Shift+D |
| History explorer | Alt+H | Alt+H |
| Zen mode | Alt+Z | Alt+Z |
| Quick actions (radial menu) | Ctrl+Q | Ctrl+Q |
| Prompt explorer | Alt+P / Ctrl+R | Alt+P / Ctrl+R |
| Skills panel | Alt+K | Alt+K |
| Commands panel | Alt+Shift+K | Alt+Shift+K |
| Thinking settings | ++cmd+apostrophe++ | ++ctrl+apostrophe++ |
| Cycle effort (one-shot, next message) | ++cmd+shift+apostrophe++ | ++ctrl+shift+apostrophe++ |
Background tasks has a panel toggle action but ships with no default binding — assign one in Settings → Shortcuts if you want it on a key. Cmd+R is bound to page reload on Mac/iPad only, for the standalone PWA wrapper where there is no browser chrome (in a normal browser it just reloads, same as native).
Search¶
| Action | Mac / iPad | Windows / Linux |
|---|---|---|
| Search in conversation | Cmd+F | Ctrl+F |
| Find next | Cmd+G | Ctrl+G / F3 |
| Find previous | Cmd+Shift+G | Ctrl+Shift+G / Shift+F3 |
Editor¶
| Action | Key |
|---|---|
| Toggle edit mode (file preview) | E |
E only fires when focus is not in an input, textarea, or terminal — i.e. while you are viewing a file preview, pressing E flips it into inline-edit mode.
Navigation¶
| Action | Mac / iPad | Windows / Linux |
|---|---|---|
| Previous user message | Cmd+Up | Ctrl+Up |
| Next user message | Cmd+Down | Ctrl+Down |
| Focus message input | Cmd+/ | Ctrl+/ |
| Focus project field | Cmd+L | Ctrl+L |
| Reconnect (when disconnected) | Cmd+Enter | Ctrl+Enter |
| Back to sessions | Backspace | Backspace |
Context gates worth knowing:
- Previous/next user message only fire while a session view is active.
- Focus input skips the CodeMirror editor, so Cmd+/ / Ctrl+/ still toggles comments in scratch tabs — but it does work from inside the terminal, as an escape hatch back to the chat input.
- Reconnect only fires when the active session is disconnected; otherwise the key passes through to other handlers (e.g. send).
- Back to sessions only fires when the back pill is visible and the message input is empty — it never steals Backspace while you are editing text.
Other¶
| Action | Key |
|---|---|
| Settings | Ctrl+, (all platforms), plus Cmd+, on macOS |
| Close / cancel | Esc |
| Help | no default binding — use the command palette or /help |
| Reload page (Mac/iPad only) | Cmd+R |
Esc is gated out of the terminal so it reaches your shell, vim, etc.
How context gating works¶
Each shortcut declares a when context. The defaults:
| Context | Behavior |
|---|---|
global (default) |
Fires everywhere except when the terminal is focused, so keystrokes pass through to the shell |
always |
Fires everywhere, including inside the terminal (tab switching, quick switcher, …) |
notInInput |
Suppressed while typing in any input or textarea |
notInTerminal |
Suppressed only in the terminal |
notInEditor |
Suppressed in the CodeMirror editor (lets the editor keymap win) |
session |
Only while a chat session view is active |
This is why Ctrl+B still works as your tmux prefix inside the terminal widget: the rail-menu toggle uses the default global context and stays out of the terminal's way.