/hey, a side chat for quick questions.
Send a prompt
Type your request and pressEnter. o4 works on it until it finishes, then waits for the next prompt.
Good prompts say what you want and where to look:
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) 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:
@, 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 showsScanning...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, pressCtrl+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.
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.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:
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+Qputs the newest queued message back in the prompt box so you can change it. PressEnterto save your change orEscto cancel.- If you interrupt a turn with
Escor a turn fails, o4 holds the queue instead of sending the next message, and the count shows(held). PressAlt+Gto 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>.
Prompt history
PressUp 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). 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 lasttest_run; after each turn, they’re based on the model’s reply. Press1or2to pick one, thenEnterorTabon an empty prompt to send it.Escor typing hides them. - A dimmed hint in the empty prompt box after a turn, ending in
[Tab], such asFix this errorafter a tool failed. PressEnteron the empty prompt to send the hint as it is, orTabto put it in the prompt box so you can edit it first. Typing hides it.
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.
- 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
/costas a separateSide chat costline. - Works while the agent is busy with a turn, but doesn’t open while an approval prompt is waiting for you.
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.
- The mentions must come first in the prompt. A
^later in the text is ordinary text. - A bare model ID such as
^gpt-5.5works when only one provider you’ve set up offers it. If more than one does, writeprovider: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. 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, orDeny. - 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 inpanel 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.
/panelshows the models, as inPanel on: anthropic:claude-sonnet-4-6, openai:gpt-5.5 (3 rounds per message). /panel off to stop., orNo panel is on./panel offends the panel, and plain messages go to your usual model again./clear, or mentioning a different set of models, also ends it.- A single
^modelis a one-off: the next plain message goes to your usual model.
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.
Related pages
- The interface: the parts of the screen and how to move around them.
- Keyboard shortcuts: every key binding, and how to change them.
- Context and cost: how long conversations are compacted.