An open-source plugin that runs inside Codex and lets you use Claude Code and Claude models for review, rescue, and tracked background workflows.
$ npx -y skills add sendbird/cc-plugin-codex --agent claude-code
Repo: sendbird/cc-plugin-codex
What's inside
cc-plugin-codex turns Codex into a host for Claude Code work.
Codex stays in charge of the thread. Claude Code does the review and rescue work.
You get seven commands ($cc:review, $cc:adversarial-review, $cc:rescue, $cc:status, $cc:result, $cc:cancel, $cc:setup) that launch tracked Claude Code work, manage lifecycle and ownership, and surface results back into Codex.
That includes:
$cc:result <job-id>It follows the shape of openai/codex-plugin-cc but runs in the opposite direction.
Install from the Sendbird marketplace:
codex plugin marketplace add sendbird/codex-marketplace
codex plugin add cc@sendbird
Then install cc from the Sendbird marketplace inside Codex, and run $cc:setup once.
cc-plugin-codex uses Codex native plugin hooks. The active plugin copy lives under Codex's plugin cache, and hook commands resolve through $PLUGIN_ROOT; there is no separate local checkout install.
The optional npx helper runs the same marketplace/cache install path and enables the required Codex feature gates:
npx cc-plugin-codex install
On Windows, prefer the Sendbird marketplace path or the npx helper. The shell-script helper below is POSIX-only.
Codex CLI's official guidance still treats Windows support as experimental and recommends a WSL workspace for the best Codex experience. Claude Code supports both native Windows and WSL.
Prerequisites: Node.js 18+, Codex with hook support, and
claudeCLI installed and authenticated. If you don't have the Claude CLI yet:npm install -g @anthropic-ai/claude-code && claude auth login
Open Codex and run:
$cc:setup
All checks should pass. If any fail, $cc:setup tells you what to fix.
If setup adds the marketplace-qualified plugin-data root and legacy migration roots to the writable-root list, restart Codex and rerun the same command; a requested review-gate toggle waits for that restart.
$cc:review --background
That launches a Claude Code review from a Codex-managed background flow. You can check on it immediately:
$cc:status
$cc:result
When it finishes, Codex should nudge you toward the right result. If not, $cc:status and $cc:result are always the fallback.
| Command | What It Does |
|---|---|
$cc:review | Read-only Claude Code review of your changes |
$cc:adversarial-review | Design-challenging review β questions approach, tradeoffs, hidden assumptions |
$cc:rescue | Hand a task to Claude Code β bugs, fixes, investigations, follow-ups |
$cc:status | List running and recent Claude Code jobs, or inspect one job |
$cc:result | Open the output of a finished job |
$cc:cancel | Cancel an active background job |
$cc:setup | Verify installation, auth, hooks, and review gate |
Quick routing rule:
$cc:review for straightforward correctness review of the current diff.$cc:adversarial-review for riskier config/template/migration/design changes, or whenever you want stronger challenge on assumptions and tradeoffs.$cc:rescue when you want Claude Code to investigate, validate by changing code, or actually fix/implement something.$cc:reviewStandard read-only review of your current work.
$cc:review # review uncommitted changes (default: opus)
$cc:review --base main # review branch vs main
$cc:review --scope branch # explicitly compare branch tip to base
$cc:review --background # run in background, check with $cc:status later
$cc:review --model sonnet # switch to sonnet
$cc:review --model fable # use Fable
$cc:review --model opus --effort xhigh # explicitly raise opus effort
Flags: --base <ref>, --scope <auto|working-tree|branch>, --wait, --background, --model <model>, --effort <low|medium|high|xhigh|max>
Defaults: model opus, and no effort at all. After trimming surrounding whitespace, the friendly aliases fable, opus, sonnet, and haiku are matched case-insensitively and canonicalized to lowercase; every other --model value passes through unchanged for Claude Code to resolve, including full model IDs and provider-specific names. --effort is forwarded only when you pass it, so each model keeps whatever effort Claude Code defaults to. Claude Code owns which effort levels each model supports, so check /model rather than assuming a level applies everywhere.
Model discovery: run /model in Claude Code to see the models and effort levels available to your current account and provider, then pass the selected alias or full ID to this plugin. The plugin intentionally does not maintain a static model catalog, a per-model effort table, or force [1m]; Claude Code owns alias versions, supported effort levels, managed restrictions, provider routing, and extended-context eligibility.
Scope auto (the default) inspects git status and chooses between working-tree and branch automatically.
In foreground, review returns the result directly. In background, the plugin uses a Codex built-in subagent, tracks the review as a job, and nudges you to open the result when it completes.
If the diff is too large to inline safely, the review prompt falls back to concise status/stat context and tells Claude to inspect the diff directly with read-only git diff commands instead of failing the run.
$cc:adversarial-reviewSame as $cc:review, but steers Claude to challenge the implementation β tradeoffs, alternative approaches, hidden assumptions.
$cc:adversarial-review
$cc:adversarial-review --background question the retry and rollback strategy
$cc:adversarial-review --base main challenge the caching design
Accepts the same flags as $cc:review, plus free-text focus after flags to steer the review.
Background adversarial review uses the same tracked built-in subagent pattern as $cc:review.
$cc:rescueHand a task to Claude Code. This is the main way to delegate real work β bug fixes, investigations, refactors.
$cc:rescue investigate why the tests started failing
$cc:rescue fix the failing test with the smallest safe patch
$cc:rescue --resume apply the top fix from the last run
$cc:rescue --background investigate the regression
$cc:rescue --model sonnet --effort medium investigate the flaky test
Flags:
| Flag | Description |
|---|---|
--background | Run in background; check later with $cc:status |
--wait | Run in foreground |
--resume | Continue the most recent Claude Code task |
--resume-last | Alias for --resume |
--fresh | Force a new task (don't resume) |
--write | Allow file edits (default) |
--model <model> | Any Claude Code model alias, full model ID, or provider-specific name; defaults to opus. Run /model in Claude Code to discover options available to your account and provider. |
--effort <level> | Reasoning effort: low, medium, high, xhigh, max. Unset by default, so the model keeps Claude Code's own effort default. Claude Code owns which levels each model supports. |
--prompt-file <path> | Read task description from a file |
Resume behavior: If you don't pass --resume or --fresh, rescue checks for a resumable Claude session and asks once whether to continue or start fresh. Your phrasing guides the recommendation β "continue the last run" β resume, "start over" β fresh.
Background rescue runs through a built-in Codex subagent. When the child finishes, the plugin tries to nudge the parent thread with the exact $cc:result <job-id> to open.
$cc:status$cc:status # list active and recent jobs
$cc:status task-abc123 # detailed status for one job
$cc:status --all # show all tracked jobs in this repository workspace
$cc:status --wait task-abc123 # block until job completes
By default, $cc:status shows jobs owned by the current Codex session. Use --all when you want the wider repository view across older or sibling sessions in the same workspace.
$cc:result$cc:result # open the latest finished job for this session/repo
$cc:result task-abc123 # show finished job output
When a job came from a built-in background child, the output can show both:
claude --resume ...To reopen the Claude Code session directly:
claude --resume <session-id>
$cc:cancel$cc:cancel task-abc123 # cancel a running job
$cc:setup$cc:setup # verify everything
$cc:setup --enable-review-gate # turn on turn-end review gate
$cc:setup --disable-review-gate # turn it off
Setup checks Claude Code availability, native plugin hook feature gates, and review-gate state. If Claude Code isn't installed, it offers to install it.
This is also the repair path for marketplace-installed copies of the plugin: $cc:setup confirms [features].hooks = true and [features].plugin_hooks = true, trusts this plugin's current native hook hashes, and allows sandboxed writes to Codex's injected marketplace-qualified plugin-data root plus the legacy roots needed for one-time migration. If those writable roots were just added, restart Codex and rerun setup before changing the review gate.
All review and rescue commands support --background. Background jobs are tracked per-session with full lifecycle management:
--background into the companion command itself.$cc:result <job-id>. If that nudge cannot surface cleanly, unread-result hooks are the backstop.
The nudge is intentionally just a pointer. The actual stored result still opens through $cc:result.$cc:status / $cc:result.$cc:status, $cc:result, and resume-candidate detection still follow the parent thread.Typical background flow:
$cc:rescue --background investigate the performance regression
# ... keep working ...
# Codex nudges with the exact result command when possible
$cc:result task-abc123
The review gate is an optional turn-end hook. When enabled, Codex runs a Claude Code review of the last Codex response before the turn is allowed to finish.
ALLOW: β the turn finishes normally.BLOCK: β the turn is blocked; Codex continues with the review feedback.Caveats:
$cc:setup --enable-review-gate.--model or --effort; set your preferred default in Claude Code if you want the gate to use a specific model or effort level.Only enable when you're actively monitoring the session.
| openai/codex-plugin-cc | This repository | |
|---|---|---|
| Host | Claude Code hosts the plugin | Codex hosts the plugin |
| Commands | /codex:review, /codex:rescue, β¦ | $cc:review, $cc:rescue, β¦ |
| Runtime | Codex app-server + broker | Fresh claude -p subprocess per invocation |
| Review gate trigger | End of Claude Code turn | End of Codex turn |
| Review gate target | Reviews previous Claude response | Reviews previous Codex response |
| Model flags | Codex model names and effort controls | Claude model names and effort values (low / medium / high / xhigh / max) |
$cc:result <job-id> instead of relying only on later polling.Add the marketplace:
codex marketplace add sendbird/codex-marketplace
Then install cc from the Sendbird marketplace inside Codex, and run:
$cc:setup
Marketplace/plugin install places the plugin under Codex's plugin cache. $cc:setup verifies Claude Code, confirms [features].hooks = true plus [features].plugin_hooks = true, and trusts the current hooks/hooks.json hook hashes from the active plugin cache.
npx cc-plugin-codex install
After install, run:
$cc:setup
The helper adds the Sendbird marketplace, installs cc through Codex app-server, enables native hook feature gates, and removes stale global hook entries from older installs.
curl -fsSL "https://raw.githubusercontent.com/sendbird/cc-plugin-codex/main/scripts/install.sh" | bash
After install, run:
$cc:setup
Re-run the marketplace update/install flow or the npx helper β both are idempotent.
npx cc-plugin-codex update
npx cc-plugin-codex uninstall
$cc:setup reports Claude Code not found
npm install -g @anthropic-ai/claude-code
claude auth login
Commands not recognized in Codex Re-run install and restart Codex. This plugin expects Codex plugin support and no longer installs local skill-wrapper fallbacks.
Hooks not firing
Check that hooks = true and plugin_hooks = true are set in ~/.codex/config.toml under [features]. Run $cc:setup to verify and auto-repair the feature gates plus this plugin's hook trust hashes, then restart Codex if those flags were just changed.
A background job finished but I did not get the result nudge Use:
$cc:status
$cc:result
The built-in notify path is best-effort. The tracked job store and unread hook remain the reliable fallback.
If you think the job may belong to an older session in the same repository, use:
$cc:status --all
If a finished result shows both a Claude Code session and an Owning Codex session, use the Claude Code session for claude --resume .... The owning session is there only to explain which Codex thread owns the tracked job.
Large review diff caused a failure or was omitted
That is expected on very large diffs. The plugin now degrades to a compact review context and points Claude toward read-only git diff commands instead of trying to inline everything. If you want the full picture, run a narrower review such as:
$cc:review --base main
$cc:review --scope working-tree
Review gate draining tokens
Disable it: $cc:setup --disable-review-gate. The gate can fire after every edit-producing turn, which adds up.
Background jobs not cleaned up
Jobs are terminated when the Codex session that owns them exits. If a session crashes without cleanup, use $cc:status and $cc:cancel <job-id> to clean up any leftovers.
Apache-2.0 β see NOTICE for attribution.
.codex-plugin/
plugin.json
.codexignore
.githooks/
pre-commit
.github/
dependabot.yml
workflows/
ci.yml
publish.yml
update-marketplace.yml
.gitignore
AGENTS.md
assets/
cc-plugin-codex-logo.svg
cc-plugin-codex-screenshot-1.png
cc-plugin-codex-screenshot-1.svg
cc-plugin-codex.png
cc-small.svg
social-preview.png
social-preview.svg
CHANGELOG.md
CLAUDE.md
eslint.config.mjs
hooks/
hooks.json
lib/
hook-input.mjs
host-origin.mjs
plugin-install-guard.mjs
session-lifecycle-hook.mjs
stop-review-gate-hook.mjs
unread-result-hook.mjs
internal-skills/
cli-runtime/
runtime.md
review-runtime/
runtime.md
task-prompt-shaping/
prompt-shaping.md
references/
official-guidance.md
LICENSE
NOTICE
package-lock.json
package.json
prompts/
adversarial-review.md
stop-review-gate.md
README.md
schemas/
review-output.schema.json
scripts/
check-changelog.mjs
check-version-sync.mjs
claude-companion.mjs
install-hooks.mjs
install.sh
installer-cli.mjs
lib/
args.mjs
changelog.mjs
claude-cli.mjs
codex-app-server.mjs
codex-config.mjs
codex-paths.mjs
fs.mjs
git.mjs
job-control.mjs
managed-global-integration.mjs
mcp-git.mjs
plugin-identity.mjs
process.mjs
prompts.mjs
render.mjs
review-worktree.mjs
state.mjs
structured-output.mjs
tracked-jobs.mjs
version-sync.mjs
workspace.mjs
local-plugin-install.mjs
setup-git-hooks.mjs
sync-plugin-version.mjs
uninstall.sh
SECURITY.md
skills/
adversarial-review/
agents/
openai.yaml
SKILL.md
cancel/
agents/
openai.yaml
SKILL.md
rescue/
agents/
openai.yaml
SKILL.md
result/
agents/
openai.yaml
SKILL.md
review/
agents/
openai.yaml
SKILL.md
setup/
agents/
openai.yaml
SKILL.md
status/
agents/
openai.yaml
SKILL.md
tests/
args.test.mjs
changelog.test.mjs
claude-cli.test.mjs
codex-config.test.mjs
codex-paths.test.mjs
e2e/
codex-skills-e2e.test.mjs
fs.test.mjs
git.test.mjs
hooks.test.mjs
install-hooks.test.mjs
installer-cli.test.mjs
integration/
claude-companion.test.mjs
job-control.test.mjs
mcp-git.test.mjs
plugin-identity.test.mjs
process.test.mjs
prompts.test.mjs
render.test.mjs
review-schema.test.mjs
review-worktree.test.mjs
sandbox-modes.test.mjs
skills-contracts.test.mjs
state.test.mjs
structured-output.test.mjs
tracked-jobs.test.mjs
unread-result-hook.test.mjs
version-sync.test.mjs
tsconfig.jsonFAQ
cc-plugin-codex is a Claude Code plugin with 7 hand-picked skills for agent orchestration work, indexed on Flowy. Install it with the command on its page. It includes adversarial-review, cancel, rescue. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.