OpenProgram Docs

会话目标#

目标(goal)是会话持续朝向的一个条件。用 /goal 设定一次;此后每轮结束时运行时都会判定条件是否已经成立,未成立就自动续一轮——每个续轮都是普通的一轮,你可以旁观、插话或停止。模型不再说话,会话也不会就此自然停下。

/goal 所有单元测试通过,且 README 写明了新参数

这条命令把目标写到会话上,并立即以条件文本为指令发起第一轮。之后每当一轮结束而目标未达成,运行时就发出一条续轮消息([goal] 未达成:<原因>。继续。),带上判定者给出的未完成原因。续轮在会话工具设置之上始终带联网搜索——续轮是无人值守的自主工作,所以自动获得你本可以手动打开的搜索工具;会话设置本身不改。

一句话目标会被自动完善#

一句话不可能面面俱到,所以设定之后立即有一个后台步骤把它扩写成完整规格:可逐条核验的达成标准清单(含过程要求,比如"必须先读哪些来源再写哪些部分")、明确的边界(不做什么)、判定时逐条核对的 checklist。它可以看一眼工作目录理解任务语境。结果以系统行插进对话,你能看到系统把目标理解成了什么——理解偏了就 /goal clear 再用更详细的表述重设。你的原文保持不变;判定按完善后的规格评,完善没跑完或失败时回退用原文。完善不拖慢目标:第一轮工作与它并行启动。

目标如何判定#

由一个判定 agent 决定。每轮结束后,派出一个判定轮,读目标文本加对话的压缩视图(有摘要带摘要,加最近的轮次和工具结果),输出严格的是/否加原因。它配有检查类工具(bash、read、grep、glob、list),认为有必要时自己去工作目录核查——判断权完全在它,只有它说完成才算完成。判定者刻意不是干活的 agent 自问"我做完了吗"——自报式判定普遍偏乐观;结论来自一个独立的上下文。整个判定就是一个 agentic 函数——函数面板里的 goal——可以对任意目标文本手动运行,直接看到裁决是怎么得出的。判定者也可以决定暂停问你问题;问得多宽取决于会话是否有人在场(attended),且 1 小时内最多问 1 次——窗口内的后续问题会让它自选最合理方案继续,并把决定写清楚。goal 会话只经这个判定者或 /goal clear 停止;turn.stop hook 闸门只对无 goal 的会话生效。

怎样写出有效的条件#

把条件写成对话记录能证明的事,而不是一种感觉:

  • 好:tests/unit 全部通过,且新页面登记进了 nav.py——判定者能看到测试输出和文件改动。
  • 好:脚本对全部 12 个输入都打印 OK——输出可证明。
  • 弱:"代码要干净"、"功能要好用"——记录里没有能裁决它的东西,判定者只能猜,循环会漂。

查状态、解除、停止#

/goal            # 显示目标、状态、已用轮数和最近一次原因
/goal clear      # 解除(别名:stop / off / cancel)

续轮期间 Stop 按钮(以及任何取消)与你自己的轮次完全一样有效——续轮就是普通一轮。停止不会清除目标;它保持 active,你下一条消息之后继续判定。要真正移除用 /goal clear

Web 界面里,活跃目标显示为输入框上方 chip 行的 ◎ goal · N(N 为已用轮数;设了轮数上限则显示 N/M)。循环结束时变为 goal achieved / goal capped / goal error

循环何时自行停止#

结果 含义
achieved 判定 agent 回答已达成。
capped 用完轮数预算——只有显式设了上限才会出现(设置项 goal.max_turns;默认留空 = 无上限)。调大预算或拆分目标。
error 某个续轮在目标未达成的情况下没有任何工具调用(空转),或判定连续失败三次。目标状态和最近原因仍可用 /goal 查看。
cleared 你解除了它。

失败的一轮(provider 报错、取消)只是暂停循环,不消耗目标——目标保持 active,下一次完整的一轮之后恢复判定。

在哪些入口可用#

/goal 是内建命令:Web 输入框、TUI、Rich REPL 都接受,而续轮循环跑在 worker 里,关掉页面它也继续。一个入口设定的目标在所有入口可见——状态存在会话上。

Last updated · 2026-08-13