All pages
On this page

The composer

The composer is the box at the bottom of a conversation. You write the next message in it, choose how the agent should handle it, attach files and send. What you have typed but not sent is kept as a draft on the relay, so it is still there when you reload the page or open the conversation on another device.

The controls #

From left to right on a desktop, around the text field:

Control What it does
🙂, tooltip Emoji picker (Tip: Win + .) Opens a grid of 24 emoji. A click inserts one at the caret and closes the grid. The button then shows the one you used last; the browser remembers it.
Text field Grows with what you type, up to a limit, then scrolls.
Mode The relay mode of the next message: Agent, Ask, Plan or Autopilot. See Relay modes.
Model The model of the next message. It offers only the models of the conversation's provider. See Models and reasoning.
📁 (Browse files) Opens the file browser. On a phone it is 🗂️, with the tooltip Open file explorer.
📎 (Attach file) Opens your device's file picker. See Attachments.
Context window The context size of the model, where it offers more than one. For an image model it is the image size, with the tooltip Image size.
Reasoning effort How hard the model thinks about the next message. It reads Unavailable and is greyed out when the model has no such setting. Image models call it Quality.
Send Sends the message. The label changes while a turn runs, see Sending.

The picker values belong to the next message, not to the conversation. A Claude Cloud conversation has no mode, no context window and no reasoning effort, so those three pickers are hidden there. On a phone the emoji button is hidden and the controls wrap into rows.

Above the text field, the composer shows the chips of attached files, a note when a model may not read images, and, while background work runs, the task panel described on Background tasks.

Writing and sending #

Ctrl+Enter (Cmd+Enter on a Mac) sends the message. A plain Enter does not send: it starts a new line, and so does Shift+Enter. You cannot change this. On a phone the on-screen Enter key adds a line and you tap Send.

After a send on a narrow screen (680 pixels or less) the composer lets go of the keyboard. On a desktop it keeps the focus.

What the send button reads depends on the state of the conversation:

State Button Tooltip
No turn is running Send Send message
A turn is running and you have typed something, and the provider takes a message into a running turn Steer Steer message into the running turn
The same, on a provider that cannot, or while the turn waits for a question or compacts Queue Queue message behind current turn, or the reason the message waits
A turn is running and the composer is empty Send, disabled Type a message to send
Attachments are still uploading disabled Waiting for attachments to finish uploading
The conversation is archived disabled This conversation is archived. Unarchive it to continue.

What a steered or queued message does is on While a turn runs. Which providers can steer is in the table on Providers at a glance.

The message is the text of the field with its line breaks, without leading or trailing white space.

Slash commands #

A message that starts with / can be a command that OAR runs itself, without asking the agent. OAR has two:

Command What it does
/compact Continues in a fresh conversation seeded with a summary. See Compacting a conversation.
/preview <port|dir> [label] Publishes a running dev server or a folder on the preview host. /preview list lists the live previews and /preview close <token> closes one. See What you see.

Typing / as the first character opens a menu of these commands with a short description each. Keep typing to narrow it. After /preview the menu offers list, close and a hint for each of the two forms; after /preview close it lists the live previews, those of this conversation first. The menu only completes at the start of a message: a / anywhere else is just a character, and so is one on a later line.

Keys in the menu:

Key Does
Up / Down Moves the highlight. Nothing is highlighted at first.
Tab Accepts the highlighted row, or the top one.
Enter Accepts the row only if you moved to it with the arrows. Otherwise it is a new line as usual.
Ctrl+Enter / Cmd+Enter Still sends.
Escape Closes the menu.

/compact runs only when it is the whole message and nothing is attached. /preview runs when nothing is attached. With text after /compact, or with an attachment, the message goes to the agent as ordinary text.

An unknown command #

A message that starts with / but is not one of OAR's commands is probably a typo, and sending it would cost the agent a turn. OAR therefore holds a single-line message like that back once and shows a notice:

Unknown command /compcat — press send again to send as text.

Send the same text again within 8 seconds and it goes to the agent as text. The check does not apply to messages with several lines or with attachments.

OAR does not run a provider's own slash commands and does not list them in the menu. The text of one is sent to the agent like any other message, after the hold above.

Mentions #

Typing @ at the start of a word opens a menu of the relays this relay is paired with. It lists those whose name or host name starts with what you have typed, with a dot for whether the relay is online. Picking one writes @name into the message (@host when the name is empty or two relays share it). That mention is what lets the conversation's agent use that relay. See Mention a relay to unlock it.

The keys are those of the slash menu: Up and Down to highlight, Tab to accept, Enter to accept a row you moved to, Escape to close, and Ctrl/Cmd+Enter still sends. The menu closes when what you typed matches no relay, so @file: and other text after an @ are left alone. @ offers nothing else.

File references #

To point the agent at a file or folder in the working directory, put a reference token in the message:

Please look at `@file:src/app.js` and the tests in `@folder:tests`.

You do not have to type them. In the file browser, click the title of an open file preview to copy its token, or the Copy @folder button above the folder list to copy the open folder's. Both copy the token wrapped in backticks; you paste it into the composer. Paths in a repository are relative to it, and paths on a drive keep their full form, such as C:/projects/shop.

The token stays in the message as text, and the agent opens the file itself. In addition, for an @file: token that names an image of up to 1 MB, the relay attaches the image to the message, so a model that can see images receives its content. A larger image stays a plain reference. Text and other files are never attached by a token. A token counts toward the limit of six attachments.

Attachments #

Attach files with the 📎 button, by pasting from the clipboard or by dropping them onto the composer. While you drag, the composer reads Drop files to attach. A paste that holds a file attaches it and discards any text that came with it; a paste with text only is an ordinary paste. A pasted image with no real name is called pasted- followed by the date and time.

  • Types. Any file. A Claude Cloud conversation takes only images, see By provider.
  • Count. Up to 6 per message. When more arrive, the first ones are kept and a notice says how many were dropped: Only 6 attachments allowed — 2 files were dropped.
  • Size. Up to 64 MB per file.
  • Upload. A file uploads as soon as you add it, not when you send. The chip shows a spinner, and Send waits until every upload has finished. A chip with ⟳ is a failed upload: click it to try again.
  • Remove. Click the × on a chip. The file leaves the draft.
  • Where it is kept. Uploads are stored on the relay. A file that was sent stays with its message until the conversation is deleted. A file that no message or draft refers to is removed once it is older than 24 hours. See Files and folders.

Images are made smaller before they upload, where the browser can do it. An image over 2 MB (not a GIF, SVG or APNG) is saved again as JPEG, and scaled down if its longest side is over 2560 pixels. If the result is not smaller, the original is used. An image that is not PNG, JPEG, GIF, SVG or APNG, such as WebP, AVIF, HEIC or BMP, is converted to JPEG at its size, whatever its size. If a model may not be able to read images, a note above the field says that the image will go as a file reference instead.

Tapping an image chip (it carries a 🖍️ mark) opens it for marking up, see Media.

By provider #

All providers take attachments, but they differ in how the file reaches the agent. Except on Claude Cloud, the message text also names each attachment, with its path where there is one.

Provider Images Other files
GitHub Copilot and OpenAI, SDK engine Inline up to 5 MB, as a file path above that As a file attachment with its path
GitHub Copilot, extension engine Inline at any size, with no path fallback As a file attachment with its path
Claude Inline up to 5 MB (JPEG, PNG, GIF, WebP), as a path above that or for other image types As a path in the message
DeepSeek Added in 0.9.17 As Claude on a model that takes images (DeepSeek Flash); as a path in the message on one that does not (DeepSeek V4 Pro) As a path in the message
Claude Cloud Inline, JPEG, PNG, GIF or WebP up to 5 MB Refused
Cursor Inline up to 5 MB, as a path above that As a path in the message
Grok As a path in the message As a path in the message

On Claude Cloud the composer refuses anything else when you add it, with a notice such as Claude Cloud chats take images only (JPEG, PNG, GIF or WebP up to 5 MB). Not attached: notes.pdf. The sandbox cannot read the relay's files. See Claude Cloud. On Grok the agent gets a line [Attached file: <path>] after your text and has to read the file itself. See Grok.

Added in 0.9.17 Once a DeepSeek conversation holds an image, a message that switches it to a model without image input is refused, and the message stays in the composer. Which models take images: DeepSeek.

Drafts #

Whatever you type in a conversation, and the files you attach, is saved as that conversation's draft on the relay. Each conversation has its own. The draft is there after a reload, and on another device that has the conversation open.

  • When it saves. About half a second after you stop typing, and only when the text or the attachments really changed. A device you are not typing on picks up the new draft.
  • Size. The text of a draft is saved up to 20,000 characters. Past that a notice says Drafts are saved up to 20,000 characters; the rest stays only in this tab until you send. The message itself is not limited.
  • Two devices at once. Every save is checked against the version it started from, so a device that is only looking never overwrites the one you type on. If two devices change the draft at the same time, the newest keystroke wins. A notice, Your edit replaced a newer draft from another device., has a Restore button that brings the other text back; the replaced text then waits behind an Undo on the notice Draft restored.
  • Sending clears it. After a send the composer is empty.