The four agents and what each one can do
A tab runs one agent: claude, codex, opencode or cursor. They answer in the same
transcript and take the same controls, but they do not support the same things,
and VCode turns a control off rather than let you press something that
would fail.
Why you would use it
You are choosing which agent to open a tab with, or you pressed a control on one agent and it was missing or disabled on another. This page is the table of what each one supports.
How to use it
- Open the agent picker beside the composer (
#agentpick). It shows the agent's mark and name, and the menu header saysagent for this tab · now: <agent>. - Pick an agent. Picking a different one hands the tab over — see hand-a-tab-to-another-agent.
- To start a tab on a given agent instead, use the
new-thread form or
/new.

What you see
Each agent has its own mark, used in the tab strip,
the usage meters, the
assistant cards and the agent picker. The names the server sends are Claude,
Codex, OpenCode and Cursor. A fifth agent, Mock, is marked synthetic: it
exists for tests, is kept selectable, and is left out of the usage meters.
Claude, Codex and Cursor show · log in in the new-thread picker when their CLI
is not logged in; see Log in to Claude or Codex from your phone
and Log in to Cursor from your phone.
An agent only appears if the server has its adapter configured.
Options and settings
| Capability | claude | codex | opencode | cursor | What it means for you |
|---|---|---|---|---|---|
liveModelSwitch |
no | yes | no | no | Whether a model change applies without restarting the agent process |
effort |
yes | yes | yes | no | The effort dial does something |
steerMidTurn |
yes | yes | no | no | A message can join the turn already running |
interrupt |
yes | yes | yes | yes | Stop ends the turn |
resume |
yes | yes | yes | yes | The vendor session is picked up again after a restart |
fork |
no | yes | no | no | Whether a vendor session can fork into a new tab |
realDiffs |
no | yes | yes | yes | Edits arrive as patches instead of being synthesized |
plan |
yes | yes | yes | yes | The plan strip is fed by the agent's own todo tool |
usage |
yes | yes | no | no | The agent has account usage windows to meter |
compact |
yes | yes | yes | no | Auto compact can run on this tab |
approvals |
yes | yes | yes | yes | Approval requests are answered (always automatically) |
subagents |
yes | yes | no | yes | Subagents reach the subagent strip |
attachments |
yes | yes | yes | yes | Images and files can ride with a message |
Other per-agent differences:
| Thing | Behaviour |
|---|---|
| Images | claude and opencode take them inline as base64; codex takes a file path (localImage), so a large screenshot costs nothing on the wire |
| Compaction channel | claude and opencode get a /compact prompt; codex uses thread/compact/start |
/compact typed by you |
Sent through to claude and opencode. On codex VCode answers: codex does not compact over this channel — /clear starts the agent fresh instead. |
| Session adoption | claude, codex and cursor. Cursor resumes its ACP session and imports no old cards; adopting an opencode session is refused with resume does not support opencode sessions |
| Usage meters | No row for opencode: it reports no account windows |
| Steering | opencode refuses: opencode cannot steer mid-turn; the message runs when the turn ends |
Limits and known gaps
- Claude reports edits as tool inputs, not patches, so its unified diffs are built
from
old_string/new_stringand capped at 400 patch lines, with a… N more linesmarker. - Cursor's binary is looked up in
CURSOR_BIN, then asagentorcursor-agentonPATH, then in~/.local/bin/agent. - Cursor's model picker lists the model IDs and names advertised by ACP;
agent modelscan include models that ACP cannot select. Itsautorow uses ACP'sdefault[]model, including for older savedautovalues. - opencode's binary is looked up in
OPENCODE_BIN, then onPATH, then in~/.opencode/bin. With none of those it fails withopencode is not installed (looked on PATH and in /home/<you>/.opencode/bin). - One opencode
acpprocess holds 550-626 MB. It stops itself after ten minutes idle and the session loads again on the next message, in about 300 ms. - opencode sends one prompt at a time; a message sent while another is in flight waits for it.
- Claude's subagent text is not forwarded, so only the tools a subagent calls show as its activity.
Related
- hand-a-tab-to-another-agent — move a tab between agents without losing the conversation
- switch-the-model — the models each agent offers
- approvals-are-bypassed — what "the agent runs as you" means
- usage-meters — which agents report plan usage at all
- resume-a-session-from-disk — the two whose sessions can be adopted
- log-in-to-an-agent — log an agent in from the phone