×−+
规划与长任务第 6 课 · Codex 教程
第 6 课 · PLAN & GOAL

规划与长任务:
先想清楚,再盯着做完

改个按钮文字,一句话就够。可要是一件事得改十几个文件、做上一个小时,直接开工,它只能猜你没说清的地方,做完你才发现不是想要的。这一课学三件事:先让它把方案想清楚,再让它朝一个能验收的目标一直做完,长任务跑起来以后怎么照看、怎么中途改方向。

约 35 分钟 11 节 · 6 个动手练习 章末测验 形式参考 luongnv89/claude-howto · 事实依据 OpenAI 官方文档
入门先用起来 原理弄懂为什么 实战动手练 深入进阶与避坑

时间紧就先看"入门"和"实战":会用 /plan 和 /goal,大任务就不容易跑偏。"原理"讲推理强度和上下文,决定长任务能不能稳稳做完。

01入门

什么时候该先规划

换个灯泡,不用画图纸;重新装修厨房,得先量尺寸、出图纸、跟你确认,再开工。交给 Codex 的活也一样。

小改动像换灯泡一句话说得清,改错了一眼能看出来。直接交给它做,第 1 课的四要素写清楚就行。
大任务像装修厨房先出图纸(计划),定好验收单(目标),施工时你随时能叫停、改需求。这一课讲的就是这三步。

三种信号:该先规划了

官方最佳实践的原话大意是:任务复杂、模糊,或者很难描述清楚时,先让 Codex 规划,再让它写代码。

复杂要改好几处、分好几步,中间还互相牵连。例:给订单加退款,要动数据库、接口、页面和测试。
模糊你自己也没想清楚细节,好多事还没拍板。例:"加个会员积分",积分怎么算、会不会过期都没定。
难描述知道大概想要什么,就是说不清楚。例:"订单页用起来别扭",可说不出哪里别扭。

官方列的新手常见错误里,就有一条是"多步骤、复杂的任务跳过了规划"。另一方面,官方也说提示词不完美时 Codex 常常照样做得不错,所以小改动不必每次都规划。

这一课的三件工具

工具怎么用解决什么
计划模式输入框里输入 /plan怎么做还没想好:它先调研、问你、出计划(第 2 节)
让它采访你在提示词里说"先问我问题"要什么还没想好:它一个个问,帮你把想法变具体(第 2 节)
目标模式输入框里输入 /goal 加目标活很长:它一直推进到完成标准达成(第 4 节)
02入门

计划模式:先出方案,再动手

就像装修前先请师傅上门量尺寸、出图纸。在输入框里输入 /plan,打开计划模式(Plan mode):Codex 先读相关代码、问你几个要拍板的问题、写出一份分步计划;你们把计划谈妥了,它再开始改。

官方的描述是:计划模式让 Codex 先收集上下文、问澄清问题,在动手实现之前把计划做扎实。对大多数人来说,这是"先规划"最省事也最有效的办法。/plan 是个开关,再输入一次就关掉。

1
给订单加退款流程
Plan mode Ask for approval
2
动手前想确认一件事
退款支持部分退款吗?
只做全额退款全额、部分都要
3
计划
  1. db/schema.ts:订单加退款字段
  2. src/api/refunds.ts:新增退款接口,只能全额退
  3. 订单详情页:加"退款"按钮和确认弹窗
  4. 补测试,npm test 全部通过
哪一步不对,直接回复告诉它
在窗口里的位置:对话区和输入框
  1. 1打开计划模式输入 /plan,再写任务。这里画的 Plan mode 标记是示意,样子以你的 App 为准。
  2. 2它先问你读完相关代码,把要你拍板的事摆出来。开着系统通知(或桌宠)的话,它需要你回答时会提醒你。
  3. 3交出计划分步骤的方案。不满意就直接说"第 2 步改成……",改到满意再开工。

界面示意,以你的 App 为准。文档没写"同意计划"的按钮叫什么,所以这里画成用对话回复。

还有一招:让它先采访你

有时候卡住的不是"怎么做",而是"要什么"你自己都没想好。官方建议这时让 Codex 先采访你:让它先提问,挑战你的假设,把模糊的想法变成具体的东西,然后再写代码。这不需要什么命令,一段提示词就行:

提示词 · 可以直接在计划模式里发
我想给订单后台加退款功能,但细节还没想清楚。
先别写代码,一次问我一个问题,帮我把需求想具体:
- 挑战我的假设,指出我没考虑到的情况
- 问完后整理成一个目标:要做成什么、有哪些约束、怎么验证做完了
计划模式让它采访你
谁主导它去读代码,问实现上要拍板的事它来问你,追问需求本身
产出一份分步执行计划一个说清楚的需求或目标
适合要什么大致清楚,怎么做要商量要什么都还模糊
两招可以一起用

官方在长任务页里推荐的顺序正是这样:结果还不清楚时,先 /plan,在里面让它采访你、理出约束,把结果写成一个有可衡量完成标准的目标,然后用 /goal 开跑。第 4 节讲目标。

03实战

同一件事,四种交法

order-admin 里三件大小不同的事。先选一件,再换着用四种交法,看 Codex 会怎么做、划不划算。交法按钮上的小圆点是这件事配这种交法的评价。

任务
交法
合适可以不划算有风险

对话内容是教学示意:文件名、行数、测试数量都是虚构的;四种交法的行为依据官方文档。

速查:四种交法

交法怎么开始Codex 会适合
直接做直接写任务读、改、验证,一轮做完小而清楚的改动
计划模式/plan,再写任务先调研、问关键问题、出计划,谈妥再开工要商量做法的大任务
先采访提示词里说"先问我问题"一个个追问,把模糊的想法变成具体目标你还没想清楚要什么
目标模式/goal 加目标文字一直朝目标推进,做完、被暂停或要你拍板时才停结果清楚、步骤多、能验证的长活
04入门

目标模式:盯着它做完

在输入框里输入 /goal 加一段目标,就打开了目标模式(Goal mode)。这是一个持久的目标:Codex 会一直朝它推进,直到做完、你暂停它,或者需要你补充信息。

像交给施工队一张验收单写清楚做成什么样、哪些不能碰、怎么验收。施工队自己排工序,一直干到验收通过;你随时可以叫停、改单子。

目标模式怎么运转

1
目标文字既是任务,也是完成标准你写的那段话,会成为第一句提示词,同时也是它判断"做完没有"的标准。所以要写成能验证的样子。
2
进度条出现在输入框上方在进度条上可以暂停、继续、编辑目标文字、清除目标,不用再打命令。
3
跑着的时候照样能说话发消息补充信息、调整约束都行;只想问问进度,开一个侧聊(side chat),不打断它(第 9 节)。
4
不会多给它权限沙箱和审批规则都照旧,需要你决定的事它会停下来等。开了 Approve for me(交给自动审查)的话,审查员能代你审符合条件的请求,边界同样不会变大(第 3 课)。
已编辑 src/api/refunds.ts +58
1 实现订单退款:已退货的订单可以全额原路退款,npm test 全部通过 2进行中 · 14 分钟 3
要求 Codex 接着改…
Ask for approval
在窗口里的位置:输入框正上方
  1. 1目标文字就是你 /goal 后面写的那段。
  2. 2进度正在做、等你决定、已暂停、已完成。用时的显示是示意。
  3. 3三个按钮暂停 / 继续、编辑目标、清除目标。

界面示意,以你的 App 为准。

写一个它能自己验收的目标

官方建议目标里写三样东西(用得上的都写):

要素写什么退款的例子
结果
Outcome
你要的结果,不只是它该做的动作已退货的订单可以全额原路退款
约束
Constraints
必须用的工具、不能碰的边界、兼容要求、要避开的做法不改现有订单接口的返回格式,不引入新依赖
验证
Verification
测试、可以测量的指标、审查标准,证明确实做完了补上正常退款、重复退款的测试,npm test 全部通过
目标 · 可以拷贝来改
/goal 实现订单退款:已退货的订单可以全额原路退款,退款后订单状态变成"已退款"。
约束:不改现有订单接口的返回格式,不引入新依赖。
验证:补上正常退款、重复退款两个测试,npm test 全部通过。
和第 1 课的四要素是一回事

结果对应"目标",验证对应"完成标准",约束还是约束。上下文(相关文件在哪)照样可以写进去。区别只在于:目标模式下,"怎样算做完"由它自己反复检查,所以验证那一条最不能省。

05实战

练一练:这个目标能直接用吗

6 个目标,判断每个能不能直接交给 /goal,不能的话缺了什么。

06实战

演练:订单退款流程

从计划模式开始:回答它的问题、看计划、把计划设成目标,看进度条一路推进。中途你插一句改需求,最后它还会停下来请你批准一次提交。点"开始"一步步回放,问题和批准都可以自己点。

画面为教学示意:文件名、测试数量、用时和 Codex 说的话都是虚构的;/plan、/goal、进度条的按钮和权限规则与官方文档一致,界面细节以你的 App 为准。

07原理

想多深、跑多快

推理强度(reasoning effort)决定它每一步想多久:想得越久,复杂任务做得越好,但更慢,用的 token 也更多。输入 /reasoning 就能改当前这个对话的推理强度。

推理强度像做题前打多少草稿简单题心算就行;难题多打几遍草稿更稳,但更花时间、更费纸。
/fast 像换一支写得更快的笔草稿打多少不变,写得更快,墨水(额度)也用得更快。

在 App 里有两处能调推理强度:输入 /reasoning,或者用输入框下方的模型和推理强度控件。点下面的档位,看看各自适合什么。

条形图只是示意高低,不代表真实数字。你能选哪几档,取决于模型、套餐和客户端;各模型从哪一档起步最好,见专题 A。

怎么选:从默认开始,不够再加

  • 从默认档开始,任务需要更深的规划或分析时再调高。
  • 保留够用的最轻档:同一个任务在低一档试一次,结果达标就用低的。官方的说法是"留下能满足质量要求的最轻设置"。
  • 想想它多久跑一次、你等不等它:天天自动跑的活,额度累积得快;你坐着等结果的活,可以用更快的设置;放一整夜的活,不急这一时。
  • 档位不能跨代照搬:不同代模型的同名档位不完全对应,换了模型要重新试。
推理强度和速度档是两回事

推理强度是"想多久";/fast 是速度档(Fast):让模型跑得更快,代价是额度按更高的倍率消耗,倍率见专题 A。用 ChatGPT 账号登录时才有 Fast,额度按更高倍率算;用 API key 登录按 API 的 token 价格计费,这个倍率不适用。/fast 只在当前模型提供 Fast 档时可用。

文档还描述了一种 Power 预设:往 Smarter 走想得更深,往 Faster 走更快、更省;点 Advanced 才能单独选模型、推理强度和速度。你看到的是哪种控件,取决于套餐、客户端和灰度,以你的 App 为准。

08原理

上下文:它的工作台面

上下文(context)是 Codex 干活时能看到的全部东西:读过的文件、你们说过的话、命令的输出、各种说明。它能同时装下的量有上限,叫上下文窗口。长任务迟早会碰到这个上限。

像一张大小固定的书桌资料越摊越多,要紧的那张纸就被埋住了。压缩(compaction)就是把旧资料整理成一页摘要,腾出桌面,接着干。

点下面的按钮,往"桌面"上加东西,再试试压缩、开侧聊、开新对话。

主对话的上下文(示意)

比例和自动压缩的那条线都是示意。真实的阈值不设置就用模型的默认值。

三个命令

/status 看用了多少显示对话 ID、上下文用了多少、额度还剩多少。
/compact 手动压缩把前面的对话换成一份精简摘要,腾出空间、保留关键细节。一段长活刚做完、要开始下一段之前最合适。Codex 自己也会自动压缩。
/side 旁支问一句开一个临时的侧聊,问完不打断、不搅乱主对话(第 2 课讲过)。

桌面乱了,结果就变差

官方在讲子代理时提到两个现象:上下文污染(探索笔记、测试日志、报错堆栈这些中间输出太多,有用的信息被埋住)和上下文腐化(对话塞得越满,表现越差)。对应的做法:

  • 一个对话做一个完整的成果。把整个项目塞进一个对话,上下文会越来越臃肿,结果越来越差。
  • 吵的活(翻日志、跑大量测试)交给子代理,只把摘要拿回主对话(第 12 课)。
  • 必须一直遵守的规矩,别只在对话里说一次,写进 AGENTS.md(第 5 课)。压缩后的摘要只留关键细节。
09实战

长任务跑起来以后

目标跑起来,你不用干等,也不用盯着每一步。要改方向就插话,想到下一件事就排队,想问进度开侧聊,要断网就先暂停。

遇到的情况怎么做
它方向不对,或者漏了一个细节插话(steer):消息加进当前这一轮,它马上调整
想到一件做完再说的事排队(queue):留到下一轮。排队的消息显示在输入框上方,可以改、调顺序、直接发或删掉
想知道进度、想听它解释,又不想打断侧聊:/side,或按 ⌘ ⌥ S(Windows 上 Ctrl Alt S)
马上要断网、要合上电脑先在进度条上暂停目标,回来再继续
完成标准本身变了在进度条上编辑目标文字
你自己动手改了、或者撤掉了它的某处改动告诉它一声,不然下一轮它可能把你的改动覆盖掉

发消息时默认是插话还是排队,在 Settings > General > Follow-up behavior 里设;那里还写着临时换成另一种的快捷键。按键细节见第 2 课。

练一练:这时候该怎么做

让它安心跑

  • 别让电脑睡着:本地跑的长任务,在 Settings > General 里打开 Prevent sleep while running,你走开时它还能接着做。
  • 让它叫你:系统通知或者桌宠(Pets)会告诉你哪个对话在等你、哪个做完了可以审。
  • 不在电脑前:用手机上的 Remote 看进度、批准命令(第 13 课)。

长对话怎么组织

  • 一个对话,一个完整的成果。还是同一个问题,就留在同一个对话里,推理的来龙去脉都在;真正分岔了再 fork(第 4 课)。
  • 几个目标同时跑,就开几个对话。每个对话有自己的上下文、消息和目标,但别让两个对话改同一批文件;要并行写代码,用 worktree 给每个对话一份单独的副本(第 12 课)。
  • 常回的对话置顶,改个能看出结果的名字。置顶只改它在侧栏的位置,不影响上下文。
10深入

进阶与避坑

给已经用顺手的你:几个文档里藏得比较深的细节。

旧教程对照
  1. "Goal 模式是实验功能,要先手动打开":2026 年 5 月它已经转正,桌面 App、IDE 扩展、命令行都能用;配置里的开关 features.goals 默认就是开的。
  2. "推理强度就 low / medium / high 三档":现在档位随模型变。App 里叫 Light、Medium、High、Extra High,有的模型还有 Max 和 Ultra;Light 在配置文件和命令行里写作 low。
  3. "用 /model 顺便选推理强度":App 里推理强度有单独的 /reasoning,只改当前对话;模型用 /model 选。命令行里的 /model 仍然可以顺带选推理强度(第 14 课)。
  4. "长任务就一遍遍回复'继续'":现在用 /goal 写下完成标准,让它自己推进到做完。
计划模式用的推理强度,和平时一样吗?
不一定。计划模式有自己内置的预设强度。想固定成某一档,可以在 config.toml 里设 plan_mode_reasoning_effort,不设就用内置的默认值。配置文件怎么写,第 7 课讲。
目标能写多长?
命令行文档写着:目标文字不能为空,最多 4,000 个字符(App 里以界面为准)。细节多的话,写进一个文件,比如 docs/refund-plan.md,目标里写"按 docs/refund-plan.md 实现,npm test 全部通过"。
PLANS.md 是什么?
更进阶的做法:给长任务、多步骤的活配一个 PLANS.md 或"执行计划"模板,让 Codex 照着模板写计划、推进、记录进度。官方最佳实践提到了它,细节见 OpenAI Cookbook 里的 execution plans 一文。刚上手用计划模式就够了。
Max 和 Ultra 在我的选项里找不到
Max 让模型花更多时间琢磨一个任务;选项里没有 Max 的话,到 App 设置里打开。Ultra 会动用子代理把一个大任务拆开并行做(第 12 课);模型支持但滑杆上没有时,到 Settings > Configuration 打开 Ultra in model picker slider。官方原话:大多数任务用不到 Max 或 Ultra。
自动压缩什么时候发生?能调吗?
不设置就按模型的默认阈值自动压缩。config.toml 里的 model_auto_compact_token_limit 可以改这个阈值(第 7 课讲配置)。一般不用动,觉得对话变"糊涂"了先手动 /compact。
同时跑两个目标,会不会打架?
每个对话有自己的目标和上下文,互不干扰;会打架的是文件:两个对话改同一个文件,改动会搅在一起。并行写代码时给每个对话一个 worktree(第 12 课)。
它在目标模式下停住了,没在干活
先看进度条的状态:可能是在等你批准一条命令、等你回答问题,或者被暂停了。也可能是额度用完了,/status 能看到额度还剩多少,套餐额度见专题 A。
网页版 ChatGPT 能用 /goal 吗?
目标模式在桌面 App、IDE 扩展和命令行里有。网页上做长任务用 ChatGPT Work:把结果、约束和验收标准写进提示词,在同一个对话里补充信息、调整约束、问进度。
11检验

小测验

8 道题,每题选完会立刻看到解析。