Skip to main content
The composer is where you talk to a session. Text, attachments, chips, and the on-error behavior all live in one shared implementation across Continuum’s Apple apps, so the composer on your iPhone behaves like the one on your Mac. It runs in two modes:
  • Bound — an open session. Send appends to that session’s transcript.
  • New session — the floating “start a session” box. The first send spawns the session, then posts your prompt as the opening turn.
In the Code tab the placeholder reads What would you like to build today?, and swaps to Queue a follow-up while this turn runs (↩) once a turn is in flight. (The hidden Chat surface uses a different one: Ask anything. Use / for skills, @ for files.)

Slash-command palette

Type / at the start of a line to open the command palette. It opens only when there are matching commands for the active provider, so a provider with nothing discovered stays collapsed rather than showing an empty box.
The palette lists file-backed skills walked from:
  • ~/.claude/skills/<name>/SKILL.md — globally installed Claude Code skills.
  • <repo>/.claude/skills/<name>/SKILL.md — project-local skills, when a repo is in scope.
  • ~/.agents/skills/gstack/<name> — gstack-managed skills.
  • Any installed custom plugin roots, which may nest skills one or two directories deep.
gstack installs the same skills into both ~/.claude/skills and its own checkout, so Continuum uses the checkout purely as a roster of which names are gstack-managed and emits each skill exactly once. Your own copy of a name outranks the gstack or plugin copy.The scan and its YAML frontmatter parse run on a background task with a 30-second cache and ~/.claude/skills/ mtime invalidation, so the palette opens instantly even on a cold cache.
Ranking is by match quality, not alphabetical: an exact name beats a prefix, which beats a substring, which beats a description-only hit. Typing /review puts review on top. Selecting a command inserts /<command> in place of the typed query and keeps the composer open so you can add arguments before sending. It never auto-sends.

@ mentions

Type @ at a token boundary to open the mention picker. (The boundary check means an email like you@example.com doesn’t trigger it.) It lists:
  • Repo files, via a fast in-process file search, when a repo root is in scope.
  • Other open sessions in the daemon’s registry.
  • Files the agent has already cited in this session.
  • Supported vendor CLIs and MCP servers, for @vendor credential and environment sharing. Typing one shows a preview chip above the field so you can see what would be shared before you send.
Selecting a suggestion replaces only the contiguous @<query> token, so anything you typed after the mention survives.

Attachments

Attach files three ways:
  • Drag and drop from Finder onto the composer.
  • The + / paperclip button, which opens the file picker.
  • Paste an image from the clipboard with Cmd+V — saved as PNG.
SwiftUI’s text field only ingests text on paste, so a screenshot in the clipboard would be silently dropped. Continuum installs a focused-only Cmd+V monitor that catches the image before the Edit menu’s Paste fires. The monitor is armed only for the field you’re typing in; on the new-session box the field auto-focuses, so paste works before you click.
Attachments are staged to disk before the prompt is sent, and the prompt is prefixed with @<absolute-path> for each staged file so the agent’s Read tools can open them: Codex-in-worktree stages inside the worktree so the file lives within Codex’s sandbox root. Bytes are read and rewritten rather than copied, so symlinks resolve at staging time instead of carrying through — and if the worktree already contains a .clawdmeter-attachments directory or session leaf that’s a symlink, Continuum refuses to stage rather than following it somewhere a tampered repo chose. Each attachment renders a preview thumbnail chip you can remove. The hard cap is 50 MB per attachment; a file over it is rejected inline with “File too large” rather than being attached.
Attachment pills now keep the whole filename. A file like Screenshot 2026-08-01 at 9.08.48 AM.png was previously cut at .48, leaving a stray AM.png loose in the message body. Mac and iOS now share one filename parser, so they can’t disagree about where a name ends.Continuum’s own internal repository briefing — the setup text it sends alongside your first prompt — is also hidden from the transcript now, on existing conversations as well as new ones, instead of being rendered as though you had typed it.

Voice dictation

Ctrl+M, or a press of the Left Option key, toggles on-device dictation in the composer. The mic glyph pulses while recording and partial transcripts append live to the field as you speak. Dictation runs through Continuum’s own speech stack: Apple Speech by default, with WhisperKit (Whisper via CoreML) and Parakeet (NVIDIA Parakeet on the Neural Engine) available as local alternatives. Pick the engine and manage downloaded models in Settings → Voice. Left-Option-anywhere dictation needs Accessibility permission.
On iPhone, Continuum Voice is a system keyboard extension — enable it in iOS Settings and grant Full Access, and you can dictate into any app’s text field, not just Continuum. With the Action button configured, the first press starts recording in the background and shows Continuum Voice in the Dynamic Island; the second press stops and transcribes. Finished text inserts into the current field when the Continuum Voice keyboard is active, and lands on the clipboard otherwise.

Send and Stop

The primary action button swaps between Send and Stop depending on session state:
  • Send (Cmd+Return) — submits the prompt. Shift+Return inserts a newline, and an IME guard lets Return commit a mid-composition CJK candidate instead of sending.
  • Stop (Cmd+.) — shown while the bound session is running. Cancel is dispatched per backend:
Stop on the OpenCode-connector providers used to be a no-op — there was no per-turn interrupt to call. That’s no longer true: those runtimes now declare cancel support and Continuum dispatches an HTTP cancel, subject to what your installed opencode build actually implements.
A Stop also cancels any pending auto-retry for that session. If the provider doesn’t confirm the turn actually ended, Continuum says so and does not send your queued follow-up — a turn that’s still running stays visibly live rather than being reported as stopped. Pressing Stop a second time while the first is still confirming is treated as a duplicate, not a timeout; it won’t tear down a healthy runtime. When the bound session is already running, a send queues a follow-up (staged above the field) so it dispatches when the current turn ends without interrupting it. You can also push a queued message immediately: every provider supports mid-turn steer, with direct-PTY Claude injecting on live stdin and the discrete-turn backends interrupting and landing your message as a fresh turn.

Composer chips

The bottom bar carries per-turn controls. The exact set depends on mode and provider:
  • Mic — toggles dictation (Ctrl+M).
  • Model — opens the rich model picker. Model selection subsumes provider selection: pick a Claude model and the session is a Claude session.
  • Effort — appears only when the model supports it. Switching providers clamps a carried-over effort to the nearest rung the new provider accepts, so a Claude max doesn’t silently become something else on Grok. Claude subscriptions get Ultracode as an explicit top choice.
  • Plan ↔ Code — a one-click pill: Plan (read-only) vs Code (maximum permissions). ⌘⇧1 selects Plan, ⌘⇧2 selects Code. Cursor has no read-only plan mode, so it has no pill. See Plan mode.
  • Account — appears when a provider has two or more signed-in accounts, so you can pin the turn to a specific one. Your pick is remembered per provider.
  • Worktree badge — on a bound session, a read-only badge reflecting that session’s worktree/local mode. The mode is chosen when the session is created and the per-repo default lives in Settings → Workspaces; there is no Local/Worktree picker in the chip row.

The plan tray

When a session has proposed a plan and is waiting on you, a tray appears directly above the input field with the plan summary and two actions: Comment (⌘⇧Return), which keeps planning and puts your cursor back in the field, and Approve & run, which lets the agent write. This is the only place a plan is acted on. The plan card rendered inline in the transcript is read-only by design — approval never scrolls away. Trying to send an ordinary message while a plan is pending returns “Use Approve & run, or Comment to keep planning” rather than dispatching it somewhere ambiguous. See Plan mode.

Usage and context

The right side of the bar shows a small ring: the active session’s context-window utilisation — say, 33% of the model’s prompt window. It tints to warning at 75% and danger at 95%. Clicking it opens a breakdown popover with:
  • The context window header plus a per-bucket breakdown of what’s filling it.
  • A Plan usage section: the 5-hour limit and Weekly · all models rows for Claude subscriptions, or the Auto/API quota rows for Cursor. Each plan row’s bar tints danger at 95%.
This replaced the older inline ~$X • Y K tokens cost ticker and the standalone weekly-cap badge. Plan caps now live one click away in this popover, where each meter — context, 5-hour, weekly — has its own row instead of pegging a single shared ring.

Error handling

The composer uses locked semantics: on a send error your text is preserved and attachments stay staged. The error surfaces inline in red, and you can edit and retry without re-attaching anything. Offline or transient failures on a bound session queue as an optimistic pending message you can retry, and a failed turn no longer leaves a duplicate copy of your message behind in the transcript.
  • Sessions — how sessions are spawned and configured.
  • Plan mode — the Plan / Code pill and the approve flow.
  • Autopilot — what “Code = maximum permissions” actually grants.
  • Broadcast — per-child attachment staging in broadcast mode.