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 |
|---|---|
/ |
Continues in a fresh conversation seeded with a summary. See Compacting a conversation. |
/ |
Publishes a running dev server or a folder on the preview host. / lists the live previews and / 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 / the menu offers
list, close and a hint for each of the two forms; after /
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. |
/ runs only when it is the whole message and nothing is attached.
/ runs when nothing is attached. With text after /, 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:/.
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 Web
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,The message itself is not limited.000 characters; the rest stays only in this tab until you send. - 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 noticeDraft restored. - Sending clears it. After a send the composer is empty.