Catalog
Native wires are driven directly by an adapter written for that agent. ACP
agents share one adapter that speaks the
Agent Client Protocol.
Capability matrix
What each adapter reports afteropen. Read it from
session.info().details.capabilities at runtime; never hardcode this table.
- handshake: the ACP
initializeresponse says whether the agent takes images, loads sessions, and accepts steering. Cursor, for example, reports images and resume; Antigravity’s server reports no steer. - on first sight: ACP has no handshake flag for these. The capability is
added, with a
SessionUpdated, the first time the agent sends one.
UnsupportedFeature instead of misbehaving.
Config options by agent
Per-agent notes
Claude Code
Claude Code
The fullest native adapter.
fast appears when the selected model reports
supportsFastMode; switching it resumes the process under the hood with the
same Session handle and conversation. Rollback can restore files.Codex
Codex
Opts into the app-server’s experimental API. Approval policy and sandbox
switch live. Images ride as
localImage items. Client MCP servers ride as
launch overrides (stdio and HTTP; no SSE). rollback maps to
thread/revert; files are never restored. Questions are translated
defensively but the capability stays off until observed live.opencode
opencode
anyagent starts
opencode serve on a private localhost port per session,
gated by a per-session secret, and drives its HTTP + SSE wire. Task-tool
child sessions nest as subagents. No steer (mid-turn prompts queue) and no
plan quota. Pass a model as configure("model", "provider/id"); opencode’s
free opencode/… models need no key. To drive it over ACP instead:
AgentInstallation::acp("opencode", path, ["acp"]).pi
pi
Provider-key based: log in with
/login <provider> inside the CLI, or set the
provider’s API-key variable. generate launches with --no-tools --no-session,
so it is text-only and nothing is saved.Antigravity: two ways in
Antigravity: two ways in
Discovery picks the richer wire that is installed:The headless Force the headless CLI with
agy wire cannot prompt: in Ask mode every permission-gated
tool is denied by the agent itself (the tool shows as failed), AutoApprove
launches with --dangerously-skip-permissions, questions are skipped with a
diagnostic, and a mid-turn prompt queues. Cancel kills the process and resumes
the conversation in a fresh one, about two seconds.The ACP server is Google’s own (antigravity-acp in the
ACP registry,
a 314 MB download). It reuses the agy login: anyagent calls its
authenticate once per open (about 2 s, no browser), or set auth.type in
~/.gemini/antigravity-acp/settings.json to skip that. When only agy is
found, the installation carries upgrade: Some(MissingAgent) with the
download hint:ANYAGENT_ANTIGRAVITY_BIN=~/.local/bin/agy.
Google’s terms restrict third-party tools driving a personal Antigravity
login; the ACP server is the sanctioned path. Surface that choice to users.Cursor CLI
Cursor CLI
Runs over
cursor-agent acp. Permission requests gate shell commands outside
its allowlist; file edits never ask, so sandbox accordingly. Before the
handshake anyagent runs cursor-agent about for the version and account and
fails typed with cursor-agent login when logged out. A model switch adopts
that model’s own options (effort, fast, thinking, context). Cursor’s
extension requests are answered: ask_question becomes a Question,
update_todos drives the plan, task (a subagent run) is surfaced as a
header only. Cursor reports no context usage, so each turn ends with an
estimate (4 chars ≈ 1 token) labelled anyagent/estimated in extensions.Kiro CLI
Kiro CLI
Its credential lives in a sqlite row that exists logged out too, so discovery
reports
Unknown and probe answers for real. effort is exposed as a live
option even though ACP advertises none: the adapter reads the level from
kiro’s metadata and switches it by running /effort <level> as a hidden
prompt between turns.Hermes Agent
Hermes Agent
Only its file tools ask permission. Its terminal tool runs without asking, so
a denied write does not stop it from writing via shell. Hermes never sends
tool status updates. No
effort option.Grok and Qwen Code
Grok and Qwen Code
Plain ACP. Grok exposes
effort from the model’s reasoningEfforts; qwen
exposes none. Both log in through their own TUI.Compaction is native-adapter only. ACP has no compaction in schema 1.7, so
ACP agents refuse with
UnsupportedFeature.Any other ACP agent
No catalog entry needed. Build the installation yourself:Pointing at a specific binary
Every catalog entry readsANYAGENT_<AGENT>_BIN first:
AgentInstallation::at(id, executable).
Windows
Every catalog agent ships for Windows and every installer below puts its directory onPATH, so discovery finds them without extra configuration.
npm installs are .cmd shims; discovery skips the bare bash shim next to
them. Cursor’s Windows installer is irm 'https://cursor.com/install?win32=true' | iex.
Several logins of the same agent
CLAUDE_CONFIG_DIR,
CODEX_HOME, …) for that process. An agent with no such variable fails with
InvalidConfiguration; an isolation request is never silently dropped.