Terminal UI reference

June 21, 2026 · View on GitHub

Key bindings, the inline avatar, and tool-output display behavior. For the slash-command list, see the top-level README.

Key bindings

The global command keys (toggle reasoning, scroll, chat navigation, kill-subagent) are rebindable via the keybindings config — see config.md. The defaults are listed below.

Input editing

KeyAction
Ctrl+A / HomeStart of line
Ctrl+E / EndEnd of line
Ctrl+B / LeftChar left
RightChar right
Option+Left / Meta+BSkip to previous word
Option+Right / Meta+FSkip to next word
Ctrl+KKill to end of line
Ctrl+UKill to start of line
Ctrl+WKill word before cursor
Ctrl+DDelete the character at the cursor (forward; no-op at end of line)
Meta+BackspaceDelete word before cursor
Meta+DDelete word after cursor
Ctrl+YYank (paste) last kill
Meta+YYank-pop (cycle kill ring after yank)
Ctrl+ZUndo the last edit (typing is grouped by word; paste/kill undo as one step)
Ctrl+N / DownHistory next (multi-line: next logical line, history at boundary)
Ctrl+P / UpHistory previous (multi-line: previous logical line, history at boundary)
Ctrl+FReverse-i-search through history (bash-style): type to narrow, Ctrl+F to cycle, Enter to accept, Esc to cancel
Shift+Enter / Meta+Enter / Ctrl+JInsert newline (input box expands; Ctrl+J works in any terminal)
TabInsert 2 spaces
@<query>File picker (Tab/Enter select, Esc cancel)
Paste (≥4 lines)Collapses to [N lines pasted]; re-paste same content to expand inline

Agent control

KeyAction
Ctrl+C / EscInterrupt running agent (also clears queued interjections)
Type while runningQueues your message; runs after the current turn finishes. The runner also stops at the next tool-result boundary so the message is picked up quickly instead of waiting for the whole multi-turn run. Status line shows q:N for pending count.
Alt+XDrop all queued interjections (without cancelling the running agent)
Ctrl+KKill subagent on focused chat tab
Ctrl+XClose active chat window
Ctrl+N / Ctrl+PSwitch to next/previous chat window (when multiple subagent chats exist)
Esc-Esc (idle)Open rewind picker (truncate history)
Ctrl+OExpand collapsed tool result
Ctrl+RToggle reasoning visibility
Shift+TabCycle the active prompt layer to the next prompt (silent; status badge updates)
PgUp/PgDnScroll chat history
Ctrl+Home/EndJump chat to top/bottom
! cmdRun shell command (visible, injected into chat)
!! cmdRun shell command (invisible)
Mouse dragSelect text (copies to clipboard on release)
(input)Live token count shown next to input bar (N tk)

Tool output display

FeatureDetail
Tool results visibleDefault on (show_tool_details: true), toggle in config
4-line collapseTool result bodies default to the first 4 lines + a dim ↓ N more lines (Ctrl+O to expand) footer. Configurable via tool_result_max_lines (default 4). Exempt tools — body IS the value — render unchanged: edit (colorized diff), read, question, task, task_status.
Ctrl+O to expandRe-prints the most-recent collapsed tool result in full as a fresh chamber. Press again to re-emit. The stash resets on every new user prompt and on context-overflow auto-recovery.
Hard char capOn top of the line cap, tool_result_max_chars (default 500) trims a single pathological line so a 10 MB minified blob can't blow the chamber.
Colorized edit diffsedit tool results render with - (red), + (green), @@ (cyan) coloring (show_edit_diff: true in config)

Inline ASCII avatar

A 5-cell face lives in the left margin of the input row and reflects what the agent is currently doing. Single-tick animation alternates between two poses where applicable.

StateFramesMeaning
Idle(o o) / (- -)Nothing happening — neutral blink
Thinking(o .) / (. o)Reasoning tokens streaming (eyes shifting)
Speaking(o o) / (o O)Regular tokens streaming (mouth opens)
Reading[@ @]read / grep / find_files / list_dir / lsp / semantic tool running
Writing(>_<) / (-_-)write / edit / apply_patch / write_todo_list tool running
Bash[$_$]bash shell command running
Alert(O_O)Permission prompt waiting on you — paints in the perm color
Error(x_x)Agent hit an error — paints in the error color
Done(^_^)Turn completed cleanly — paints in the accent color

Unknown / plugin / MCP tools default to the Reading face since most are observational. The avatar is purely informational — no functional dependence.

Theme

dirge ships with an 80s-CRT phosphor green palette by default. To opt out, set "theme": "plain" in config.json for the pre-theme white/cyan look:

{ "theme": "plain" }

Errors stay red and warnings stay yellow under every theme — those colors are part of the load-bearing semantic contract. For custom themes, see themes.md.