Claude Code + Codex 协作开发心得:Opus 顶层设计,Codex 执行,Claude Code 验收

把 Claude Opus 4.7、Codex、Claude Code 编成一条流水线:沟通确认与顶层设计交给 Opus,编码交给 Codex,最终验收和优化交给 Claude Code。这是我跑了一段时间后沉淀下来的协作心得。

一个模型再强,也只是一个工种。
真正的提效,是把对的模型放在对的环节,让它们各干各的擅长事。

最近一段时间,我逐渐把日常开发从「单点 AI」切换成了一条小型流水线:

  • Claude Opus 4.7:负责沟通确认、需求拆解、顶层设计
  • Codex:负责按设计写代码,把活干出来
  • Claude Code:负责跑代码、验收、查漏补缺、做最后的优化

跑了一阵之后,效率比之前用任何单一工具都要稳,体验也更接近「带团队」而不是「催一个工人」。这篇博文把这套思路和心得整理出来。


为什么不是「一个模型干所有事」

最朴素的想法是:用一个最聪明的模型把所有事都搞掉,省事。

但实际跑下来你会发现几个问题:

阶段用顶级模型用编码专精模型
沟通确认需求✅ 思考深、能反问❌ 容易直接动手
顶层设计✅ 全局视角强⚠️ 偏实现细节
写大量样板代码⚠️ 贵且未必更快✅ 又快又准
跑测试、做修复✅ 推理强、能闭环⚠️ 容易卡在表层错误
重构与优化✅ 看得见全局⚠️ 容易局部最优

结论很简单:

「思考」用 Opus,「执行」用 Codex,「闭环」用 Claude Code。

把三者拼起来,每一段都用它最擅长的方式,整条链路才会顺。


整体工作流

我现在的标准流程是这样的:

   用户需求
      │
      ▼
┌────────────────────────┐
│  ① Claude Opus 4.7     │   沟通 / 反问 / 顶层设计
│  - 澄清需求             │   产出:Spec + 架构方案
│  - 拆任务               │
│  - 写 Spec              │
└────────┬───────────────┘
         │ Spec / 设计文档
         ▼
┌────────────────────────┐
│  ② Codex               │   代码执行
│  - 按 Spec 写实现        │   产出:可运行的代码
│  - 覆盖基础测试           │
│  - 提交 PR / Patch       │
└────────┬───────────────┘
         │ 代码 / PR
         ▼
┌────────────────────────┐
│  ③ Claude Code         │   验收 + 优化
│  - 跑测试 / 修 bug       │   产出:可上线的版本
│  - 重构 / 性能优化        │
│  - 文档收口              │
└────────────────────────┘

三段之间,交付物是文本(Spec、Diff、Review),所以每一步都可以被人类回顾、修改和打回重做。这是这套流程最关键的一点。


① Claude Opus 4.7:先把事情想清楚

Opus 这一段我不会让它写代码,它的任务是「不让我直接写代码」

它该做的事

  • 反问澄清:把模糊的需求逼问到可以落地为止
  • 拆任务:把一个目标拆成几个可独立验收的子任务
  • 顶层设计:定模块边界、数据结构、关键接口
  • 写 Spec:用一份能直接交给 Codex 的文档收口

我常用的开场 Prompt 模板

我要做 XXX,背景是 YYY,目前已有 ZZZ。

请先不要写代码。
1. 列出你目前还不确定 / 需要我确认的问题,至少 5 条
2. 在我回答后,给我一份顶层设计:
   - 模块划分与职责
   - 关键数据结构 / 接口
   - 主要风险点与取舍
3. 最终把这些整理成一份 Spec,结构清晰,
   可以直接交给另一个 AI 按它来写代码

真实的好处

  • 少写错多写快 更重要。Opus 反问一轮,能在 5 分钟内挡掉 1 小时的瞎写
  • 强迫自己想清楚边界:很多需求在被反问的过程中,自己就修正了一遍
  • 得到一份可复用的 Spec:哪怕之后换个执行模型,Spec 也还在

心得:这一步不是为了让 AI 做更多事,是为了让你不犯方向性错误。


② Codex:让它专心干活

到了 Codex 这一步,事情应该已经很明确了。

我喂给它的,通常包括:

  1. 上一步的 Spec / 顶层设计文档
  2. 项目结构 + 关键代码(用来给它「下游约束」)
  3. 一句明确的产出要求,例如:
按上面的 Spec 实现模块 A 和模块 B。
- 不要改 Spec 之外的文件
- 实现完后给我一份变更清单
- 给关键函数补上最小可行的单元测试

为什么用 Codex 来做这一段

  • :基础代码、CRUD、样板、单测这种东西,它是真的快
  • 听话:在有 Spec 的前提下,它不太会「自由发挥」
  • 便宜:编码这种「重复劳动」用编码专精模型更划算

几个踩过的坑

  • 不要在没有 Spec 的情况下直接让它干:容易越写越偏
  • 一次别让它改太多模块:每次盯一个边界,review 更清晰
  • 测试要它一起写:基础测试不补,下一步 Claude Code 会非常痛苦

③ Claude Code:闭环 + 把代码「磨亮」

Codex 写完之后,事情还没结束。

代码能跑 ≠ 代码可上线。这一步交给 Claude Code,因为它擅长:

  • 真实地跑命令、看结果:测试、lint、type check、构建
  • 基于真实报错做修复:不是猜,是真的看 traceback
  • 从全局视角做优化:命名、抽象、错误处理、边界条件
  • 顺手写一点文档:README、注释、变更说明

我交接给 Claude Code 的方式

Codex 已经按 Spec 实现了 A 和 B 模块,PR / Patch 见上。

请你:
1. 把项目跑起来,确认基础链路 OK
2. 跑全部测试,修掉失败的用例
3. 检查实现是否真的对齐 Spec,列出偏差
4. 在不扩大改动范围的前提下,对:
   - 命名 / 抽象
   - 异常处理
   - 边界条件
   做必要的优化
5. 最后给我一份「这次变更做了什么 / 还有什么没做」

它的几个高价值动作

动作价值
真的跑测试把「看起来对」变成「真的对」
对照 Spec 找偏差防止 Codex 偷工减料
小步优化而非重写不破坏 Codex 的实现,只把粗糙处磨平
输出变更说明下次你回顾时不用从 0 看代码

心得:Claude Code 不是「再写一遍」,而是「把已经写好的版本送上线」。


一个真实的小例子

举一个最近的小活:给一个 Python 脚本加「热榜筛选 + 分类输出 + Markdown 报告」三个能力。

第一步:Opus 沟通

我只说了一句:

想给现在的 GitHub 热榜脚本加个「按主题筛选 + 自动分类 + 出一份 Markdown 报告」的能力。

Opus 回了我 6 个问题,包括:

  • 主题筛选是关键词匹配,还是用模型分类?
  • 分类粒度多细?是否要用户可配置?
  • Markdown 报告是按天聚合,还是每次运行覆盖?
  • 是否需要历史归档?
  • 失败时如何降级?
  • 与现有自动化 workflow 的接口怎么对齐?

我答完之后,它输出了一份 Spec:模块怎么分、配置怎么设计、关键函数签名、风险点列表、最小可行验收标准。

第二步:Codex 执行

我把 Spec 丢给 Codex,限定它只能改 scripts/ 下的几个文件,并补上单测。

它在不到一轮交互里给了我:

  • 一份按 Spec 拆好的实现
  • 一份配置模板
  • 三个最小单测

第三步:Claude Code 收尾

Claude Code 这一步做了:

  • 真实跑了脚本,发现「分类为空时报告会崩」
  • 修了边界条件
  • 把一个臃肿的函数拆成两个,命名也顺了一下
  • 给配置加了 schema 校验
  • 在 README 补了一段使用说明
  • 输出一份变更清单给我审

整体下来,我自己写代码的时间是 0,但每一步的关键决策我都参与了


关于「让谁补充」这件事

这套流程里,我自己其实有第四个角色:编辑 / 决策者。

每一段交付物(Spec、代码、Review),我都会快速过一遍,主要看三件事:

  1. 方向有没有跑偏(这是 Opus 阶段最该被人盯的)
  2. 实现有没有偷工(这是 Codex 阶段最容易出问题)
  3. 闭环有没有真的闭上(这是 Claude Code 阶段的底线)

如果某一步出了问题,我不会让它「再来一次」,而是回到最早能修的那一步。比如:

  • 代码写歪了,但 Spec 是清楚的 → 改 Codex 那一步
  • 代码写歪了,回头看 Spec 本身就含糊 → 退回 Opus 重新设计
  • 代码没问题,但跑起来不对 → 让 Claude Code 排查环境/集成

越早出错越便宜,越晚出错越贵。 三段式流水线最大的好处就是让你能定位到最早的出错点。


我踩过 / 想提醒的几个坑

  1. 不要让 Opus 直接写代码
    它能写,但代价很高,而且会让你失去「Spec 这一份资产」。把它当架构师用。

  2. 不要让 Codex 自己决定要不要写测试
    要在指令里明确写出来。基础单测的有无,直接决定第三步的成本。

  3. 不要让 Claude Code 重写
    它一旦开始「全局重构」,往往会破坏前两步的设计意图。要明确告诉它:最小改动,对齐 Spec

  4. 三段之间用「文档化交付物」对接
    Spec 是文本、代码是 Diff、Review 是清单。不要让中间状态只活在某个聊天窗口里,全部沉淀到仓库里。

  5. 保留人类的最后一次按键
    合并、上线、对外发布这种动作,永远留给自己。AI 跑得越自动,人类越要管住「最后一脚」。


总结

一句话版本:

Opus 想清楚 → Codex 写出来 → Claude Code 送上线,中间用 Spec 和 Diff 串起来。

更长一点的版本:

  • 把「沟通确认 + 顶层设计」这种需要全局视角的事,留给 Opus 4.7
  • 把「按计划执行 + 写基础代码 + 补基本测试」这种重复劳动,交给 Codex
  • 把「真实跑起来 + 修 bug + 小步优化 + 收口文档」这种闭环动作,交给 Claude Code
  • 自己只做三件事:定方向、看交付、按下回车

这套流程不是为了把人从开发里赶出去,而是为了让你每次出手都打在最有价值的那一拍上。


参考与延伸