目标就是工作(OpenCode 的 /goal 把「盯着」这件事交了出去)
OpenCode v2.2.1 加入 /goal:给一个终点,会话一直跑到 reviewer 判定完成;reviewer 就是会话自己的模型,Release 说明里没有花费上限。
如果你得一直盯着一个 agent,它就不是在替你工作。
它是在让你换一种方式加班。
你提一个要求,它干一段,停下来等你。你看一眼,回一句「继续」,它再干一段。你以为自己在用工具,其实你成了工具的一部分,一个负责按回车的部件。
这种「一问一答」的模式,过去是 coding agent 的默认形态。OpenCode 在 2026-10-29 13:16(北京时间)发布的 v2.2.1,试着改掉这个默认。
改法是一个新命令:/goal。
从「回答问题」到「完成目标」
据 GitHub Release 说明,/goal <objective> 会在 TUI 或 Desktop 里让会话持续运行,直到一个 reviewer 确认目标已经达成。
你可以用 /goal pause 暂停,用 /goal resume 继续,用 /goal clear 清掉。TUI 会在输入框下方显示当前 goal 的状态,还有一个对应的对话框。
听起来只是多了一个命令。但它改变的是你和 agent 之间的分工。
以前你给的是指令。现在你给的是终点。
指令是「下一步做什么」,终点是「做到什么程度才算完」。前者要求你一直在场,后者只要求你一开始想清楚。
真正难的,恰恰是后者。
那个 reviewer 是谁
据 PR #59437 的说明,这个 reviewer 不是另一个独立的服务,而是会话自己的模型。它读完整个对话历史,判断目标是否达成,并且和主会话共享已缓存的前缀。
它给出的判断有几种:完成、继续、受阻、暂停、等待。
只有判断为「完成」,循环才会结束。其余情况,会话要么接着干,要么停下来等你。
这里有一个容易忽略的事实。审查者和干活的是同一个模型。它能发现自己没做完,也可能和自己犯同一种错。所以你写的目标越具体,它的判断就越有依据。
它什么时候会自己停
一个会一直跑下去的 agent,最让人担心的就是停不下来。据 PR #59437 的说明,有几种情况会让 goal 自动暂停。
1) 原地打转
连续几轮没有调用任何工具,或者反复给出同样的理由,会被判定为停滞。
2) 轮数到顶
有一个隐藏的轮数上限,界面上不显示具体数字。到了上限就暂停。
3) 等待超时
如果它在等后台任务,等太久也会暂停。
4) 外部中断
服务重启,或者 hook 出错,同样会暂停。
还有一个细节值得记住。用 /goal resume 恢复时,会拿到一份新的轮数预算。也就是说,暂停不是终点,你每恢复一次,它就多一次跑下去的机会。
PR 里还提醒,步数额度会在每个空闲边界重置,所以如果你写的插件总是放行输入,就得自己给循环设上限。
它会烧钱
这一点要单独说。
一问一答的时候,每一轮花多少,你大致心里有数,因为每一轮都经过你的手。/goal 把你从循环里拿掉了,花费也跟着离开了你的视线。
reviewer 每一轮都要读完整的历史。共享缓存前缀能省一部分,但不会让这件事变成免费的。
而在这次的 Release 说明里,没有看到花费上限之类的设置。PR #59437 的说明也把 token 预算列在「本 PR 不包含」的清单里。
所以用之前,你至少要做三件事。
1) 把目标写成可检验的
「把代码改好」不是目标。「让这组测试全部通过」才是。审查者能检验的,才停得下来。
2) 先在小任务上试
用一个你能预期结果的小任务,看它跑几轮、什么时候停、停下来时是什么状态。
3) 自己看账单
去你用的模型服务商那里看用量,不要等月底。
站内写过 opencode-console-key-breach 那件事,一个能长时间自己跑的会话,也意味着它手里的密钥要管得更紧。
什么样的任务适合交出去
不是所有事都该交给 /goal。下面是一个判断框架,不是官方建议。
1) 终点清楚,过程繁琐
比如假设你有一组失败的测试,原因分散在好几个文件里。终点很清楚,就是测试全部通过。过程很繁琐,要改、要跑、要看报错、再改。这正是你不想一轮一轮盯着的那种活。
2) 终点模糊,需要你的品味
比如「把这个页面改得更好看」。审查者没法替你判断什么叫好看,它只能猜。这种任务交出去,大概率是在帮它烧时间。
3) 终点危险,需要你的许可
涉及删除数据、改动线上配置、动到密钥的任务,即使终点清楚,也应该留在一问一答里。你要保留的不是效率,而是每一步说「不」的机会。
一句话总结,交出去的应该是重复,而不是判断。
同一版里的其他东西
/goal 不是唯一的新功能。这一版还加了几样,大多需要手动开启。
1) 定时提示
可选的 /schedule,在 experimental.schedules 下开启。和 /goal 放在一起看,一个管「什么时候开始」,一个管「什么时候结束」。
2) 出图工具
可选的 image_generate 工具,在 experimental.image_generate 下开启,可以设默认模型。用 Codex 登录后可选 GPT Image 2,也支持 MiniMax、Meta Muse 出图。
3) 后台 shell
Desktop 里可以点开后台 shell,看实时输出,也可以直接停止。对一个会长时间自己跑的会话来说,这是你随时插手的窗口。
4) 其他
Desktop 里新的模型选择器成为默认。OpenRouter、DigitalOcean、Venice 支持 Responses API。修复方面,工具输出塞进上下文时会保留更多余量,限流不再被误报成上下文溢出,split index 仓库的快照也可以用了。
如果你的代码直接 import @opencode/ai,要注意这是一次 Breaking 更新。fal、Black Forest Labs、Replicate、Stability 这几个 provider 被移除,五个旧入口改成嵌套路径,configure() 的输入类型统一叫 Config。只用 CLI、Desktop 或 HTTP API 的话,不受影响。
真正被交出去的是什么
很多人会把 /goal 理解成「让 agent 更自动」。
我觉得更准确的说法是,它把「盯着」这件事交了出去,但把「定义完成」这件事还给了你。
以前你的注意力花在每一轮的回复上。现在你的注意力要花在开始之前,想清楚终点长什么样,想清楚它什么时候该停,想清楚你愿意为它花多少。
这其实更难。因为它逼你在动手之前,就回答那个一直被你拖着的问题:什么才叫做完。
但这才是你本来该做的工作。
来源:GitHub Release v2.2.1(北京时间 2026-10-29 13:16);PR #59437。功能描述据 Release 说明;reviewer 机制、判断类型与自动暂停条件据 PR #59437 的说明;“会烧钱”为定性判断,未估算金额;任务分类框架为作者看法,不是官方建议。