> ## 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.

# Writing prompts

> Type prompts, point o4 at files, attach images, and send messages while it works.

You talk to o4 through the prompt box at the bottom of the screen. This page covers what you can put in a prompt: file references, images, several lines of text, and messages you send while the agent is still working. It also covers prompt history, suggested prompts, and `/hey`, a side chat for quick questions.

## Send a prompt

Type your request and press `Enter`. o4 works on it until it finishes, then waits for the next prompt.

Good prompts say what you want and where to look:

```text theme={null}
The login test in tests/auth_test.rs fails with a timeout. Find out why and fix it without changing the test.
```

Three other kinds of input start with a special character:

| Input | What happens |
| - | - |
| `/name` | Runs a slash command, such as `/compact` or `/diff`. Type `/` to see the list. See [Slash commands](/reference/slash-commands). |
| `!command` | Runs a shell command yourself, without the model. The output appears in the transcript and is added to the conversation, so the model can see it. |
| `^model` at the start | Sends the prompt to other models. See [Ask other models](#ask-other-models-with-^model-mentions). |

For example, `!git status` shows the status and gives the output to the model for your next prompt. You can't run a `!` command while o4 is working on a turn; o4 shows `Shell commands are disabled while a task is in progress.` A `!` command runs under the current sandbox tier (see [Sandbox](/safety/sandbox)) and stops after 120 seconds. It doesn't go through the sandbox's egress proxy, so in `guarded` and `airlock` it has no network access, unless a `[sandbox]` table without `allowedDomains` lifts the limit.

## Reference files with @

Type `@` to open a file picker. Keep typing to filter it, use `Up` and `Down` to move through it, then press `Tab` or `Enter` to insert the highlighted path. `Esc` closes the picker. The prompt then contains `@` followed by the path relative to your working directory:

```text theme={null}
Explain what @src/session/store.rs does and how @src/session/journal.rs uses it.
```

The path goes into the prompt as text; o4 doesn't paste the file's contents into it. The model reads the file with its tools when it needs to. You can also type a path with no `@`, and the model reads it the same way.

The picker:

* Lists files only, not folders. To point at a folder, type its path.
* Skips files ignored by your `.gitignore`, and hidden files and folders, whose names start with a dot.
* Lists the first 1,000 files it finds. Typing filters only those, so in a larger project a file past the limit never appears; type its path yourself.
* Scans the project in the background when you type `@`, and shows `Scanning...` until the scan finishes. It reuses the list for 30 seconds, so a file created since then may be missing until the next scan.

## Attach images

To attach an image, press `Ctrl+V` while the image is on your clipboard. On macOS, o4 reads PNG, TIFF and JPEG images from the clipboard, including screenshots. On Linux, it uses `xclip` or `wl-paste`, so one of them must be installed.

You can also drag an image file into the terminal or paste its path. If the pasted text is only paths to image files (`.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.tif` or `.tiff`), o4 attaches the images instead of inserting the text. Paths with spaces work when they're quoted or escaped the way your terminal drops them, and so do `file://` URLs. o4 checks the file's contents, not just its name: a file that isn't really a PNG, JPEG, GIF, WebP or TIFF image, or is larger than 50 MB, isn't attached, and its path is pasted as ordinary text.

Attached images appear above the prompt, each with its number, type, size and dimensions, for example `[#1 image/png 48213B 1280x720]`. To remove one, clear the prompt and press `Up` to select the last image. `Up` and `Down` move between images, `Backspace` or `Delete` removes the selected one, and `Esc` leaves image selection.

<Note>
  Not every model accepts images. If the current model doesn't, o4 keeps your prompt and images and doesn't send them. Switch to a model that accepts images with `/model`, or remove the images. See [Choosing a model](/models/overview).
</Note>

## Write several lines

`Enter` sends the prompt. To start a new line instead, press `Shift+Enter`. If your terminal doesn't pass `Shift+Enter` through to o4, press `Ctrl+J` instead, once you've typed something on the first line.

To write a long prompt in your own editor, press `Ctrl+G`. o4 opens the current prompt in `$EDITOR` (or `$VISUAL`, or `vi` if neither is set). When the editor exits, the saved text replaces what was in the prompt box; it isn't sent until you press `Enter`. o4 runs the variable's value as a single program name, so it must not contain arguments: `EDITOR=nano` works, `EDITOR="code --wait"` doesn't.

When you paste a large block into an empty prompt (1,000 characters or more, or 6 lines or more), the prompt box shows a single line such as `Pasted content (2,340 chars)` instead of the whole text. The full text is still sent. `Backspace` removes the whole paste, and typing a character shows the full text again so you can edit it.

## Send messages while o4 is working

You don't have to wait for o4 to finish. There are two ways to send a message during a turn:

| How | Key | When the model sees it |
| - | - | - |
| Queue | `Enter` | After the current turn ends. It then runs as the next prompt. |
| Steer | `Alt+E` | During the current turn, at the next point between tool calls. |

Queue a message when you have the next task ready. Steer when the agent is going the wrong way and you want to correct it now, for example "use the existing retry helper instead of writing a new one."

The number of waiting messages appears next to the working indicator, or in the row below the prompt box when o4 is idle, for example `1 steer · 2 queued`. To manage the queue:

* `Alt+Q` puts the newest queued message back in the prompt box so you can change it. Press `Enter` to save your change or `Esc` to cancel.
* If you interrupt a turn with `Esc` or a turn fails, o4 holds the queue instead of sending the next message, and the count shows `(held)`. Press `Alt+G` to start it again.
* A message that can't be delivered, such as a steer that arrives after its turn has ended, is counted as `undelivered`, and a notice in the transcript gives the reason: `⚠ "<message>" not delivered — <reason>`.

Queued messages can carry images, as long as the current model accepts them.

<Tip>
  To put a prompt aside without sending it, press `Ctrl+S`. The prompt box is cleared. Press `Ctrl+S` again with an empty prompt box to bring back the most recent one. `/stash list` shows everything you've put aside, numbered from `0`, and `/stash <n>` brings back prompt `n`. Stashed prompts last until you quit o4.
</Tip>

## Prompt history

Press `Up` in an empty prompt box to go back through prompts you've sent, and `Down` to come forward again. Press `Ctrl+R` to search your history: type part of an old prompt, press `Ctrl+R` again to go to the next match, and press `Enter` to put it in the prompt box. `Esc` cancels the search and brings back what you had typed.

o4 keeps your last 100 prompts in `~/.o4/prompt_history.json`, so your history carries over from one session to the next. Slash commands and `!` commands are saved there too.

## Suggested prompts

o4 can suggest what to type next. Suggestions are off by default; turn on **Suggestions** on the **General** tab of `/config` (see [Suggestions and notifications](/configuration/overview#suggestions-and-notifications)). When they're on, o4 shows two kinds:

* A **Suggestions** box above the prompt with up to two numbered prompts. At the start of a session they're based on uncommitted changes in git, such as `Lock file updated. Commit Cargo.lock?`, and on failures from the last `test_run`; after each turn, they're based on the model's reply. Press `1` or `2` to pick one, then `Enter` or `Tab` on an empty prompt to send it. `Esc` or typing hides them.
* A dimmed hint in the empty prompt box after a turn, ending in `[Tab]`, such as `Fix this error` after a tool failed. Press `Enter` on the empty prompt to send the hint as it is, or `Tab` to put it in the prompt box so you can edit it first. Typing hides it.

If [action chips](/guides/interface#prompt-mode) are showing below the reply, `Tab` moves through the chips first. Press `Esc` to hide the chips, then `Tab` reaches the suggestion.

## Ask a quick side question

`/hey` opens a small side chat below the conversation. Use it for a question that has nothing to do with the task, such as how a shell command works, when you don't want it in the agent's context.

```text theme={null}
/hey what does git rebase --onto do?
```

The side chat:

* Doesn't see your conversation, and nothing from it goes into the main conversation.
* Can't use tools, so it can't read your files or run commands.
* Uses the current model and reasoning level. Its cost is included in `/cost` as a separate `Side chat cost` line.
* Works while the agent is busy with a turn, but doesn't open while an approval prompt is waiting for you.

While the side chat is open, type a question and press `Enter` to send it; `Up` and `Down` scroll the answers. Once there's an answer, two letters act as shortcuts instead of text: `y` copies the last question and answer, and `f` closes the side chat and sends them to the main conversation as a new prompt. `Esc` closes the side chat. Its history stays until you quit o4, so `/hey` opens it again where you left off.

## Ask other models with ^model mentions

Start a prompt with `^` and a model ID to send it to a different model, or to several models one after another. Type `^` to pick from the models you can use now.

```text theme={null}
^anthropic:claude-sonnet-4-6 ^openai:gpt-5.5 Review the error handling in src/retry.rs. What would you change?
```

* The mentions must come first in the prompt. A `^` later in the text is ordinary text.
* A bare model ID such as `^gpt-5.5` works when only one provider you've set up offers it. If more than one does, write `provider:model`, as in the example.
* Only models you can use now are accepted. If a mention doesn't match one, o4 keeps your prompt, shows the error, and suggests close matches.
* You can mention up to 4 models in one prompt. They answer one at a time, in the order you wrote them.
* Mentioned models have the same tools as a normal turn, including the shell, file edits and network access, under your usual [permission rules](/safety/permissions). Each model is told that the others share the workspace.
* Mentioned models see the conversation so far. Before o4 sends it to a provider other than the one you're already using, it asks: `Allow once`, `Allow for this session`, or `Deny`.
* To start a prompt with a literal `^`, type `^^`.

### Panels of two or more models

With two or more models, the prompt starts a discussion. Each model answers in turn, then they go around again, for 3 rounds per message, and each reply sees everything said before it. The progress line shows which model is answering, as in `panel 2/2 (round 1/3): openai:gpt-5.5`. A model that fails drops out of the later rounds, and the discussion stops when fewer than two models are left. Press `Esc` to stop the remaining rounds. To change the number of rounds, set `panel_rounds` in `~/.o4/settings.json`; `1` gives one answer per model.

After a panel starts, o4 shows `Panel on: <models>. Plain messages go to every model; /panel off to stop.` Your next plain messages go to the same models, so you can steer the discussion without typing the mentions again. The status bar shows `PANEL` and the models.

* `/panel` shows the models, as in `Panel on: anthropic:claude-sonnet-4-6, openai:gpt-5.5 (3 rounds per message). /panel off to stop.`, or `No panel is on.`
* `/panel off` ends the panel, and plain messages go to your usual model again. `/clear`, or mentioning a different set of models, also ends it.
* A single `^model` is a one-off: the next plain message goes to your usual model.

You can't queue a prompt with model mentions. Wait for the current turn and any queued messages to finish first; otherwise o4 keeps your draft and shows `Panel requests cannot be queued`. The same goes for a plain message while a panel is discussing: o4 keeps your draft and shows `The panel is still discussing. Send this when it finishes, press Esc to stop it, or /panel off to talk to your usual model.` Attached images go to every mentioned model, so each of them must accept images. Model mentions don't work in [print mode](/guides/print-mode).

## Related pages

* [The interface](/guides/interface): the parts of the screen and how to move around them.
* [Keyboard shortcuts](/reference/keyboard-shortcuts): every key binding, and how to change them.
* [Context and cost](/guides/context-and-cost): how long conversations are compacted.
