Same family on both sides. Cheapest to reason about, weakest independence.两边同一家模型。最容易理解,独立性最弱。
One model builds. Another checks. Claude decides.一个模型执行,
另一个审查,
Claude 拍板。
A Claude Code skill that splits every task into slices, runs them with Claude or Codex, and verifies each review finding itself.一个 Claude Code skill:把任务拆成小块,交给 Claude 或 Codex 执行和审查,每条审查意见都由 Claude 亲自核实。
- Plan规划ClaudeRequirements and slices, approved by you需求和切片,由你批准
- Execute执行Claude / CodexOne slice, strict file scope, no commits一次一块,限定文件,不许提交
- Review审查Codex / ClaudeFresh context, read-only, JSON findings全新上下文,只读,输出 JSON
- Confirm确认ClaudeReproduce every finding, rerun tests, commit逐条复现,重跑测试,提交
Valid blocker or major finding: back to Execute with a Rework section. After two rounds it escalates to you.有成立的 blocker 或 major:带着返工清单回到执行。两轮之后交给你决定。
Why a second model, and why Claude has the last word为什么要换一个模型审查,又为什么由 Claude 最终确认
A model reviewing its own work tends to agree with itself. A different model catches different mistakes, but it also makes claims it cannot back up. So reviews are evidence, not verdicts.模型审查自己的产出,往往会认同自己。换一个模型能发现不同的错误,但它也会提出站不住的意见。所以审查结果只是证据,不是结论。
Everything goes through files一切通过文件交接
Executors and reviewers never see the conversation. Each slice gets a self-contained handoff; state lives on disk, so a crashed session can resume.执行者和审查者看不到对话。每个切片有一份自足的交接文件;状态写在磁盘上,会话崩溃后可以接着跑。
.colab/PLAN.md, STATE.md, tasks/Executors work in a fence执行者在围栏里工作
Only the files listed under "May modify". No git commands, no weakened tests. A task that needs more reports BLOCKED instead of improvising.只能改"可修改"清单里的文件,不许动 git,不许削弱测试。需要越界时报告 BLOCKED,而不是自作主张。
templates/worker-rules.mdReviews are structured审查结果是结构化的
Every finding needs a severity and quoted evidence. Codex output is schema-checked; Claude reviewers validate their JSON with the same script.每条意见都要有严重级别和原文证据。Codex 的输出用 schema 校验,Claude 审查者用同一个脚本自检。
schemas/review.schema.jsonConfirmation is never delegated确认环节从不外包
Claude reruns the verification commands, reproduces each finding, marks it VALID or INVALID, and adds anything the reviewer missed. Only then does it commit the files in scope.Claude 自己重跑验证命令,逐条复现意见,标记成立或不成立,并补上审查者漏掉的问题,然后才提交范围内的文件。
.colab/confirm/<slice>.r<N>.mdPick who executes and who reviews, per slice每个切片自选执行者和审查者
Cross-model combos are recommended. C fits slices the handoff fully specifies; B fits slices that need judgment or deep codebase context.推荐跨模型组合。交接文件写得足够清楚的切片用 C;需要判断力或深入理解代码库的切片用 B。
Claude builds with judgment; Codex hunts for what it got wrong.Claude 凭判断力实现,Codex 专门找错。
judgment-heavy重判断Codex follows a tight spec; Claude reviews with the whole plan in mind.Codex 按严格规格执行,Claude 结合整体计划审查。
well-specified规格清楚Codex on both sides. Useful when Claude usage is the constraint.两边都是 Codex。适合 Claude 用量紧张的时候。
Tiers trade depth for cost档位决定深度和成本
Chosen per slice, mapped to models in config.json. Heavy and overkill add a second reviewer with a different focus.每个切片单独选,模型映射写在 config.json 里。重档和疯狂档会加第二个侧重点不同的审查者。
| tier档位 | Codex executesCodex 执行 | Codex reviewsCodex 审查 | Claude executesClaude 执行 | Claude reviewsClaude 审查 |
|---|---|---|---|---|
| light轻small, low-risk小而低风险 | luna · medium | sol · low | sonnet · low | opus · low |
| standard标准default默认 | luna · high | sol · medium | sonnet · medium | opus · medium |
| heavy重auth, migrations, core argument鉴权、迁移、论文核心论证 | sol · medium | sol · high ×2 | opus · medium | opus · high ×2 |
| overkill疯狂when a miss is very expensive; Fable needs extra credits漏掉问题代价极高时;Fable 需额外额度 | astra · medium | astra · medium ×2 | fable · medium | fable · high ×2 |
| test测试dry runs only仅用于演练 | luna · low | luna · low | haiku | haiku |
Execution and review can sit on different tiers, for example opus writes and sol reviews. Paper slices execute with a fixed stronger model on every tier except test. Codex models follow new releases: when Codex lists a newer model of the same family (luna, sol, astra), that one runs instead. Set codex.auto_latest to false in config.json to pin the exact names.执行和审查可以选不同档位,比如 opus 写、sol 审。论文切片除测试档外,一律用更强的固定模型执行。Codex 模型会自动跟进新版本:Codex 的模型列表里出现同一系列(luna、sol、astra)更新的型号时,就改用新的。在 config.json 里把 codex.auto_latest 设为 false 可以固定型号。
Why it calls the Codex CLI, not the Codex plugin为什么直接调用 Codex CLI,而不是用 Codex 插件
OpenAI's Codex plugin for Claude Code is built for handing Codex a task and getting its answer back. coClaudex uses Codex as one role in a pipeline, so codex_run.py runs codex exec directly.OpenAI 给 Claude Code 做的 Codex 插件,适合把一件事交给 Codex、拿回它的回答。coClaudex 要把 Codex 当成流水线里的一个角色,所以 codex_run.py 直接运行 codex exec。
| Codex plugin (rescue, defaults)Codex 插件(rescue,默认行为) | coClaudex via the CLIcoClaudex 调 CLI | |
|---|---|---|
| access权限 | write-capable可写 | executors workspace-write, reviewers read-only执行者 workspace-write,审查者 read-only |
| output输出 | stdout returned as is原样返回文本 | review JSON checked against a schema (--output-schema)审查按 schema 输出 JSON(--output-schema) |
| model模型 | left unset默认不指定 | model and effort set per tier from config.json, newest model of the same family按档位从 config.json 指定模型和思考强度,自动用同系列最新型号 |
| resume续跑 | the latest run接上最近一次 | the crashed run's own thread (--resume <thread_id>)按线程 ID 接回崩掉的那一次(--resume <thread_id>) |
| records记录 | - | time and tokens per run (codex_run.py stats), watchdog for stalled runs每次运行的耗时和 token(codex_run.py stats),卡住时看门狗停掉 |
Different jobs: for a one-off "Codex, take a look at this", the plugin is the easier tool. Left column from the plugin's rescue instructions, version 1.0.6.两者用途不同:临时让 Codex 帮个忙,官方插件更顺手。左列依据官方插件 1.0.6 版的 rescue 说明。
One real run, both kinds of reviewer error一次真实运行,两种审查失误都出现了
Six slices on antigravity-mission-control, a Python CLI with 64 tests, merged upstream after CI passed. The full audit trail is public.在 antigravity-mission-control(一个带 64 个测试的 Python CLI)上跑了六个切片,CI 通过后已合并进主线。完整审计记录公开可查。
Every run is metered每次运行都有计量
codex_run.py stats from that run, trimmed. About 36 minutes of agent time over 20 runs.这次运行的 codex_run.py stats 输出,有删节。20 次运行,代理总耗时约 36 分钟。
run role backend model secs outcome 01-parse-duration.r1 exec codex gpt-6-luna/high 82 PARTIAL 01-parse-duration.r1 review claude opus/medium 62.7 pass <- missed 01-parse-duration.r2 exec codex gpt-6-luna/high 64 PARTIAL 02-status-filter.r1 review claude opus/medium 64.6 pass 03-prune.r1 exec claude opus/medium 121.1 DONE 03-prune.r1 review codex gpt-6-sol/medium 66 fix 03-prune.r2 review codex gpt-6-sol/medium 78 fix <- over-strict
tests passing, 39 of them new个测试通过,其中 39 个是新增的
Six commits, each confirmed by rerunning the suite and the CI checks locally, then merged as a pull request.六个提交,每个都在本地重跑全套测试和 CI 检查后才确认,最后合并为 PR。
Too lenient: tests CI would never run太宽松:CI 根本不会运行的测试
The reviewer called pytest-style tests a style nit. CI runs unittest without pytest, so 14 new tests would silently never run. Confirmation caught it.审查者把 pytest 写法的测试当成风格问题。CI 用的是不装 pytest 的 unittest,14 个新测试会悄悄不运行。确认环节抓到了它。
A miss on a delete command删除命令里的漏网之鱼
A job in cancel_failed may still have a live worker, yet prune treated it as finished. Neither reviewer raised it; the orchestrator did.cancel_failed 状态的 job 可能还有活着的进程,prune 却把它当成已结束。两位审查者都没提,编排者提了。
Too strict: three findings downgraded太严格:三条意见被降级
Round 2 raised symlink races rated blocker. Checked against the threat model, a private 0700 job root, they became minor follow-ups, with reasons on file.第 2 轮提出的软链接竞态被标成 blocker。对照威胁模型(0700 的私有目录)核实后降为 minor,理由都记录在案。
Read the whole trail完整审计记录
Plan, handoffs, reviewer JSON, every VALID or INVALID decision, and the patches.计划、交接文件、审查 JSON、每一条成立或不成立的裁定,以及补丁。
Open the example查看示例Install as a plugin作为插件安装
Two commands inside Claude Code, then restart it once. Then ask for coClaudex in any git repository.在 Claude Code 里输入两条命令,然后重启一次。之后在任意 git 仓库里让它使用 coClaudex 即可。
- Claude Code
runs the orchestrator and the Claude subagents运行编排者和 Claude 子代理 - Codex CLI
logged in, for combos B, C and D已登录,用于 B、C、D 组合 - git, Python 3
the runner uses the standard library only运行脚本只依赖标准库
/plugin marketplace add YuxiaoMa66/coclaudex /plugin install coclaudex@coclaudex
# example
coclaudex: add rate limiting to the API.
Plan it in slices and let me pick who writes and who reviews.