Skip to content
DocsTerminal UI
On this page

Keyboard shortcuts

The keys the terminal UI responds to, grouped by where your focus is. The review screen, terminal tabs and the side chat have their own keys, listed on Review changes, Terminals and Ask a side question.

On macOS, the Alt shortcuts need your terminal to send Option as Meta (Alt). Most terminals have a setting for this.

Everyday

Key Does
Enter Send. While a turn runs, the agent reads it at its next step
Alt+Enter Queue the message to run after the current work
Shift+Enter, Ctrl+J New line
Esc, Esc Stop the running turn and its child agents
Ctrl+C Copy the selection, close a dialog, or clear the draft (↑ brings it back)
Ctrl+C, Ctrl+C Stop the running turn; quit when nothing runs
Ctrl+D Quit, on an empty prompt
Ctrl+Z Suspend to your shell (fg returns), on macOS and Linux
/ Show matching slash commands
@ Show matching files, agents and resources
! Shell mode, on an empty prompt
Tab Complete the suggestion, or cycle agents
Shift+Tab Cycle agents backwards
Up, Down Earlier and later prompts
Esc Close the suggestion list, leave shell mode, or clear a selection

Opening things

Key Opens
Ctrl+P Command palette
Ctrl+L Chats in this folder
Alt+N New chat
F2 Models
Alt+A Agents
Alt+R Reasoning effort
Alt+M Message browser
Alt+U Usage and context for this chat
Alt+E The draft in $EDITOR
Ctrl+S Save the draft to the stash
Alt+S The stash, to restore a saved draft
Ctrl+O Child agents of this turn
Ctrl+B Show or hide the sidebar
Ctrl+T Thinking: compact, shown in full, or hidden
Ctrl+R Open or close the fold nearest the prompt: a tool's output, a long prompt, a thought

Scrolling and moving between messages

Key Does
Page Up, Page Down Scroll the transcript
Alt+↑, Alt+↓ Previous, next message
Alt+Shift+↑, Alt+Shift+↓ Your previous, next prompt
Alt+Home The start of the chat (also Ctrl+Home)
Alt+End Your last prompt
End, Ctrl+End Back to the latest output
Mouse drag Select text; it is copied when you let go

Approvals

Key Does
Ctrl+G Move between a waiting approval and the prompt
y Allow once
n, Esc Reject
a Always: every chat on this Haarness server, until it stops
w This folder: every chat in this folder, kept after restarts
r Repository: this Git repository and its worktrees
u Once + Auto: allow once, then switch this chat to Auto
←, → or Tab Move between the buttons
Enter Choose the highlighted button, or confirm a staged answer
↑, ↓, Page Up, Page Down Scroll a long command or script on the card
Ctrl+E Show all of a long command or script
Ctrl+Y Switch this chat between Review and Auto; kept after you quit

y and n light their button and answer after a short pause: the same key again or Enter answers at once, and Esc, Backspace or Ctrl+C takes it back. a, w, r and u are staged: the card says what the answer grants, Enter or the same key again confirms, and Esc cancels. An approval takes the keyboard only from an empty prompt, so a message you are typing never answers it. See Answer an approval.

Questions from the agent

Key Does
↑, ↓ Move between choices
1–9 Pick that choice (tick it, on a multiple-choice question)
Space Tick or untick, on a multiple-choice question
Enter Send the choice, or your typed answer
Shift+Enter New line in a typed answer
Esc Cancel the question

Editing the prompt

Key Does
Ctrl+A, Ctrl+E Start, end of the line
Alt+←, Alt+→ Word left, right (also Ctrl+←, Ctrl+→, Alt+B, Alt+F)
Ctrl+W Delete the word before the cursor (also Alt+Backspace, Ctrl+Backspace)
Alt+D Delete the word after the cursor (also Ctrl+Delete)
Ctrl+K Delete to the end of the line
Ctrl+U Delete to the start of the line
Ctrl+D Delete the character under the cursor
Ctrl+- Undo (Ctrl+_ in terminals that send that)
Ctrl+. Redo

Lists and pickers

Key Does
↑, ↓ or Ctrl+P, Ctrl+N Move
Page Up, Page Down, Home, End Move further
Type Filter. Ctrl+U clears the filter, Ctrl+W removes a word
Enter Choose
→ or Tab Chat actions, or inspect a workflow
← Back from chat actions to the list
Ctrl+F Mark a model as a favourite
Esc Back, or close

Watching a child agent

When you open a child agent from Ctrl+O, its transcript is read-only.

Key Does
←, → Previous, next child agent
↑ Back to the parent chat
Alt+M Browse the child's messages

Change a shortcut

Run /keybinds (or /shortcuts) to rebind the shortcuts below. Changes apply at once and win over the file. The same screen lists the fixed keys you cannot rebind.

To set them in a file instead, add a [tui.keybinds] section to config.toml, next to your haarness.json (see Make it yours for where it is). The TUI reads it when it starts, and the status line names any line it could not apply.

[tui.keybinds]
models = "F6"
editor = "ctrl+x"
stash = "none"        # unbind
Action Default
commands ctrl+p
fold ctrl+r
sessions ctrl+l
messages alt+m
models F2
agents alt+a
reasoning alt+r
usage alt+u
stash alt+s
stash_save ctrl+s
editor alt+e
new alt+n
messages_previous alt+up
messages_next alt+down
messages_previous_user alt+shift+up
messages_next_user alt+shift+down
messages_first alt+home
messages_last_user alt+end

A shortcut is Ctrl or Alt plus a character (ctrl+k, alt+r); Ctrl, Alt or Shift plus an arrow, home, end, pageup or pagedown (alt+up); a function key F1–F12; or none. Ctrl+C, Ctrl+Z and Ctrl+M cannot be bound.

  • Two shortcuts cannot share a key. In /keybinds, free the key first by giving the other action another key or none. In config.toml, an action whose default key you give to another action simply loses it.
  • Once you move an action, its old key stops working.
  • Cards and dialogs come first. Approval cards, questions and open dialogs get their keys before any shortcut, so a rebind cannot answer an approval.
  • A shortcut wins over the prompt's own keys. Binding ctrl+k, for example, takes Ctrl+K away from deleting to the end of the line. Pick a key nothing else uses: the prompt uses Ctrl+A, E, F, D, K, U, W, J, - and ., and Ctrl+B, G, O, T and Y open things or switch modes.