Skip to main content

Keyboard Shortcuts

The shipped keybinding table: global shortcuts by context, Cmd+K chords and the command HUD, surface-local gestures, terminal key ownership, and rebinding in Settings > Keyboard.

Reviewed

Daintree ships 116 keyboard actions from a single table that both the app window and the native menu bar read. The renderer seeds its keybinding service from it and the main process derives its menu accelerators from it, so a menu item can never claim a chord the keyboard does not actually fire.

Two surfaces expose those bindings at runtime. The shortcut reference dialog (Command-K, then Command-S, or Command-/ Control-K, then Control-S, or Control-/ Control-K, then Control-S, or Control-/ ) is read-only and shows your effective bindings, including rebinds and anything a plugin contributed. Settings > Keyboard (Command-, Control-, Control-, ) is where you record, unbind, reset, and import or export profiles. This page lists the shipped defaults; the dialog is always the current answer for your install.

Notation and platform mapping

Every shortcut on this site is written for one platform at a time. Pick yours and the whole page follows — including the tables below, and every shortcut on every other page. The choice is remembered, so you only make it once.

Showing shortcuts for macOSWindowsLinux
  • Each platform is written the way it writes itself: macOS uses modifier glyphs in Apple's order with no separators, while Windows and Linux spell the keys out and join them with +. The Pilot binding is Option-Command-O Control-Alt-O Control-Alt-O either way.
  • A row showing Control on macOS (Control-Shift-J Control-Shift-J Control-Shift-J ) means the physical Control key, which is a different key from Command. On Windows and Linux it collapses onto the same chord as a Command row — which is why the diagnostics family uses Control rather than a letter already spent.
  • A chord is two keystrokes in sequence, shown with a gap between them: Command-K, then Command-G Control-K, then Control-G Control-K, then Control-G means press the first, release, then press the second. Every shipped chord starts with the same first keystroke.
  • A pending chord does not time out. It waits until you complete it, cancel it with Escape Escape Escape , blur the window, or change scope. Press Command-K Control-K Control-K on its own and the command HUD lists every completion.
ActionShortcut
Open Quick Switcher Command-P Control-P Control-P
Open command palette Shift-Command-P Control-Shift-P Control-Shift-P
Repeat last action Shift-Command-. Control-Shift-. Control-Shift-.
Focus next region F6 F6 F6
Focus previous region Shift-F6 Shift-F6 Shift-F6
Toggle sidebar Command-B Control-B Control-B
Toggle focus mode (hide sidebar and assistant) Command-K, then Command-F Control-K, then Control-F Control-K, then Control-F

Repeat last action re-runs the last action you triggered through a palette or shortcut against the same target, without reopening the palette. Focus mode hides the worktree sidebar and the Daintree Assistant together so the panel grid takes the whole window; the same chord brings them back.

F6 F6 F6 is the one bare key that still reaches the app while a terminal has focus: it is the deliberate escape hatch out of a focused terminal for keyboard-only navigation. See terminal key ownership.

Terminals and panels

ActionShortcut
New terminal Option-Command-T Control-Alt-T Control-Alt-T
Duplicate focused panel Command-T Control-T Control-T
Close focused terminal Command-W Control-W, or Control-F4 Control-W
Reopen last closed terminal Shift-Command-T Control-Shift-T Control-Shift-T
Resume a closed session Command-K, then Command-R Control-K, then Control-R Control-K, then Control-R
Close all terminals Command-K, then Command-W Control-K, then Control-W Control-K, then Control-W
Restart all terminals Command-K, then Command-A Control-K, then Control-A Control-K, then Control-A
Kill focused terminal Command-K, then Command-Q Control-K, then Control-Q Control-K, then Control-Q
Restart focused terminal Command-K, then Command-E Control-K, then Control-E Control-K, then Control-E
Force resume focused terminal Command-K, then Command-U Control-K, then Control-U Control-K, then Control-U
Redraw focused terminal Command-K, then Command-D Control-K, then Control-D Control-K, then Control-D
Rename focused terminal Command-K, then Command-L Control-K, then Control-L Control-K, then Control-L
Toggle watch on focused terminal Shift-Command-W Control-Shift-W Control-Shift-W
Scroll to last activity Option-Command-L Control-Alt-L Control-Alt-L
Stash current input Shift-Command-S Control-Shift-S Control-Shift-S
Restore stashed input Shift-Command-X Control-Shift-X Control-Shift-X
Inject context into focused terminal Shift-Command-I Control-Shift-I Control-Shift-I
Send selection to another terminal Shift-Command-E Control-Shift-E Control-Shift-E
Arm all eligible terminals in the current worktree Shift-Command-B Control-Shift-B Control-Shift-B
Find in focused panel Command-F Control-F Control-F
Open focused panel context menu Or the Menu key Shift-F10 Shift-F10 Shift-F10

Moving focus in the grid

ActionShortcut
Focus terminal above Option-Command-Up Arrow Control-Alt-Up Arrow Control-Alt-Up Arrow
Focus terminal below Option-Command-Down Arrow Control-Alt-Down Arrow Control-Alt-Down Arrow
Focus terminal to the left Option-Command-Left Arrow Control-Alt-Left Arrow Control-Alt-Left Arrow
Focus terminal to the right Option-Command-Right Arrow Control-Alt-Right Arrow Control-Alt-Right Arrow
Focus terminal 1–9 Command-1, through Command-9 Control-1, through Control-9 Control-1, through Control-9
Focus next terminal Control-Tab Control-Tab Control-Tab
Focus previous terminal Control-Shift-Tab Control-Shift-Tab Control-Shift-Tab
Toggle focus between current and previously focused panel Option-Command-` Control-Alt-` Control-Alt-`
Switch to next tab in focused panel Shift-Command-] Control-Shift-] Control-Shift-]
Switch to previous tab in focused panel Shift-Command-[ Control-Shift-[ Control-Shift-[
Tip
Command-1, through Command-9 Control-1, through Control-9 Control-1, through Control-9 is a three-state key. The first press focuses the panel at that position, pressing it again maximizes that panel, and a third press restores the grid. The MCP-facing panel.focusIndex action is deliberately pure focus and never maximizes, so an agent asking for "panel 3" gets the same result every time.

Moving panels and docking

ActionShortcut
Toggle maximize terminal Control-Shift-F Control-Shift-F Control-Shift-F
Move terminal left in grid Option-Shift-Command-Left Arrow Control-Alt-Shift-Left Arrow Control-Alt-Shift-Left Arrow
Move terminal right in grid Option-Shift-Command-Right Arrow Control-Alt-Shift-Right Arrow Control-Alt-Shift-Right Arrow
Move terminal up in grid Option-Shift-Command-Up Arrow Control-Alt-Shift-Up Arrow Control-Alt-Shift-Up Arrow
Move terminal down in grid Option-Shift-Command-Down Arrow Control-Alt-Shift-Down Arrow Control-Alt-Shift-Down Arrow
Move terminal to dock Option-Shift-Command-D Control-Alt-Shift-D Control-Alt-Shift-D
Move terminal to grid Option-Shift-Command-G Control-Alt-Shift-G Control-Alt-Shift-G
Toggle focused terminal dock state Option-Command-M Control-Alt-M Control-Alt-M
Toggle all terminals dock state Option-Shift-Command-M Control-Alt-Shift-M Control-Alt-Shift-M
Undo last layout change Option-Command-Z Control-Alt-Z Control-Alt-Z
Redo last layout change Option-Shift-Command-Z Control-Alt-Shift-Z Control-Alt-Shift-Z

Other panels

ActionShortcut
Open panel palette Command-N Control-N Control-N
Toggle portal panel Command-\ Control-\ Control-\
Toggle notification inbox Shift-Command-N Control-Shift-N Control-Shift-N
Toggle diagnostics dock Control-Shift-J Control-Shift-J Control-Shift-J
Open diagnostics dock to Logs tab Control-Shift-L Control-Shift-L Control-Shift-L
Open diagnostics dock to Problems tab Control-Shift-M Control-Shift-M Control-Shift-M

The diagnostics family uses a literal Ctrl on all three platforms and toggles on J, not D. Shift-Command-D Control-Shift-D Control-Shift-D now opens changes for the focused worktree, and off macOS the command modifier is Control — so a diagnostics binding on D would land on that same physical chord, and one of the two would silently shadow the other. See Diagnostics.

Tip
Command-T Control-T Control-T duplicates the focused panel — agent type, working directory, model and launch flags carried over, with (copy) appended to a custom title. With every panel closed it instead seeds a new terminal from the last-closed panel's configuration, and with no history at all it opens a blank terminal. That last-closed snapshot is session-only: it is not written to disk, switching projects clears it, and each close overwrites the previous one. Shift-Command-T Control-Shift-T Control-Shift-T is the different thing — it restores the actual panel from the trash, scrollback and all. See Terminals & Panels.

Agents

ActionShortcut
Open agent quick switcher Shift-Command-A Control-Shift-A Control-Shift-A
Launch Claude Code agent Option-Command-C Control-Alt-C Control-Alt-C
Launch Gemini agent Option-Command-G Control-Alt-G Control-Alt-G
Launch Codex agent Option-Command-X Control-Alt-X Control-Alt-X
Launch OpenCode agent No default shortcut No default shortcut No default shortcut
Launch Cursor agent No default shortcut No default shortcut No default shortcut
Launch Kiro agent No default shortcut No default shortcut No default shortcut
Launch GitHub Copilot agent No default shortcut No default shortcut No default shortcut
Launch Kimi Code agent No default shortcut No default shortcut No default shortcut
Launch terminal in current worktree Option-Command-N Control-Alt-N Control-Alt-N
Launch browser panel in current worktree Option-Command-B Control-Alt-B Control-Alt-B
Jump to next waiting agent Option-Command-/ Control-Alt-/ Control-Alt-/
Jump to next waiting agent across all projects Option-Shift-Command-/ Control-Alt-Shift-/ Control-Alt-Shift-/
Jump to next working agent Option-Command-. Control-Alt-. Control-Alt-.
Jump to next waiting dock agent Shift-Command-/ Control-Shift-/ Control-Shift-/
Cycle to next agent panel Option-Command-K Control-Alt-K Control-Alt-K
Cycle to previous agent panel Option-Command-J Control-Alt-J Control-Alt-J
Launch help agent Shift-Command-H Control-Shift-H Control-Shift-H

Only three of the shipped agents carry a default launch shortcut. Every other built-in agent has a registered action with no combo, so it shows in the reference dialog as unbound and is free for you to claim. See AI Agents for the roster and Agent States for what waiting, working, and exited mean — the jump shortcuts above navigate by exactly those states.

Note
Agent launch shortcuts must take the form Option-Command Control-Alt Control-Alt plus a letter. The recorder rejects a chord, or any other shape, and says so. You can record one from Settings > Keyboard, or inline on the agent's row in the launcher — the searchable surface that replaced the old agent tray and the dock's + menu. In that launcher, Option-P Alt-P Alt-P pins the selected row; it has to be modified because the launcher's list is driven by a type-ahead search box where a bare letter is a query.

The all-projects jump (Option-Shift-Command-/ Control-Alt-Shift-/ Control-Alt-Shift-/ ) walks projects in sidebar order, switches to the first one holding a waiting agent, and focuses it. It wraps from the bottom back to the top, so repeated presses step through every project without leaving the keyboard.

Fleet

Fleet arming selects a set of agent terminals and broadcasts one action to all of them. See Fleet for the full model.

ActionShortcut
Toggle arm focused pane ("Join the fleet") Command-J Control-J Control-J
Toggle arm focused pane Worktree grid only, no modifier X X X
Arm all eligible terminals in current worktree Option-Command-A Control-Alt-A Control-Alt-A
Accept all armed waiting agents Command-Y Control-Y Control-Y
Reject all armed waiting agents Shift-Command-Y Control-Shift-Y Control-Shift-Y
Restart all armed agents Shift-Command-R Control-Shift-R Control-Shift-R
Kill all armed terminals Shift-Command-K Control-Shift-K Control-Shift-K
Trash all armed terminals Shift-Command-Backspace Control-Shift-Backspace Control-Shift-Backspace
Interrupt armed agents (within 350 ms) Double-tap Not rebindableEscape, then Escape Escape, then Escape Escape, then Escape

The bare X X X arm toggle is scoped to the worktree grid, so it only fires when focus is outside a terminal — inside one it is just the letter X. Both Option-Command-A Control-Alt-A Control-Alt-A and the terminal-category Shift-Command-B Control-Shift-B Control-Shift-B arm every eligible terminal in the current worktree; they are two bindings onto the same effect, kept because the fleet ribbon and the terminal surface each teach their own.

Interrupt is not a rebindable entry in the keybinding table. It is a double-tap handler, because a single binding would collide with the escape stack that dismisses modals. The first bare Esc passes through untouched so xterm still broadcasts a raw escape to every armed agent; the second, within 350 ms, is consumed and translated into the fleet interrupt. Auto-repeat from a held Esc is ignored, and a double-tap inside an ordinary text input belongs to that input. A single Esc still clears a pending fleet confirmation or disarms the fleet.

There is a second way to reach it. Command-Escape Control-Escape Control-Escape is the Fleet exit chord, and it is held for 350 ms before it fires; a second Command-Escape Control-Escape Control-Escape inside that window cancels the exit and interrupts instead. The second press has to carry the modifier — a bare Esc takes the bare-Escape path above and lets the pending exit through. Neither Escape chord is a rebindable entry: both are handled by a dedicated window listener so they can sidestep the escape stack. See Fleet.

Worktrees

ActionShortcut
Switch to worktree 1–9 Option-Command-1, through Option-Command-9 Control-Alt-1, through Control-Alt-9 Control-Alt-1, through Control-Alt-9
Switch to next worktree Option-Command-] Control-Alt-] Control-Alt-]
Switch to previous worktree Option-Command-[ Control-Alt-[ Control-Alt-[
Open worktree palette Command-K, then Command-O Control-K, then Control-O Control-K, then Control-O
Create a new worktree Command-K, then Command-N Control-K, then Control-N Control-K, then Control-N
Toggle worktrees overview Shift-Command-O Control-Shift-O Control-Shift-O
Copy tree context for active worktree Shift-Command-C Control-Shift-C Control-Shift-C
Open changes for focused worktree Shift-Command-D Control-Shift-D Control-Shift-D
Open file browser panel for focused worktree Option-Command-F Control-Alt-F Control-Alt-F

See Worktrees, Worktrees Overview, and CopyTree.

Worktree sessions

These act on every session in the active worktree at once.

ActionShortcut
Dock all sessions in active worktree Command-K, then Command-M Control-K, then Control-M Control-K, then Control-M
Maximize all sessions in active worktree Command-K, then Command-X Control-K, then Control-X Control-K, then Control-X
Reset renderers for all sessions in active worktree Command-K, then Command-V Control-K, then Control-V Control-K, then Control-V

Projects and Pilot

ActionShortcut
View all agents (Pilot overview) Option-Command-O Control-Alt-O Control-Alt-O
Open project switcher Option-Command-P Control-Alt-P Control-Alt-P
Switch to last project Option-Command-= Control-Alt-= Control-Alt-=

Pilot sits one step further out than the project switcher beside it: the switcher picks a project, Pilot shows every agent run across every project at once. Switch to last project walks your most-recently-used stack rather than sidebar order — the equivalent of Alt-Tab for projects. There is no forward-cycling counterpart; the earlier Option-Shift-Command-= Control-Alt-Shift-= Control-Alt-Shift-= binding was removed.

Git

ActionShortcut
Stage all changes Command-K, then Command-G Control-K, then Control-G Control-K, then Control-G
Commit staged changes Command-K, then Command-C Control-K, then Control-C Control-K, then Control-C
Push to remote Command-K, then Command-P Control-K, then Control-P Control-K, then Control-P

Portal

Scoped bindings: they resolve only while the portal browser has focus, and they outrank the global bindings that share their combos. See Portal Browser.

ActionShortcut
New portal tab Command-T Control-T Control-T
Close active portal tab Command-W Control-W, or Control-F4 Control-W
Next portal tab Control-Tab Control-Tab Control-Tab
Previous portal tab Control-Shift-Tab Control-Shift-Tab Control-Shift-Tab

Dev preview

ActionShortcut
Reload dev preview Command-R Control-R Control-R

Also scoped: Command-R Control-R Control-R reloads only the dev preview panel that has focus, and does nothing anywhere else.

View

ActionShortcut
Zoom in Command-=, or Shift-Command-= Control-=, or Control-Shift-= Control-=, or Control-Shift-=
Zoom out Command-- Control-- Control--
Reset zoom Command-0 Control-0 Control-0

Voice

ActionShortcut
Toggle voice dictation for the focused panel Shift-Command-V Control-Shift-V Control-Shift-V
Toggle voice dictation in the Daintree Assistant, from anywhere Option-Shift-Command-V Control-Alt-Shift-V Control-Alt-Shift-V
Pause or resume voice dictation Control-Shift-Space Control-Shift-Space Control-Shift-Space

The two toggles differ by target, not by mode. Shift-Command-V Control-Shift-V Control-Shift-V dictates into whichever panel input has focus; Option-Shift-Command-V Control-Alt-Shift-V Control-Alt-Shift-V dictates into the Daintree Assistant without needing to focus it first. Pause suspends a session without ending it, so the transcript continues where it left off. See Voice Input.

Help, app, and system

ActionShortcut
Open keyboard shortcuts reference Command-K, then Command-S, or Command-/ Control-K, then Control-S, or Control-/ Control-K, then Control-S, or Control-/
Toggle Daintree Assistant panel Command-L Control-L Control-L
Open theme palette Command-K, then Command-T Control-K, then Control-T Control-K, then Control-T
Open settings Command-, Control-, Control-,
Open a new window Option-Shift-Command-N Control-Alt-Shift-N Control-Alt-Shift-N

Windows-only additions

Two extra defaults ship on Windows, matching what desktop users there already expect: Ctrl+F4 also closes the focused terminal, and also closes the active portal tab. They are additions, not replacements — the cross-platform bindings still work, and both rows above already show the alternative when Windows is selected.

These two are written out rather than rendered, because they exist on one platform only. A rendered shortcut follows whichever platform you have selected, which would spell this one F4 on macOS — a chord that does not exist.

Note
AltGr on European layouts. Off macOS, AltGr synthesizes Ctrl+Alt on the keyboard event. Daintree rejects a keybinding match whenever the event carries the AltGraph modifier, so layouts that use AltGr to type , @, {, or } still produce those characters instead of firing a Ctrl+Alt+letter binding.

Surface-local gestures

Not every key in Daintree is a keybinding. A surface-local gesture is a key handled by one panel, tree, or palette while that surface has focus. It is deliberately not a registered action, because the command only means anything in the presence of local state the global registry cannot see — which row is selected, which file is current, which tree owns the cursor. The consequence for you: these do not appear in the shortcut reference dialog, they are not rebindable, and they cannot conflict with a global binding.

GestureSurfaceWhat it does
Command-I Control-I Control-I File browser treeAppends an @file reference for the selected row to the focused agent's input. Only fires while a row is selected and an agent is reachable. The path is relativized against the destination agent's working directory, so a same-worktree reference stays short and a cross-worktree one falls back to absolute.
[ / ]Diff review workspaceStep to the previous / next file in the change set.
vDiff review workspaceMark the current file viewed.
Alt+Left / Alt+RightTerminal, macOS onlyWord jump in the shell line editor.
Option-P Alt-P Alt-P LauncherPin the selected row.
Shift, then Shift Shift, then Shift Shift, then Shift GlobalDouble-tap Shift opens the action palette. Invalidated if any other key is pressed while Shift is held.
Command-Enter Control-Enter Control-Enter Project switcher paletteOpen the selected project in a new window. A scratch workspace has no second window, so the chord falls through to a plain switch.
Command-Backspace Control-Backspace Control-Backspace Project switcher paletteClose the selected project. Projects only — it does not target scratch rows, because that would put a reversible close and an irreversible delete on one key.
j / k / arrows, Home / End, EnterNotification inboxMove and open. e archives the focused row (or permanently deletes it in the Archived tab), u toggles read/unread, h opens the snooze menu on a correlated row.
j / k / arrows, PageUp / PageDown, Home / End, Space / EnterWorktree listMove and open. Enter or Right reaches a row's toolbar; Alt+Up / Alt+Down reorders. Keyboard drag-and-drop: Space picks a row up, arrows move it.
EscAny overlayDismisses the topmost modal, palette, or popover. Owned by the escape stack rather than the keybinding table, which is why it is last-opened-first-closed and never rebindable.

Command-I Control-I Control-I is the clearest example of why the distinction exists. The global registry dispatches in the capture phase, before any tree could tell it which row is active, so an action would have to re-infer the focused browser, its worktree, and its base path. The gesture stays with the tree. Shift-Command-I Control-Shift-I Control-Shift-I , one Shift away, is a real global binding that injects context into the focused terminal — the gesture requires Shift and Alt to be absent rather than merely ignoring them, so the two never both fire.

Terminal key ownership

A focused terminal is a program in its own right, and the keys that program needs cannot also be app shortcuts. One shared policy decides this, consulted by both the window's capture handler and xterm's own key handler, so the two layers can never disagree about who owns a key.

While a terminal has focus:

  • Shortcuts without a modifier reach the terminal, not the app. F6 F6 F6 region cycling is the deliberate exception, so keyboard-only users always have a way out.
  • The readline family is reserved. Bare Ctrl with a b d e f h j k l n p r t u w y goes to the PTY. That includes Ctrl+J, Ctrl+L, Ctrl+T, and Ctrl+Y, which are accept-line, clear-screen, transpose, and yank — every bit as load-bearing as the rest.
  • A pending chord still wins. If you have already pressed Command-K Control-K Control-K , the completion resolves as a shortcut even inside a terminal, because you opened that chord deliberately.
  • Tab and Shift+Tab pass through to the PTY for shell completion and TUI navigation. Daintree cancels the browser's native focus traversal but still lets xterm emit the tab sequence, so completion works without focus jumping out of the panel.
  • Bare F11 no longer toggles fullscreen. Same mechanism: the DOM path is cancelled so the key cannot reach the window's fullscreen accelerator, and the F11 sequence still reaches the PTY. Use the View menu, or Ctrl+Cmd+F on macOS, to go fullscreen from a focused terminal.

Clipboard keys are where the platforms genuinely part ways.

Terminal copy and paste use Cmd+C and Cmd+V, served by the native Edit menu roles. Nothing extra is reserved: Ctrl+C reaches the shell as an interrupt, which is what you want.

Alt+Left and Alt+Right jump by word in the shell line editor. Daintree substitutes the meta sequences zsh and bash actually bind, because xterm's default modifier-arrow sequence is bound to nothing in a default shell. The rewrite applies only on the normal buffer — a full-screen TUI decodes those arrows itself and is left alone.

The Cmd+K command HUD

Press Command-K Control-K Control-K and release, and a searchable command HUD opens anchored to the bottom of the window. It lists every completion of that layer — the whole curated power-command set — grouped by category, each row carrying its second key as a chip.

  • Type to filter. The query matches both the command's label and its key chip.
  • Arrow keys move the selection, Enter runs it, and clicking a row does the same.
  • Holding the modifier still completes the chord. Pressing Command-G Control-G Control-G while the HUD is open stages your changes exactly as it would have if you had typed the chord quickly. The HUD is a discovery aid layered onto the chord, not a mode you have to leave.
  • Esc cancels and hands focus back to whatever had it — unless the completed chord opened and focused something else, in which case the HUD leaves that alone rather than yanking focus back.

Type the full chord quickly and the HUD never appears, so it stays out of the way once a chord is in your fingers.

The shortcut reference dialog

Open it with Command-K, then Command-S, or Command-/ Control-K, then Control-S, or Control-/ Control-K, then Control-S, or Control-/ ; both run the same action. It is read-only, and it is the surface to trust when this page and your install disagree — it renders your effective bindings, so rebinds, imported profiles, and plugin contributions all show up, and it updates live as you change them in Settings.

Rows are grouped by category, ordered Terminal, Agents, Worktrees, Panels, Navigation, Help, System, then everything else alphabetically. Each row carries the action's description, a scope label when the binding is not global, and the current combo as a chip.

The search field does two things:

  • Fuzzy text search across descriptions, keywords, action ids, and categories. Type commit to find the git chord; type unbound to list every action shipping without a combo, which is how you hunt for a free slot.
  • Chord-prefix matching when the query looks like a chord. Type Cmd+K and the list narrows to every binding starting with it.

Customizing shortcuts

Every binding above can be reassigned, and any action without one can be given a combination. Opening the editor, recording a chord, resolving a conflict, and resetting to defaults are covered at Customize Shortcuts.

How Daintree teaches its shortcuts

Two mechanisms exist so you learn bindings without reading this page.

  • Shortcut hints. When you run an action by clicking — a toolbar button, a menu item, a panel control — Daintree shows the keyboard equivalent beside the pointer. It fires on the 1st, 2nd, 4th, 8th, 16th, and 32nd time you use that action and then stops for good, so it teaches on a curve rather than nagging. Hints are suppressed when the action opened a modal that would cover them.
  • Undo for a vanishing region. Pressing Command-B Control-B Control-B by accident hides the whole worktree sidebar with nothing on screen connecting the disappearance to what you pressed. When a bare keypress hides a region, Daintree raises a 30-second notice naming the combo that did it and offering an Undo. It appears at most three times for a given action and combo, then assumes the gesture is yours. Only keypresses get this: a menu item or toolbar button names itself at the moment of the click.

Accessibility

Shortcuts are exposed to assistive technology through the W3C aria-keyshortcuts attribute, so NVDA, JAWS, and VoiceOver announce the combo alongside the control's label — formatted Meta+Shift+P on macOS and Control+Shift+P elsewhere.

Chords are deliberately left out of aria-keyshortcuts: the specification has no way to express a sequence of keystrokes, so a chord written into that attribute would be announced as something the user cannot press. Chords stay discoverable through the command HUD and the reference dialog instead.

Tooltips across the toolbar, panel headers, and dock render shortcuts as key chips. The visible chip is marked aria-hidden and a single screen-reader span carries the readable label, so the announcement never doubles.

F6 F6 F6 and Shift-F6 Shift-F6 Shift-F6 cycle focus between the app's regions and are the one bare-key exception to terminal key ownership, so a focused terminal is never a keyboard trap.

Tip
This page lists the shipped defaults for v0.32. Your install is the authority on your own bindings — press Command-K, then Command-S, or Command-/ Control-K, then Control-S, or Control-/ Control-K, then Control-S, or Control-/ for the reference dialog, which reflects every rebind, imported profile, and plugin contribution in effect right now.