Goal
Codex/OMP-style persistent goals for OpenCode V2: /goal command + goal tool + idle auto-continuation + evidence-based completion + blocked/budget guards
1
2,711
1.1k in 7 days
43.5
Multi-signal model
4 days ago
2026-10-01
Install and configure
opencode.jsonWrites to this project's opencode.json — applies to this repository only.
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@justsilver/opencode-goal-plugin@0.9.0"]
}Writes to ~/.config/opencode/opencode.json — applies to every project.
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@justsilver/opencode-goal-plugin@0.9.0"]
}If you want to modify the plugin locally, install it into the project and reference the local path.
shell
pnpm add -D @justsilver/opencode-goal-pluginOpenCode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.
给 OpenCode V2 加持久目标:说一次目标,它记住、自己接着干,完成时拿证据说话。
安装
在 opencode.json(c) 的 plugins 里加一行。全局配置是 ~/.config/opencode/opencode.json,也可以在项目根目录放 opencode.json / opencode.jsonc:
{
"plugins": ["@justsilver/opencode-goal-plugin"]
}
带参数(可用键见配置项):
{
"plugins": [
{
"package": "@justsilver/opencode-goal-plugin",
"options": {
"token_budget": 200000,
"debug": false
}
}
]
}
- 要钉住版本(可复现,代价是不再显示有新版):
"plugins": ["@justsilver/opencode-goal-plugin@0.2.0"] - 本地目录 / git 安装(改代码即热重载、用未发布的提交)见
CONTRIBUTING.md。
用法
在会话里输入:
| 命令 | 作用 |
|---|---|
/goal <目标> |
直接设定目标:逐字保存 + 起一轮,不询问、不转发给模型;已有未完成目标时不覆盖 |
/goal(或 /goal-status) |
查看当前目标与进度 |
/goal-pause |
暂停 |
/goal-resume |
恢复并立刻激活(仅在会话空闲、且预算还够时;预算已用尽会拒绝并提示改用 /goal-budget 提高预算) |
/goal-clear |
清除目标 |
/goal-budget <正整数|none> |
改当前目标的 token 预算(none/0/off 取消预算、不限);把预算从「已用尽」改回可用时会一并激活 |
/goal-rebuild <新目标> |
重建当前目标的正文:只换目标内容,状态、预算与用量记账全保留(不会唤醒模型) |
回执显示:命令结果以 TUI toast 浮条呈现(右上角、自动消失、不打断操作)——不写入对话历史,因此不消耗额外 token、也不污染模型上下文;只有你正看着该会话的窗口会提示。目标停摆(预算用尽 / 用量受限 / 受阻)改用会话内的合成提示(
session.synthetic:模型与人都看得到、留在转录里),这类事件罕见且必须让人看到——代价是它会唤醒一轮收尾(让模型简短总结,而不是静默停住)。两者都需要 OpenCode V2 的 TUI(插件自带界面入口,随包自动加载,无需额外配置);无 TUI 时命令照常生效,停摆提示仍写入会话。
设定后目标会在多轮之间持续:一轮结束、空闲时自动接着干,直到完成、暂停、受阻或超出预算。
- 完成要拿证据:模型必须核对当前状态,才敢说「完成」。
- 受阻 / 预算 / 用量到达时目标会停下并给出回执(留在转录里,不会像 toast 那样消失):受阻 / 用量受限用
/goal-resume恢复;预算用尽要先用/goal-budget提高预算(或none取消),否则/goal-resume会拒绝——因为恢复了下一轮末也会立刻再停。 - 恢复只在空闲时激活:会话正在跑时不插队投递(否则会把续跑触发插进当前轮),改为本轮结束后自然续跑。
- 自动续跑有计数:
/goal-status会显示「自动续跑 N 次」,每次续跑的回执带#N。 - 界面文案默认跟随系统语言,可用配置项
language切换。
配置项
| 键 | 默认 | 说明 |
|---|---|---|
token_budget |
无 | 新目标的默认 token 预算 |
max_goal_token_budget |
无 | 允许的最大预算 |
max_objective_chars |
4000 | 目标注入提示词的截断阈值(超过仍保留全文,模型可完整取回) |
blocked_threshold |
3 | 连续阻塞多少轮算「卡住」 |
empty_threshold |
3 | 连续空转多少轮算「空转」 |
reconcile_guard_minutes |
5 | 启动兜底保护窗(分钟) |
restricted_agents |
["plan"] |
受限 agent(拒改写目标 / 续跑) |
disabled_tools |
["question"] |
goal active 期间从模型工具表移除的工具名;设 [] 关闭 |
command_name |
goal |
主命令名;状态控制是派生命令 <name>-status / -pause / -resume / -clear |
debug_command_name |
goal-debug |
调试命令名 |
debug |
true |
注册只读调试工具 goal_debug(设 false 可让模型工具表保持干净) |
language |
跟随系统 | 面向用户文案的语言,"zh-CN" 或 "en"(缺省用系统 locale 探测) |
disabled_tools默认移除question:它是阻塞式交互工具,一旦调用会挂起执行直到你回复,而 goal 的自动续跑只在轮末注入,于是 goal 会被无限期停摆。goalactive时模型改为:能自行合理假设就继续,确实需要外部输入则走goal(op "block")(连续几轮后进入「受阻」)。移除只作用于当次模型请求、不落库;goal 暂停 / 受阻 / 完成后question自动恢复。
Similar plugins
Goal
@prevalentware/opencode-goal-plugin
OpenCode goal plugin that adds Codex-style long-running goal mode, /goal commands, persistence, and TUI status for AI coding agents.
Loopd
@bojackduy/opencode-loopd
Codex-inspired background goal engine for OpenCode — autonomous subagents, engine-driven loop, child worker sessions and modal TUI dashboard. Like Claude Code loop for OpenCode.
2 Todo
opencode2-todo
Restore the V2-removed todowrite tool and a TUI sidebar list for OpenCode sessions