One Claude Code plugin to synchronize Claude Code, Codex CLI, and Antigravity CLI (agy) on the same project — and let them delegate work to each other. Adds Claude→Grok Build delegation (ACP), bounded Qwen Code review, and opt-in MCP bridging to more coding agents (opencode, Qwen Code, Kimi CLI).
Each tool reads from its own files. CLAUDE.md and AGENTS.md sit next to each other and drift. Skills written for Claude aren't visible to Codex. Hooks must be maintained in two places. MCP servers declared in .mcp.json are invisible to Codex's .codex/config.toml. And there's no built-in way to say "ask Codex for an adversarial review" from Claude, or "ask Claude to plan this" from Codex.
cc-suite fixes all of this with a single plugin install:
| Feature | What it does |
|---|---|
| Single-source instructions | AGENTS.md is the source of truth. CLAUDE.md becomes a thin @AGENTS.md import. Codex and agy read AGENTS.md natively. |
| Shared skills | .agents/skills/ is symlinked to .claude/skills/. Claude, Codex, and agy can use the same workspace skills. |
| No circular delegation | Because the skills tree is shared, an agent Claude delegates to can see cc-suite's own Claude-facing skills and hand the task straight back. Every outbound lane blocks that: implicit-invocation guards on the Codex side, and a delegation boundary prepended to the prompt on all lanes. |
| Mirrored hooks | Syncs the five shared hook events from .claude/settings.json into .codex/hooks.json. Same scripts, both tools. |
| MCP parity | Mirrors .mcp.json project servers into .codex/config.toml and .agents/mcp_config.json so Codex and agy see the same servers. |
| Claude → Codex delegation | /cc-suite:audit, /cc-suite:implement, /cc-suite:bug-analyze, and more delegate to Codex through the deadline-bounded CLI runner, with full job tracking, background mode, and the stop-time review gate. The codex-cli MCP server registered in .mcp.json is an additional direct tool surface. |
| Codex → Claude delegation | Registers the claude-code MCP server (claude-octopus) in .codex/config.toml. Codex skills $claude-review, $claude-plan, $claude-implement, $claude-debug delegate to Claude and return structured results. |
| Codex reads Claude session history | The same claude-code MCP server exposes claude_code_sessions (list this repo's Claude Code sessions, or all projects with all_projects: true) and claude_code_transcript (read a session by id). Codex can enumerate and read past Claude conversations for the repo. |
Claude → agy delegation |
scripts/agy-runner.mjs drives Antigravity CLI headlessly, with the same job tracking, background mode, deadline enforcement, and conversation resume as the Codex runner. |
agy → Claude delegation |
The same claude-octopus MCP server, registered in agy's workspace config. |
| Claude → Grok delegation | /cc-suite:grok drives Grok Build over the Agent Client Protocol (scripts/grok-runner.mjs acts as the ACP client to grok agent stdio), with the same job tracking, background mode, deadline enforcement, and session resume as the Codex/agy runners. |
| Claude → Qwen review | /cc-suite:qwen-review runs Qwen as a bounded critic: Safe Mode + Plan mode + sandbox, isolated target copies, explicit tool denials plus init-surface verification, a bounded read_file budget, strict terminal-result validation, verified file hashes, and at most two same-session resumes after incomplete output. |
| More coding agents (opt-in) | /cc-suite:bridge-tools mirrors the project MCP surface into Grok Build, opencode, Qwen Code, and Kimi CLI — each selected in .cc-suite.md's ## Enabled Tools list. Grok, opencode, and Kimi read AGENTS.md and shared skills natively, so only MCP config is mirrored (per tool's native format); Qwen Code also gets a skills symlink and an instruction-file setting, since it reads neither by default. China-aware: Qwen/Kimi/opencode work natively in mainland China; Grok is VPN-only. |
/cc-suite:init asks which agents to bridge. It probes PATH, pre-selects the ones you actually have installed, shows each tool's China tier, and only writes config for what you pick — a Claude-only project gets no .codex/ tree. Nothing is forced on except Claude itself, which is the source of truth the others mirror from.
Beyond Claude / Codex / Antigravity, cc-suite can bridge additional agentic CLIs. Most of them read AGENTS.md and the shared skills tree on their own, so the bridge only has to mirror MCP — but this is not uniform, and the exceptions are called out below. Change the selection any time by re-ticking .cc-suite.md and running /cc-suite:bridge-tools:
## Enabled Tools
- [x] claude
- [x] codex
- [x] antigravity
- [ ] grok
- [x] opencode
- [x] qwen
- [x] kimiThen run /cc-suite:bridge-tools (or python3 scripts/bridge_tools.py). Each enabled tool gets the project's .mcp.json servers plus the pinned claude-octopus server — so claude_code_sessions / delegation work everywhere — written to its own native MCP config:
| Tool | MCP target | China tier |
|---|---|---|
| Grok Build (xAI) | .grok/config.toml ([mcp_servers.*]) |
C — VPN-only |
| opencode (SST) | opencode.json (mcp) |
A — native |
| Qwen Code (Alibaba) | .qwen/settings.json (mcpServers) + .qwen/skills symlink |
A — native |
| Kimi CLI (Moonshot) | ~/.kimi/mcp.json |
A — native |
Env-var values and remote headers are never written into a mirrored config (potential secrets); the vars that need setting are reported instead. User-managed servers and sibling config keys are preserved; --status shows the enabled set, --unbridge tears it down. Design notes: dev-docs/supporting-more-coding-agents.md.
The bridge only mirrors MCP config. Everything else depends on what the tool already discovers, which varies:
| Tool | Reads AGENTS.md |
Finds project .agents/skills/ |
cc-suite compensates |
|---|---|---|---|
| Grok Build | ✅ on its own | ✅ (also .claude/skills/) |
nothing needed |
| opencode | ✅ on its own | ✅ (also .claude/skills/) |
nothing needed |
| Kimi CLI | ✅ on its own | ✅ (also .claude/skills/) |
nothing needed |
| Qwen Code | ❌ .qwen/skills/ only |
.qwen/skills symlink + context.fileName |
Qwen Code needs help on both axes, and the bridge now provides both. Its skill scan covers only ~/.qwen/skills/ and .qwen/skills/, hence the symlink. Its default context file is QWEN.md: getContextFileNames() in qwen-code 0.21.0 returns ["QWEN.md"] whenever the setting is unset, so an unbridged project's AGENTS.md is silently ignored — no error, the instructions simply never load. /cc-suite:bridge-tools therefore also writes:
{ "context": { "fileName": ["AGENTS.md", "QWEN.md"] } }into .qwen/settings.json. QWEN.md stays in the list so a project that already has one keeps working, and an existing user value is extended rather than replaced. --unbridge removes only the entries it added, and leaves the list alone once you have reordered it.
Grok and opencode were verified directly against the installed CLIs (grok inspect, opencode debug skill) with a probe skill behind the real .agents/skills → ../.claude/skills symlink. The Qwen behaviour was verified against qwen-code 0.21.0's own bundled source — the settings schema defines context.fileName as string | string[] defaulting to undefined, and the resolver falls back to ["QWEN.md"]. Kimi is from its published docs; it is not installed here.
Ollama is not a bridge target and has no profile. It is a model runner, not an agent: no MCP client or server (still an open request), no AGENTS.md, and a home-only ~/.ollama/skills/ with no project scope — so there is no config file for the bridge to write.
It sits one layer below cc-suite instead. ollama launch <tool> starts an already-bridged CLI — opencode, codex, qwen, kimi, claude, and others — pointed at a local model, so the bridged MCP surface and shared skills still apply. It does not touch opencode.json, .codex/config.toml, or .mcp.json, so it will not disturb anything the bridge wrote.
Beyond the config bridge, cc-suite can drive Grok Build as an agent. /cc-suite:grok "<prompt>" sends a task to Grok and returns its answer:
/cc-suite:grok "Review the changes on this branch for correctness bugs"
/cc-suite:grok --sandbox workspace-write "Add a --json flag to the CLI"
/cc-suite:grok --resume <session-id> "Now also update the tests"scripts/grok-runner.mjs acts as an Agent Client Protocol (ACP) client to grok agent stdio (Grok is the agent, the runner is the client). The ACP handshake — initialize → session/new (or session/load on resume) → session/prompt — streams Grok's answer from session/update notifications. Because it's a structured protocol, the runner gets reliable session ids (resume carries full context), tool-call visibility, and permission control — richer than a text-scraping CLI runner.
| Flag | Meaning |
|---|---|
--model <id> |
Grok model id (default: Grok's configured default; grok models lists them) |
--effort <level> |
none…max reasoning effort (Grok takes an effort flag; agy does not) |
--sandbox |
read-only (default) · workspace-write · danger-full-access |
--background / --resume <id> |
Same job-tracking + resume as the Codex/agy runners |
It shares the runner infrastructure (/cc-suite:status, /cc-suite:result, /cc-suite:cancel) with the other backends — resume a Grok session via /cc-suite:grok --resume <id> (/cc-suite:continue resumes Codex threads only) — and gates on /cc-suite:grok-preflight — a fast, local readiness check (binary + auth, no network round-trip) that fails fast with a grok login hint instead of hanging until the deadline. Pair it with the MCP bridge (grok enabled in ## Enabled Tools) so Grok can call back into Claude via the claude-code server — a full round trip. Requires the grok binary on PATH (install).
/cc-suite:qwen-review is deliberately narrower than the write-capable
delegation lanes. It treats Qwen as an independent critic, never as a second
editor:
/cc-suite:qwen-review "Challenge this architecture proposal"
/cc-suite:qwen-review --target docs/design.md "Find unsupported assumptions"
/cc-suite:qwen-review --target draft-en.md --target draft-zh.md "Check bilingual parity"scripts/qwen-runner.mjs copies declared targets into a private temporary
workspace, then starts Qwen with Safe Mode, Plan mode, Qwen's sandbox, and
stream-json. A prompt-only review has a zero-call budget. A file review exposes
only isolated copies and applies a bounded read_file call budget. Because Qwen
versions 0.21.0 through 0.21.2 ignore --core-tools in Safe Mode, the runner
instead passes explicit
deny rules for every known non-review tool and then checks the real init event:
prompt-only runs must expose no tools, while target runs must expose exactly
read_file; both must expose no MCP servers. Any new or unexpected advertised
tool fails closed before later stream events are accepted. The stream observer
also rejects undeclared paths. Success requires this verified Plan-mode init,
no policy violation, a non-empty terminal success result, exit code 0, and
unchanged source and staged hashes.
If Qwen exits without a terminal result, the runner resumes the same session at
most twice. It never retries parsing, policy, terminal-error, exit-mismatch, or
hash failures. Raw stdout/stderr capture is off by default because tool results
can contain the complete reviewed file; --debug-capture enables private
diagnostic files explicitly. Qwen's output remains critique, not evidence — the
calling agent verifies findings and retains final judgment.
These controls are defense in depth, not a promise of perfect OS isolation.
Temporary copies are removed after a normal job and on SIGHUP, SIGINT, or
SIGTERM; an uncatchable SIGKILL can still leave a private temporary
directory behind. Never review secrets.
Google moved consumer Gemini CLI access to Antigravity CLI
(binary: agy) on 2026-06-18. See Google's transition announcement
and the official migration guide.
Enterprise Gemini CLI and paid API access remain available, so cc-suite treats
Gemini files as an explicit legacy path rather than deleting custom content. New
projects use AGENTS.md and .agents/ workspace assets. Run
/cc-suite:migrate-google for an existing Gemini setup; the command asks before
running agy plugin import gemini and preserves custom legacy files by default.
What works, and what does not:
| Status | |
|---|---|
AGENTS.md as shared context |
✅ native — no bridging needed |
Claude → agy delegation |
✅ scripts/agy-runner.mjs (job tracking, background, resume) |
agy → Claude delegation |
✅ register claude-octopus in .agents/mcp_config.json |
Project-scoped skills (.agents/skills/) |
✅ native workspace path |
Project-scoped MCP servers (.agents/mcp_config.json) |
✅ native workspace path |
Current Antigravity documentation defines .agents/skills/ and
.agents/mcp_config.json as workspace paths. cc-suite uses those paths and keeps
the generated MCP config ignored by default because server definitions may contain
credentials or machine-specific paths. Global configuration remains supported for
users who want servers or skills shared across every workspace.
Two further agy limitations shape the runner: there is no reasoning-effort flag
(effort is encoded in the model name, e.g. Gemini 3.1 Pro (High)), and there is
no machine-readable output — agy -p prints prose, so there is no cost or
turn accounting, and the conversation id must be recovered by diffing
~/.gemini/antigravity-cli/conversations/. That recovery is best-effort: when two
agy runs finish concurrently the diff is ambiguous, and the runner records no
conversation id rather than attach the wrong one.
Two install paths — both reach the same code. Pick one:
Via Anthropic's official community marketplace (curated; updates lag the maintainer's marketplace by up to ~24h):
claude plugin marketplace add anthropics/claude-plugins-community
claude plugin install cc-suite@claude-community --scope projectVia the xiaolai marketplace (latest version lands here first):
claude plugin marketplace add xiaolai/claude-plugin-marketplace
claude plugin install cc-suite@xiaolai --scope project- Codex CLI installed — required for Claude→Codex delegation commands
- Antigravity CLI (
agy) installed — required for Google-backed delegation and/cc-suite:agy-preflight - Grok Build (
grok, xAI) installed — required for the Claude→Grok ACP delegation lane (/cc-suite:grok) and/cc-suite:grok-preflight - Qwen Code (
qwen, ≥ 0.21.0) installed — required for/cc-suite:qwen-reviewand/cc-suite:qwen-preflight - claude-octopus — required for Codex→Claude delegation. Delivered via
npx -yat runtime, no pre-install needed. Uses the same credential store as Claude CLI (~/.claude/.credentials.json).
/cc-suite:init
Walks through the full setup: AGENTS.md bridge, MCP server registration, and project audit config. All steps are idempotent — safe to re-run. Re-running with an existing .cc-suite.md tops up the config non-destructively and re-runs the non-interactive bridge steps, so missing artifacts (e.g. after a fresh clone) are recreated.
After init, edit AGENTS.md — all three tools pick up changes automatically.
| Command | What it does |
|---|---|
/cc-suite:init |
Full setup: bridge init, Codex MCP, Claude MCP, project config. Idempotent. |
/cc-suite:bridge-skills |
Create .agents/skills → .claude/skills symlink. |
/cc-suite:bridge-hooks |
Mirror .claude/settings.json hooks → .codex/hooks.json. |
/cc-suite:sync-mcp |
Sync Claude's .mcp.json project servers → Codex and Antigravity workspace configs. Alias: /cc-suite:bridge-mcp. |
/cc-suite:bridge-tools |
Mirror the project MCP surface into opt-in coding agents (Grok Build, opencode, Qwen Code, Kimi CLI) selected in .cc-suite.md's ## Enabled Tools. |
/cc-suite:migrate-google |
Convert legacy Gemini CLI extensions/configuration and establish the agy workspace bridge. |
/cc-suite:status |
Show active and recent delegation jobs (Codex, agy, Grok). Bridge health and MCP registration checks live in /cc-suite:diagnose. |
/cc-suite:unbridge |
Tear down bridge artifacts, restoring CLAUDE.md from AGENTS.md. |
Codex-backed commands delegate through the CLI runner (scripts/codex-runner.mjs, which shells out to codex exec — deadline-bounded, killable, with a streamed heartbeat); the codex-cli MCP server registered in .mcp.json is a separate, direct tool surface, not the delegation path. Codex runs in a sandboxed subprocess; Claude tracks jobs, handles background mode, and can continue threads. /cc-suite:audit-plugin is the local exception — it analyzes plugin artifacts without an external model call.
| Command | What it does |
|---|---|
/cc-suite:audit |
Run a mini (5-dimension) or full (9-dimension) audit via Codex |
/cc-suite:audit-fix |
Audit → fix → verify loop. Iterates up to 3 rounds; findings persist to .cc-suite/audits/ before any fix, so the loop survives context compaction and interruptions. |
/cc-suite:audit-agent |
Audit Claude Code agent definitions (triggering, prompt quality, tools, examples) |
/cc-suite:audit-plugin |
Audit Claude Code plugin artifacts (local analysis, no Codex call) |
/cc-suite:audit-skill |
Audit Claude Code SKILL.md files |
/cc-suite:audit-rules |
Audit .claude/rules/ files |
/cc-suite:audit-nlp |
Audit natural-language programming artifacts |
/cc-suite:implement |
Implement a feature or change via Codex |
/cc-suite:review-plan |
Send a plan to Codex for architectural review |
/cc-suite:bug-analyze |
Root-cause analysis for a failing test or error |
/cc-suite:verify |
Verify that a fix or implementation is correct |
/cc-suite:cancel |
Cancel a running Codex job |
/cc-suite:continue |
Continue a previous Codex thread by ID (Codex threads only — Grok/agy resume via their own commands' --resume) |
/cc-suite:result |
Show the output of a completed job |
/cc-suite:status |
Show active and recent delegation jobs |
/cc-suite:codex-preflight |
Check Codex CLI availability and list available models |
/cc-suite:agy-preflight |
Check Antigravity CLI availability, authentication, models, and workspace MCP parity |
/cc-suite:agy |
Delegate a bounded prompt directly to Antigravity CLI with shared job tracking |
/cc-suite:grok-preflight |
Check Grok Build readiness (binary, auth, models) — fast and local, no network |
/cc-suite:grok |
Delegate a bounded prompt to Grok Build over ACP with shared job tracking |
/cc-suite:qwen-preflight |
Check local Qwen Code readiness without sending a model prompt |
/cc-suite:qwen-review |
Run a bounded, read-only Qwen critique with exact-file policy, strict completion, verified hashes, and limited resume |
/cc-suite:setup |
Manage the stop-time review gate |
/cc-suite:refresh-knowledge |
Update the Claude Code conventions skill from latest docs |
When Codex has claude-code registered in .codex/config.toml, it can invoke these skills to delegate tasks back to Claude:
| Skill | Invocation | What it does |
|---|---|---|
claude-review |
$claude-review |
Delegate a code review to Claude. Returns structured findings by severity. |
claude-plan |
$claude-plan |
Ask Claude to produce an implementation plan. Returns numbered steps with file paths. |
claude-implement |
$claude-implement |
Delegate an implementation task to Claude. Claude makes the file changes directly. |
claude-debug |
$claude-debug |
Send a bug or failing test to Claude for root-cause analysis and fix. |
All delegation calls include a provenance disclosure so Claude evaluates the work with full rigor rather than deferring to it.
Codex model selection is dynamic: /cc-suite:codex-preflight reads the local Codex model
catalog, excludes review-only entries from the default, and prefers the catalog's
latest marker followed by the newest model version. No model name is hardcoded in
the plugin, so a Codex catalog refresh automatically moves the default forward.
/cc-suite:init extends this to the project config: by default it writes the policy
value latest into .cc-suite.md (re-resolved via preflight by every command that
goes through the shared model selection), and only writes a concrete model slug when
you explicitly choose to pin one. If a pinned model later disappears from the catalog,
model-selecting commands warn, recommend the current default, and offer to repair the
config line; /cc-suite:diagnose flags the same stale pin with a one-line fix. Configs
generated by older cc-suite versions contain a resolved slug, which is now read as a
deliberate pin — edit the Default model line to latest to switch to tracking.
Beyond delegation, the claude-code MCP server also lets Codex read Claude's session history directly (no skill needed — these are plain MCP tools Codex discovers automatically):
| Tool | What it does |
|---|---|
claude_code_sessions |
List Claude Code sessions, newest first. Scoped to the current repo by default; pass all_projects: true to list every project on the machine. Returns session_id, title, first prompt, git branch, and timestamps. |
claude_code_transcript |
Read a full session transcript by session_id (from claude_code_sessions). |
Privacy note: reading a transcript surfaces that conversation's content to Codex (and thus to OpenAI). Session listing is repo-scoped by default;
all_projects: truewidens it to every project on the machine.
Claude Code ──── codex-cli MCP ────► Codex CLI
(audit, implement, │
review-plan, etc.) │ claude-code MCP (claude-octopus)
▼
Claude Code
(review, plan,
implement, debug)
The Codex→Claude path delivers claude-octopus via npx -y at runtime — no pre-install. The Claude→Codex path uses the Codex CLI's own built-in MCP server (codex mcp-server), so it needs the codex binary on PATH. Each side reuses its host CLI's existing login — no separate credentials.
| What | How |
|---|---|
| Instructions | AGENTS.md → CLAUDE.md (@AGENTS.md); Codex and agy read AGENTS.md directly |
| Skills | .agents/skills/ → ../.claude/skills/ symlink (Codex + agy workspace skills) |
| Hooks | .claude/settings.json (5 shared events) → .codex/hooks.json |
| MCP parity | .mcp.json entries → .codex/config.toml [mcp_servers.*] + .agents/mcp_config.json |
| Codex MCP | codex-cli entry in .mcp.json (via mcp_codex.sh) |
| Claude MCP | claude-code entry in .codex/config.toml (via mcp_claude.sh) and .agents/mcp_config.json (via bridge_mcp.sh) |
Not bridged:
- Rules. Claude's
.claude/rules/*.mdand Codex's.codex/rules/*.rulesare semantically incompatible. Put shared intent inAGENTS.md. - Subagents. Schema and security fields differ per tool. Use Skills with explicit
$nameinvocation for portability. - Google legacy files. Existing
GEMINI.mdand.gemini/content is not deleted automatically. Migrate it deliberately, then use/cc-suite:unbridgeonly for generated/bare legacy artifacts.
All scripts are safe to re-run:
AGENTS.mdis never overwritten if it already exists.CLAUDE.mdis only rewritten when its current content is a bare@AGENTS.mdimport..agents/skillssymlink is only created if the path doesn't already exist as a real directory..codex/hooks.jsonis only modified when it carries the cc-suite marker; user-owned files are left alone..codex/config.tomlMCP entries use sentinel blocks; manual entries outside are never touched..agents/mcp_config.jsonis refreshed only when its cc-suite provenance file is present; user-managed configs are refused rather than overwritten.
/cc-suite:status checks these and prints exactly what to add:
- Project trust.
.codex/config.toml, hooks, and rules only activate after Codex marks the project trusted. On a fresh clone, run Codex once and accept the trust prompt — or add[projects."<abs-path>"] trust_level = "trusted"to~/.codex/config.toml. plugin_hooksflag. Plugin-bundled hooks need[features] plugin_hooks = truein~/.codex/config.toml.- AGENTS.md size. Codex silently truncates at 32 KiB. Status warns when the limit is exceeded.
your-repo/
├── AGENTS.md ← edit this; all tools pick it up
├── CLAUDE.md → @AGENTS.md
├── .cc-suite.md ← audit/implement settings
├── .mcp.json ← codex-cli MCP server + project servers
├── .gitignore ← includes cc-suite sentinel block
├── .claude/
│ └── skills/
│ ├── cc-suite/
│ │ ├── claude-code-conventions/ ← Codex convention knowledge
│ │ ├── claude-review/ ← delegate review to Claude
│ │ ├── claude-plan/ ← delegate planning to Claude
│ │ ├── claude-implement/ ← delegate implementation to Claude
│ │ └── claude-debug/ ← delegate debugging to Claude
│ └── <your-skills>/
├── .cc-suite/
│ ├── agents/ ← your advisor agents; commit these
│ ├── provenance ← what init created; local, ignored
│ └── original-claude.md ← pre-bridge CLAUDE.md backup; ignored
├── .agents/
│ ├── skills → ../.claude/skills/ ← symlink; Codex + agy read here
│ └── mcp_config.json ← generated from .mcp.json; ignored by default
└── .codex/ ← only when Codex is one of the bridges
├── config.toml ← Codex config + project MCP servers
│ including claude-code (claude-octopus)
├── prompts/.gitkeep
└── hooks.json ← (if hooks were bridged)
Only the bridges you picked at init are written. A Claude-only project has no
.codex/ at all — cc-suite's own bookkeeping lives in .cc-suite/, never in
another tool's directory.
agy reads AGENTS.md natively. Workspace skills and MCP servers live under
.agents/; global settings remain under ~/.gemini/ when intentionally shared.
ISC