我让 Claude 和 Codex 争辩,直到我的代码计划真正靠谱

我让 Claude 和 Codex 争辩,直到我的代码计划真正靠谱
作者:Aseem Shrey,发表于 2026 年 2 月 20 日
一个 Claude Code 技能:让 Claude 与 Codex 在迭代评审循环里对垒。3 轮,抓出 14 个问题,零人工投入。

TL;DR
一个 Claude Code 技能,会把你的实现计划发给 OpenAI Codex 评审。它们来回争论——Claude 修订,Codex 复审——直到 Codex 点头批准。通常 2–3 轮就会收敛。
安装: 1. 安装 Codex CLI:npm install -g @openai/codex 2. 把 SKILL.md 放到你项目里的 .claude/skills/codex-review/ 3. 当你有计划了,在 Claude Code 里运行 /codex-review
适用场景:涉及鉴权、数据模型、并发,或任何需要花好几天实现的计划。 不适用场景:简单 bug 修复、小改动,或当速度比彻底性更重要时。
结果:3 轮揪出 14 个问题(鉴权缺陷、shell 引号问题、schema 冲突、缺失并发处理等),把一份粗糙草案打磨成可上线的规格说明——我这边零人工评审。
我每天都在用 Claude Code。它规划功能、写代码、发 PR。但我一直遇到同一个问题:Claude 的计划是不错,可没人“挑战”它。没有第二意见。没有人去顶着它的架构盲区、遗漏的边界情况或安全缺口提出反驳。
所以我做了一个系统:让 Codex 来评审 Claude 的计划——并且双方来回交锋,直到 Codex 批准为止。
问题:单模型盲区
当你用同一个 AI 模型既规划又执行时,你会得到一份连贯却缺乏挑战的输出。模型不会跟自己争辩。它不会说“其实这个鉴权模型不完整”,也不会说“你的 shell 引号写炸了”。
我一次又一次地观察到这种模式:
-
看起来很扎实的计划,却根本没有鉴权模型
-
Shell 脚本里有引号 bug,会悄无声息地产生错误 payload
-
Schema 设计里存在相互冲突的状态字段
-
多智能体场景下完全没有并发处理
这些并不是 Claude 找不到的 bug——而是因为“规划者”和“评审者”是同一个实体。缺少对抗张力。
解决方案:/codex-review
我做了一个 Claude Code 技能——一个斜杠命令,用来触发 Claude 与 OpenAI 的 Codex CLI 之间的迭代评审回路。
工作原理
You: /codex-review
Round 1: Claude writes plan to temp file
→ sends to Codex (gpt-5.3-codex, read-only sandbox)
→ Codex reviews → VERDICT: REVISE (8 issues found)
Round 2: Claude revises plan addressing all feedback
→ resumes Codex session (preserves context)
→ Codex re-reviews → VERDICT: REVISE (6 items left)
Round 3: Claude revises again
→ resumes Codex session
→ Codex → VERDICT: APPROVED
关键洞见:Codex 运行在只读模式——它能读取你的代码库来获取上下文,但不能修改任何东西。而且因为我们在每一轮之间都恢复同一个 Codex 会话,它会记得自己之前说过什么,于是能核验那些问题到底有没有真的修掉。
前后对比
之前:单轮规划
我会让 Claude 规划一个功能。Claude 给出一个计划。我读一遍,可能会抓到一些点,然后就批准。但我不可能每次都发现 shell 脚本示例里的每个引号 bug,也不一定会注意到 schema 里同时存在 status 和 column 字段会导致漂移。
例子:我让 Claude 规划一个面向多智能体 swarm 的 “Mission Control” 仪表盘。初版计划里有:
-
Agent 写入端点没有任何鉴权
-
Shell 脚本里把 "$1" 放在单引号里(变量展开失效)
-
tasks 上同时有 status 和 column 字段(可能漂移)
-
内嵌 comment 数组无限增长(写入争用)
-
任务认领没有并发处理
-
测试完全靠手工
这些都是真实问题,实施时会烧掉好几个小时。
之后:跨模型迭代评审
同一份计划,但用 /codex-review 跑一遍:
第 1 轮——Codex 在鉴权、schema 设计、工具链和测试上找出 8 个问题。它引用了具体行号,并给出可执行的修复方案。
第 2 轮——Claude 修订后,Codex 还剩 6 项:租约认领不是原子操作、ACL 过宽、密钥轮换描述不充分、状态模型不一致。
第 3 轮——全部解决。Codex 批准。最终计划包含:
-
逐 agent 的 API key 鉴权,并在服务端推导身份
-
用强类型 CLI 工具替代脆弱的 shell 脚本
-
带乐观并发的原子租约认领
-
明确的 ACL 权限矩阵
-
带宽限期(grace period)的完整密钥轮换生命周期
-
复合索引支撑的两阶段搜索策略
-
全面的集成测试与安全测试
3 轮自动化。我的人工评审投入为零。计划从“演示级”变成了“可生产上线的规格说明”。
┌─────────────────────────────────────────────────────┐
│ Before vs After │
├──────────────────────┬──────────────────────────────┤
│ BEFORE │ AFTER │
│ Single-pass plan │ 3-round iterative review │
├──────────────────────┼──────────────────────────────┤
│ No auth model │ Per-agent API keys + ACL │
│ Broken shell scripts│ Typed CLI with retries │
│ Conflicting schema │ Single source of truth │
│ No concurrency │ Atomic claims + versioning │
│ Manual testing only │ Integration + security tests│
│ 0 issues caught │ 14 issues caught fixed │
└──────────────────────┴──────────────────────────────┘
设计决策
为什么用技能(skill),而不是 hook?
我不希望每个计划都被评审。大多数小改动不需要第二意见。技能(斜杠命令)是按需触发的——只有当风险足够高时我才会用它。
为什么要迭代,而不是一次性评审?
一次性评审能找出问题,但无法验证修复是否到位。迭代回路意味着:
-
Codex 找问题
-
Claude 修问题
-
Codex 验证修复确实有效
-
重复直到干净为止
这能抓住那类“修了一个又引入另一个”的问题。
为什么要恢复会话(session resume)?
Codex CLI 支持 codex exec resume session-id>,可以在保留完整上下文的情况下延续之前的对话。这意味着 Codex 在第 2 轮评审时会记得自己第 1 轮说过什么。它不会重新发现同一批问题——而是检查它们是否被解决了。
为什么要用 VERDICT 协议?
这个循环需要知道什么时候停。Codex 会在每次评审末尾用 VERDICT: APPROVED 或 VERDICT: REVISE 收尾。这样 Claude 就能明确地知道要继续修订,还是可以提交最终结果。出于安全考虑,最多 5 轮封顶。
并发安全
每次评审都会为临时文件生成一个 UUID(/tmp/claude-plan-uuid>.md),并用显式 ID 跟踪 Codex 会话。多个 Claude Code 实例可以同时运行 /codex-review,而不会互相踩踏。
技术实现
整个东西就是一个 Markdown 文件:.claude/skills/codex-review/SKILL.md。没有外部服务,没有基础设施。它只是一些指令,告诉 Claude 如何:
-
把计划写入临时文件
-
用评审提示词运行 codex exec -m gpt-5.3-codex -s read-only
-
解析 verdict
-
如果是 REVISE:更新计划,运行 codex exec resume session-id>
-
循环直到 APPROVED 或达到最多 5 轮
-
清理临时文件
这个技能复用现成能力——Claude Code 的工具执行,以及 Codex CLI 的会话管理。
我踩到的坑
-
codex exec resume 不支持 -o ——恢复时不能把输出重定向到文件。要改为捕获 stdout。
-
--last 并发不安全 ——恢复时要用显式 session ID,而不是 --last,否则并行评审会恢复到错误的会话。
-
Codex 需要明确的 verdict 指令 ——如果不给 VERDICT: APPROVED/REVISE 的明确要求,Codex 会给出细腻反馈,但不会给循环一个清晰停机信号。
何时使用
-
规划涉及鉴权、数据模型或多服务协同的功能
-
在批准一份需要花好几天实现的计划之前
-
想在写代码前做安全评审时
-
计划涉及并发、分布式系统或数据迁移时
不适用场景:
-
简单 bug 修复或小改动
-
你已经验证过方案的计划
-
当速度比彻底性更重要时
下一步
我在考虑:
-
按评审类型选择模型——安全评审用一个模型,架构评审用另一个
-
评审模板——不同类型的计划用不同提示词(API 设计 vs. 前端 vs. 基础设施)
-
评审历史——把评审结果持久化,方便回溯过往决策
但说实话,简化版就已经比我预期抓出更多问题了。两个前沿模型来回三轮,就能产出我真正敢信的计划。
这个技能就是一个文件,你可以丢进任何 Claude Code 项目里。去 GitHub Gist 把它拿下来,放到 .claude/skills/codex-review/SKILL.md,然后下次遇到一份值得被挑战的计划,就运行 /codex-review。
P.S.——是的,这篇博文也是用 Claude Code 写的。我让 AI 写了一篇关于让 AIs 互相争辩的文章。各位,我们已经穿过镜子,来到了另一边。

嘿!我是 Aseem Shrey。
const about_me = {
loves: CyberSec, Creating Stuff,
currently_reading: Dopamine Nation: Finding Balance in
the Age of Indulgence,
other_interests: [
Reading 📚,
IoT Projects 💡,
Running 🏃( Aim to run a full marathon ),
Swimming 🏊♂️
],
online_presence: HackingSimplified AseemShrey
};
Ping me up if you wanna talk about anything.