Reference
Keyboard shortcuts
The complete default shortcut reference. The primary modifier is Command on macOS and Ctrl on Windows and Linux, written here as Cmd/Ctrl. Almost every chord can be rebound, scoped to a surface, or edited by hand in a file.
Panels & tools
| New terminal | Cmd/CtrlShiftT |
| New browser | Cmd/CtrlShiftB |
| New editor | Cmd/CtrlAltE |
| Open the Panel Library | Cmd/CtrlShiftE |
| Close the focused panel | Cmd/CtrlW |
| Delete the focused panel | Cmd/CtrlBackspace |
Canvas & zoom
| Zoom in | Cmd/Ctrl= |
| Zoom out | Cmd/Ctrl- |
| Reset zoom to 100% | Cmd/CtrlShift0 |
| Zoom to fit all panels | Cmd/CtrlShift1 |
| Auto-layout the canvas | Cmd/CtrlShiftL |
| Toggle the minimap | Cmd/CtrlShiftM |
| Toggle the sidebar | Cmd/Ctrl\ |
| Toggle the file explorer | Cmd/CtrlShiftX |
| Toggle the notebook | Cmd/CtrlJ |
You can also zoom by holding Cmd/Ctrl and scrolling, and pan with a two-finger trackpad scroll or a right-click drag. Cmd/CtrlJ summons and folds the notebook on the right of the window; see Notes & the notebook.
Focus & selection
| Panel Switcher (jump between open panels) | CtrlSpace |
| Focus next panel | Ctrl` |
| Focus previous panel | CtrlShift` |
| Select all panels and regions | Cmd/CtrlA |
| Group selected panels into a region | Cmd/CtrlG |
| Dissolve selected regions | Cmd/CtrlShiftG |
Workspaces & worktrees
| Next workspace | CtrlTab |
| Previous workspace | CtrlShiftTab |
| Jump to the 1st to 9th workspace (rail order) | Cmd/Ctrl1…9 |
| Jump to the 10th workspace | Cmd/Ctrl0 |
| Open the jump overlay (workspaces and worktrees) | Cmd/CtrlEnter |
| Switch Project (the workspace overview, one lane per workspace) | Cmd/CtrlShiftP |
| Open a folder | Cmd/CtrlO |
Inside the jump overlay, Tab cycles the workspace tabs, 1 to 9 jump straight to a worktree, and N cuts a new one. The overview behind Cmd/CtrlShiftP is a meta-canvas: one horizontal lane per workspace, one card per worktree. See Workspaces & the canvas.
Find & command
| Command Palette | Cmd/CtrlK |
| Quick open a file | Cmd/CtrlP |
| Search terminal scrollback (in a terminal) | Cmd/CtrlF |
Searching your project by content happens inside the Command Palette, not in a separate surface. What each source matches, and how the palette’s “ask the agent” mode works, is covered in Command Palette & search.
AI & voice
| Open Dex (toggle the chat bar) | Cmd/CtrlL |
| New Dex thread | Cmd/CtrlT |
| New agent task draft | Cmd/CtrlI |
| Jump to Next Thread Needing You | Cmd/CtrlShiftJ |
| Accept the terminal action-bar suggestion | AltEnter |
These follow the convention Cursor and VS Code use: Cmd/CtrlL opens the assistant, and Cmd/CtrlT starts a fresh thread the way a browser opens a new tab. If you have used Deska before, Cmd/CtrlT used to open Dex; any chord you rebound yourself survives the update untouched.
Cmd/CtrlShiftJ takes you to the next agent thread that wants something from you, an approval, an answer, a failure or an unseen result, wherever you happen to be working. See Agent threads.
Agent approval cards answer from the keyboard too: Cmd/CtrlEnter approves and Cmd/CtrlBackspace declines. Enter, S, D and Esc keep working as before, and a request that looks destructive still asks for a mouse click to approve.
The talk key (push to talk)
Talking to Deska is one held key now, borrowed from the best dictation tools. Hold fn on macOS, speak, and release to send. On Windows the talk key is CtrlWin and on Linux it is CtrlSuper, the same chord held the same way, still in beta on both.
The same key does different things depending on where you press it:
| In a text field: dictate at the cursor. Anywhere else: talk to Dex | Hold |
| Start or stop a hands-free conversation with Dex | Double-tap |
| Cancel | Quick tap |
| Cancel a dictation in progress (nothing is sent) | Esc |
Some Macs have no Apple fn key, and third-party external keyboards never send it. For those, open Settings → Keybindings → Push to talk and pick ControlOption as the hold key instead.
On Linux the listener needs an X11 or XWayland session. A native Wayland session does not let apps see global keys, so Deska reports the talk key unavailable there and Settings shows that message.
Editing & history
| Save the active file | Cmd/CtrlS |
| Undo | Cmd/CtrlZ |
| Redo | Cmd/CtrlShiftZ |
Undo, redo and save are context-aware: when a text editor has focus they apply to the editor; otherwise they act on the canvas.
Chords inside a surface
A few chords belong to one surface and fire only there. The app shows them next to the control they drive:
| Line break (thread composer) | ShiftEnter |
| Steer the running turn (thread composer) | Cmd/CtrlEnter |
| Toggle plan mode (thread composer) | ShiftTab |
| Back and forward in a browser panel (macOS) | Cmd[ / Cmd] |
| Back and forward in a browser panel (Windows and Linux) | AltLeft / AltRight |
| Quick-pick a row in popovers that show digit hints | Alt1…9 |
App & windows
| Open Settings | Cmd/Ctrl, |
| New window | Cmd/CtrlShiftN |
| Close window | Cmd/CtrlShiftW |
Customizing shortcuts
Open Settings → Keybindings to rebind any action: click a row, press the chord you want, and confirm. Bare keys are accepted, so a single function key is a valid binding. The one exception is Start Voice Transcription, which Deska registers with the operating system and which therefore has to carry at least one modifier. If your new chord is already taken by an action that could fire at the same moment, the two actions swap bindings, so nothing is ever left unbound. Every row has its own reset, plus a button that restores all the defaults at once.
A handful of chords are reserved and the recorder refuses them, because a hardcoded handler or a menu accelerator already owns the keystroke:
- Panel Library (Cmd/CtrlShiftE) and Open Folder (Cmd/CtrlO).
- New Window (Cmd/CtrlShiftN) and Close Window (Cmd/CtrlShiftW).
- Zoom In, including its hidden menu aliases on the
+key. - Delete Selection, which owns a bare Backspace or Delete, with or without Shift. The Cmd/Ctrl variants stay free and are where Delete Panel lives.
- Switch Workspace, the number keys Cmd/Ctrl1 through Cmd/Ctrl0.
Where a shortcut applies
Every rebindable action carries a context as well as a chord. The context decides which surface has to hold focus before the chord fires, and you pick it from the dropdown next to each row in Settings → Keybindings:
- Anywhere is the default for every shipped binding. It fires wherever you are in the app.
- Canvas, Terminal, Editor and Chat fire only while a panel of that kind has focus.
Because only one surface ever holds focus, the same chord bound in Terminal and in Editor is not a conflict, and Deska will not ask you to resolve it. You are warned only when two bindings share a chord and could be live at the same moment. That makes scoping a good way to reclaim a chord: bind it to one thing in a terminal and to something else in an editor.
The keybindings file
Settings writes your bindings to a plain JSON file that you are free to open and edit yourself. Settings → Keybindings → Open keybindings file reveals it, or you can go straight to it:
- macOS:
~/Library/Application Support/Deska/keybindings.json - Windows:
%APPDATA%\Deska\keybindings.json - Linux:
~/.config/Deska/keybindings.json
Each entry maps an action id to one binding. A binding is a key plus the modifiers you want: command, shift, option and control, all defaulting to false, plus an optional when holding the context (global, canvas, terminal, editor or chat).
command is the platform-primary modifier: Command on macOS, Ctrl on Windows and Linux. control is the physical Ctrl key on macOS and folds onto that same Ctrl key elsewhere. Only the actions you actually changed need to appear in the file: anything absent keeps Deska’s default, which is why shipped defaults keep improving across updates for every action you never touched.