OpenAI 在 Codex CLI 0.128.0 引入 /goal 命令,把单轮 Prompt 改写成线程级的完成契约——Codex 在每个回合结束时拿当前证据对照目标,未达成且仍在预算内就自动续跑,达成、阻塞或预算耗尽时才停下。下文给出安装、6 要素模板、4 类任务示例与同期对手对比。
三分钟跑通第一条 Goal
升级到 0.128.0 及以上:
进入交互式会话,输入 /goal 加目标文本:
Goal 激活后,Codex 进入 work → check → continue or complete 循环,而不是普通 Prompt 的 ask → work → result → wait。续跑是事件驱动而非死循环:只有当前回合结束、无其他工作待处理、用户输入队列为空、预算未耗尽、线程闲置时,下一轮才会触发。同期 Claude Code 2.1.139 也上线了 /goal,但实现路径不同——它每轮调用一个小快模型作为 evaluator 判定是否达成,达成后自动 clear 目标。 6 要素契约:把弱 Goal 改强的填空法
强 Goal 拆成六个字段:Outcome(结束态)、Verification surface(验证面,如基准/测试/产物)、Constraints(不可回退的约束)、Boundaries(允许访问的代码与工具范围)、Iteration policy(每次失败后挑下一步的策略)、Blocked stop condition(被阻塞时如何报告与解锁)。
直接套用这个填空句式:
把上一节的弱版填进去,改写成:
想不清 6 个字段时,让 Codex 自己起草——发一句"Help me turn this into a strong /goal: ..."把想做的事讲一遍,Codex 会反推草稿并追问必要的缺失字段。这一点上 Cursor long-running agents 的处理方式不同:它强制让 planner 先出方案、等用户批准再动手,靠角色分工而不是契约模板对齐目标。
架构与生命周期:状态机和预算
Goals 不写进全局 memory,也不写进项目级指令,而是落在 thread-scoped persisted state——目标连同生命周期、预算账目、进度只跟随当前线程,关闭终端再 resume 不丢。状态机有四档:active、paused、complete、budget-limited。命令面对应:
完成动作必须基于证据——文件变更、命令输出、测试日志、基准结果或产物,不能因模型"觉得差不多了"就标完成。预算耗尽时 Codex 进入 budget-limited,被要求停止动手、总结已做尝试与阻塞、给出下一步可行输入,这不等于目标达成。被中断的回合自动转 paused,连续无 tool 调用的回合会抑制下一次自动续跑,避免空转。这套证据审计是 Codex /goal 的兜底机制,对照之下 Claude Code 用 evaluator 小模型兜底,Cursor 用 judge agent 在每轮末判定是否继续,Anthropic 早先的 Managed Outcomes 则用显式 rubric 给交付物打分。 4 类典型任务的强 Goal 示例
性能调优——给出基准、阈值、约束:
Flaky test 调查——允许定位根因也算完成:
依赖迁移——明确收敛信号:
研究复现——预先定义证据等级:
最后一条是 OpenAI 自己跑过的案例:Codex 重建了定价与对冲机制、复现 Heston 参考价、训练 CVaR 策略,但因论文未公开随机种子、训练路径与 checkpoint,把"原始神经网络的精确回放"标为 blocked——而不是用近似结果伪装完整复现。这是 6 要素契约里 Blocked stop condition 字段在研究类任务上的真正价值。
选型与局限
终端原生开发、跨多文件迁移、benchmark 驱动的性能调优首选 Codex /goal,对仓库级 shell 修复循环的支持最直接,6 要素模板压住了模型自我宣告完成的空间。若任务核心是"每轮被独立评估器卡一下"(TDD 重构、文档完整性验收),Claude Code 2.1.139 /goal 的 evaluator 小模型更省心。需要 planner 拆解、多个 worker 并行、最终产出 PR 的大型功能,Cursor long-running agents 或 Cloud Agents 更合适。
反向清单也很明确——一行编辑、简单解释、短代码审查、想要一个答案就停的问题,普通 Prompt 更快。终点模糊("让它变好"、"重构这段代码"无测试与约束)也不要用,没有可审计的完成条件 Codex 只会摇摆烧预算。数据可能缺失、基准可能 flaky 的场景,必须在 Goal 文本里提前声明代理证据如何处理,否则"近似复现"会被误标成"已完成"。动手前先想清楚 verification surface 在哪,再决定要不要走 /goal 这条路。