If you have access to multiple AI coding CLIs (Codex, Cursor, Antigravity, and OpenCode), this plugin lets Claude Code delegate to whichever one is best for the task — without you having to switch tools or run them yourself.
Each CLI is wired up through its native transport (Codex via ASP, Cursor via headless agent -p, Antigravity via its headless agy CLI, OpenCode via headless opencode run --format json). Cursor and OpenCode can also run over ACP (Agent Client Protocol) as an opt-in — see Transports. This lets you pick and choose the best features from each — like /cursor:delegate for fast implementation, /codex:review for code review, /antigravity:research for deep research, or /opencode:delegate to offload implementation to OpenCode's Zen models. Sessions, streaming, tool calls, and background jobs all work normally.
Paste into Claude Code:
/plugin marketplace add https://github.com/greenpolo/cc-multi-cli-plugin
/plugin install multi@cc-multi-cli-plugin
/multi:setup
/multi:setup detects which CLIs you have, installs the matching sub-plugins, and wires Exa + Context7 MCPs into each.
Two skills ship with the plugin:
-
multi-cli-anything — adds ANY CLI beyond the four built-in providers (Aider, Qwen, or anything with a headless/print, app-server, or structured transport) as a subagent that Claude can invoke at will. Claude scaffolds the new plugin in the marketplace.
-
customize — change which CLI handles what. "Make Codex the executor instead of Cursor." Claude does the file edits, reinstalls, and tells you what restarts are needed.
Just ask Claude in plain English. The skills activate automatically.
Provider commands live under each CLI's namespace; the cross-cutting /multi:* commands operate the shared runtime.
| Command | What it does |
|---|---|
/codex:execute |
Delegate a specific plan or plan step to Codex |
/codex:rescue |
Hand a stuck or open-ended problem to Codex for an independent investigation |
/codex:review |
Codex code review of your working tree or a branch (read-only) |
/codex:adversarial-review |
Adversarial design/code review — challenges the approach, not just the diff (read-only) |
/cursor:delegate |
Delegate an implementation task or plan step to Cursor (agentic; writes code; supports --until-done) |
/cursor:research |
Read-only external web/documentation research via Cursor |
/cursor:explore |
Read-only codebase exploration via Cursor |
/antigravity:research |
Deep external research with Antigravity (Gemini 3.5 Flash, read-only; experimental) |
/antigravity:explore |
Fast codebase exploration with Antigravity (Gemini 3.5 Flash, read-only; experimental) |
/opencode:delegate |
Delegate an implementation task to OpenCode (agentic; writes code; supports --until-done; default model: opencode/claude-opus-4-8 via Zen) |
/opencode:research |
Read-only external web/documentation research via OpenCode |
/opencode:explore |
Read-only codebase exploration via OpenCode |
/multi:setup |
One-shot wizard — detects CLIs, configures Exa + Context7 MCPs |
/multi:status |
Show active and recent background jobs for this repo |
/multi:result |
Show the stored final output for a finished job |
/multi:cancel |
Cancel an active background job |
Claude can also auto-dispatch the provider commands without you typing them.
All of them are interchangeable, and can be altered to whatever you want using the customize skill.
Each CLI is driven over a transport. The defaults are stable and need no configuration; the ACP path is opt-in.
- Codex → ASP (app-server behind a broker). Antigravity → headless
agy(transcript read-back). - Cursor and OpenCode → headless print mode by default, with an optional ACP path (Agent Client Protocol — structured JSON-RPC over stdio, via the official
@agentclientprotocol/sdk). ACP adds in-protocol model selection, session modes, andsession/cancel; it's still in bake-in, so headless remains the default.
Opt into ACP per CLI with environment variables (e.g. in ~/.claude/settings.json under env):
"env": {
"MULTI_TRANSPORT_CURSOR": "acp",
"MULTI_TRANSPORT_OPENCODE": "acp"
}Each is acp | headless (default headless). With no flag set, behavior is identical to before. Codex and Antigravity have no ACP path (Codex has no native ACP; agy doesn't implement it). When on the ACP path, ACP_TRACE=1 traces the JSON-RPC wire to stderr.
These are upstream CLI quirks and current limitations. If you hit something not listed, check the companion's stderr (the forwarders append 2>&1) — a bad model id, an auth failure, or a sandbox block surfaces there.
-
Cursor runs in headless
agent -pmode by default (ACP is opt-in — see Transports). On the headless path the adapter delivers the prompt on stdin, selects the model with--model(defaultauto), and parsesjson/stream-jsonoutput. MCP servers come from Cursor's own~/.cursor/mcp.json, which/multi:setupmaintains (this holds on the ACP path too — the adapter passes no MCP servers in-protocol, so Cursor reads its own config either way). -
Cursor's shell is slow/unreliable on Windows. Cursor's terminal tool can stall or wait out a per-command timeout on Windows (host-PATH/WSL, open upstream). So
/cursor:delegatedoes not run build/test verification itself — it lists the commands in a## Verificationblock and Claude runs them. File writes and web/codebase reads are unaffected. -
Antigravity runs via the headless
agyCLI (experimental). Install theagyCLI (https://antigravity.google) and runagyonce interactively to sign in — the desktop app is not required./multi:setupreports whetheragyis detected. -
Antigravity reads its answer from a transcript, not stdout.
agy's headless print mode (agy -p) currently emits nothing to stdout when piped (an upstream bug, gemini-cli#27466, unfixed as of agy 1.0.3), so the adapter recovers the model's answer fromagy's on-disk conversation transcript. Consequences: read-onlyresearch/exploreonly (no write-delegate), the model is fixed to Gemini 3.5 Flash (no per-call--model), and there are no token-usage metrics on this path. This is a deliberate workaround pending the upstream stdout fix. -
OpenCode has no
--read-onlyflag. For read-only roles (/opencode:research,/opencode:explore), the adapter enforces read-only by injecting a custom primary agent viaOPENCODE_CONFIG_CONTENTwith write/edit/bash denied, plus anOPENCODE_PERMISSIONdeny floor. A stale bunopencode.exemay shadow the npm.cmdshim on Windows — the adapter never resolves toopencode.exe; setOPENCODE_CLI_PATHto force the right binary if needed. -
OpenCode token offload:
anthropic/*models = zero offload. Calling OpenCode with ananthropic/*model routes through the same Claude subscription as Claude Code — no cost savings. Useopencode/*(Zen),openai/*,google/*,github-copilot/*, orollama/*models for real offload. The adapter default isopencode/claude-opus-4-8(Zen, billed separately). Override withOPENCODE_CLI_DEFAULT_MODEL. -
OpenCode
--effortis not supported. The--effortflag is Codex-only; OpenCode ignores it.--until-doneis supported. -
OpenCode MCP servers are not managed by
/multi:setup. OpenCode reads MCP configuration from its ownopencode.json; use OpenCode's interactive wizard to wire Exa/Context7 there.
When upstream CLIs change behavior, the plugin's adapters absorb it — these notes track the current state.
Apache 2.0. See NOTICE for upstream credits.
