> ## Documentation index
> Fetch the complete documentation index at: https://haarness.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 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](https://haarness.ai/docs/tui/review.md#keys-in-the-review),
[Terminals](https://haarness.ai/docs/tui/terminals.md#keys-in-a-terminal) and
[Ask a side question](https://haarness.ai/docs/tui/messages.md#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](https://haarness.ai/docs/tui/messages.md) |
| 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](https://haarness.ai/docs/tui/tour.md#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](https://haarness.ai/docs/tui/tour.md#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.

```toml
[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.
