怎样让 AI agent 明白“完成”是什么,不提前收工?

把“完成”写成 agent 能自己证明的检查,而不是一种感觉:一个可衡量的终点、能证明它的测试或对照,以及过程中不能改动的东西。Claude Code 和 Codex 的文档里都有基于这个思路的 /goal 命令,而同样的几个要素,写进任何 agent 的任务说明里都管用。
agent 为什么会提前收工?
除非另有机制来检查,干活的 agent 同时也是判断自己有没有做完的那一个。用 Claude Code 文档的话说,Claude 会在“它判断工作已完成”时停下;/goal 则额外加了一个独立的评估器,让是否完成由“一个全新的模型,而不是正在干活的那个模型”来决定。像“把这个模块整理一下”这样含糊的说明,没有给任何人一条可以对照的线,于是第一个看上去说得过去的停靠点就成了终点。
一份好的“完成”定义包含什么?
Claude Code 的文档列出了一个能撑过多轮的条件通常包含的几个部分;Codex 的文档归纳为三项:结果、约束和验证。合起来是:
- 一个可衡量的终点。 测试结果、构建的退出码、文件数量,或者一个清空的队列。描述你想要的结果,而不只是要做的动作。
- 一个写明的检查方式。 agent 该怎么证明它,比如“某个文件夹里的测试全部通过,且 lint 步骤没有报错”。
- 要紧的约束。 过程中不能变动的东西,比如“不修改其他任何测试文件”。
- 一个上限。 Claude Code 的文档建议在条件里加上回合数或时间的限制,免得工作无休止地跑下去。
要让证明看得见。Claude Code 的评估器是拿条件去对照对话里出现的内容来判断的,它不会自己去运行命令或读取文件,所以结果得由 agent 自己的输出展示出来。
在 Claude Code 和 Codex 里怎么设置?
在 Claude Code 里,运行 /goal 并跟上条件,最多 4,000 个字符。每个会话同一时间只有一个目标;单独运行 /goal 会显示它的状态,/goal clear 会把它清除。条件满足时、评估器判断它不可能达成时,或者出现了需要你来修复的错误之后,目标都会被清除。
在 Codex 里,可以在桌面应用、CLI 或 IDE 扩展中输入 /goal。目标文字既是第一条提示,也是完成标准。如果想要的结果还不清楚,先用 /plan,让 Codex 先向你提问、帮你理清。
这两个命令都不会扩大权限。Claude Code 保持你原有的权限模式;Codex 保持它的沙箱和审批策略,需要你做决定时会暂停。
它说做完了,我还要检查什么?
有了“完成”的定义,停不停就可以被检验;但这不等于一定能做完。有些错误会清除 Claude Code 的目标并等你处理,比如认证失败或模型不可用;如果循环一直没有进展,它也会把控制权交还给你。
所以请在目标之外再加一次中途查看:在中途要一次检查点。先把已经确定的部分写下来,可以参考一页纸的启动说明。结果回来之后,用十分钟做一次验收。
Octuo 适合放在哪里
Octuo 是一个个人助理,替你协调 AI 工具、agent 和外部服务:你说目标,它负责准备、委派和跟进。任务可以跨会话延续,所需的上下文不会随着一次对话结束而消失。
Octuo 跟进工作并向你汇报;想看时可以查看进度,需要你拍板时再提醒你。登录自己的账号和必须由你批准的敏感操作由你做主;其余能交给它的工作由 Octuo 处理。
Octuo 是原生的 Mac 应用,需要联网。看看 Octuo 能做什么。
常见问题
做这件事一定要用 /goal 吗?
不用。同样的几个要素,以纯文字的形式写进任何 agent 的任务说明里都管用。在 Claude Code 里,这个命令会在每一轮之后多做一次检查;在 Codex 里,目标本身就成为完成标准。
设了目标,agent 就有更多权限吗? 没有。按文档所说,Claude Code 保持你原有的权限模式,Codex 保持它的沙箱和审批策略。
如果它说做完了,其实没做完呢? 让它拿出证据,比如命令的输出,再自己抽查。条件好不好,取决于 agent 能拿出什么来证明。
来源
- Claude Code 文档,“Keep Claude working toward a goal”:https://code.claude.com/docs/en/goal (访问于 2026-10-17)
- Codex 文档,“Long-running work”:https://learn.chatgpt.com/docs/long-running-work (访问于 2026-10-17)
- Codex 文档,“Prompting”,小节 “Prompting Codex”:https://learn.chatgpt.com/docs/prompting (访问于 2026-10-17)
上述产品名称归各自所有者所有,我们与它们没有任何关联。