/goal 正在变成 AI 编程工具里的一个重要命令。
它解决的不是“让模型多写几行代码”,而是另一个更实际的问题:当任务有明确完成条件时,能不能让 Agent 持续推进,直到条件满足,而不是每完成一轮就停下来等用户继续催。
Codex CLI 已经在官方文档里加入了实验性的 /goal。Claude Code 也上线了自己的 /goal 文档,而且把它描述成一种可以跨多轮持续工作的自动化能力。两者名字一样,但产品取向并不完全一样。
/goal 到底解决什么问题
普通 AI 编程对话通常是“一问一答”:
- 用户提出任务。
- Agent 分析、改代码、跑测试。
- Agent 汇报结果。
- 用户再决定下一步。
这个流程适合短任务,但遇到迁移、重构、测试修复、issue backlog 清理时,就会变得很碎。Agent 可能每次只推进一小段,然后停下来等你输入“继续”。
/goal 的思路是把任务从“下一步做什么”改成“最终什么状态算完成”。例如:
|
|
这类目标天然适合长任务,因为它有清楚的终点:测试通过、构建成功、文件拆分完成、队列清空、验收条件满足。
Codex 的 /goal:实验功能,绑定当前线程
OpenAI 的 Codex CLI 文档把 /goal 标为实验功能。它不是默认稳定能力,需要先开启 features.goals。
开启方式有两种:
|
|
或者在 config.toml 里加入:
|
|
启用后,可以这样使用:
|
|
常用命令包括:
|
|
按照 OpenAI 文档的说法,Codex 会把 goal 附着在当前 active thread 上,在更大的任务运行过程中持续跟踪这个目标。
这里要注意一个细节:官方文档对 Codex /goal 的措辞比较克制。它强调“给长任务设置实验性目标”“把目标附着到当前线程”,但没有像 Claude Code 文档那样展开说明每一轮结束后由独立 evaluator 自动判断并继续下一轮。所以现在使用 Codex /goal 时,最好仍把它看作实验中的长任务目标机制,而不是完全稳定的无人值守执行模式。
Claude Code 的 /goal:完成条件驱动的多轮执行
Claude Code 的 /goal 文档写得更明确:用户设置 completion condition 后,Claude 会跨 turn 持续工作,直到条件满足。
示例:
|
|
Claude Code 的机制大致是:
- 当前 turn 完成后,不直接把控制权还给用户。
- 一个小型快速模型会检查目标条件是否已经满足。
- 如果没有满足,Claude 自动开始下一轮。
- 如果满足,goal 自动清除,并在 transcript 里记录完成状态。
这意味着 Claude Code 的 /goal 更像“按完成条件自动续跑”。它不只是把目标挂在会话里,而是把“是否继续下一轮”交给一个独立评估步骤。
Claude Code 还支持直接查看状态:
|
|
状态里会显示目标条件、运行时间、已评估 turn 数、token 消耗,以及 evaluator 最近一次给出的原因。
如果要提前停止,可以使用:
|
|
stop、off、reset、none、cancel 也可以作为清除别名。开启目标后,如果会话中断,之后通过 --resume 或 --continue 恢复时,仍然 active 的 goal 可以被带回来;但计时、turn 数和 token 基线会重新计算。
两者最大的差异
Codex 和 Claude Code 都在把 AI 编程从“单轮回答”推向“长任务执行”,但 /goal 的定位有差异。
| 对比项 | Codex CLI /goal |
Claude Code /goal |
|---|---|---|
| 状态 | experimental | 官方文档单独成页说明 |
| 启用方式 | 需要开启 features.goals |
可直接在受信任 workspace 使用 |
| 目标作用域 | 当前 active thread | 当前 session |
| 常用操作 | set / view / pause / resume / clear | set / view / clear |
| 自动判断 | 文档强调目标附着与跟踪 | 明确说明每轮后由 evaluator 判断 |
| 自动续跑 | 文档表述较克制 | 条件未满足时自动下一轮 |
| 适合场景 | 想在 Codex 长任务里保持目标上下文 | 想按完成条件让 Claude Code 持续推进 |
简单说,Codex 的 /goal 更像“给当前线程挂一个实验性的长期目标”;Claude Code 的 /goal 更像“给当前会话设置一个可验证的停止条件,让它自动干到满足为止”。
写好 /goal 的关键
不管使用哪一个工具,/goal 都不适合写成模糊愿望。
不太好的写法:
|
|
更好的写法:
|
|
一个好目标通常包含三点:
- 明确的完成状态。
- 可执行的验证方式。
- 必须遵守的边界。
如果目标太大,还应该加上停止条件:
|
|
这很重要。/goal 越强,越需要边界。否则 Agent 可能会为了追求“完成”而改动过多文件、跑太久、消耗太多 token,甚至把原本该停下来询问的问题继续往前推。
什么时候适合用 /goal
适合:
- 测试修复:直到指定测试通过。
- 代码迁移:直到所有调用点改完并编译成功。
- 批量清理:直到某类 lint 或类型错误清零。
- 文档补齐:直到所有指定模块都有说明。
- issue 队列处理:直到某个标签下的问题都被处理或明确分类。
不适合:
- 需求本身还没想清楚。
- 需要频繁产品判断。
- 涉及高风险删除、数据迁移或权限变更。
- 验收条件只能靠主观判断。
- 任务会跨越大量无关模块。
一个实用原则是:如果你能写出“跑哪个命令、看到什么结果、哪些文件不能碰”,就适合用 /goal。如果只能写“帮我做得更好”,那还是先用普通对话、计划模式或人工评审更稳。
对 AI 编程工具的影响
/goal 代表一个很明显的方向:AI 编程工具正在从“交互式助手”变成“可持续执行的工作单元”。
过去我们让 Agent 做任务,经常要在旁边守着。它卡住了要提示,测完了要继续,报错了要再下命令。/goal 把这部分交互压缩成一个完成条件,让 Agent 自己决定下一轮该做什么。
但这也带来新的要求。以后写 prompt 不只是描述任务,还要写验收条件、验证命令、修改边界和停止规则。换句话说,用户的工作从“催它继续”变成“定义什么叫完成”。
Codex 和 Claude Code 走到 /goal 这一步,说明长任务 Agent 已经不再只是后台任务或云端队列的专利。终端里的本地编程工具,也开始需要更强的自主推进能力。
总结
Codex CLI 和 Claude Code 都有了 /goal,但现阶段不要把它们简单看成同一个功能。
Codex 的 /goal 仍是实验能力,需要开启 features.goals,更适合在 Codex 当前线程里维持长期目标。Claude Code 的 /goal 则更明确地把“完成条件”和“自动续跑”连在一起,通过独立 evaluator 判断是否继续。
对日常开发来说,这类命令最适合处理有明确验收标准的工程任务。它不会替代需求判断,也不会消除代码审查,但能减少长任务里大量重复的“继续”“再跑一次”“修到测试通过”。
真正要学会的不是某个命令本身,而是如何把任务写成清楚、可验证、可停止的目标。
参考资料
- OpenAI Codex CLI Slash Commands:https://developers.openai.com/codex/cli/slash-commands
- Claude Code Goal 文档:https://code.claude.com/docs/en/goal