The seven agents and what each one can do
A tab runs one agent: claude, codex, opencode, cursor, devin, copilot or muse. 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 opens the slash panel on its Agent slot, underAgent for this tab, where the running agent readsrunning this tab now. - Pick an agent. Picking a different one hands the tab over. See hand-a-tab-to-another-agent. The panel then shows that agent's models and effort.
- 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 Code,
Codex, OpenCode, Cursor, Devin, Copilot and Muse. An eighth agent, Mock, is marked synthetic: it
exists for tests, is kept selectable, and is left out of the usage meters.
Claude Code, Codex, Cursor, Devin, Copilot and Muse show · log in in the new-thread picker when their CLI
is not logged in; see Log in to an agent from your phone
and Log in to Cursor from your phone. Devin's
login is on log-in-to-an-agent too.
An agent only appears if the server has its adapter configured. One whose CLI
is not installed on the workstation still appears, as Install <agent> in the
new-thread picker; see Install an agent from your phone.
Options and settings
| Capability | claude | codex | opencode | cursor | devin | copilot | muse | What it means for you |
|---|---|---|---|---|---|---|---|---|
liveModelSwitch |
no | yes | no | no | no | no | yes | Whether a model change applies without restarting the agent process |
effort |
yes | yes | yes | no | yes | yes | yes | The effort dial does something |
steerMidTurn |
yes | yes | yes | no | yes | yes | yes | A message can join the turn already running |
interrupt |
yes | yes | yes | yes | yes | yes | yes | Stop ends the turn |
resume |
yes | yes | yes | yes | yes | yes | yes | The vendor session is picked up again after a restart |
fork |
no | yes | no | no | yes (copied as text) | no | yes (copied as text) | Whether a vendor session can fork into a new tab |
realDiffs |
no | yes | yes | yes | yes | yes | no | Edits arrive as patches instead of being synthesized |
plan |
yes | yes | yes | yes | yes | yes | yes | The plan strip is fed by the agent's own todo tool |
usage |
yes | yes | no | no | yes (context only) | no | yes | The agent has account usage windows to meter |
compact |
yes | yes | yes | no | yes | yes | yes | The agent compacts itself; without it VCode compacts by asking for a summary and starting a new session (auto compact) |
approvals |
yes | yes | yes | yes | yes | yes | yes | Below Full, a request shows as a card you answer (permission levels) |
subagents |
yes | yes | no | yes | yes | yes | yes | Subagents reach the subagent strip |
attachments |
yes | yes | yes | yes | yes | yes | yes | Images and files can ride with a message |
Other per-agent differences:
| Thing | Behaviour |
|---|---|
| Images | claude, opencode and devin take them inline as base64; copilot and muse take them inline with the message; codex takes a file path (localImage), so a large screenshot costs nothing on the wire |
| Compaction channel | claude, opencode, devin and copilot get a /compact prompt (devin's own compaction shows as compacting context…, copilot's as context compacted); codex uses thread/compact/start; muse uses session/compact; cursor is asked for a summary, and its next message starts a new session carrying it |
/compact typed by you |
Sent through to claude and opencode. On codex, cursor and devin VCode runs the compaction itself; on devin that sends Devin its own /compact, on copilot it sends Copilot its own /compact, and on muse VCode runs Muse's session/compact |
| Session adoption | claude, codex, cursor, devin, copilot and muse. Cursor resumes its ACP session and imports no old cards; devin reads its session's replay over ACP; adopting an opencode session is refused with resume does not support opencode sessions |
| Usage meters | Muse has a card with its session and weekly windows. No row for opencode, devin or copilot: they report no account windows. Devin's and Copilot's context figures still feed the context meter |
| Steering | devin sends a steered message into the running turn at once; copilot joins a steered message to the turn already running; muse joins one with turn/steer. claude reads a steered message between tool calls and marks it waiting for Claude to read it until then; codex and opencode take it in with no mark, opencode at its next step; cursor cannot, so on a cursor tab every message queues |
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. - Devin's binary is looked up in
DEVIN_BIN, thendevinonPATH, then~/.local/bin/devin; on Windows,%LOCALAPPDATA%\devin\cli\bin\devin.exe, thendevin.exeonPath. - Muse's binary is looked up on
PATH, then~/.local/bin/muse; on Windows, the newest build in%LOCALAPPDATA%\Programs\muse. - Copilot's binary is looked up in
COPILOT_BIN, thencopilotonPATH, then~/.local/bin/copilot, then the newest~/.nvmnode folder that has one; on Windows,COPILOT_BIN, then the WinGet link in%LOCALAPPDATA%\Microsoft\WinGet\Links, thencopilotonPath. - 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 is listed as not installed, and a tab that still runs 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. - On opencode a queued message waits until the running turn has ended, including every message steered into 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
- permission-levels: the levels each agent offers, and what Ask asks about
- 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
- devin: running a Devin tab, what works and what does not
- copilot: running a Copilot tab, what works and what does not
- muse: running a Muse tab, what works and what does not
- install-an-agent: install an agent the workstation lacks
- system-prompt: the instructions Claude, Codex, OpenCode, Devin, Copilot and Muse get after VCode's own
- mcp-servers:
/mcpon claude, codex, devin and muse tabs lists their MCP servers