@opellen/opengoal 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +400 -0
  3. package/README.ko.md +409 -0
  4. package/README.md +416 -0
  5. package/README.zh-CN.md +436 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +298 -0
  8. package/dist/extend.d.ts +13 -0
  9. package/dist/extend.js +286 -0
  10. package/dist/hook-parser.d.ts +15 -0
  11. package/dist/hook-parser.js +95 -0
  12. package/dist/i18n/index.d.ts +5 -0
  13. package/dist/i18n/index.js +20 -0
  14. package/dist/i18n/messages.d.ts +28 -0
  15. package/dist/i18n/messages.js +49 -0
  16. package/dist/index.d.ts +4 -0
  17. package/dist/index.js +4 -0
  18. package/dist/installer.d.ts +30 -0
  19. package/dist/installer.js +165 -0
  20. package/dist/marker.d.ts +11 -0
  21. package/dist/marker.js +25 -0
  22. package/dist/platforms/amazon-q.d.ts +2 -0
  23. package/dist/platforms/amazon-q.js +12 -0
  24. package/dist/platforms/antigravity.d.ts +2 -0
  25. package/dist/platforms/antigravity.js +12 -0
  26. package/dist/platforms/auggie.d.ts +2 -0
  27. package/dist/platforms/auggie.js +15 -0
  28. package/dist/platforms/claude.d.ts +2 -0
  29. package/dist/platforms/claude.js +7 -0
  30. package/dist/platforms/cline.d.ts +2 -0
  31. package/dist/platforms/cline.js +11 -0
  32. package/dist/platforms/codebuddy.d.ts +2 -0
  33. package/dist/platforms/codebuddy.js +16 -0
  34. package/dist/platforms/codex.d.ts +2 -0
  35. package/dist/platforms/codex.js +7 -0
  36. package/dist/platforms/continue.d.ts +2 -0
  37. package/dist/platforms/continue.js +16 -0
  38. package/dist/platforms/costrict.d.ts +2 -0
  39. package/dist/platforms/costrict.js +15 -0
  40. package/dist/platforms/crush.d.ts +2 -0
  41. package/dist/platforms/crush.js +19 -0
  42. package/dist/platforms/cursor.d.ts +2 -0
  43. package/dist/platforms/cursor.js +18 -0
  44. package/dist/platforms/factory.d.ts +2 -0
  45. package/dist/platforms/factory.js +15 -0
  46. package/dist/platforms/gemini.d.ts +2 -0
  47. package/dist/platforms/gemini.js +14 -0
  48. package/dist/platforms/github-copilot.d.ts +2 -0
  49. package/dist/platforms/github-copilot.js +12 -0
  50. package/dist/platforms/iflow.d.ts +2 -0
  51. package/dist/platforms/iflow.js +18 -0
  52. package/dist/platforms/index.d.ts +10 -0
  53. package/dist/platforms/index.js +68 -0
  54. package/dist/platforms/kilocode.d.ts +2 -0
  55. package/dist/platforms/kilocode.js +8 -0
  56. package/dist/platforms/kiro.d.ts +2 -0
  57. package/dist/platforms/kiro.js +12 -0
  58. package/dist/platforms/opencode.d.ts +2 -0
  59. package/dist/platforms/opencode.js +12 -0
  60. package/dist/platforms/pi.d.ts +2 -0
  61. package/dist/platforms/pi.js +12 -0
  62. package/dist/platforms/qoder.d.ts +2 -0
  63. package/dist/platforms/qoder.js +19 -0
  64. package/dist/platforms/qwen.d.ts +2 -0
  65. package/dist/platforms/qwen.js +14 -0
  66. package/dist/platforms/roocode.d.ts +2 -0
  67. package/dist/platforms/roocode.js +11 -0
  68. package/dist/platforms/toml.d.ts +9 -0
  69. package/dist/platforms/toml.js +18 -0
  70. package/dist/platforms/trae.d.ts +2 -0
  71. package/dist/platforms/trae.js +11 -0
  72. package/dist/platforms/types.d.ts +19 -0
  73. package/dist/platforms/types.js +1 -0
  74. package/dist/platforms/windsurf.d.ts +2 -0
  75. package/dist/platforms/windsurf.js +19 -0
  76. package/dist/platforms/yaml.d.ts +10 -0
  77. package/dist/platforms/yaml.js +30 -0
  78. package/dist/prompts/platform-select.d.ts +1 -0
  79. package/dist/prompts/platform-select.js +174 -0
  80. package/dist/skills/generate.d.ts +13 -0
  81. package/dist/skills/generate.js +16 -0
  82. package/dist/templates.d.ts +20 -0
  83. package/dist/templates.js +98 -0
  84. package/dist/ui/ascii-logo.d.ts +6 -0
  85. package/dist/ui/ascii-logo.js +45 -0
  86. package/dist/ui/colors.d.ts +6 -0
  87. package/dist/ui/colors.js +17 -0
  88. package/dist/ui/welcome.d.ts +1 -0
  89. package/dist/ui/welcome.js +77 -0
  90. package/package.json +51 -0
  91. package/templates/commands/context.md +92 -0
  92. package/templates/commands/design.md +113 -0
  93. package/templates/commands/go.md +84 -0
  94. package/templates/commands/goal.md +360 -0
  95. package/templates/commands/overview.md +78 -0
  96. package/templates/commands/recap.md +77 -0
  97. package/templates/commands/roadmap.md +99 -0
  98. package/templates/commands/scout.md +89 -0
  99. package/templates/commands/verify.md +140 -0
  100. package/templates/skills/opengoal-flow/SKILL.md +169 -0
  101. package/templates/skills/opengoal-subagent/SKILL.md +159 -0
@@ -0,0 +1,436 @@
1
+ <div align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/opengoal-logo-wordmark-dark.webp"/>
4
+ <img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/opengoal-logo-wordmark.webp" alt="OpenGoal" width="180"/>
5
+ </picture>
6
+ <p><strong>以目标为中心的 AI harness。开放的结构,清晰的当下。</strong></p>
7
+ <p>一个问题,一个文件 — <code>CONTEXT.md</code>、<code>GOAL.md</code>、<code>ROADMAP.md</code></p>
8
+ <p>
9
+ 打开 <code>GOAL.md</code>,看到<b>现在该做什么</b>。<br/>
10
+ 打开 <code>CONTEXT.md</code>,看到<b>当前的上下文</b>。<br/>
11
+ 打开 <code>ROADMAP.md</code>,看到<b>当前的大局</b>。
12
+ </p>
13
+ <p><a href="README.md">English</a> · <a href="README.ko.md">한국어</a> · <strong>简体中文</strong> · <a href="README.ja.md">日本語</a></p>
14
+ </div>
15
+
16
+ > 本文档是英文版的翻译,可能滞后于英文版,以英文版为准。欢迎提交 PR 修正翻译。
17
+
18
+ ## 这是什么?
19
+
20
+ OpenGoal 让当前目标始终以纯 markdown 的形式呈现,对你和你的 AI 智能体都清晰可见。
21
+
22
+ 一条 npx 命令,就能把 markdown 斜杠命令和智能体技能安装进你的项目。此后不存在运行时
23
+ ——没有 CLI 参与其中,没有钩子拦截你的操作,也没有 MCP 服务器让工具定义常驻占用。留在
24
+ 磁盘上的,只是你的智能体会读取、而你可以用任何编辑器修改的 markdown。
25
+
26
+ ## 它解决什么问题?
27
+
28
+ **现在该做什么,看不见。**
29
+ 当前目标散落在各种状态文件、任务列表和设计文档之中。
30
+ 你无法打开一个文件就立刻看到接下来该做什么——你的智能体也做不到,而这更糟糕,
31
+ 因为它会毫不犹豫地依据自己最后读到的那个片段继续推进。
32
+
33
+ 在 OpenGoal 中,一个问题对应一个文件。
34
+
35
+ ```text
36
+ ROADMAP.md ───────── 我在大局中处于哪个位置?
37
+ CONTEXT.md ────── 这个项目是什么?
38
+ ● GOAL.md ── 我现在该做什么?
39
+ ```
40
+
41
+ **维持上下文的代价,不该比上下文本身还大。**
42
+ 试图跨会话维持状态的框架,往往依赖 CLI、钩子和 MCP 服务器。哪怕只是一次轻量的探索,
43
+ 也会触发一次 CLI 运行;钩子会拦截每一个动作;而配置好的 MCP 服务器,即便在从不调用它
44
+ 的会话里,也照样把 token 花在工具定义上。让状态持久化,这份投入是值得的;但这样的代价
45
+ 不值得。
46
+
47
+ ## 快速开始
48
+
49
+ ```bash
50
+ npx @opellen/opengoal init
51
+ ```
52
+
53
+ 项目中会安装好 markdown 命令。此后不再需要任何 CLI。
54
+
55
+ ```
56
+ /opgl:scout # 开始会话 — 只要记住这一个命令就够了
57
+ ```
58
+
59
+ 无论是新项目还是已有代码库,scout 都会读取当前状态并引导你走向下一步。
60
+ 已有代码?那就从设置项目上下文开始(`/opgl:context`)。空项目?那就先通过对话来
61
+ 梳理你的想法。
62
+
63
+ 大多数命令会在首次使用时自动执行 `init`——不用先手动敲 `init`,直接执行
64
+ `/opgl:goal "我的目标"` 就能立即开始。
65
+
66
+ ### 选项
67
+
68
+ ```bash
69
+ opengoal init --docs .planning # 使用 docs/ 以外的其他路径
70
+ opengoal init --codebase src # 将模板指向某个子目录下的代码库(默认:.)
71
+ opengoal init --tools cursor # 只为指定工具安装
72
+ opengoal init --tools cursor,windsurf # 同时安装到多个工具
73
+ opengoal init --no-subagent # 关闭子智能体委派(默认开启)
74
+ opengoal init --root path/to/proj # 安装到另一个项目目录
75
+ opengoal init --force # 覆盖已存在的文件
76
+ opengoal init --dry-run # 预览将要安装的文件
77
+ opengoal init --prefix <name> # 斜杠命令前缀(默认:opgl)
78
+ opengoal init --from-prefix <name> # 清理旧前缀遗留下的命令文件
79
+ ```
80
+
81
+ `--tools` 支持 `Claude Code`、`Cursor`、`Windsurf`,以及[另外 20 多种工具](docs/supported-tools.md)。
82
+
83
+ ## 文档结构
84
+
85
+ ```
86
+ docs/
87
+ ├── CONTEXT.md ← 项目上下文、原则、工作流程
88
+ ├── GOAL.md ← 当前目标与任务清单
89
+ ├── CHECKPOINT.md ← 上一次会话的进度
90
+ ├── DESIGN.md ← 实现设计(按需)
91
+ ├── PLAN.md ← 实现计划(复杂任务时自动生成)
92
+ ├── ROADMAP.md ← 以里程碑组织的整体计划
93
+ ├── BACKLOG.md ← 暂缓处理的范围外发现
94
+ ├── OVERVIEW.md ← 项目全貌总览(按需)
95
+ └── suspended/ ← 被中止的目标与暂存的子目标
96
+ ```
97
+
98
+ | 文档 | 回答的问题 | 生命周期 |
99
+ |----------|-------------------|----------|
100
+ | `CONTEXT.md` | 这个项目是什么,我该怎么参与? | 项目全程 |
101
+ | `GOAL.md` | 我现在该做什么? | 直到目标达成 |
102
+ | `CHECKPOINT.md` | 上次会话进行到哪了? | 按会话(每次覆盖) |
103
+ | `DESIGN.md` | 这个要怎么实现? | 直到目标达成 |
104
+ | `PLAN.md` | 这个任务要怎么实现? | 自动生成 → 自动归档 |
105
+ | `ROADMAP.md` | 我在大局中处于哪个位置? | 项目全程 |
106
+ | `BACKLOG.md` | 我发现了什么,但先放一放? | 项目全程 |
107
+ | `OVERVIEW.md` | 整个项目大致是什么样子? | 项目全程 |
108
+
109
+ 可以只从 `GOAL.md` 开始,再逐步扩展到 `ROADMAP.md`;也可以先在 `ROADMAP.md` 里画出
110
+ 大局,再逐步细化到 `GOAL.md`。无论哪个方向,OpenGoal 都会把"现在该做什么"保持在
111
+ markdown 中清晰可见。
112
+
113
+ <details>
114
+ <summary>GOAL.md 示例</summary>
115
+
116
+ ```markdown
117
+ ---
118
+ id: session-auth
119
+ goal: 将认证从 JWT 迁移到基于会话(session)
120
+ status: in-progress
121
+ started: 2026-04-04
122
+ ---
123
+
124
+ ## Tasks
125
+
126
+ - [x] 1. 搭建会话存储
127
+ - [ ] 2. 替换中间件 — Step 1/2(会话中间件进行中)
128
+ - [x] 2.1. 实现会话中间件
129
+ - [ ] 2.2. 移除旧的 JWT 代码
130
+ - [ ] 3. 数据库 schema 迁移
131
+ - [ ] 4. 集成测试
132
+ ```
133
+
134
+ </details>
135
+
136
+ <details>
137
+ <summary>CONTEXT.md 示例</summary>
138
+
139
+ ```markdown
140
+ # Project Overview
141
+ 基于 Express + PostgreSQL 的 REST API 服务器。
142
+ 认证正在从 JWT 迁移到基于会话(session)的方式。
143
+
144
+ # Architecture
145
+ - src/server/ — HTTP 路由(Express)
146
+ - src/auth/ — 认证中间件
147
+ - src/db/ — 数据库访问层
148
+
149
+ # Principles
150
+ - 迁移过程中零停机
151
+ - 与现有客户端保持向后兼容
152
+
153
+ # Resources
154
+ - 数据库:PostgreSQL 14,通过 prisma 管理迁移
155
+ - 认证:express-session + connect-pg-simple
156
+ ```
157
+
158
+ </details>
159
+
160
+ <details>
161
+ <summary>ROADMAP.md 示例</summary>
162
+
163
+ ```markdown
164
+ ---
165
+ id: api-v2
166
+ title: API v2 迁移
167
+ status: active
168
+ started: 2026-03-01
169
+ ---
170
+
171
+ - [x] **M1:认证迁移**
172
+ - [ ] **M2:限流**
173
+ - [ ] **M3:API 版本管理**
174
+ ```
175
+
176
+ </details>
177
+
178
+ ## 命令
179
+
180
+ | | 命令 | 说明 |
181
+ |---|---------|-------------|
182
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-scout-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-scout.webp" alt="" width="20"/></picture> | `/opgl:scout` | 开始会话 — 读取文档、评估当前状态、给出下一步建议 |
183
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-go-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-go.webp" alt="" width="20"/></picture> | `/opgl:go` | 执行目标 — 按顺序推进 `GOAL.md` 中的任务 |
184
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-context-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-context.webp" alt="" width="20"/></picture> | `/opgl:context` | 创建并同步 `CONTEXT.md` |
185
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-goal-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-goal.webp" alt="" width="20"/></picture> | `/opgl:goal` | `GOAL.md` 管理(init、breakdown、checkpoint、suspend、resume、subgoal、archive) |
186
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-design-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-design.webp" alt="" width="20"/></picture> | `/opgl:design` | `DESIGN.md` 管理(init、sync、archive) |
187
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-roadmap-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-roadmap.webp" alt="" width="20"/></picture> | `/opgl:roadmap` | `ROADMAP.md` 里程碑管理(init、add、archive) |
188
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-overview-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-overview.webp" alt="" width="20"/></picture> | `/opgl:overview` | `OVERVIEW.md` 项目全貌总览 |
189
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-verify-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-verify.webp" alt="" width="20"/></picture> | `/opgl:verify` | 验证目标、设计与实现之间的一致性 |
190
+ | <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-recap-dark.webp"><img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/icons/opengoal-icon-recap.webp" alt="" width="20"/></picture> | `/opgl:recap` | 会话收尾 — 把讨论中产生的决定同步进长期文档 |
191
+
192
+ 随同这些命令一起安装的还有两个技能——`opengoal-flow`(什么时候该写文档、什么时候该
193
+ 记录 checkpoint、什么时候一个新发现该独立成一个目标)和 `opengoal-subagent`(工作
194
+ 如何拆分,以及主智能体绝不外包的部分)。你不需要直接调用某个技能;命令会在需要时
195
+ 自动加载它们。
196
+
197
+ ### 调用方式
198
+
199
+ 你不必每次都输入 `/opgl:`——当意图从上下文中已经足够清晰时,自然语言同样能触发执行。
200
+
201
+ | 路径 | 是否需要 `/opgl` | 示例 |
202
+ |------|-------------------|---------|
203
+ | **显式调用** | 需要 | `/opgl goal init`、`/opgl:goal init & design init` |
204
+ | **确认最近的建议** | 不需要 | AI:"建议执行 `/opgl:goal init`" → 用户:"ok" / "继续" |
205
+ | **活跃流程中的延续** | 不需要 | (goal init 之后)用户:"breakdown 一下" |
206
+ | **任务执行意图** | 不需要 | "继续做任务 6" → `/opgl:go`,"保存一下进度" → `/opgl:goal checkpoint` |
207
+
208
+ 只要上下文足够清晰,单靠自然语言就能触发执行;上下文含糊不清时,`/opgl` 就是明确
209
+ 的兜底方式。
210
+
211
+ ## 使用流程
212
+
213
+ ### 应用到已有项目
214
+
215
+ ```
216
+ You: /opgl:scout
217
+ AI: 发现了一个已有代码库,还没有 CONTEXT.md。
218
+ 要用 `/opgl:context` 设置项目上下文吗?
219
+
220
+ You: /opgl:context init
221
+ AI: ✓ docs/CONTEXT.md 已创建
222
+ 要设置目标,请用:`/opgl:goal init`
223
+
224
+ You: /opgl:goal 将认证模块从 JWT 迁移到基于会话
225
+ AI: ✓ docs/GOAL.md 已创建(5 个任务)
226
+ 建议执行 `/opgl:design init` —— 这是一个涉及文件级决策的实现任务。
227
+
228
+ You: /opgl:design init
229
+ AI: ✓ docs/DESIGN.md 已创建
230
+ 已包含会话存储选型、迁移策略、回滚方案
231
+
232
+ You: /opgl:go
233
+ AI: Task 1/5:搭建会话存储... ✓ done
234
+ Task 2/5:替换中间件... ✓ done
235
+ Task 3/5 需要修改数据库 schema,是否继续?
236
+ ```
237
+
238
+ ### 新项目
239
+
240
+ ```
241
+ You: /opgl:scout 我们来聊聊做一个实时协作编辑器吧
242
+ AI: (Discovery Mode — 探索技术栈、需求与约束条件)
243
+ ...
244
+ ✓ docs/CONTEXT.md 已创建
245
+
246
+ You: /opgl:roadmap init
247
+ AI: ✓ docs/ROADMAP.md 已创建
248
+ ├── M1:核心编辑器引擎
249
+ ├── M2:实时同步(CRDT)
250
+ └── M3:部署与基础设施
251
+
252
+ You: /opgl:goal
253
+ AI: 从 ROADMAP.md 中选取 M1。
254
+ ✓ docs/GOAL.md 已创建
255
+
256
+ You: /opgl:goal breakdown
257
+ AI: 已拆解为 7 个子任务
258
+
259
+ You: /opgl:goal breakdown 3
260
+ AI: 已将 Task 3 拆解为 4 个子任务(3.1–3.4)
261
+
262
+ You: /opgl:go
263
+ AI: Task 1/7:项目初始化... ✓ done
264
+ Task 2/7:编辑器核心实现... ✓ done
265
+ Task 3/7:CRDT 同步引擎... ✓ done
266
+
267
+ You: /opgl:goal checkpoint
268
+ AI: ✓ docs/CHECKPOINT.md 已保存
269
+ (如果会话中断,下一次会从这里接着来)
270
+
271
+ ...(在下一个会话中继续,直到所有任务完成)
272
+
273
+ You: /opgl:goal archive
274
+ AI: ✓ 已将 4 个文件归档到 docs/archive/goals/2026-04-04-editor-core/
275
+ (GOAL.md、DESIGN.md、PLAN.md、CHECKPOINT.md)
276
+ 已在 ROADMAP.md 中把 M1 标记为完成。
277
+ ```
278
+
279
+ ### 恢复工作
280
+
281
+ ```
282
+ You: /opgl:scout
283
+ AI: CONTEXT.md ✓ | GOAL.md ✓(3/5 已完成)
284
+ 你在上一次会话中正在处理 API 接口相关的工作。
285
+ 要用 `/opgl:go` 继续吗?
286
+ ```
287
+
288
+ ### 上下文压缩之后
289
+
290
+ 如果对话在工作过程中被压缩(compact),只需重新调用命令即可:
291
+
292
+ ```
293
+ You: /opgl:go
294
+ AI: GOAL.md ✓(3/7 已完成) — Task 4,Step 2/3
295
+ 正在继续:CRDT 同步引擎中的冲突解决。
296
+ ```
297
+
298
+ 一条命令就能把一切找回来——`GOAL.md`,以及你保存过的 checkpoint(如果有的话)——
299
+ 工作会从 `— Step N/M` 这个标注处继续,而不是从头开始。如果想先看一份状态报告,
300
+ 用 `/opgl:scout`。
301
+
302
+ ### 处理阻塞项
303
+
304
+ 当目标进行到一半时,出现了必须优先处理的事情:
305
+
306
+ ```
307
+ You:(目标 A 进行中)先修一下这个依赖问题吧。
308
+ AI: 建议:/opgl:goal suspend + /opgl:goal init "修复依赖问题"
309
+ You: ok
310
+ AI: ✓ 目标 A 已中止并保存到 docs/suspended/goal-a/
311
+ ✓ 已为这个阻塞项创建新的 GOAL.md。
312
+
313
+ ...(处理完阻塞项后归档)
314
+
315
+ You: /opgl:goal resume
316
+ AI: 已恢复:目标 A。要用 /opgl:go 继续吗?
317
+ ```
318
+
319
+ 嵌套的阻塞项遵循同样的模式——`suspend` 会像栈一样层层堆叠,`resume` 在有多个目标
320
+ 被暂停时会给出一个列表供选择。如果当前有 sub-goal 处于活跃状态,请先用
321
+ `/opgl:goal subgoal pause` 将它暂存——只要有 sub-goal 处于活跃状态,`suspend` 和
322
+ `init` 都会被拒绝执行。
323
+
324
+ ### 处理子目标
325
+
326
+ 有时候冒出来的事情并不是阻塞项——目标依然可以继续推进——但它比一个任务更大、
327
+ 现在就需要处理、而且和目标本身的性质不同,所以也不能简单地丢进 `BACKLOG.md`
328
+ 里等着:
329
+
330
+ ```
331
+ You:(目标 A:求职申请流水线 进行中)我需要一个 YAML→PDF 的作品集生成工具——
332
+ 这个得先做一些架构上的决策。
333
+ AI: 不会阻塞目标 A,但直接内联处理又太大了。建议:
334
+ /opgl:goal subgoal init "作品集 PDF 生成工具"
335
+ You: ok
336
+ AI: ✓ 目标 A 已暂存到 docs/suspended/job-application-pipeline/
337
+ ✓ 已创建新的 GOAL.md,并与目标 A 关联。
338
+
339
+ ...(设计并构建作品集工具,完成后归档)
340
+
341
+ AI: ✓ sub-goal 已归档。回到目标 A —— 对应的指针任务已勾选完成。
342
+ ```
343
+
344
+ 如果没有它目标就完全无法推进,那就应该把它当作阻塞项处理——参见上文。
345
+
346
+ ## 实践案例
347
+
348
+ 同样一套目标文档,既能撑起一个开发多年的应用,也能撑起一个周末就能完成的插件。
349
+ 这种跨度正是关键所在。
350
+
351
+ **长周期开发**
352
+
353
+ - [Planura](https://github.com/opellen/Planura) — 一款原生的直接建模 3D 应用
354
+ (C++20 / Qt 6 / OpenGL):半边(half-edge)几何内核、CSG 实体建模、推理驱动的
355
+ 绘图,构建在自研框架 [Ordo](https://github.com/opellen/Ordo) 之上。
356
+ - [Ordo](https://github.com/opellen/Ordo) — 从 Planura 中提取出来的 C++20 类型化事件应用框架。
357
+ 事件就是一个普通的结构体:类型即身份,字段即载荷。
358
+ - 逆向工程项目 — OpenGoal 最初就是为这类场景设计的:目标庞大、路径未知,
359
+ 进展全靠把任务拆得足够细。
360
+
361
+ **应用与工具**
362
+
363
+ - [SeedNote](https://github.com/opellen/Seed-Note) — 一款面向 Android 的结构化块编辑器(Kotlin / Jetpack Compose)
364
+ - [ScreenUse](https://github.com/opellen/Screen-Use) — 一款场景驱动的 UI 回放与验证工具,能驱动真实应用并录制过程
365
+ - [OpenIllust](https://github.com/opellen/OpenIllust) — 面向 Claude Code 与 Codex 的、以 campaign 为单位的 AI
366
+ 矢量素材生产工具。本仓库的 logo 套件正是用它制作的。
367
+
368
+ **专注型工具**
369
+
370
+ - [Hilo](https://github.com/opellen/Hilo) — 一款 Obsidian 高亮插件
371
+ - [Loft](https://github.com/opellen/Loft) — 一款 Obsidian 图片上传插件
372
+
373
+ ## 源于**空白**
374
+
375
+ > **一开始,它跟应用开发没什么关系。**
376
+ >
377
+ > OpenGoal 是为那种目标庞大、路径完全未知的工作而生的——进展只能靠把未知拆成
378
+ > 一个个足够小、能验证的步骤,让人和智能体在很长的时间跨度里来回接力完成。
379
+ > 最初的场景,是旷日持久的逆向工程项目。后来它被用到的所有其他地方,
380
+ > 都继承了这个基本形态。
381
+ >
382
+ > **繁重的流程,并不总是必要的。**
383
+ >
384
+ > 我其实只是想做一个小修复——真的需要搞这么大阵仗吗?
385
+ > 连环追问式的详尽讨论、滴水不漏的规格说明,并不总是必要的。
386
+ > 严谨的流程当然有它的吸引力。但 AI 能吞下的东西越来越多,
387
+ > 我开始觉得,我们想要依赖的那些安全网,很多时候其实变成了过度的枷锁。
388
+ > 可上下文,终究还是要留住的。
389
+ >
390
+ > **我想把注意力放回当下。**
391
+ >
392
+ > 我想把"现在的目标"从层层规格和任务列表底下拽出来。
393
+ > 我想创造一个我和 AI 都能立刻理解、立刻专注的"当下"。
394
+ > 无论是从小处起步慢慢长大,还是从大局出发逐步下钻——
395
+ > 不管哪个方向,我都想要一种"现在该做什么"能立刻被看见的结构。
396
+ >
397
+ > **我想填补这处空白。**
398
+ >
399
+ > 我有时候从 OpenSpec 开始,中途转到 OpenGoal,反过来也一样;
400
+ > 有时候我会用上 Superpowers。
401
+ > 好用的东西,就该继续被好好用。
402
+ > 我需要的是一样能站在"完整"与"强大"之前——或者说,介于两者之间——的东西。
403
+
404
+ ## 标记法
405
+
406
+ OpenGoal 的命令和技能并不是用普通散文写成的,而是遵循一套精简的 markdown 标记法
407
+ ——`## Constraints`、`(condition) => action` 式的分派规则、`for each`、`loop until`。
408
+
409
+ 这种形式借鉴了关于伪代码提示(pseudocode prompting)的已发表研究。CodeAgents
410
+ (2025)的报告显示,用伪代码而非散文描述智能体工作流,能将 token 用量降低
411
+ 55–87%,同时将任务表现提升 3–36 分。
412
+
413
+ 语法和优先级规则记录在 [docs/NOTATION.md](docs/NOTATION.md) 中——如果你要调整
414
+ 项目里已安装的命令,会用得上。这套标记法背后的原理和研究背景,参见
415
+ [docs/notation-guide.md](docs/notation-guide.md)。
416
+
417
+ ## 贡献
418
+
419
+ 欢迎提交 Issue——无论是 bug、疑问、想法,还是不同意见。
420
+
421
+ 平台适配器(`src/platforms/`)部分接受 Pull Request;提示词模板(prompt templates)
422
+ 由我自己维护。详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
423
+
424
+ ### 本地开发
425
+
426
+ ```bash
427
+ git clone https://github.com/opellen/OpenGoal.git
428
+ cd OpenGoal
429
+ npm install
430
+ npm run build
431
+ npm test
432
+ ```
433
+
434
+ ## 许可证
435
+
436
+ MIT 许可证——详见 [LICENSE](LICENSE)。
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};