已发布资料基础官方资料 + 个人实践
·18 分钟AI 工具实践
文章/AI 与智能体

Codex 工作流:Explore → Plan → Code → Verify → Review

Codex 系列第 7 篇:把一次真实任务拆成 Explore、Plan、Code、Verify、Review 五个阶段,给出可复制的任务 checklist、Prompt 模板和验收方法。

文章目录
  1. 这篇解决什么问题
  2. 一分钟速览
  3. 怎么使用这篇
  4. 先收藏这版短模板
  5. 1. 为什么不能只说“直接开始写”
  6. 2. 五阶段工作流总览
  7. 一份合格的中间输出应该长这样
  8. 3. Explore:先让 Codex 读懂现场
  9. Explore 阶段的好输出
  10. 4. Plan:计划不是作文,是控制范围
  11. 5. Code:让 Codex 做最小可解释改动
  12. Code 阶段的暂停点
  13. 6. Verify:验证不是跑一个命令截图
  14. 7. Review:接受之前要读 diff
  15. Review 不是把责任交给 AI
  16. 8. 一套完整任务模板
  17. 9. 用第 6 篇的真实发布过程举例
  18. 10. 不同任务怎么调整五阶段
  19. 修 bug
  20. 加功能
  21. 写技术文章
  22. 资料调研
  23. 11. 什么时候用 Plan mode,什么时候用 Goal mode
  24. Goal mode 不是必经的第六阶段
  25. 12. 什么时候可以跳过某些阶段
  26. 13. 常见反模式
  27. 反模式 1:把探索和实现混在一起
  28. 反模式 2:计划没有验收标准
  29. 反模式 3:验证只说“通过”
  30. 反模式 4:不读 diff
  31. 反模式 5:让多个 Codex 任务改同一片文件
  32. 14. 把工作流写进 AGENTS.md
  33. 15. 30-60 分钟练习
  34. 第一步:只做 Explore
  35. 第二步:让它给 Plan
  36. 第三步:让它 Code
  37. 第四步:让它 Verify
  38. 第五步:让它 Review
  39. 收藏清单
  40. 资料来源
阅读提要

Codex 系列第 7 篇:把一次真实任务拆成 Explore、Plan、Code、Verify、Review 五个阶段,给出可复制的任务 checklist、Prompt 模板和验收方法。

#Codex#Agent#工作流#代码审查#验证

这是 Codex 系列的第 7 篇。

前面几篇已经讲了几个基础件:

  • 第 4 篇:先让 Codex 读懂项目,不要一上来就写 Prompt。
  • 第 5 篇:用目标、上下文、约束、验收标准组织 Prompt。
  • 第 6 篇:把反复出现的项目规则沉淀到 AGENTS.md

到这里,一个新问题会出现:即使 Prompt 写清楚了,AGENTS.md 也写了,真实任务仍然可能失控。

原因很简单:真实项目里的任务不是“一问一答”,而是一段工程过程。Codex 会读文件、搜索、推断、编辑、跑命令、检查结果,再根据结果继续下一步。你如果只给一句“帮我实现”,它也会自己组织过程,但这个过程是否可靠、是否可复盘、是否容易验收,就很依赖运气。

我现在更愿意把一次 Codex 任务拆成五段:

text
Explore -> Plan -> Code -> Verify -> Review

这不是为了把使用方式变复杂,而是为了把不确定性分层处理。先确认现场,再决定方案;先做小改动,再验证;最后读 diff,而不是看到“完成了”就接受。

整理日期:2026-07-12。本文涉及 Codex 工作流、Plan mode、Goal mode、Prompting、验证、Review pane 和 Worktree,主要参考 OpenAI Codex 官方文档,并结合这个博客项目和前面几篇文章的实践整理。

文章类型资料核对适合读者可带走产物
Codex 实用教程已核对 OpenAI Codex 官方文档与当前桌面端术语已经会让 Codex 改代码,但过程经常不可控、难验收的人五阶段工作流、完整任务模板、阶段检查表和真实案例

产品说明:截至 2026-07-12,Codex 的桌面编码体验已经进入 ChatGPT 桌面应用。为避免每段都写很长,本文仍用“Codex app”简称桌面应用里的 Codex 项目与 Review pane。

这篇解决什么问题

读完这篇,你应该能带走四样东西:

产物用来解决什么
五阶段工作流把一次 Codex 任务从“聊天”变成可验收流程
阶段检查表每一步知道该让 Codex 输出什么
真实任务模板修 bug、加功能、写文章、资料调研都能直接套
Review 清单在接受改动前检查 diff、测试、风险和下一步

这篇的重点不是让你每次都机械地走完五步。小任务当然可以合并步骤。但只要任务开始涉及多个文件、线上行为、数据迁移、权限、安全、发布、用户可见页面,我建议至少在心里过一遍这五个阶段。

图 1:Explore、Plan、Code、Verify、Review 组成一轮可回查的 Codex 工作流;Review 后可以带着反馈回到下一轮 Explore(本文整理)图 1:Explore、Plan、Code、Verify、Review 组成一轮可回查的 Codex 工作流;Review 后可以带着反馈回到下一轮 Explore(本文整理)

一分钟速览

  • Explore -> Plan -> Code -> Verify -> Review 是本文整理的工程工作模型,不是 Codex 强制执行的五个内置状态。
  • Explore 负责减少未知,Plan 负责收住范围,Code 负责产生最小 diff,Verify 负责给证据,Review 负责决定是否接受。
  • 小任务可以合并阶段;一旦涉及多文件、用户数据、权限、远端写入或发布,阶段应该拆得更清楚。
  • 内置 Plan mode 适合复杂或模糊任务;长期、多轮且需要持续迭代的任务,可以在当前界面支持时再考虑 Goal mode。
  • 这篇最值得收藏的是开头的短模板、第 8 节的完整任务模板、第 9 节的真实案例,以及文末检查清单。

怎么使用这篇

这篇不需要顺序背诵。先根据你手里的任务,跳到最能解决当前问题的位置。

你现在的问题建议先看哪里
Codex 总是太快开始改文件第 1、3、4 节
想直接复制一套完整 Prompt开头短模板和第 8 节
不知道测试到什么程度才够第 6、7 节
想看这套方法如何用于真实博客任务第 9、10 节
不确定该用 Plan mode、Goal mode 还是普通 Prompt第 11、12 节
想并行多个任务又怕互相覆盖第 13 节

边界说明:五阶段的价值是让过程可检查,不是增加仪式。普通 Prompt 也能完成这套流程;Plan mode、Goal mode、/review 和 Worktree 是在合适场景下帮助执行的产品能力,不要把它们和五个阶段一一对应。

先收藏这版短模板

如果你现在没时间读完整篇,可以先把下面这段存起来。它适合大多数中等复杂度任务:

text
请按 Explore -> Plan -> Code -> Verify -> Review 完成这个任务。

Explore:先只读,不改文件;找相关文件、数据流、命令、Git 状态和风险。
Plan:给最小计划;明确改什么、不改什么、怎么验收。
Code:按计划小步修改;不做无关重构;遇到计划外风险先停。
Verify:运行最小相关检查;给命令、结果、失败原因和替代证据。
Review:自查 diff;列出风险、无关改动、人工重点检查点。

任务是:
[写清楚你要完成什么]

Done when:
[写清楚什么结果算完成]

这段模板不是为了显得正式,而是为了强制 Codex 留下中间证据。读者真正能带走的不是这五个英文词,而是一种节奏:先看清现场,再改;先验证,再接受。

1. 为什么不能只说“直接开始写”

很多失败的 Codex 任务,不是因为模型不会写代码,而是因为它太快进入了实现。

比如你说:

text
帮我修一下后台文章列表的分类下拉框,感觉有 bug。

这句话看起来很自然,但里面至少有几件事没说清楚:

没说清楚的地方Codex 可能怎么猜
“后台”对应哪个项目当前目录、另一个源码目录、线上后台、浏览器里打开的页面
“分类下拉框”是哪一层问题前端状态、接口返回、数据库分类、样式遮挡、权限问题
能不能改数据库可能会动 schema、种子数据、远端 D1
怎样验证修好了本地页面能点、线上页面能点、保存后刷新还在、分类计数正确
现有未提交改动怎么办可能误把用户改动一起纳入 diff

Codex 的优势是它能主动探索。但探索本身也需要边界:先只读、先复现、先报告发现,再决定是否改。

所以我会把“直接开始写”改成:

text
先不要改文件。请只读检查后台文章列表的分类下拉框:
1. 找到相关页面、组件、API 和数据来源;
2. 判断问题可能出在前端状态、接口、数据库还是样式;
3. 给出最小修复计划和验证步骤;
4. 等我确认后再改。

这就是 Explore 和 Plan 的价值:让 Codex 在动手前,把它看到的世界先摆出来。你不一定每次都要手动确认,但至少要让它有机会把关键假设说出来。

OpenAI Codex 官方最佳实践里也有相同方向的建议:复杂或模糊任务先让 Codex 做计划;Prompt 里写清目标、上下文、约束和完成标准;不要停在“改完了”,还要让它测试、检查和 review。

示例说明:第 1-4 节用“后台分类下拉框”贯穿讲解,里面的文件路径、API 和测试命令是结构示例,不代表当前博客源码。真正使用时,应先让 Codex 从 package.json、README、CI 配置和现有测试里确认准确命令,不要照抄示例执行。

2. 五阶段工作流总览

我会这样理解这五段:

阶段核心问题Codex 应该输出什么人需要做什么
Explore现场是什么相关文件、数据流、命令、风险、未知项判断它有没有读对项目
Plan准备怎么做小步骤、改动范围、验证方式、回滚点砍掉不必要范围
Code实际改什么小而集中的 diff盯住边界,不要让它顺手重构
Verify怎么证明有效命令结果、复现结果、截图、日志、失败原因判断验证是否足够
Review是否接受diff 说明、风险、剩余问题、下一步读 diff、提反馈、决定是否提交

如果只记一句话,我会记这个:

text
Explore 降低未知,Plan 降低范围,Code 产生 diff,Verify 提供证据,Review 决定接受。

一份合格的中间输出应该长这样

只让 Codex “按流程做”还不够,你还要知道每一阶段的输出是否合格。否则它可能只是换一种方式说“我会努力完成”。

我会用下面这张表判断:

阶段不合格输出合格输出
Explore“我会检查相关文件”列出具体文件、数据流、命令、Git 状态、未知项
Plan“先分析再修改再测试”每一步写清改哪些文件、不改哪些范围、怎么验证
Code“我优化了实现”说明每个小 diff 对应哪个计划步骤
Verify“测试通过”给出命令、结果、关键输出、不能验证的部分
Review“没有问题”按范围、回归、边界、测试缺口逐项自查

一个比较好的中间输出会长这样:

text
Explore 结果:
- 相关文件:app/admin/posts/page.tsx、components/admin/category-select.tsx、app/api/categories/route.ts
- 数据流:页面加载 -> 请求 categories API -> 下拉组件根据返回数组渲染选项
- 当前 Git 状态:components/admin/category-select.tsx 有用户未提交改动,暂不覆盖
- 最小验证:打开 /admin/posts,展开分类下拉;保存后刷新确认分类仍然存在
- 未知项:线上后台是否和本地代码同版本,需要后续确认

如果 Codex 的输出没有具体文件、具体命令、具体风险,就不要急着让它进入下一步。先让它补现场。

3. Explore:先让 Codex 读懂现场

Explore 阶段的目标不是让 Codex 写方案,而是让它建立项目地图。

我一般会要求它做这些事:

检查项具体看什么
当前目录是不是在正确 repo,是否有多个工作区
Git 状态是否有用户未提交改动,哪些文件已经脏了
入口文件页面、组件、API、命令、配置分别在哪里
数据流输入从哪里来,状态在哪里变,输出怎么保存
验证命令最小可用的 test、lint、typecheck、dev server
风险边界哪些文件不能碰,哪些命令需要确认

OpenAI 的版本控制建议是:能做到时,先在独立分支上工作,并让 git status 保持干净,这样 diff 更容易隔离和回滚。如果现实里已经有未提交改动,Explore 至少要明确列出这些文件,并把“保留用户改动”写进边界。

一个可复制的 Explore Prompt:

text
先进入 Explore 阶段,不要改文件。

目标:
我要解决:[一句话描述任务]

请你只读检查:
1. 当前 repo 的结构和相关目录;
2. 与这个任务最相关的文件、组件、API、测试;
3. 现有 Git 状态,哪些改动可能不是你做的;
4. 可以用来验证的最小命令;
5. 你目前还不确定的地方。

输出格式:
- 项目地图
- 相关文件列表
- 初步判断
- 风险和未知项
- 建议进入 Plan 阶段的下一步

这个 Prompt 的关键是“不要改文件”。它会把 Codex 从“马上解决”切到“先读懂”。

Explore 阶段的好输出

我会期待它输出类似这样:

text
项目地图:
- app/admin/posts/page.tsx:文章列表页面
- components/admin/post-category-select.tsx:分类下拉组件
- app/api/categories/route.ts:分类 API
- lib/db/posts.ts:文章和分类查询

初步判断:
- 下拉框显示“未分类”但没有选项,可能不是样式问题;
- 需要检查 API 返回值和前端状态初始化;
- 目前没有证据说明需要改数据库 schema。

验证入口:
- npm run test:run -- category
- npm run build
- 手动访问 /admin/posts,打开分类下拉,确认选项可见并可保存。

如果 Explore 阶段只输出“我会修复这个问题”,那还不够。它需要告诉你:它准备在哪里动手、为什么那里最可能相关、怎么证明不是乱猜。

4. Plan:计划不是作文,是控制范围

Plan 阶段最容易写成空话。

不好的计划长这样:

text
我会分析问题,修改代码,测试功能,确保正常。

这跟没计划差不多。

好的计划应该让你能判断三件事:

  1. 改动范围是不是太大。
  2. 验证方式是不是足够具体。
  3. 一旦失败,是否知道怎么停下来。

我常用的计划表:

步骤要改什么不改什么验证方式风险
1修正分类 API 返回字段不改 DB schema接口返回含 id/name/slug字段名可能被其他页面依赖
2修正下拉组件状态初始化不重写 UI 组件库页面打开有分类选项登录态、本地数据不同
3增加最小回归测试不扩展无关测试指定测试通过测试环境可能没有 D1 mock
4手动验证后台保存不发布线上刷新后分类保持后台 session 可能过期

Plan Prompt 可以这样写:

text
基于刚才 Explore 的结果,请进入 Plan 阶段。

请给我一个最小修复计划:
1. 每一步要改哪些文件;
2. 明确哪些文件和行为不改;
3. 每一步怎么验证;
4. 如果验证失败,下一步如何定位;
5. 哪些地方需要我确认后才能继续。

计划要偏工程执行,不要写泛泛的“分析、修改、测试”。

OpenAI 文档里提到,对于复杂、模糊或难描述的任务,可以使用 Plan mode,让 Codex 先收集上下文、提出问题、形成更强的计划。当前可以通过 /plan 或 Shift+Tab 切换到 Plan mode。我的经验是:当任务涉及多个模块、数据库、登录态、部署或线上验证时,先 plan 一下往往比事后救火省时间。

5. Code:让 Codex 做最小可解释改动

进入 Code 阶段之后,要警惕一个现象:Codex 很容易“顺手变好”。

它可能在修一个 bug 的同时:

  • 重命名一批变量;
  • 顺手整理样式;
  • 抽一个新 hook;
  • 改掉无关函数;
  • 重新格式化整个文件;
  • 更新一堆依赖。

有时候这很好,但多数时候会增加 review 成本。你本来只想修一个分类下拉框,最后得到一个 800 行 diff,很难判断哪一行是真正必要的。

我会在 Code 阶段加这几条约束:

text
开始实现。

约束:
1. 只做计划里的最小改动;
2. 不做无关重构、样式重写、依赖升级;
3. 如果发现计划不成立,先停下来说明,不要扩大范围;
4. 保留已有用户改动,不要回滚你没有创建的改动;
5. 每完成一个小步骤,说明改了什么和为什么。

这里的重点不是限制 Codex 能力,而是把 diff 做成可理解的证据链。工程里真正让人放心的不是“它改得多”,而是“我知道它为什么只改这些”。

Code 阶段的暂停点

我希望 Codex 在这些情况下暂停,而不是硬做:

情况应该怎么处理
找不到用户描述的问题先报告复现失败和已经检查的路径
需要改数据库 schema先给迁移方案和回滚方案
测试环境缺依赖说明缺什么、是否能用替代验证
发现更大的架构问题区分本次最小修复和后续重构建议
遇到未提交用户改动说明冲突文件,避免覆盖

这也是为什么我不喜欢一开始就说“自动完成直到成功”。Agent 有自主性很好,但自主性需要停靠点。

6. Verify:验证不是跑一个命令截图

Verify 阶段的目标是回答一句话:

text
我们有什么证据说明这次改动真的完成了?

证据可以是不同层次的:

验证层级适合场景例子
静态检查类型、格式、明显错误npm run lintnpm run typecheck
单元测试纯逻辑或函数行为指定 test file
集成测试API、数据库、组件联动跑相关路由或服务测试
手动复现UI、登录态、浏览器交互按步骤操作并截图
线上验证发布、缓存、远端资源页面 200、图片 200、数据库状态

不是每个任务都需要全套验证。一个文案修正可能不需要跑完整测试;一个数据库迁移则不能只看页面能打开。

我会让 Codex 在 Verify 阶段输出这四类信息:

text
验证结果:
1. 已运行命令:
   - 命令、结果、关键输出
2. 手动验证:
   - 操作路径、观察结果、截图或日志
3. 未能验证的部分:
   - 原因是环境缺失、权限不足,还是任务本身不适合自动验证
4. 剩余风险:
   - 哪些情况还需要人工确认

一个可复制的 Verify Prompt:

text
进入 Verify 阶段。

请按最小充分原则验证刚才的改动:
1. 先运行与本次改动最相关的测试或检查;
2. 如果是 UI 或后台交互,启动本地页面并按复现步骤验证;
3. 如果某个验证不能跑,请说明原因,并给替代证据;
4. 最后用表格列出:验证项、命令/步骤、结果、是否通过。

不要只说“已测试”,要给出具体命令、结果和剩余风险。

这里有个小判断:如果 Codex 说“无法验证,因为环境不支持”,这不是失败,但也不是通过。它应该继续给你替代验证方案,比如读测试、跑更小范围命令、检查生成结果、给出人工验证路径。验证失败也不是坏事,坏的是把没有验证包装成已完成。

7. Review:接受之前要读 diff

Review 是很多人最容易省略的一步。

看到 Codex 说“完成了,测试通过”,人很容易直接合并。但在真实项目里,Review 至少要看四类东西:

Review 项你要确认什么
范围diff 是否只包含本次任务需要的文件
行为改动是否真的对应问题,而不是掩盖问题
回归是否破坏已有 API、数据结构、样式和边界条件
可维护性命名、结构、错误处理、测试是否能被以后的人理解

ChatGPT 桌面应用里的 Codex Review pane 可以直接查看 Git 仓库改动。官方文档特别提醒:默认视图基于项目的 Git 状态,不只包含 Codex 自己改的内容,也可能包含你或其他工具留下的未提交改动。如果只想看最近一轮 Codex 产生的变化,可以切到 Last turn 视图。这一点在共用工作区时尤其重要。

我会在接受前让 Codex 做一次自 review:

text
进入 Review 阶段。

请站在代码审查者角度检查这次 diff:
1. 是否有无关改动;
2. 是否有潜在回归;
3. 是否有未处理的边界条件;
4. 测试是否覆盖了真正风险;
5. 哪些地方需要人工重点看。

请按严重程度列出 findings。没有问题也要明确说没有发现,并说明剩余风险。

在桌面应用或 CLI 中,也可以用 /review 触发专门的 review。当前桌面端可以选择对 base branch 做 review,或 review 未提交改动;在 CLI 里还可以在命令后追加关注点,例如 /review Focus on edge cases and security issues。我的建议是:写代码和找问题至少要分成两个明确阶段,让 Codex 真正切换到审查视角。

Review 不是把责任交给 AI

这一点要说清楚:Codex review 很有用,但它不是你不用看 diff 的理由。

我更愿意把它当成两件事:

  1. 帮我先扫一遍明显 bug、边界和测试缺口。
  2. 帮我把注意力集中到最值得人工看的地方。

最终是否接受、是否发布、是否提交,还是人的决定。尤其是涉及权限、支付、投资数据、用户隐私、数据库迁移、线上部署时,Agent 的“看起来合理”不能替代人工验收。

8. 一套完整任务模板

下面这段可以直接复制,用在中等复杂度任务上:

text
我想让你按 Explore -> Plan -> Code -> Verify -> Review 的工作流完成这个任务。

任务:
[一句话说明要完成什么]

背景:
[相关页面、功能、错误、截图、日志、用户反馈]

约束:
1. 不要做无关重构;
2. 不要覆盖已有用户改动;
3. 涉及危险命令、迁移、发布、远端写入时先停下来确认;
4. 保持现有项目风格和命名;
5. 如果发现任务描述不成立,先报告,不要硬改。

Done when:
1. [可观察结果 1]
2. [可观察结果 2]
3. [测试或检查通过]
4. 最后输出改动摘要、验证结果、剩余风险。

流程要求:
1. Explore:先只读检查项目地图、相关文件、验证入口,不改文件;
2. Plan:给出最小实现计划和风险,计划要具体到文件和验证;
3. Code:按计划做小步改动,发现计划不成立就暂停;
4. Verify:运行最小充分验证,说明命令、结果、失败原因或替代证据;
5. Review:自查 diff,列出问题、风险和人工重点检查点。

如果任务非常小,可以把 Explore 和 Plan 合并:

text
先快速确认相关文件和最小计划,再实现。不要做无关改动,完成后运行最小验证并 review diff。

如果任务非常大,反而应该拆成多轮:

text
这一轮只做 Explore 和 Plan,不实现。等计划确认后,再开下一轮实现第一阶段。

不要迷信一次 Prompt 走完全程。工程任务最稳的方式往往是分段推进。

9. 用第 6 篇的真实发布过程举例

这套流程不是只适合修代码。第 6 篇《AGENTS.md:Codex 项目说明书》的发布过程,就是一个刚发生在这个博客里的完整案例。

当时的任务看起来很简单:review 草稿,没问题就发布。如果直接把它理解成“把 draft 改成 false 再部署”,文章确实能上线,但几个真正影响读者的问题会一起漏过去:

  • AGENTS.override.md 的同目录替代语义没有说透;
  • Rules 仍属实验能力,正文却没有提醒;
  • SVG 底部的反馈文字被后绘制的卡片遮住;
  • 桌面首屏标题只把最后一个“书”字挤到第二行;
  • 文件检查通过,不代表页面在手机和桌面上都好读。

实际执行时,五个阶段留下了这样的证据:

阶段实际动作留下的证据
Explore读取草稿、项目规则、SVG 源码和 Codex 官方文档找到事实边界、旧日期、override 表述和 SVG 绘制顺序问题
Plan把任务拆成正文修订、配图修复、静态检查、浏览器验收、部署回读明确先改内容和图,再验证,不直接发布
Code修改 Markdown 与 SVG,保持其他文章和页面不动diff 只落在文章及其配图
Verify跑内容检查和 ESLint,再用真实浏览器检查桌面、手机和配图静态检查零警告;浏览器额外发现标题孤字换行
Review重读关键事实和模板,部署后请求文章页、首页、列表、RSS 与图片所有线上资源返回 200,新标题和新 SVG 已命中

如果要把这次任务写成一条可复制 Prompt,我会这样写:

text
请 review 系列第 6 篇草稿;只有达到发布标准后才发布。

Explore:
- 读取文章、配图、项目 AGENTS.md 和当前官方资料;
- 找出事实错误、过期信息、读者难以操作的段落和视觉风险。

Plan:
- 只修改文章和直属配图;
- 明确需要补的模板、边界说明和验证步骤。

Code:
- 保持技术笔记风;
- 不改其他文章,不做无关页面重构。

Verify:
- 运行内容检查与 lint;
- 用真实浏览器检查桌面和手机首屏、目录、表格与图片。

Review:
- 从读者角度判断是否值得收藏;
- 核对官方事实、链接、frontmatter 和剩余风险;
- 发布后回读文章页、首页、文章列表、RSS 和图片资源。

Done when:
- 读者能直接带走模板和检查清单;
- 页面没有文字孤行、图片遮挡或移动端溢出;
- 所有检查通过,线上关键资源返回 200。

这个案例让我更确定一件事:Verify 不能只等于“命令退出码是 0”。内容检查能发现 frontmatter 和资源引用问题,浏览器才能发现标题换行和图片布局问题,线上回读才能确认部署与缓存真的更新。不同证据解决的是不同层的问题。

10. 不同任务怎么调整五阶段

五阶段不是固定仪式。不同任务里,每一步的权重不同。

修 bug

修 bug 最重要的是 Explore 和 Verify。

你要让 Codex 先复现或解释为什么无法复现,再让它改。否则它可能只是根据症状猜一个补丁。

推荐 Prompt:

text
先复现或定位 bug,不要直接修。

请输出:
1. 复现路径;
2. 相关文件和数据流;
3. 最可能根因和排除掉的原因;
4. 最小修复计划;
5. 修复后如何证明这个 bug 不再出现。

加功能

加功能最重要的是 Plan 和 Review。

功能需求容易膨胀,Codex 也容易顺手设计一个更大的系统。你要把 MVP、非目标、验收标准写清楚。

推荐 Prompt:

text
这次只实现最小可用版本。

请先给计划:
- 新增哪些入口;
- 改哪些数据结构;
- 哪些边界暂不支持;
- 如何测试主路径;
- 哪些后续优化不放进本次 diff。

写技术文章

写文章也可以用这套工作流,只是 Code 阶段变成 Draft。

工程阶段写作阶段
Explore搜集资料、读参考、列事实
Plan文章大纲、读者问题、产物
Code写初稿
Verify查链接、查事实、查图片
Review从读者角度审稿

这也是这组 Codex 教程现在的写法:先调研,再写教程,再 review 是否值得收藏,最后发布。

比如我要写一篇新的 Codex 教程,可以这样发:

text
请按 Explore -> Plan -> Draft -> Verify -> Review 写一篇 Codex 教程草稿。

主题:
权限与安全:Sandbox、Approval、危险命令怎么管。

Explore:
- 先核对 OpenAI Codex 官方文档;
- 区分官方事实、社区经验和我的个人实践;
- 列出读者最容易踩坑的问题。

Plan:
- 给出文章大纲;
- 每一节说明解决什么读者问题;
- 确保至少有一个可带走产物,比如危险命令清单或权限决策表。

Draft:
- 写成技术笔记风;
- 不要营销式标题;
- 用真实项目例子说明。

Verify:
- 检查官方链接、术语、日期、图片引用和 frontmatter;
- 标注不确定或可能随版本变化的说法。

Review:
- 从读者角度判断:读完是否能在 30-60 分钟内完成一个安全配置练习;
- 如果不能,指出需要补的模板、表格或例子。

这个例子和写代码的差别不大:Explore 仍然是找事实,Plan 仍然是控制结构,Draft 仍然是产出,Verify 仍然是检查证据,Review 仍然是站在读者或维护者角度挑问题。

资料调研

资料调研最容易的问题是“看起来很完整,但证据不足”。所以 Explore 阶段要明确资料源,Verify 阶段要检查引用。

推荐 Prompt:

text
请先做 research note,不要直接写文章。

要求:
1. 区分官方资料、社区经验、个人判断;
2. 每条关键结论给来源链接;
3. 对不确定或过期风险高的说法标注日期;
4. 最后再给文章可用的大纲。

11. 什么时候用 Plan mode,什么时候用 Goal mode

先分清三件容易混在一起的东西:本文的 Plan 阶段是一种工作习惯,普通 Prompt 就能执行;内置 Plan mode 是让 Codex 在编辑前专门调查、提问和产出方案的产品能力;Goal mode 则用于需要多轮持续推进的目标。它们不是同一个概念。

不是每个任务都需要内置 Plan mode。

我会用这个判断:

任务类型是否建议先 Plan
改一行文案通常不需要
修一个可复现的小 bug可以快速 Explore 后直接改
多文件功能建议
数据库迁移强烈建议
涉及权限、安全、支付、发布强烈建议
需求还很模糊建议先让 Codex 采访你
不知道怎么拆任务建议

官方文档把 Plan mode 放在“复杂任务先计划”的位置。我自己的理解是:Plan mode 最适合把“我要什么”还没说清楚的阶段变成对话,而不是让 Codex 边猜边改。

一个很实用的说法是:

text
先不要实现。请你采访我,直到你能把需求改写成有目标、上下文、约束和验收标准的任务单。

这句话对模糊需求很有用。很多时候,真正省时间的不是 Prompt 写得漂亮,而是先承认自己也没想清楚。

Goal mode 不是必经的第六阶段

在当前界面提供 Goal mode 时,可以先用 /plan 把方案谈清楚,再用 /goal 定义一个需要 Codex 持续推进的结果。普通的单轮改动不需要为了“高级”而启用它。

一个可靠 Goal 通常要写清六件事:

要素要回答的问题
Outcome最终什么状态必须成立
Verification surface用测试、基准、报告还是产物证明
Constraints哪些行为不能退化
Boundaries可以使用哪些文件、工具、数据和资源
Iteration policy每轮之后怎样选择下一步
Blocked stop condition什么时候应该停止,并报告还缺什么

例如:

text
/goal 把这篇教程完善到可发布状态,以内容检查、桌面与手机渲染、线上回读作为证据;保持其他文章不变。每轮根据未通过的验证选择下一项修改。如果官方资料无法确认或部署不可用,停止并列出已确认事实、阻塞点和继续所需条件。

Plan 解决“准备怎么做”,Goal 解决“多轮之后怎样才算真正完成”。对大多数日常修复,五阶段 Prompt 已经够用;对长时间调试、性能优化、研究复现或需要自动续跑的任务,Goal 才更有价值。

12. 什么时候可以跳过某些阶段

五阶段不是宗教,不能为了流程而流程。

可以简化的情况:

情况简化方式
纯文本错别字Explore/Plan 合并,改完检查页面或 Markdown
单文件小改动快速定位后直接 Code + Verify
已经有清晰失败测试Explore 可以围绕测试展开
只是问代码含义只做 Explore,不进入 Code
只做方案讨论Explore + Plan,不改文件

但有些阶段不建议跳:

情况不该跳什么
会影响用户数据不跳 Plan 和 Review
会改远端资源不跳确认和 Verify
会发布线上不跳线上验证
会碰隐私或密钥不跳安全边界
diff 很大不跳 Review

判断标准很简单:一旦失败成本变高,流程就要变细。

13. 常见反模式

反模式 1:把探索和实现混在一起

text
看一下这个问题并修掉。

更好的写法:

text
先只读定位问题,输出根因和最小修复计划;计划确认后再改。

反模式 2:计划没有验收标准

text
我会修改组件并测试。

更好的要求:

text
每一步都写清验证方式:命令、页面路径、预期结果、失败时怎么定位。

反模式 3:验证只说“通过”

text
测试通过。

更好的输出:

text
npm run test:run -- category
结果:通过,12 tests passed。

npm run build
结果:失败,原因是环境缺少 XXX;本次改动相关文件已通过类型检查,仍需在完整环境复测。

反模式 4:不读 diff

text
改好了,提交吧。

更好的流程:

text
先 review diff,列出无关改动、风险和人工重点检查点。确认后再 stage/commit。

反模式 5:让多个 Codex 任务改同一片文件

并行本身没有问题,问题是多个任务共用同一份可写工作区,还同时修改相同文件。你以为自己在提速,最后得到的往往是冲突、互相覆盖和难以归属的 diff。

如果要并行,最好按边界拆:

  • 一个任务只做资料调研;
  • 一个任务只做 UI 原型;
  • 一个任务只做后端测试;
  • 不要让两个任务同时改同一个组件。

在 ChatGPT 桌面应用里,Git 项目可以为并行任务使用独立 Worktree。每个 Worktree 有自己的文件副本,适合把后台任务和当前本地工作隔开;需要回到原环境验证时,再用 Handoff 移到 Local。

但 Worktree 不是“自动无冲突”。如果两个任务最终修改同一段代码,合并时仍要处理冲突。正确顺序是:先按模块或文件所有权拆任务,再用 Worktree 隔离执行环境。不是 Git 仓库的项目无法使用这套隔离,应避免同时写同一目录。

14. 把工作流写进 AGENTS.md

如果你发现自己经常要求 Codex “先 Explore,再 Plan,再 Verify”,就可以把它沉淀到 AGENTS.md

AGENTS.md 里的规则可以用中文,也可以用英文。英文适合团队协作、工具命令和跨项目复用;中文适合个人博客、写作风格、内容边界和读者视角这种更细的偏好。关键不是语言,而是规则要具体、能执行、能验收。

比如:

markdown
## Default Task Workflow

For non-trivial tasks, use this workflow:

1. Explore: inspect relevant files, commands, current git status, and constraints before editing.
2. Plan: propose a small, verifiable implementation plan.
3. Code: keep diffs scoped and avoid unrelated refactors.
4. Verify: run the smallest relevant checks and report exact commands/results.
5. Review: summarize changes, risks, and what needs human attention.

Pause before destructive commands, database migrations, publishing, or remote writes.

对于这个博客项目,可以更具体一点:

markdown
## Blog Writing Workflow

For Codex tutorial posts:

1. Research current Codex facts against official OpenAI documentation.
2. Draft as a practical technical note, not marketing copy.
3. Include one take-away artifact: template, checklist, workflow, or example.
4. Review from the reader's perspective: can they finish a 30-60 minute exercise?
5. Before publishing, check frontmatter, category, tags, summary, links, images, and public page status.

AGENTS.md 里的流程不需要写太细。它只要提醒 Codex:这个项目默认不接受“改完就算完成”,需要可验证、可 review。

15. 30-60 分钟练习

找一个你自己的真实项目,选一个很小但不纯文本的任务,比如:

  • 修一个表单校验问题;
  • 给一个函数补测试;
  • 优化一个后台列表交互;
  • 给一个 API 增加错误处理;
  • 整理一篇技术笔记的发布检查。

然后按下面流程跑一遍:

阶段建议时间目标
Explore10 分钟找到相关文件、数据流、验证入口和未知项
Plan10 分钟压缩范围,确认最小改动和验收标准
Code15-25 分钟只做计划内的小 diff
Verify10 分钟跑最小检查,记录结果和不能验证的部分
Review10 分钟读 diff,列出风险,决定是否接受

如果 60 分钟内做不完,不一定是失败。更可能说明任务太大,需要拆成两轮:第一轮只做 Explore + Plan,第二轮再实现。

第一步:只做 Explore

text
请先只读检查这个任务,不要改文件。
输出项目地图、相关文件、验证入口、未知项。

看 Codex 是否找对文件。如果它找错了,不要急着让它改,先纠正上下文。

第二步:让它给 Plan

text
请给最小实现计划。
每一步写清:改哪些文件、不改哪些范围、怎么验证、风险是什么。

删掉任何你觉得没必要的扩展。

第三步:让它 Code

text
按计划实现。保持 diff 最小。发现计划不成立就停下来说明。

第四步:让它 Verify

text
运行最小充分验证,输出命令、结果、失败原因或替代证据。

第五步:让它 Review

text
请 review 本次 diff,按严重程度列出潜在问题、无关改动和剩余风险。

最后你自己读 diff。这个练习的目标不是一次就让 Codex 完美,而是建立一个习惯:每次任务结束时,你知道它改了什么、为什么改、怎么验证、还有什么不确定。

收藏清单

可以把下面这段存成自己的快捷模板:

text
按 Explore -> Plan -> Code -> Verify -> Review 完成任务。

Explore:
- 先只读,不改文件;
- 找相关文件、数据流、命令、Git 状态和风险。

Plan:
- 给最小计划;
- 明确改什么、不改什么、怎么验收。

Code:
- 小步修改;
- 不做无关重构;
- 遇到计划外风险先停。

Verify:
- 运行最小相关检查;
- 给命令、结果、失败原因和替代证据。

Review:
- 自查 diff;
- 列出风险、无关改动、人工重点检查点。

我的经验是:这套流程真正有用的地方,不是把 Codex 管得很死,而是让它每一步都留下可检查的中间结果。这样你不是在“相信 AI”,而是在检查一段工程过程。

资料来源

下一篇我会继续写第 8 篇:权限与安全。前面几篇解决“怎么让 Codex 做事”,第 8 篇要反过来讲“哪些事情不能让它随便做”:Sandbox、Approval、危险命令、远端写入,以及发布前的人工确认。