CLAUDE CODE PLUGIN OPEN SOURCE

Code in stereo.
Ship with confidence.

Claude plans. Codex challenges. Claude builds. Codex gates the diff. You decide what ships.

  • Apache-2.0
  • Durable background jobs
  • Per-role model choice

The pair workflow

  1. 01 · PLAN

    Claude drafts the plan

    A contained planner explores the repository read-only. claude:fable-5.1

  2. 02 · CHALLENGE

    A second model challenges assumptions

    Adversarial review through bounded revision rounds. codex:astra-6

  3. 03 · BUILD

    Claude builds and verifies in a contained session

    The delta is built and tested before the review gate — in any-language repos. claude:opus-5.5

  4. 04 · GATE

    A fresh reviewer gates the diff

    The gate runs outside the session. codex:astra-6

You decide what ships

Built with itself — planned, challenged, built, and gated with Claudex Stereo.

The reviewed plan and its findings persist across phases.

Self-review is not independent review.

A model reviewing its own plan reads its own work generously — same context, same blind spots, same assumptions. Claudex Stereo makes disagreement the default: plans are drafted by one contained model and attacked by another, and implementations pass a fresh gate, independent of the orchestrating session, before you ever look at a diff.

Review loops are bounded and visible. They consume real usage on both sides — control time and spend with --max-plan-rounds and --max-fix-rounds, and route any role to a different model with one flag. See model routing and the deliberate boundaries.

Plan. Challenge. Build. Gate.

/stereo:plan drafts a plan and runs a bounded adversarial review loop toward approval. By default, /stereo:implement builds that plan behind a session-independent review gate. /stereo:quick collapses both commands into one for small tasks.

  claude — ~/dev/api
> /stereo:plan add rate limiting to the public API
◆ planner claude:fable-5.1 — claude-fable-5-1 · drafting (read-only)…
◆ plan-reviewer codex:astra-6 — gpt-6-astra · round 1: needs-revision · 3 findings
◆ plan-reviewer codex:astra-6 — round 2: approve
✓ plan stored — run /stereo:implement

> /stereo:implement
◆ implementer claude:opus-5.5 — claude-opus-5-5 · 14 files changed
◆ implementer-run tests ✓ · static checks ✓
◆ implementation-reviewer codex:astra-6 — gpt-6-astra · acceptable · 0 fixes
✓ done — nothing committed; review and commit yourself
Schematic session. Every role shown is a flag away from a different model — Claude, Codex, or a third-party provider through your own Codex configuration.

Built for real repository work.

Contained sessions, durable state, and honest gates: the mechanics under the pair workflow.

Fifteen commands, one namespace.

The pair workflow, tournament mode, both review styles, Codex delegation, session transfer, background jobs, setup, and workspace diagnostics. Every command is documented in depth in the README.

Every role is a flag.

One addressing convention on both sides. claude:<family> runs the newest Claude version the plugin knows as a headless Claude Code session, and claude:opus-4.8 pins one; claude:session keeps a planner or reviewer inline. Everything else runs on the Codex runtime: a family from your Codex catalog (codex:sol, or codex:sol-5.6 for one version), a raw model id, or a third-party alias. The defaults run at xhigh, and /stereo:config changes any role’s model or effort per workspace.

Planner
Plan reviewer
Implementer
Implementation reviewer
> /stereo:plan <task>
> /stereo:implement

Amber chips route to Claude, cyan to the Codex runtime. The codex: prefix is optional in commands, and tool output prints the exact ids launches pass (codex:astra-6 runs gpt-6-astra, claude:opus runs claude-opus-5-5). Flags matching the defaults are omitted, so the default selection is just the two bare commands. The implementer defaults to a contained claude:opus-5.5 session, which builds and tests its own changes inside the working tree; on either runtime the implementer starts fresh and never resumes the plan reviewer's thread or session. claude:session is not offered for the implementer — Claude writes always run in a contained session. Trust a third-party provider with implementation work only after a small --plan-reviewer codex:<alias> round.

View the default model matrix
Default model and version for each pair role, the model it runs, and its effort
Role Default (plan, implement, quick) Runs Effort
Planner claude:fable-5.1 Fable 5.1 (claude-fable-5-1) xhigh (version default)
Plan reviewer codex:astra-6 GPT-6 Astra (gpt-6-astra) xhigh (version default)
Implementer claude:opus-5.5 Opus 5.5 (claude-opus-5-5) xhigh (version default)
Implementation reviewer codex:astra-6 GPT-6 Astra (gpt-6-astra) xhigh (version default)

FAQ

Do I need a separate Codex account?

No — the plugin uses your local Codex CLI sign-in. If you have not used Codex yet, sign in once with a ChatGPT account or an API key; a configured custom provider and its environment key can satisfy runtime authentication instead. /stereo:setup checks readiness. More →

Does it run a separate Codex runtime?

No — it delegates through the same local Codex CLI and app server you would use directly: same install, same authentication, same repository checkout. More →

Will it use my existing Codex config and API keys?

Yes — it picks up your config.toml, sign-in method, and any custom base-URL setup unchanged. More →

Install Claudex Stereo.

> /plugin marketplace add vsladkov/claudex-stereo
> /plugin install stereo@claudex-stereo
> /reload-plugins
> /stereo:setup

Requires Claude Code with plugin support, Node.js 24+, a signed-in Codex CLI or a configured custom provider — /stereo:setup checks runtime readiness, authentication, provider configuration, sandbox state, and the review gate. The default pipeline also needs Claude Code 2.1.281 or newer, logged in, because Claude roles run as headless claude -p sessions. Anything OpenAI-backed counts against your Codex usage limits. Details under requirements.

Something not working? Run /stereo:setup first, then see troubleshooting — thread reservations, sandbox prerequisites, and per-role escape hatches.

A safe first run

> /stereo:review --background
> /stereo:status
> /stereo:result

A read-only review of your current work: it runs on Codex and counts against Codex usage, while /stereo:status and /stereo:result read local job state and consume no model budget.