长任务缺的不是更多催促,而是一条明确的终点线
普通的 AI 编程对话往往没有明确终点。Agent 推进了一部分工作,总结改动,然后把控制权交还给你。小修改这样足够了;但如果任务是迁移、发版审计、修复失败的测试套件,或完成包含十项验收标准的研究简报,就会很令人沮丧。最难的第一步也许做完了,完整结果却仍在远处。
常见的补救方式是人工盯守:读总结、发现遗漏、再发一条提示,如此反复。问题不在于模型不能继续,而在于会话没有一条明确规则来判断工作是否真的完成。
Claude Code 的目标模式为这个判断建立了机制。你用 /goal 设置完成条件,Claude 会跨轮次持续工作,另一个独立评估器在每轮结束后检查条件。证据不足就继续下一轮;只有条件满足时循环才会停止,而不是第一份回答看起来像完成了就结束。
/goal 改变了什么
目标并不等于要求 Agent 更努力或工作更久。耗时不是成功。目标描述的是结束时必须成立的状态,并把这个状态变成决定是否进入下一轮的门槛。
在内部,Claude Code 会在每轮结束后用一个小而快的模型评估条件。评估器与执行工作的模型彼此独立,因此工作模型不会自行给自己的完成声明打分。若结果为否,系统会返回一段简短原因,指导下一轮;若结果为是,则清除目标并记录目标已经达成。
Onevium 1.1.19 把这套循环带进会话界面。完成条件会与评估次数、已用时间和最近一次检查一起保持可见。长任务依然像普通会话一样工作,但你能知道它为什么还在继续,而不是只盯着一个没有尽头的加载动画。
评估器只认会话记录中能够证明的事实
评估器不会自行打开文件或运行命令,它只根据 Claude 已经展示在会话中的证据判断条件是否成立。这个细节决定了一个好目标应该怎么写。
如果条件只写“完成迁移”,评估器必须自行猜测什么才算完成。如果写成“所有 old API 调用都已移除,npm test 退出码为 0,npm run typecheck 退出码为 0,并且 fixture 文件没有改动”,Claude 就知道要检查什么、运行什么,以及哪些结果必须出现在会话记录里。
因此,一个好的完成条件应该像一条精简的验收测试:写明结果、证据,以及工作过程中不得破坏的边界。
可靠的完成条件包含四个部分
并非每个目标都需要一份很长的规格说明。下面四项,已经足以把开放式请求变成一个能够收敛的循环。
- 一个可衡量的最终状态 — 所有测试通过、每个调用点都完成迁移、队列清空,或报告包含全部必需章节。
- 一项明确的检查 — 指定能够证明状态成立的命令、查询、数量或检查方式。
- 重要约束 — 说明哪些内容不能变、允许修改的范围,以及哪些风险必须先获得批准。
- 一个边界 — 对可能无限扩张的工作设置轮次或时间上限,例如“若仍受阻,20 轮后停止并报告阻塞原因”。
可以直接改写使用的完成条件
最好的目标既要具体到能够验证,也要给 Agent 留出选择实现路径的空间。以下模式覆盖了许多原本需要反复追加提示的长任务。
- 迁移 — 把所有 oldClient 调用迁移到 newClient;npm test 和 npm run typecheck 的退出码必须为 0;不得修改 fixture;若受阻,20 轮后停止。
- 发版就绪 — 完成发布清单中的每一项,附上构建与冒烟测试证据,不触碰无关文件,并报告任何无法验证的门槛。
- 回归修复 — 复现故障,补充一条修复前失败、修复后通过的测试,运行相关测试套件,并展示最终 diff。
- 仓库审计 — 检查工作区中的每个 package,用文件位置和严重级别记录所有发现,只有清单中不存在未检查的 package 才算完成。
- 研究简报 — 用一手来源回答简报中的每个问题,明确标注缺乏依据的主张,并附上包含风险与未知项的决策表。
可见性本身就是可靠性的一部分
只有当用户能判断循环是否正在收敛时,自治循环才真正有用。完成条件应始终可见,最近一次评估原因应当可读,已用时间和迭代次数也应该让卡住的循环在耗掉整个下午之前暴露出来。
因此,Onevium 把目标模式作为会话状态展示,而不是藏在一条命令回复里。你可以去应用的其他区域,再回到会话,依然能看见当前正在证明什么。进度界面不会让评估器更聪明,但会让自动化过程可追责。
权限仍然是另一回事。目标可以跨轮次继续,但不会暗中批准敏感工具。请为任务选择合适的权限模式;凡是后果无法安全撤销的操作,都应保留人工确认。
为任务选择正确的运行方式
目标模式解决的是一个明确问题:让当前会话持续推进,直到满足可验证的条件。其他运行方式适合不同形态的工作;它们可以组合使用,但并不彼此等价。
- 目标模式 — 当一个会话需要不断迭代直至到达终点时使用。
- /loop — 当下一次运行应由时间间隔触发,而不是等待上一轮完成时使用。
- 自动模式 — 用来减少单轮对话中的逐项工具授权;它本身不会开启下一轮。
- Stop hooks — 当一个可复用脚本或提示需要在项目或用户范围内为每个会话执行完成逻辑时使用。
- Ultracode — 当任务需要分派给多个 Agent,并行开展研究、实现或验证时使用。
- 定时运行 — 当下一项工作应由时间而非上一轮触发时使用,例如夜间检查、周报或持续监控。
- 渠道工作流 — 当结果需要从飞书、钉钉或 Discord 发起,或回到这些平台时使用。
给循环设好边界
底层 /goal 命令要求 Claude Code 2.1.139 或更高版本、受信任的工作区,并且 hooks 没有被托管设置禁用。只要缺少其中一项,Claude Code 就会解释命令为何不可用,而不会启动一个残缺的循环。
含糊的目标会不断循环,原因和含糊的项目一样:终点一直在移动。应优先写清一个结果而不是一长串愿望,要求证据而不是信心;探索性改进若非真正必要,就不要塞进完成条件。
如果会话结束时目标仍处于活动状态,恢复或继续该会话时,Claude Code 会还原完成条件。恢复后的计时器和评估次数会重新开始;已经达成或清除的目标则会保持结束状态。
不带参数执行 /goal 可以查看当前状态;当条件写错、优先级发生变化,或剩余工作需要人工决策时,可执行 /goal clear。清除目标并不等于失败。当自动化目标已经不再代表你真正想完成的任务时,这才是正确做法。
可以先从你已经知道如何验证的任务开始:一套测试、一次可计数的迁移、一份发版清单或范围有限的审计。Onevium 1.1.19 会把循环状态展示在桌面会话中。升级到最新版本,设定一个可衡量的条件,让证据来决定工作何时结束。