Skip to main content

Keyboard Shortcuts

Mouse

Every keyboard action below is also reachable with the mouse — the dashboard is fully clickable, not keyboard-only. Each clickable affordance carries its keyboard shortcut inline, so the on-screen controls double as a legend, and clicking one performs exactly the same action as its shortcut.

  • Persistent button bar. The bottom row exposes the global commands — [New Pane Ctrl+N], [Close Ctrl+W], [Toggle Layout Ctrl+T], [Help ?], and [Quit Ctrl+C]. On terminals too narrow for the full labels it falls back to shortcut-only buttons (e.g. [Ctrl+N]). This replaces the old status-bar legend.
  • Tab strip. Click a tab header to switch to it; Mode and Orchestration tabs carry a clickable [×] close affordance (the Dashboard tab has none).
  • Dashboard cards. Single-click a card to select it, double-click to focus its pane. The bar adds clickable [Filter /], [Rename r], and [Generate g] buttons.
  • Dialogs, picker, and forms. Each carries explicit clickable buttons alongside its keyboard controls: quit/config-gen/star/help dialog buttons; the directory picker's clickable rows, .. parent, and [Confirm]/[Cancel]/[Filter]; the inline filter/rename [Apply]/[Save]/[Cancel]; the [Detach Ctrl+D] affordance while in a pane; and the new-pane form's clickable mode chips with [Submit]/[Cancel].

All the keyboard shortcuts below continue to work unchanged.

Global Shortcuts (work from any mode)

KeyAction
Ctrl+DEnter command / navigation mode
Ctrl+NNew pane (directory picker, then name + command form)
Ctrl+WClose selected pane on the dashboard, or tear down the entire mode tab (agent + side panes) when used on a mode tab. The dashboard tab itself cannot be closed.
Ctrl+TToggle stacked / tiled layout

In PaneInput mode, Ctrl+C is delivered to the terminal as SIGINT (0x03). From the dashboard (command mode), pressing Ctrl+C opens a quit confirmation dialog; press it again to quit immediately, or use the dialog keys (see Dialogs) to choose Yes / No.

Tab Navigation

The tab bar appears when more than one tab is open.

KeyAction
Ctrl+PageDownNext tab (works from any mode, including in a focused pane)
Ctrl+PageUpPrevious tab (works from any mode, including in a focused pane)
Tab / Right / lNext tab — only in command mode (press Ctrl+D first; otherwise the keystroke is sent to the agent pane)
Shift+Tab / Left / hPrevious tab — only in command mode (press Ctrl+D first; otherwise the keystroke is sent to the agent pane)

Mode Tab

These shortcuts work in Normal mode when a mode tab is active.

KeyAction
j / DownFocus next pane (cycles: agent → side panes → agent)
k / UpFocus previous pane (cycles: agent → last side pane → … → agent)
EnterEnter PaneInput mode on selected pane (agent pane if none selected)
EscDeselect side pane (return focus indicator to agent)
Mouse clickClick a side pane to select it; click agent pane to deselect

In PaneInput mode, use Ctrl+D to return to Normal mode.

Dashboard

These shortcuts work in command mode. If you're typing in an agent pane, press Ctrl+D first to leave the pane — otherwise the keystroke is sent to the agent.

KeyAction
j / DownSelect next card (wraps at end)
k / UpSelect previous card (wraps at start)
19Jump to card N and focus its pane
/Filter sessions (opens filter input — see Dialogs)
rRename selected session (opens rename input — see Dialogs)
gGenerate .dot-agent-deck.toml (opens config-generation prompt — see Dialogs)
sOpen the Scheduled Tasks manager (S also works) (see Scheduled Tasks)
?Toggle help overlay
y / nApprove / deny a pending permission request (only when an agent is waiting)
EscClear active filter

Directory Picker

KeyAction
j / DownSelect next directory
k / UpSelect previous directory
l / Right / EnterEnter directory (or confirm if no subdirs)
h / Left / BackspaceGo up one level
SpaceConfirm current directory
/Enter filter mode; type to narrow directories (case-insensitive)
EscClear filter (press twice to close)
qCancel

Directory lists loop end-to-end, so pressing Up on the first entry jumps to the last (and vice versa). The .. parent entry always remains visible even when a filter is active.

New Pane / Mode Form

KeyAction
Tab / Shift+TabSwitch between fields
Left / Right / h / lCycle mode selector (when modes available)
EnterConfirm field / submit form
EscCancel

Dialogs

Several dashboard shortcuts open transient input fields or selection dialogs. The keys for each:

DialogTriggerKeys
Filter/Type to narrow visible cards · Backspace to delete · Enter to accept and stay filtered · Esc to clear and close
RenamerType the new name · Enter to confirm · Esc to cancel
Generate configgUp/Down (or k/j) to choose Yes / No / Never · Enter to confirm · Esc to cancel. Yes sends a prompt to the agent to write .dot-agent-deck.toml; Never suppresses the hint permanently for that directory.
Quit confirmationCtrl+C from command modeUp/Down (or k/j) to choose Yes / No · Enter to confirm · Esc to dismiss · Ctrl+C again to quit immediately
Help overlay??, Esc, or q to dismiss

Customizing Keybindings

Every shortcut above can be remapped. dot-agent-deck reads an optional config file at:

~/.config/dot-agent-deck/keybindings.toml

(Override the path with the DOT_AGENT_DECK_KEYBINDINGS environment variable.) Keybindings are resolved client-side, on the machine running the TUI — so when two clients attach to one remote daemon, each can have its own bindings.

The file has two sections, [global] and [dashboard]. You only need to list the actions you want to change; everything else keeps its default. The help overlay (?) and the hints bar are generated from the active config, so they always show your real keys.

Key notation

  • Modifiers: Ctrl+, Alt+, Shift+ — combine in any order, e.g. Alt+Shift+t.
  • Named keys: Enter, Esc, Tab, Space, Up, Down, Left, Right, Backspace, Delete, Home, End, PageUp, PageDown, Insert, and F1F12.
  • Printable characters: az, 09, /, ?, etc.
  • Unbound: an empty string (new_pane = "") disables the action entirely.

Notation is case-insensitive for modifier and named keys (ctrl+enter == Ctrl+Enter).

Example

# ~/.config/dot-agent-deck/keybindings.toml
# Only override what you need — defaults apply for everything else.

[global]
toggle_layout = "Alt+Shift+l" # move it off Ctrl+t
new_pane = "" # disable the new-pane shortcut

[dashboard]
help = "F1" # open help with F1 instead of ?

Actions and defaults

[global] (work from any mode):

ActionDefaultDescription
dashboardCtrl+dEnter command / navigation mode
new_paneCtrl+nNew pane (directory picker → name + command)
close_paneCtrl+wClose selected pane / tear down mode tab
toggle_layoutCtrl+tToggle stacked / tiled layout
jump_1jump_919Jump to card N and focus its pane

[dashboard] (command mode):

ActionDefaultDescription
move_downjSelect next card
move_upkSelect previous card
move_lefthPrevious tab
move_rightlNext tab
filter/Filter sessions
renamerRename selected session
help?Toggle help overlay
focus_paneEnterFocus selected pane
clear_filterEscClear active filter
approve_permissionyApprove a pending permission request
deny_permissionnDeny a pending permission request
generate_configgGenerate .dot-agent-deck.toml (config-generation prompt)

The Down/Up/Tab/Shift+Tab/Left/Right aliases and Ctrl+PageUp / Ctrl+PageDown tab navigation are not remappable and always work alongside your bindings.

Quit is not a remappable action. No key directly quits — Ctrl+C (hardcoded, non-overridable) opens the quit/detach modal (Detach / Stop / Cancel). There is no quit config key; a quit = "…" line is treated as an unknown action and ignored with a warning.

Edge cases

  • No config file → all defaults (current behavior, nothing changes).
  • Malformed file → dot-agent-deck warns on stderr and falls back to all defaults; it never crashes.
  • Conflicting bindings (two actions on the same key) → a warning is printed and the first-defined action wins; the later one is left unbound.
  • Unknown action name → ignored with a warning.
  • Empty binding (action = "") → that action is unbound and its default key does nothing.
  • Ctrl+c always quits. It is a non-overridable safety net: quit is not a configurable action, and even if you bind another action to Ctrl+c, pressing Ctrl+c from command mode always opens the quit/detach modal — it is never routed through your config (so it can't be turned into "new pane", "switch tab", etc.).