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

# Keyboard shortcuts

> Keys for the prompt, the transcript, and dialogs.

This page lists the keys o4 responds to, grouped by where you are. The keys an
open pane or dialog accepts take priority over the rest, and most panes list
them in their footer. To see a short version inside o4, press `?` on an empty
prompt or run `/help`.

Keys marked as remappable can be moved to other keys. See
[Change key bindings](/configuration/appearance#change-key-bindings).

## Everywhere

These keys work in the main view, whether you're typing or navigating.

| Key | Action |
| - | - |
| `Ctrl+C` | Deny a waiting approval. Otherwise copy selected text, clear the prompt, or stop the running turn, in that order. Quits when there's nothing to stop. |
| `Ctrl+L` | Redraw the screen. |
| `?` | Open help, when the prompt is empty. |
| `Alt+Y` | Approve the waiting approval. Remappable (`approve_pending`). |
| `Alt+Z` | Deny the waiting approval. Remappable (`deny_pending`). |

## Prompt Mode

Prompt Mode is the default. Keys type into the prompt unless listed here.

### Send and edit

| Key | Action |
| - | - |
| `Enter` | Send the message. While a turn is running, queue it as a follow-up. |
| `Shift+Enter` | Insert a line break. |
| `Ctrl+J` | Insert a line break, when the prompt isn't empty. `Ctrl+M` does the same when your terminal reports it as its own key. |
| `Left` / `Right` | Move the cursor one character. |
| `Home` or `Ctrl+A` | Move to the start of the line. |
| `End` | Move to the end of the line. |
| `Backspace` | Delete the character before the cursor. |
| `Delete` | Delete the character after the cursor. |
| `Ctrl+K` | Delete from the cursor to the end of the line. |
| `Ctrl+W` | Delete the word before the cursor. |
| `Ctrl+V` | Paste from the clipboard. An image on the clipboard is attached to the message. |
| `Ctrl+G` | Edit the prompt in your editor (`$EDITOR`, then `$VISUAL`, then `vi`). |
| `Ctrl+S` | Stash the prompt and clear it. On an empty prompt, bring back the most recently stashed prompt. |

### Shift+Enter in your terminal

o4 sees `Shift+Enter` only when the terminal reports it as a key of its own.
Terminals that support the kitty keyboard protocol do; others send the same
byte as `Enter`, so `Shift+Enter` sends the message instead. `Ctrl+J` inserts
a line break in every terminal.

<Tabs>
  <Tab title="kitty">
    Works without changes. Inside tmux, kitty needs this mapping as well as the
    tmux settings below:

    ```text ~/.config/kitty/kitty.conf theme={null}
    map shift+enter send_text all \x1b[13;2u
    ```
  </Tab>

  <Tab title="Ghostty">
    Works without changes. Inside tmux, add the tmux settings below.
  </Tab>

  <Tab title="WezTerm">
    WezTerm sends `Shift+Enter` as `Enter` unless you bind it:

    ```lua ~/.wezterm.lua theme={null}
    config.keys = {
      { key = 'Enter', mods = 'SHIFT', action = wezterm.action.SendString '\x1b[13;2u' },
    }
    ```

    Inside tmux, also add the tmux settings below.
  </Tab>

  <Tab title="Apple Terminal">
    Terminal can't report `Shift+Enter`, and its keyboard settings can't remap
    `Return`. Use `Ctrl+J`.
  </Tab>
</Tabs>

Inside tmux, o4 uses standard key reporting, so tmux decides what o4
receives. tmux 3.5 or later passes `Shift+Enter` through with these two
settings, then restart tmux:

```text ~/.config/tmux/tmux.conf theme={null}
set -s extended-keys always
set -s extended-keys-format csi-u
```

The `csi-u` line is required: with tmux's default `xterm` format, o4 can't
read the key and drops it. The kitty and WezTerm bindings send the sequence to
every program, not only o4, so other programs may show it as stray text.

### History and completion

| Key | Action |
| - | - |
| `Up` / `Down` | Recall earlier prompts. `Up` starts recall only when the prompt is empty. |
| `Ctrl+R` | Search prompt history. |
| `/` | Start a slash command and open the completion list. |
| `@` | Mention a file and open the completion list. |
| `^` | At the start of the prompt, mention a model and open the completion list. See [Ask other models](/guides/prompting#ask-other-models-with-^model-mentions). |
| `Tab` | Insert the highlighted completion. |

While a completion list is open, `Up` and `Down` move through it and `Esc`
closes the list. `Enter` runs the highlighted slash command, or inserts the
highlighted file or model, whether or not a turn is running: `/cos` with
`/cost` highlighted runs `/cost`. Only when nothing is highlighted, because
what you typed matches no command, does `Enter` send the prompt exactly as you
typed it; while a turn is running or messages are queued, the list's footer
then reads `Enter Submit draft` and the prompt is queued as a message.

### While the model is working

| Key | Action |
| - | - |
| `Esc` | Stop the running turn. |
| `Alt+E` | Send the prompt as steering for the running turn. Remappable (`steer_current_task`). |
| `Alt+Q` | Pull the last queued message back into the prompt to edit it. Remappable (`edit_last_queued`). |
| `Alt+G` | Resume a held queue of messages. Remappable (`resume_queue`). |
| `Ctrl+Z` | Pause or resume the running turn. |
| `Ctrl+B` | Move the running turn to the background. |
| `Alt+X` | Pause all running work, including background tasks. Press it again to resume. Remappable (`panic_pause`). |

When you edit a queued message with `Alt+Q`, `Enter` saves your change and
`Esc` cancels the edit.

### Images, chips, and suggestions

These keys work on an empty prompt when the item they act on is shown.

| Key | Action |
| - | - |
| `Up` | Select the last attached image. Then `Up` and `Down` move between images, `Backspace` or `Delete` removes the selected one, and `Esc` ends the selection. |
| `Tab` | Move to the next action chip, such as **View Diff** or **Undo**, shown after a turn. `Enter` runs the selected chip. Typing or `Esc` hides the chips. |
| `1` / `2` | Pick the first or second suggested prompt, when the **Suggestions** setting is on. `Enter` or `Tab` sends the picked suggestion. Typing or `Esc` hides the suggestions. |
| `Enter` / `Tab` on a `[Tab]` hint | When a dimmed hint ending in `[Tab]` shows in the empty prompt, `Enter` sends it as it is and `Tab` puts it in the prompt box for editing. If action chips are showing, `Tab` moves through them first. See [Writing prompts](/guides/prompting). |

### Open views

| Key | Action |
| - | - |
| `Esc` | Switch to Navigation Mode, when no turn is running. Your draft stays in the prompt. |
| `Ctrl+M` | Open the model selector, when the prompt is empty. It also works while the model is working. The model you pick applies to this session only. |
| `Ctrl+P` | Open the provider selector. |
| `Ctrl+T` | Open the Transcript Reader. Remappable (`open_transcript_reader`). |
| `Ctrl+F` | Search the transcript. |
| `Ctrl+D` | Open Session Diff. |
| `Ctrl+Y` | Copy selected text, or the model's last reply. |
| `PageUp` / `PageDown` | Scroll the transcript one screen. |
| `Down` | Open the agent and task selector, while sub-agents or background tasks are running and you aren't recalling earlier prompts. |

`Ctrl+M` works only in terminals that report it as a separate key from
`Enter`. o4 turns that reporting off inside tmux, so there `Ctrl+M` acts as
`Enter`. `/model` opens the same model selector in any terminal, but while the
model is working it waits until the turn finishes.

### Remappable actions

These keys work in Prompt Mode and Navigation Mode.

| Key | Action | Name |
| - | - | - |
| `Shift+Tab` | Turn Plan Mode on or off. | `toggle_plan_mode` |
| `Alt+A` | Switch to the next approval mode. | `cycle_approval` |
| `Alt+S` | Switch to the next sandbox tier. | `cycle_sandbox_tier` |
| `Alt+R` | Switch to the next reasoning level. | `cycle_reasoning` |
| `Alt+M` | Switch to the next model. | `cycle_model` |
| `Alt+U` | Undo the last file change. | `undo_last_change` |
| `Alt+D` | Open Session Diff. | `toggle_diff_pane` |
| `Alt+L` | Open or close the todo list. | `toggle_todo_list` |
| `Alt+B` | Open or close the task board. | `toggle_task_board` |
| `Alt+T` | Open or close Workspace Radar. | `toggle_radar_pane` |
| `Alt+.` | Put your last prompt back in the input, followed by `-- but`, so you can add a correction. | `repeat_with_correction` |
| None | Open or close the Time Machine sidebar. | `toggle_time_machine` |

`Alt+A` goes through `ask`, `accept-edits`, `plan`, `review`, `auto`, and
`bypass`. Before it switches to `bypass`, o4 asks you to confirm; if you
decline, the mode goes back to `ask`. `Alt+S` also asks before it switches to
a less strict sandbox tier.

### Session tabs

| Key | Action |
| - | - |
| `Alt+N` | Open a new tab. Remappable (`new_tab`). |
| `Alt+W` | Close the current tab. Remappable (`close_tab`). |
| `Alt+J` | Switch to the next tab. Remappable (`next_tab`). |
| `Alt+K` | Switch to the previous tab. Remappable (`prev_tab`). |
| `Ctrl+X`, then `1`–`9` | Switch to the tab at that position. |
| `Ctrl+X`, then `n` | Open a new tab. |
| `Ctrl+X`, then `w` or `0` | Close the current tab. |

## Navigation Mode

Press `Esc` in an idle prompt to enter Navigation Mode. Letter keys run
commands instead of typing.

| Key | Action |
| - | - |
| `i` | Return to the prompt. |
| `j` / `k` or `Down` / `Up` | Move the cursor to the next or previous transcript block. |
| `Space` | Expand or collapse the block under the cursor. |
| `Enter` | Open the block: a tool's full output, or a sub-agent's conversation. With no block, return to the prompt. |
| `t` | Open the full output of the tool under the cursor. |
| `c` | Copy the block under the cursor. |
| `y`, then `y` | Copy the last code block. |
| `y`, then `1`–`9` | Copy that numbered code block. |
| `o` | Open the Transcript Reader at the cursor. |
| `g` / `Home` | Go to the top of the transcript. |
| `G` | Go to the bottom and move the cursor to the last block. |
| `End` | Go to the bottom. |
| `PageUp` or `Ctrl+U` | Scroll up one screen. |
| `PageDown` | Scroll down one screen. |
| `n` | Jump to the first unread message. |
| `:` | Go to a message by number. Type the number and press `Enter`. |
| `a` | Open the agent and task selector. |
| `Ctrl+B`, then `Ctrl+B` | Move the sub-agent under the cursor to the background. |
| `l` | Open the activity log. |
| `/` | Open the command palette. |
| `Ctrl+D` | Open Session Diff. |
| `Ctrl+M` | Open the model selector. |
| `Ctrl+P` | Open the provider selector. |
| `?` | Open help. |
| `q` | Quit o4. |

## Approval panel

The approval panel replaces the prompt when a tool call needs your answer.

| Key | Action |
| - | - |
| `Up` / `Down` | Move between the choices. |
| `Enter` | Choose the highlighted option. |
| `y` or `1` | Yes, proceed. |
| `p`, `a`, or `2` | Always allow the pattern shown. Only when a pattern is offered. |
| `d` or `3` | Always deny the pattern shown. Only when a pattern is offered. |
| `t` | Refuse, and type a note that tells the model what to do instead. |
| `Tab` | Approve, and type a note for the model. Only when a pattern is offered. |
| `n` or `Esc` | Refuse. |

Pattern choices are offered for calls such as file edits, not for shell
commands. Without them, the panel lists **Yes, proceed**, **No, cancel**, and
**No, and tell o4 what to do instead**, and `2` and `3` choose the second and
third of those. While you type a note, `Enter` sends it with your answer and
`Esc` goes back to the choices.

### Package install scripts

When a package install would run install-time scripts, the panel offers
different choices:

| Key | Action |
| - | - |
| `b` or `1` | Block the installation. |
| `v` or `2` | View the full install scripts. |
| `a` or `3` | Allow the installation. |
| `Esc` | Block the installation. |

### Network approval

| Key | Action |
| - | - |
| `Up` / `Down` or `k` / `j` | Move between the choices. |
| `Enter` | Choose the highlighted option. |
| `y` or `1` | Allow once. |
| `a` or `2` | Always allow this domain. |
| `n`, `3`, or `Esc` | Deny. |

### Plugin permissions

When a plugin asks for a capability, such as running a command:

| Key | Action |
| - | - |
| `y` | Allow once. |
| `a` | Always allow. |
| `n` or `Esc` | Deny. |

### Questions from the model

When the model asks you a question with a list of answers, the list appears in
the transcript and takes the keyboard until you answer.

| Key | Action |
| - | - |
| `Up` / `Down` or `k` / `j` | Move between the answers. |
| `1`–`9` | Choose that answer. |
| `Enter` | Choose the highlighted answer. On **Other**, type your own answer. |
| `Tab` | Type your own answer. |
| `Esc` | Cancel without answering. |

While you type your own answer, `Enter` sends it and `Esc` goes back to the
list.

### Confirmation dialogs

Yes-or-no dialogs, such as the one for switching to `bypass` mode:

| Key | Action |
| - | - |
| `y` or `Enter` | Confirm. |
| `n` or `Esc` | Cancel. |

## Transcript Reader

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Scroll one line. |
| `PageDown` / `PageUp` | Scroll one screen. |
| `g` or `Home` | Go to the top. |
| `G` or `End` | Go to the bottom. |
| `]` / `[` | Jump to your next or previous prompt. |
| `o` or `Ctrl+O` | Switch between full and compact detail. |
| `/` | Search. Type the text and press `Enter`. |
| `n` / `N` | Go to the next or previous match. |
| `Enter` | On one of your prompts, fork the session before it and edit the prompt in a new tab. |
| `Esc` | After a search, close the reader. With no search, act like `Enter` on one of your prompts, and otherwise close the reader. |
| `q` or `Ctrl+T` | Close the reader. |

While you type a search, `Enter` runs it, `Backspace` deletes a character, and
`Esc` cancels it.

## Other views

### Transcript search

Opened with `Ctrl+F`.

| Key | Action |
| - | - |
| Type | Search as you type. |
| `Enter` or `Ctrl+N` | Go to the next match. |
| `Ctrl+P` | Go to the previous match. |
| `Esc` | Close the search. |

### Prompt history search

Opened with `Ctrl+R`.

| Key | Action |
| - | - |
| Type | Filter your earlier prompts. |
| `Ctrl+R` | Show the next match. |
| `Enter` | Keep the match in the prompt. |
| `Esc` | Cancel and restore what you had typed. |

### Session Diff

Opened with `Ctrl+D` or `Alt+D`.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Scroll. |
| `s` | Switch between split and unified view. Split view needs a window at least 120 columns wide. |
| `Esc` or `q` | Close. |

### Tool output

Opened with `Enter` or `t` on a tool block.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Scroll one line. |
| `PageDown` / `PageUp` | Scroll 10 lines. |
| `g` or `Home` | Go to the top. |
| `G` or `End` | Go to the bottom. |
| `Esc` or `q` | Close. |

### Activity log

Opened with `l` in Navigation Mode.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Scroll one line. |
| `PageDown` / `PageUp` | Scroll 20 lines. |
| `Home` / `End` | Go to the top or bottom. |
| `Esc`, `q`, or `Ctrl+O` | Close. |

### Agent and task selector

Opened with `Down` in the prompt (when you aren't recalling earlier prompts)
or `a` in Navigation Mode, while sub-agents or background tasks are running.

| Key | Action |
| - | - |
| `Up` / `Down` | Move between agents and tasks. |
| `Enter` | Open the selected agent's conversation. |
| `b` | Move the selected agent to the background. |
| `k`, `Ctrl+K`, or `x` | Stop the selected agent or task. On a finished row, remove it from the list. |
| `p` | Pause or resume the selected task. |
| `e` | Expand into the agents dashboard. |
| `Esc` | Close the selector. |

Any other key closes the selector and works as usual.

### Agent view

Shown when you open a sub-agent's conversation.

| Key | Action |
| - | - |
| Type, then `Enter` | Send steering to the agent, while it's running. |
| `Up` / `Down` | Scroll the agent's conversation one line. |
| `PageUp` / `PageDown` | Scroll the agent's conversation 10 lines. |
| `Left` / `Right` | Switch to the previous or next agent, when your draft is empty. |
| `Ctrl+B` | Move the agent to the background. |
| `Ctrl+K` | Stop the agent. |
| `Ctrl+F` | Search the transcript. |
| `Ctrl+Y` | Copy selected text, or the agent's last reply. |
| `Esc` | Return to the main conversation. |

### Agents dashboard

The agents dashboard, titled **Agent command center**, opens with `/agents` or
with `e` in the agent and task selector.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Move between rows. |
| `PageUp` / `PageDown` | Scroll the dashboard one page. |
| `Enter` | Open the selected row's output. |
| `f` | Bring a backgrounded turn back to the foreground. |
| `x` | Stop the row and everything it started. |
| `m` | Send a message to the row. |
| `r` | Rename the row. |
| `c` | Clear finished rows you've already opened. |
| `n` | Start o4 in the selected row's directory, when that directory is trusted. Works only when you opened the dashboard with `e`; after `/agents` it does nothing. |
| `g` | Meant to change how rows are grouped. In 0.2.74 it only changes the `group:` label in the footer; the rows stay as they are. |
| `/` | Filter rows. |
| `Esc` | Cancel the message or rename box. Otherwise clear the filter, and otherwise close the dashboard. |

See [Todos and background tasks](/guides/tasks-and-todos#see-and-control-background-work) for what each row and status means.

### Panes

The todo list, the task board, Workspace Radar, and the panes that slash
commands open below the prompt share these keys. They work while the prompt is
empty; once you type, keys go to the prompt.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Move between rows. |
| `Enter` | Run the selected row's action, or open its details. |
| `Backspace` or `Esc` | Go back from a detail view. With no detail view open, close the pane. |
| `q` | Close the pane. |

Some panes add their own keys:

| Pane | Keys |
| - | - |
| Todo List | `a` puts `/todo add ` in the prompt, `Enter` advances the status, `d` deletes |
| Task Board | `Enter` inspects, `s` steers, `k` kills without asking, so use `Up` rather than `k` to move up. The footer also lists `p review diff`, but `p` types into the prompt instead. |
| Workspace Radar | `f` fix, `d` delegate, `s` snooze, `i` ignore. See [Code intelligence](/guides/code-intelligence#workspace-radar). |

The **Help** pane (`?` or `/help`) scrolls with `j` / `k` or `Up` / `Down`,
and 8 lines at a time with `PageUp` / `PageDown`. `Esc` or `q` closes it.

The `/context` and `/stats` pane switches between its **Context**,
**Session**, and **Optimize** tabs with `Tab` / `Shift+Tab` or `Right` /
`Left`, and `r` refreshes it. See [Context and cost](/guides/context-and-cost).

### Settings

In `/config`, `Up` / `Down` or `j` / `k` move between rows, `Enter` changes
the selected row, and `Tab` / `Shift+Tab` or `Right` / `Left` switch tabs.
Each change is saved as soon as you make it. `Esc` or `q` closes the panel,
and `Backspace` goes back from a row's details. On the **Providers** tab, `a`
adds a provider.

### Browsers

The plugin browser (`/plugins`), MCP browser (`/mcp`), agent definitions
browser (`/sub-agents`), and skills browser (`/skills`) share these keys:

| Key | Action |
| - | - |
| `Up` / `Down` | Move between rows. |
| `Tab` / `Shift+Tab` or `Right` / `Left` | Switch tabs. |
| Type | Filter the list. `Backspace` deletes a filter character and `Ctrl+U` clears the filter. |
| `Enter` | Open the selected item's details, or run the highlighted action in them. |
| `Backspace` | Go back from the details to the list. |
| `Esc` | Close the browser. |

The **Errors** tab and, in the plugin browser, the **Marketplaces** tab have
no filter. On the MCP browser's **Registry** tab, typing edits the registry
search query instead; see [MCP servers](/extend/mcp).

### Session picker

`/resume` opens the session picker. Type to filter, `Enter` resumes the
selected session, `Tab` switches between this checkout and every directory,
and `Esc` closes it. `A`, `R`, and `P` open the actions menu, rename, and pin,
and are uppercase because lowercase letters go into the filter. See
[Sessions](/guides/sessions#the-session-picker) for all its keys.

### Side chat

`/hey` opens the side chat. Type a question and press `Enter` to send it, and
`Up` / `Down` scroll the answers. Once there's an answer, `y` copies the last
question and answer, and `f` sends them to the main conversation. `Esc`
closes the side chat. See [Writing prompts](/guides/prompting#ask-a-quick-side-question).

### Setup wizards and Project Scout

* **Setup wizard** (`/onboard`): `Up` / `Down` or `k` / `j` move, `Enter`
  goes to the next screen, `Tab` skips a screen where the footer offers it,
  and `Esc` goes back one screen, or closes the wizard from the first screen.
  See [Quickstart](/quickstart).
* **Add custom provider** (`a` on the **Providers** tab of `/config`): `Enter`
  or `Tab` goes to the next field, `Shift+Tab` goes back, and `Esc` cancels.
  See [OpenAI-compatible endpoints](/models/openai-compatible).
* **Project Scout** (`/scout`): `Space` selects or clears a suggestion, `a`
  selects all, `n` clears all, `Enter` applies, and `Esc` cancels. See
  [Code intelligence](/guides/code-intelligence#project-scout).

### Model and command pickers

The model selector (`Ctrl+M`), provider selector (`Ctrl+P`), and command
palette (`/` in Navigation Mode) work the same way.

| Key | Action |
| - | - |
| Type | Filter the list. |
| `Up` / `Down` | Move through the list. |
| `Enter` | Choose the highlighted item. |
| `Backspace` | Delete a filter character. |
| `Ctrl+U` | Clear the filter. |
| `Esc` | Close. |

### Time Machine

The Time Machine sidebar lists the turns of the session. Open it with `/rewind`
or a key you bind to `toggle_time_machine`. If you resize the window to fewer
than 60 columns while it's open, it closes.

| Key | Action |
| - | - |
| `j` / `k` or `Down` / `Up` | Move between turns. |
| `Enter` | Rewind this session to the selected turn. If that would revert files, o4 lists them and asks first. On the latest turn, close the sidebar. |
| `f` | Fork a new session from the selected turn and open it in a new tab. This session stays as it is. |
| `d` | Show the changes made in the selected turn. |
| `Esc` | Close the sidebar. |

See [Undo and rewind](/guides/checkpoints).
