# Desktop keyboard map

> Every desktop app shortcut on macOS and Linux, and how to rebind them.

These tables are generated from the app's source. In the app, `ctrl+y` shows the same list, as does `?` when you are not typing and no dialog is open. On Linux, `cmd` is the Super key.

## Prompt

These keys work in the composer.

| Action | Keys | Description |
| - | - | - |
| Send message | `enter` (Linux: `Enter`) | Send the message. During a run it waits in the queue, or steers the run when Queue messages is off. |
| New line | `shift+enter` (Linux: `Shift+Enter`) | Start a new line in the message. |
| Previous history entry | `up` (Linux: `Up`) | Bring back the previous message you sent, from an empty composer. |
| Next history entry | `down` (Linux: `Down`) | Step forward again through the messages you sent. |
| Mention a file | `@` (Linux: `@`) | Open the mention menu to attach a file or folder to the message. |
| Use a skill | `/` (Linux: `/`) | Open the slash menu: commands and the skills the agent can use. |

## Session

| Action | Keys | Description |
| - | - | - |
| New session | `ctrl+n` or `cmd+n` (Linux: `Ctrl+N or Super+N`) | Leave the active session and start a fresh one. |
| Back to the main session | `ctrl+shift+m` (Linux: `Ctrl+Shift+M`) | Jump to (or lazily create) the pinned "Main" orchestration session for the active directory. |
| Browse messages | `ctrl+s` (Linux: `Ctrl+S`) | Enter select-turn mode to navigate previous messages. |
| Session details | `ctrl+shift+x` (Linux: `Ctrl+Shift+X`) | Open the session details modal (rename, export, delete). |
| Switch agent | `shift+cmd+i` (Linux: `Shift+Super+I`) | Cycle to the next agent profile. |
| Switch model | `ctrl+m` (Linux: `Ctrl+M`) | Open the cross-provider model picker. |
| Reasoning effort | `ctrl+l` (Linux: `Ctrl+L`) | Open the reasoning-effort picker (when the active model supports it). |
| Todo list | `ctrl+t` (Linux: `Ctrl+T`) | Open the Inbox: what waits on you, the plan in progress and the recent ones. |
| Artifacts | `ctrl+shift+a` (Linux: `Ctrl+Shift+A`) | Toggle the side panel (artifacts the session produced, plus extension panels). |
| Stop the current work | `ctrl+k` (Linux: `Ctrl+K`) | Cancel a running tool call or background task. |

## Session actions

| Action | Keys | Description |
| - | - | - |
| Generate title | `ctrl+shift+t` (Linux: `Ctrl+Shift+T`) | Generate a title for the session via the active provider/model. |
| Compact conversation | `ctrl+shift+k` (Linux: `Ctrl+Shift+K`) | Compact older turns via an LLM summary (model still sees everything from the boundary down). |
| Export as Markdown | `ctrl+shift+e` (Linux: `Ctrl+Shift+E`) | Export the session as Markdown under .zidane/sessions/. |
| Export as JSON | `ctrl+shift+j` (Linux: `Ctrl+Shift+J`) | Export the session as JSON under .zidane/sessions/. |
| Copy session id | `ctrl+shift+c` (Linux: `Ctrl+Shift+C`) | Copy the full session id to the clipboard. |
| Add to or remove from favorites | Unbound | Add the session to favorites, or remove it. |
| Delete session | `ctrl+shift+d` (Linux: `Ctrl+Shift+D`) | Delete the entire session (confirm dialog). |

## Panels and tabs

| Action | Keys | Where | Description |
| - | - | - | - |
| Next panel | `ctrl+shift+]` (Linux: `Ctrl+Shift+]`) | Anywhere | Cycle to the next side-panel tab (opens the panel). |
| Previous panel | `ctrl+shift+[` (Linux: `Ctrl+Shift+[`) | Anywhere | Cycle to the previous side-panel tab (opens the panel). |
| Next tab, file or terminal (else next space) | `cmd+alt+right` (Linux: `Super+Alt+Right`) | Focused area | Next tab where the focus is: open file, changed file, terminal; elsewhere the next space (Spaces on) or side-panel tab. |
| Previous tab, file or terminal (else previous space) | `cmd+alt+left` (Linux: `Super+Alt+Left`) | Focused area | Previous tab where the focus is: open file, changed file, terminal; elsewhere the previous space (Spaces on) or side-panel tab. |
| Close tab, file or terminal | `ctrl+w` or `cmd+w` (Linux: `Ctrl+W or Super+W`) | Focused area | Close the open file in Files, the terminal, or else the active side-panel tab. |
| Split the panel tab right | `cmd+\` (Linux: `Super+\`) | Anywhere | Split the side panel's active tab into a new group on the right. |
| Split the panel tab down | `alt+cmd+\` (Linux: `Alt+Super+\`) | Anywhere | Split the side panel's active tab into a new group below. |
| Find in the file or diffs (in Files and Diffs) | `cmd+f` or `ctrl+f` (Linux: `Super+F or Ctrl+F`) | Files, Diffs | Find text in the open file or in the diffs. |
| Search across files (in Files and Diffs) | `cmd+shift+f` or `ctrl+shift+f` (Linux: `Super+Shift+F or Ctrl+Shift+F`) | Files, Diffs | Search across the workspace files. |
| Show or hide the terminal | `` ctrl+` `` or `cmd+j` (Linux: ``Ctrl+` or Super+J``) | Anywhere | Show or hide the terminal drawer under the chat. |
| New terminal | `` ctrl+shift+` `` (Linux: `` Ctrl+Shift+` ``) | Anywhere | Open a new terminal in the session's environment (shows the drawer). |
| Annotate the page (in the Browser tab) | `cmd+.` (Linux: `Super+.`) | Anywhere | Mark elements and areas of the page in the Browser tab for the agent, or stop marking. |

## App

| Action | Keys | Description |
| - | - | - |
| Command palette | `cmd+k` (Linux: `Super+K`) | Toggle the command palette: search every action, command, panel, session and setting. |
| Show or hide the sidebar | `cmd+b` (Linux: `Super+B`) | Show or hide the chats sidebar. |
| Back to the previous conversation | `cmd+left` or `cmd+[` (Linux: `Super+Left or Super+[`) | Go back to the conversation shown before, like a browser. |
| Forward to the next conversation | `cmd+right` or `cmd+]` (Linux: `Super+Right or Super+]`) | Go forward again to the conversation you went back from. |
| Usage | `ctrl+p` (Linux: `Ctrl+P`) | Open the usage panel (rate-limit windows and credits per provider, GitHub API limits). |
| Settings | `cmd+,` (Linux: `Super+,`) | Open the Settings modal (toggles, theme, keybindings). |
| Keybindings | `ctrl+y` or `?` (Linux: `Ctrl+Y or ?`) | Open the shortcut reference. |
| Zoom in | `cmd+plus` (Linux: `Super+=`) | Increase the interface size. |
| Zoom out | `cmd+minus` (Linux: `Super+-`) | Decrease the interface size. |
| Reset zoom | `cmd+0` (Linux: `Super+0`) | Reset the interface size to 100%. |

## Keys you cannot rebind

These keys act only where shown and are not in `keybindings.json`.

| Where | Keys |
| - | - |
| Anywhere but a dialog | `cmd+f` finds in the conversation, unless Files, Diffs or the editor has the focus |
| Tool approval | `cmd+enter` Allow once, `cmd+shift+enter` Always allow, `esc` Deny |
| File edit approval | `a` Allow, `s` Allow for session, `p` Always allow, `d` or `esc` Deny |
| Browsing messages (`ctrl+s`) | `up` `down` move, `enter` details, `c` copy, `f` fork, `esc` exit |
| Conversation search | `enter` next match, `shift+enter` previous, `esc` close |
| Editing a queued message | `enter` save, `shift+enter` new line, `cmd+enter` send now, `esc` cancel |
| Model picker | `tab` add or remove a fallback, `ctrl+shift+up` `ctrl+shift+down` reorder |
| Files and Diffs | `cmd+enter` attach a review comment, `cmd+s` save the open file |
| Composer, empty | `!` shell mode, `?` search the transcript |
| Command palette | `up` `down` move, `enter` run, `esc` close |

## Rebind a key

Both apps read the same `keybindings.json` ([location](https://zidane.si/docs/files.md), [format](https://zidane.si/docs/tui-keys.md#rebind-a-key)).

1. In Settings › Interface › Keybindings (read-only), click Edit in file.
2. Change a binding and save the file.
3. Click Reload. The desktop app applies the keys at once.

The TUI reads the file only at start. Restart the TUI to pick up the change.

![Settings, Keybindings tab: every shortcut by group, with Edit in file and Reload.](https://zidane.si/captures/settings-keybindings-light.webp)

## Reference

- [Command palette](https://zidane.si/docs/desktop-palette.md): every action with its shortcut, searchable.
- [`KeyCombo`](https://zidane.si/docs/reference/ui-components-keycap.md): how the kit draws a chord.
