opencode-goal-plugin 是为 OpenCode 2 提供的持久化 /goal 命令。用户可以设定一个长期目标,智能体会跨多轮持续处理它,直到目标达成、被判定无法达成、停滞或轮数用尽。该插件面向 OpenCode 2.0.18 和 V2 插件 API(@opencode/plugin ^2.0.18),不适用于 OpenCode 1.x。它以 V2 服务端插件的形式实现,因为自定义命令无法响应一轮对话的结束、无法在对话之外调用模型,也无法把提示词回灌到会话中。 插件的工作方式是:把目标与当前会话绑定存储,并提交第一轮。当这一轮结束时,裁判模型会读取目标和智能体的最后一次回复,返回严格的 JSON,裁决结果为 done、blocked 或 continue。如果裁决是 continue,就会向同一会话发送一条继续提示词,循环重复。裁判通过 ctx.generate.text 调用,不会创建会话,也不会向对话记录添加任何内容。默认情况下它与会话使用同一个模型,但可以配置更小更快的模型来降低成本。 功能包括:可跨轮次和 OpenCode 重启保留的长期目标,带 verify、constraints、scope 和 stop when 行的完成契约,五个相互独立的停止条件(其中三个是确定性的),按会话保存状态,用户消息始终优先,以及通过 /goal status、pause、resume 和 clear 进行状态控制。插件可以全局安装、作为配置的包插件安装,或按项目安装。maxTurns、stallLimit、pollLimit、judgeModel、quiet 和 verifyTimeoutMs 等选项可通过 opencode.json 中的 plugins 数组配置。
开发者用该插件设定长期目标,智能体跨多轮持续处理,无需重复发出提示。
团队用完成契约定义目标的“完成”含义,包括验证命令和约束。
由于目标以会话 ID 为键,用户可以在不同项目中同时运行多个互不相关的目标。
运维人员用五个独立的停止条件,防止失控循环在无人看管时烧光预算。
用户可以用子命令暂停、恢复或清除目标,以控制循环的行为。
团队可以配置更小更快的裁判模型,降低每一轮裁决的成本。