Today let's share something that's perfect for combining two powerful tools.
There has always been a debate over which is better betweenClaude Code and Codex , but we're all adults here, so why make a choice? I want them all.
This GitHub project codex-plugin-cc was created precisely to resolve this debate. Once installed, you can run Codex inside Claude Code.
01. Project Introduction
codex-plugin-cc can be understood as: a bridge plugin that connects OpenAI Codex into Claude Code.
Project URL:https://github.com/openai/codex-plugin-cc
During use, Claude Code remains the main window, and Codex serves as a second coding agent invoked by Claude, used for code review, adversarial review, task delegation, and session transfer.
The plugin invokes the global codex command on your machine, that is, the local Codex CLI and Codex app-server.
Core Features:
/codex:review: lets Codex perform code review
The most commonly used review process has three steps:
/codex:review --background
/codex:status
/codex:result
The first command starts the Codex code review and runs it in the background.
/codex:status is used to check review progress.
After the task is complete, use /codex:result to view the results.
If you want to review all changes on the current branch relative to main, you can enter:
/codex:review --base main --background
- /codex:adversarial-review: lets Codex challenge the approach
Suitable for checking whether an approach holds up. Codex will focus on examining design trade-offs, hidden assumptions, boundary conditions, and failure modes.
- /codex:rescue: hand a task to Codex for investigation or fixing
Hand a specific problem over to Codex. Suitable for troubleshooting tasks: build failures, test failures, complex bugs, and continuing old tasks.
- /codex:transfer: transfer the Claude session to Codex to continue
Suitable when you've already discussed a lot of context in Claude Code and later want to switch to Codex App or Codex CLI to continue.
02. Project Hands-On Test
Installation is very simple. First, enter this in the Claude Code input box:
/plugin marketplace add
After the Add Marketplace dialog appears, fill in:
openai/codex-plugin-cc
After it's added successfully, go back to the Claude Code input box and enter:
/reload-plugins
Finally, enter:
/codex:setup
case 1 Code Review
First, let Claude Code build a new feature:
Prompt: add a feature to the current login page: after 3 consecutive authentication failures, disable the login button for 30 seconds and display the remaining seconds. Only incorrect username or password counts toward the failure count; network errors and server errors must not count. Requirements: add tests. Only modify necessary files, and do not commit yet.
Then we run:
/codex:review --background
Codex found two issues:
1. Permission issue in .claude/settings.local.json
.claude/settings.local.json:11 Bash(node *) grants approval-free execution permission for arbitrary Node scripts
2. Login lockout countdown issue
src/components/LoginForm.tsx:14 If the page has been open for some time before the third authentication failure, now still retains the value from when it was mounted, so the first lockout render may show an inflated countdown.
We can have Claude Code continue fixing it:
Prompt:
Fix the following issues based on the Codex review. Only modify necessary files, add or adjust tests, and after fixing, run npm test and npm run build. Do not commit.
Do not commit .claude/settings.local.json as part of this feature change. If it is only a local permission setting, restore the file to its state before this task.
Fix the lockout countdown issue in src/components/LoginForm.tsx: when the third authentication failure is triggered and lockoutUntil is set, now must be refreshed at the same time, ensuring that the first render countdown after the lockout starts begins at 30 seconds instead of using the old now value from when the page was mounted.
Then review it once more:
After the changes, the review found that the code might count the last authentication failure as the 3rd consecutive authentication failure.
Continue letting Claude Code fix it:
Prompt:
Fix the following issues based on the Codex review. Only change the necessary files, add or adjust tests, and after fixing run npm test and npm run build. Do not commit.
[P2] The counter should be reset after a non-authentication error — src/components/LoginForm.tsx:55
The current network or server error branch does not reset failCount. The sequence auth → auth → network → auth would incorrectly trigger a lockout, even though these four authentication failures are not consecutive. If the requirement is "3 consecutive authentication failures," then the counter should be reset on non-authentication errors, breaking the consecutive chain.
Review it once more:
Okay, the code review passed!
Case 2 challenge plan
Let's first have Claude Code implement adding a remember username feature to the login page:
Prompt: Add a "Remember username" feature to the current login page: after the user checks it, the next time the page is opened, automatically fill in the username from the last successful login; after unchecking it, clear the saved username. The requirements should consider the case where localStorage is unavailable, and add tests. Only modify the necessary files, and do not commit yet.
Then have Codex challenge the plan to see whether it is reliable:
/codex:adversarial-review
Codex's challenge review of Claude Code's plan found these issues:
- safeRemoveStorage swallows deletion failures
- The username is stored in localStorage for a long time
- claude/settings.local.json is mixed into the feature change
- localStorage is read twice during initialization
- safeSetStorage ignores save failures
- A username consisting only of spaces passes validation
- The saved_username key is too generic
- No test for the behavior when removeItem throws an exception
- No test for whether the user is given feedback when setItem fails to save
- No test for the case of "remember username checked + login failure," where the username should not be saved
- No test for the case where the stored value consists only of spaces and should not be initialized as a remembered username
- vi.stubGlobal('localStorage', …) is not cleaned up in afterEach, and may pollute other tests
We can continue having Claude Code improve based on these issues:
Prompt:
Fix the clear issues based on the Codex challenge review results. Only change the necessary files, add or adjust tests, and after fixing run npm test and npm run build. Do not commit.
Needs fixing:
- Do not mix .claude/settings.local.json into this feature diff. If it is only a local permission change, restore the file to its state before this task.
- Fix the privacy issue when unchecking "Remember username": safeRemoveStorage should not swallow removeItem failures. When removeItem fails, the UI must not pretend that clearing succeeded; it needs to show the user a clear error state, or keep the remember username checkbox checked.
- Fix the save failure issue: safeSetStorage should not be ignored. When the user checks "Remember username" and logs in successfully, but localStorage.setItem fails, there should be user-visible feedback.
- When initializing and reading localStorage, read it only once, so that the initial value of username and the rememberUsername state are both derived from the same read result, avoiding inconsistency.
- The username in storage needs to be trimmed before validation. Pure whitespace should not initialize as a remembered username.
- Change the localStorage key from saved_username to an in-app namespace, for example codex_login_lab.saved_username.
- Add an expiration time to "Remember username", for example a 7-day TTL. When saving, write { value, expiresAt }; when reading, if expired, clear it and treat it as no saved value.
- Add test coverage:
– Behavior when removeItem throws an exception
– User-visible feedback when setItem fails
– When "Remember username" is checked but login fails, the attempted username should not be saved
– When localStorage stores pure whitespace, it should not initialize as a remembered username
– The localStorage mock/stub needs afterEach cleanup to avoid polluting other tests
Perfectly solved, all 12 issues are fixed.
Case 3 issue delivery
When code written by Claude Code has problems, it can also be handed to Codex to fix.
We let Claude Code create a small bug to demonstrate this feature:
Prompt: To test the Codex rescue flow, please intentionally create a small bug in the current login page: after a successful login, no longer clear the password input box. Only change the business code, do not change the tests, and do not commit.
The bug has been created, and we'll add a test to catch it:
为"登录成功后清空密码输入框"补一个测试。只加测试,不改业务代码,不要提交。
Next, let Codex fix it:
1 /codex:rescue --background fix the failing test with the smallest safe patch
Codex made the correct minimal fix, very good:
const result = await login(username.trim(), password);
setPassword('');
setSuccessMessage(`欢迎回来,${result.displayName}`);
Case 4 session transfer
We just did a lot of things in Claude Code, which is perfect for transfer. Enter in Claude Code:
/codex:transfer
It will give us a session ID, and we can continue this conversation directly in Codex. Enter in PowerShell:
codex resume 019f402e-3ff0-7d42-975d-c88c8bf1e45f
As you can see, our entire conversation with Claude Code has been transferred over, and next we can use Codex to continue this project.
03. Dig a little
AI programming will not converge into an all-in-one tool.
Because real development is more like a business flow: review, fix, and release, and each step may be suitable for a different AI.
GitLab 2026 AI Accountability Report: 91% of organizations already use more than 2 AI coding tools at the same time, and 54% use more than 3.
This shows that the pain point of use has shifted from whether there is an AI tool to use, to whether they can be chained together.
Chaining Claude Code and Codex together is not for showing off, but so that after one AI writes the code, another AI reviews it.
codex-plugin-cc Let Claude Code handle the main conversation and implementation, and Codex handle second-perspective review, solution challenges, issue takeover, and session continuation. This combination can reduce many hidden costs in real development: repeatedly switching tools, re-explaining context, manually supplementing reviews, and re-locating problems after test failures.
For us,codex-plugin-cc it can be treated as an on-call code reviewer. After finishing a feature, let Codex take a look at boundary conditions, test gaps, and hidden risks; it is easier to find problems than staring hard at the diff yourself.
codex-plugin-cc It is not about asking developers to install one more tool, but about connecting two AI programming assistants into the same working environment.
In the future, AI writing code will become increasingly common. What truly creates the gap will be how these AI assistants are organized, so that code is more stable, review happens earlier, and delivery is faster.
Original link:GitHub raked in 27K Stars, using Claude Code and Codex together