diri is keyboard-first. This page groups every default binding by what you are trying to do. Unless a row says otherwise, a shortcut works whenever the main window is focused, including while you type in a terminal.
Modifiers use the macOS glyphs: ⌘ Command, ⇧ Shift, ⌥ Option, ⌃ Control. For a gentler introduction to the handful worth learning first, read Shortcuts worth learning.
Change a shortcut
Open Settings → Shortcuts to see every command with its description and rebind or clear it. Custom bindings take precedence over the defaults below, and the native menus, the command palette and the hold-⌘ hints all follow them.
Linux
On Linux, ⌘ becomes Ctrl and ⌃⌘ becomes Ctrl+Shift. A few bindings move to avoid collisions:
| Command | macOS | Linux |
|---|---|---|
| Toggle inspector | ⇧⌘D | Ctrl+Shift+D |
| Delegate session | ⌃⌘D | Ctrl+Alt+D |
| To-dos | ⌃⌘T | Ctrl+Alt+Shift+T |
| Focus pane left / right / up / down | ⌃⌥ + arrow | Ctrl+Alt+H / L / K / J |
| Hide diri | ⌘H | none |
See shortcuts in place
Hold ⌘ on its own for a moment (700 ms) and the ⌘ shortcuts appear on the controls they operate: ⌘1 … ⌘9 on session rows and tabs, ⌘T on New Agent and the new-tab button, ⌘B on the sidebar toggle, ⇧⌘D on the inspector toggle, ⇧⌘H on search, and ⌘W under the selected tab's close button. Release ⌘ and they fade out.
Pressing another key or clicking while ⌘ is down counts as a shortcut, so the labels never flash during ⌘C or ⌘T. A command rebound away from ⌘ shows nothing. With Reduce Motion they appear and disappear without a fade.
Sessions
| Shortcut | Action |
|---|---|
| ⌘N | Show or hide the launcher: pick a project and agent, then type the first prompt |
| ⌘T | Start a session with the default agent, no launcher |
| ⌥⌘T | Start a plain terminal session |
| ⌥⇧⌘N | Start a Codex session |
| ⌥⌘N | New note in the current project |
| ⌘R | Rename the selected session in place |
| ⌃⌘D | Delegate: mark the selected session as a handoff source; select a target and press again to review and send |
| ⌥⇧⌘W | Archive the selected session |
| ⌘W | Close a focused auxiliary terminal; otherwise close the selected session, or the window when none is selected |
| ⇧⌘T | Reopen the most recently closed session |
| ⇧⌘N | New window for the current workspace |
| ⇧⌘W | Close the window; sessions keep running |
| ⌘Q | Quit diri; the Engine keeps sessions alive |
| ⌘H | Hide diri |
Set the default agent for ⌘T in Settings → General → Default agent.
Move between sessions
| Shortcut | Action |
|---|---|
| ⌘1 … ⌘8 | Select the nth session; hold ⌘ to see each row's number |
| ⌘9 | Select the last session |
| ⌘[ / ⌘] | Previous / next session in sidebar order, wrapping |
| ⌥⌘← / ⌥⌘→ | Previous / next session |
| ⌥⌘↑ / ⌥⌘↓ | Previous / next session |
| ⌃⌘↑ / ⌃⌘↓ | Move the selected row up or down among its siblings |
| ⇧⌘J | Jump to the next session that needs you |
| ⌃⇥ | Most-recently-used switcher; hold ⌃ and press ⇥ again to advance |
| ⌃⇧Space | Peek tabs: preview sessions across projects without switching |
| ⇧⌘B | Move keyboard focus to the sidebar |
Selecting a session also focuses its terminal.
While the switcher is open: ⇧⌃⇥ cycles backwards, ← ↑ go back, → ↓ go forward, ↵ commits the highlighted session, Esc cancels, and releasing ⌃ commits. Every other key is swallowed until it closes.
Surfaces
| Shortcut | Action |
|---|---|
| ⌘K | Command palette |
| ⌘P | Open project (the palette's project page) |
| ⇧⌘H | Search chats (the palette's history page) |
| ⇧⌘F | Search notes |
| ⌃⌘T | To-dos across every note |
| ⇧⌘I | Notifications inbox |
| ⇧⌘O | Session overview |
| ⌥⌘W | Worktrees overview |
| ⌘, | Settings |
| ⌘B | Show or hide the sidebar (or the top bar with horizontal tabs) |
| ⇧⌘S | Switch tabs between the sidebar and the top |
| ⇧⌘D | Show or hide the inspector |
| ⌘J | Show or hide an auxiliary terminal below the selected session |
⌘K, ⌘P and ⇧⌘H open the same palette on different pages. The palette lists most commands with their shortcuts, so it doubles as a reminder for the ones you use least. Check for Updates…, What's New and Review session launches have no default shortcut and live in the palette.
Panes
| Shortcut | Action |
|---|---|
| ⌘D | Split right and choose a session for the new pane |
| ⇧⌥⌘D | Split below and choose a session |
| ⇧⌘↵ | Zoom the focused pane, or restore the layout |
| ⌃⌥ + arrow | Focus the nearest pane in that direction |
| ⌥⇧⌘ + arrow | Resize the nearest split divider by five percent |
Swapping, moving and removing panes are in the command palette without default shortcuts. Removing a pane keeps its session running.
Inside the palette
| Shortcut | Action |
|---|---|
| ↑ / ↓ | Move the highlight |
| ⌃P / ⌃N | Move the highlight, readline style |
| ↵ | Run the highlighted entry |
| ⌘↵ | Open project only: open a plain terminal in that folder instead of the default agent |
| ⌘[ | Back to the previous palette page |
| ⌫ with an empty query | Back to the previous palette page |
| Esc | Close the palette and cancel any theme preview |
Choose Settings → Color theme in the palette, or search for Color theme. Arrow keys and hover preview each theme across the app. Enter or a click saves it; Escape, Back or switching pages restores the saved theme.
Inside the launcher
| Shortcut | Action |
|---|---|
| ⇥ / ⇧⇥ | Cycle the agent forward or backward |
| ↵ | Start the session |
| ⇧↵ | New line in the prompt |
| ⌘R | Show saved recipes |
| ⌘S | Save the prompt as a recipe, or update the active one |
| ⌘1 … ⌘3 | With an empty prompt, run the first three recipes |
| ⇧⌘A | Choose the account (Claude Code and Codex) |
| Esc | Close the launcher |
When the agent or project picker is open it takes the arrows first: ↑ ↓ move the highlight, ↵ commits it, and Esc closes the picker without closing the launcher. Recipes are covered in Recipes and scheduled tasks.
A handoff opens in the same surface with the generated context editable. Nothing is sent until you activate Send handoff or press Return. Esc cancels without sending.
Inside the overview
| Shortcut | Action |
|---|---|
| Arrow keys | Move focus between sessions |
| ↵ | Activate the focused session |
| ⌘A | Select every session |
| Any character | Add to the filter query |
| ⌫ / ⌦ | Delete from the query; with an empty query and a selection, close the selected sessions |
| Esc | Step back, then close |
In Settings and the worktrees overview, Esc closes the surface. In Settings, Esc first dismisses an open menu or the remote-host editor. Inside the inspector, the ask and commit composers take ↵ to submit and Esc to cancel.
Terminal
| Shortcut | Action |
|---|---|
| ⌘F | Find in the terminal |
| ⌘G / ⇧⌘G | Next / previous match |
| ⌥⌘F | Find the selected text |
| ⌘C | Copy the selection |
| ⌘V | Paste, including images |
| ⌥⌘C | Keyboard copy mode |
| ⇧⌘C | Quote the selection into this session's composer |
| ⌥⇧⌘C | Send the selection to another session |
| ⌘E | Insert path: pick a file under the session's folder and type its path |
| ⇧⌘E | Open the scrollback in your text editor |
| ⇧⌘↑ / ⇧⌘↓ | Previous / next shell prompt (OSC 133) |
| ⌘= or ⌘+ | Bigger text |
| ⌘- | Smaller text |
| ⌘0 | Reset text size |
With the find bar open, ↵ jumps to the next match, ⇧↵ to the previous one, and Esc closes it.
Apart from ⌃⇥ and the surface shortcuts above, keys without ⌘ go to the running program, modifiers and all. Keys with ⌘ do not reach the program, with one exception: ⌥⌫ and ⌘⌫ still delete a word or a line in the shell.
Notes
These work while a note's editor has focus.
| Shortcut | Action |
|---|---|
| ⌃⌘↵ | Start an agent on the to-do under the caret |
| ⌘↵ | Tick or untick a to-do |
| ⌥⌘↵ | Fold or unfold |
| ⌘B / ⌘I | Bold / italic |
| ⌘E | Inline code |
| ⇧⌘X | Strikethrough |
| ⌘K | Link |
| ⌥⌘0 … 3 | Turn into text, heading 1, 2 or 3 |
| ⇧⌘8 / 7 / 9 | Turn into bulleted list / numbered list / to-do |
| ⌥⌘Q / ⌥⌘C | Turn into quote / code |
| ⌥⇧↑ / ↓ | Move the block up or down |
| ⌃↵ | Table menu |
| ⌘Z / ⇧⌘Z | Undo / redo |
See Notes for blocks, mentions and starting agents from to-dos.
Text fields
The command palette, the terminal find bar, the history filter, the launcher prompt and the inspector composers share one keymap.
| Shortcut | Action |
|---|---|
| ⌘A | Select all |
| ⌘C / ⌘X / ⌘V | Copy, cut, paste |
| ← / → | Move the caret; ⇧ extends the selection |
| ⌥← / ⌥→ | Move by word |
| ⌘← / ⌘→ | Start or end of the line |
| Home / End | Start or end of the line |
| ⌫ / ⌦ | Delete a character; ⌥ deletes a word, ⌘ deletes to the line edge |
| ⌃A / ⌃E | Start or end of the line |
| ⌃B / ⌃F | Back or forward one character |
| ⌃H / ⌃D | Delete the character before or after the caret |
| ⌃W | Delete the word before the caret |
| ⌃U / ⌃K | Delete to the start or end of the line |
When two surfaces want the same key
diri asks which surface is in front, then falls back to the terminal.
- An unhandled global shortcut is not swallowed. ⌘R or ⌘J with nothing selected, or ⌘9 with no sessions, leaves the keystroke alone.
- The launcher takes everything while it is open, except ⌘N, which closes it.
- Settings and the worktrees overview take everything except ⇧⌘H, ⌘K, ⌘P and ⌘,.
- The switcher and the overview own the arrow keys while they are visible, so ⌥⌘↑, ⌘[ and ⌃⌘↑ stand down.
- Esc is shared. With the overview closed, Esc clears a multi-session sidebar selection but still reaches the focused terminal, so Esc in vim never depends on the sidebar.
- ⌘W is three commands. It closes a focused auxiliary terminal first, then the selected session, and only with no session selected the window.
- ⌘J and ⇧⌘J are unrelated. ⌘J toggles the auxiliary terminal; ⇧⌘J jumps to the next session that needs you.