Getting started

Keyboard shortcuts

Every diri keyboard shortcut grouped by task, plus which surface wins a contested key, how to rebind, and the Linux equivalents.

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:

CommandmacOSLinux
Toggle inspector⇧⌘DCtrl+Shift+D
Delegate session⌃⌘DCtrl+Alt+D
To-dos⌃⌘TCtrl+Alt+Shift+T
Focus pane left / right / up / down⌃⌥ + arrowCtrl+Alt+H / L / K / J
Hide diri⌘Hnone

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

ShortcutAction
⌘NShow or hide the launcher: pick a project and agent, then type the first prompt
⌘TStart a session with the default agent, no launcher
⌥⌘TStart a plain terminal session
⌥⇧⌘NStart a Codex session
⌥⌘NNew note in the current project
⌘RRename the selected session in place
⌃⌘DDelegate: mark the selected session as a handoff source; select a target and press again to review and send
⌥⇧⌘WArchive the selected session
⌘WClose a focused auxiliary terminal; otherwise close the selected session, or the window when none is selected
⇧⌘TReopen the most recently closed session
⇧⌘NNew window for the current workspace
⇧⌘WClose the window; sessions keep running
⌘QQuit diri; the Engine keeps sessions alive
⌘HHide diri

Set the default agent for ⌘T in Settings → General → Default agent.

Move between sessions

ShortcutAction
⌘1 … ⌘8Select the nth session; hold ⌘ to see each row's number
⌘9Select 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
⇧⌘JJump to the next session that needs you
⌃⇥Most-recently-used switcher; hold ⌃ and press ⇥ again to advance
⌃⇧SpacePeek tabs: preview sessions across projects without switching
⇧⌘BMove 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

ShortcutAction
⌘KCommand palette
⌘POpen project (the palette's project page)
⇧⌘HSearch chats (the palette's history page)
⇧⌘FSearch notes
⌃⌘TTo-dos across every note
⇧⌘INotifications inbox
⇧⌘OSession overview
⌥⌘WWorktrees overview
⌘,Settings
⌘BShow or hide the sidebar (or the top bar with horizontal tabs)
⇧⌘SSwitch tabs between the sidebar and the top
⇧⌘DShow or hide the inspector
⌘JShow 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

ShortcutAction
⌘DSplit right and choose a session for the new pane
⇧⌥⌘DSplit below and choose a session
⇧⌘↵Zoom the focused pane, or restore the layout
⌃⌥ + arrowFocus the nearest pane in that direction
⌥⇧⌘ + arrowResize 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

ShortcutAction
↑ / ↓Move the highlight
⌃P / ⌃NMove 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 queryBack to the previous palette page
EscClose 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

ShortcutAction
⇥ / ⇧⇥Cycle the agent forward or backward
↵Start the session
⇧↵New line in the prompt
⌘RShow saved recipes
⌘SSave the prompt as a recipe, or update the active one
⌘1 … ⌘3With an empty prompt, run the first three recipes
⇧⌘AChoose the account (Claude Code and Codex)
EscClose 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

ShortcutAction
Arrow keysMove focus between sessions
↵Activate the focused session
⌘ASelect every session
Any characterAdd to the filter query
⌫ / ⌦Delete from the query; with an empty query and a selection, close the selected sessions
EscStep 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

ShortcutAction
⌘FFind in the terminal
⌘G / ⇧⌘GNext / previous match
⌥⌘FFind the selected text
⌘CCopy the selection
⌘VPaste, including images
⌥⌘CKeyboard copy mode
⇧⌘CQuote the selection into this session's composer
⌥⇧⌘CSend the selection to another session
⌘EInsert path: pick a file under the session's folder and type its path
⇧⌘EOpen the scrollback in your text editor
⇧⌘↑ / ⇧⌘↓Previous / next shell prompt (OSC 133)
⌘= or ⌘+Bigger text
⌘-Smaller text
⌘0Reset 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.

ShortcutAction
⌃⌘↵Start an agent on the to-do under the caret
⌘↵Tick or untick a to-do
⌥⌘↵Fold or unfold
⌘B / ⌘IBold / italic
⌘EInline code
⇧⌘XStrikethrough
⌘KLink
⌥⌘0 … 3Turn into text, heading 1, 2 or 3
⇧⌘8 / 7 / 9Turn into bulleted list / numbered list / to-do
⌥⌘Q / ⌥⌘CTurn into quote / code
⌥⇧↑ / ↓Move the block up or down
⌃↵Table menu
⌘Z / ⇧⌘ZUndo / 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.

ShortcutAction
⌘ASelect all
⌘C / ⌘X / ⌘VCopy, cut, paste
← / →Move the caret; ⇧ extends the selection
⌥← / ⌥→Move by word
⌘← / ⌘→Start or end of the line
Home / EndStart or end of the line
⌫ / ⌦Delete a character; ⌥ deletes a word, ⌘ deletes to the line edge
⌃A / ⌃EStart or end of the line
⌃B / ⌃FBack or forward one character
⌃H / ⌃DDelete the character before or after the caret
⌃WDelete the word before the caret
⌃U / ⌃KDelete 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.