Skip to main content

Call Claude Code from Codex for bounded, independent code review and second opinions

Project description

cc-plugin-codex

Ask Claude Code for an independent code review or second opinion, straight from Codex.

cc-plugin-codex is review-only: Claude reviews, critiques, and advises. It does not edit your code, run shell commands, or get write tools. It is the mirror image of openai/codex-plugin-cc, which lets Claude call Codex.

Quickstart

You need:

  • Codex
  • the claude CLI, installed and authenticated
  • uvx
  • git

Check the basics:

claude --version
claude /login
uvx --version
git --version

Add this repository as a Codex marketplace, then install the plugin from it:

codex plugin marketplace add briandconnelly/cc-plugin-codex
codex plugin add cc-plugin-codex

Restart Codex after installing. Then ask Codex:

Ask Claude to run claude_status.

claude_status is free. It checks whether the claude CLI is installed, authenticated, and compatible, and shows the defaults a paid call would use.

Distribution

The Codex plugin install path is the primary user-facing path. The bundled MCP config pins the server to a versioned Git tag so installed users update deliberately.

The Python package publishes the MCP server entry point for direct use and release provenance. After a PyPI release, the server can also be launched with:

uvx --from cc-plugin-codex==0.1.4 cc-plugin-codex-mcp

Use it

Once claude_status reports ready: true, ask Codex in plain language:

Ask Claude to review my current diff. Pass workspace_root as this repository.

Passing workspace_root matters. It keeps reviews pointed at your project instead of the plugin install directory when the MCP client does not provide a repo root.

Other useful prompts:

  • "Ask Claude to review my staged changes for security issues."
  • "Have Claude attack this plan for weaknesses."
  • "Get an independent second opinion from Claude on this design."
  • "Start a background Claude review of this branch against main."

Codex uses the plugin skill to choose the right tool and arguments. Direct MCP calls are also available:

Tool Use Cost
claude_review_changes Review a git diff now paid
claude_review_changes_async Start a background diff review paid
claude_adversarial_review Pressure-test a plan, claim, or change paid
claude_ask Ask for a free-form second opinion paid
claude_status Check readiness and defaults free
claude_review_dry_run Preview diff/context before a review free

Diff review scopes are working_tree, staged, and branch.

claude_review_changes({
  "workspace_root": "/absolute/path/to/your/repo",
  "scope": "staged",
  "focus": "security"
})

For a long review, launch it in the background:

claude_review_changes_async({
  "workspace_root": "/absolute/path/to/your/repo",
  "scope": "branch",
  "base": "main"
})

Poll with claude_job_status, then fetch the result with claude_job_result.

Safety and cost

  • Paid tools run Claude and send code or prompts to Anthropic, billed through your existing claude login or ANTHROPIC_API_KEY.
  • Free tools only inspect local state, preflight a request, or manage background jobs.
  • Claude never receives write or Bash tools from this plugin.
  • access=toolless is the default: Claude receives gathered context as text and cannot read more files. access=readonly lets Claude use Read, Grep, and Glob for extra context.
  • Secret redaction is best-effort defense in depth. Use access=toolless when a workspace may contain secrets.
  • max_budget_usd is a best-effort Claude CLI stop threshold, not a hard cap. Results report actual spend in meta.cost_usd when available.
  • Reviews default to effort=xhigh for depth. Lower effort to high or medium for routine reviews when cost matters.

If a requested diff scope has no changes, the review tools return a passing result without invoking Claude.

Common knobs

Every setting is optional. These are the knobs most users are likely to change:

Variable Default Purpose
CC_PLUGIN_CODEX_ACCESS toolless toolless or readonly
CC_PLUGIN_CODEX_CLAUDE_CONFIG inherit inherit, scoped, or bare
CC_PLUGIN_CODEX_EFFORT xhigh low, medium, high, xhigh, or max
CC_PLUGIN_CODEX_MAX_BUDGET_USD 1.00 best-effort per-call budget threshold
CC_PLUGIN_CODEX_MODEL unset Claude model; unset uses the CLI default
CC_PLUGIN_CODEX_TIMEOUT_SECONDS 180 per-call timeout, clamped to 10-600 seconds
ANTHROPIC_API_KEY unset required only for config_mode=bare

Set these in the environment you launch Codex from. The bundled MCP config forwards the common cost, safety, model, timeout, and API-key variables to the server.

config_mode=inherit uses your normal Claude environment without persisting a session. scoped drops user-global settings and user MCP servers but keeps CLAUDE.md. bare strips CLAUDE.md, memory, and hooks, and requires ANTHROPIC_API_KEY.

Troubleshooting

Start with:

Ask Claude to run claude_status.

Then:

  • If claude_authenticated is false, run claude /login.
  • If the workspace looks wrong, pass workspace_root explicitly.
  • If a review is large or expensive, run claude_review_dry_run first.
  • If a background job id is lost, use claude_job_list.
  • If config_mode=bare fails, confirm ANTHROPIC_API_KEY is set in the environment that launches Codex.

Advanced reference

Every tool returns a structured ok/error envelope. Paid results include usage metadata and cost when the Claude CLI reports it. The tool contract is experimental and pre-1.0; clients can pin meta.fingerprint to detect agent-visible changes.

The Claude CLI compatibility assumptions are centralized in src/cc_plugin_codex/cli_contract.py and documented in COMPATIBILITY.md.

Local development

Run the MCP server from a checkout:

codex mcp add cc-plugin-codex -- uv run --directory "$(pwd)" cc-plugin-codex-mcp

Run tests:

uv run pytest

The full suite enforces a 95% coverage floor. For one-file iteration:

uv run pytest tests/test_jobs.py --no-cov

Live Claude integration tests are excluded by default:

uv run pytest -m integration --no-cov

They require the claude CLI and make a small paid API call.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cc_plugin_codex-0.1.4.tar.gz (161.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cc_plugin_codex-0.1.4-py3-none-any.whl (44.5 kB view details)

Uploaded Python 3

File details

Details for the file cc_plugin_codex-0.1.4.tar.gz.

File metadata

  • Download URL: cc_plugin_codex-0.1.4.tar.gz
  • Upload date:
  • Size: 161.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cc_plugin_codex-0.1.4.tar.gz
Algorithm Hash digest
SHA256 8813723dfa11c2bbbe69b7e798cc101d5c9881a2fa1bc78db005837dcb21eb82
MD5 da94f6657947d6c30eefd859422967db
BLAKE2b-256 d41b5eb32ed5b3e010fdc1f080df79f62668892b1bb6a90008f7a06552f3246a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_plugin_codex-0.1.4.tar.gz:

Publisher: publish.yml on briandconnelly/cc-plugin-codex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cc_plugin_codex-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for cc_plugin_codex-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8e6c97e93f1d1835055473dc863e7cefcc7896aa43609436b2bb7e3a37d19bda
MD5 a319a1457d278714e11047bdeab36329
BLAKE2b-256 826d581568e607bcdd9de2ab418c3e94ca68d897efe3e14071ab0dfa787714f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_plugin_codex-0.1.4-py3-none-any.whl:

Publisher: publish.yml on briandconnelly/cc-plugin-codex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page