@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
package/README.md ADDED
@@ -0,0 +1,416 @@
1
+ <div align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/opellen/opengoal/main/assets/opengoal-logo-lockup-dark.webp">
4
+ <img src="https://raw.githubusercontent.com/opellen/opengoal/main/assets/opengoal-logo-lockup.webp" alt="OpenGoal" width="300"/>
5
+ </picture>
6
+ <p><strong>Goal-centric AI harness. Open structure, clear present.</strong></p>
7
+ <p>One question, one file — <code>CONTEXT.md</code>, <code>GOAL.md</code>, <code>ROADMAP.md</code></p>
8
+ <p>
9
+ Open <code>GOAL.md</code> and see <b>what to do now</b>.<br/>
10
+ Open <code>CONTEXT.md</code> and see <b>the current context</b>.<br/>
11
+ Open <code>ROADMAP.md</code> and see <b>the current big picture</b>.
12
+ </p>
13
+ <p><strong>English</strong> · <a href="README.ko.md">한국어</a> · <a href="README.zh-CN.md">简体中文</a> · <a href="README.ja.md">日本語</a></p>
14
+ </div>
15
+
16
+ ## What is it?
17
+
18
+ OpenGoal keeps the current goal visible, in plain markdown, for both you and your AI agent.
19
+
20
+ One npx command installs markdown slash-commands and agent skills into your project. After that
21
+ there is no runtime — no CLI in the loop, no hooks intercepting your actions, no MCP server
22
+ holding tool definitions open. What is left on disk is markdown your agent reads and you can
23
+ edit in any editor.
24
+
25
+ ## What does it solve?
26
+
27
+ **What you need to do right now isn't visible.**
28
+ The current goal ends up scattered across state files, task lists, and design documents.
29
+ You can't open one file and immediately see what to do next — and neither can your agent,
30
+ which is worse, because it will confidently proceed from whichever fragment it read last.
31
+
32
+ In OpenGoal, one question maps to one file.
33
+
34
+ ```text
35
+ ROADMAP.md ───────── where am I in the big picture?
36
+ CONTEXT.md ────── what is this project?
37
+ ● GOAL.md ── what do I do now?
38
+ ```
39
+
40
+ **Keeping context shouldn't cost more than the context.**
41
+ Frameworks that maintain state across sessions tend to reach for CLIs, hooks, and MCP servers.
42
+ Light exploration triggers a CLI run, hooks intercept every action, and a configured MCP server
43
+ spends tokens on tool definitions in sessions that never call them. Persistence is worth paying
44
+ for; that price isn't.
45
+
46
+ ## Quick start
47
+
48
+ ```bash
49
+ npx @opellen/opengoal init
50
+ ```
51
+
52
+ Markdown commands are installed in your project. No CLI needed after this.
53
+
54
+ ```
55
+ /opgl:scout # Start session — just remember this
56
+ ```
57
+
58
+ Whether it's a new project or an existing codebase, scout reads the current state and guides you to the next step.
59
+ Got existing code? It starts with context setup (`/opgl:context`). Empty project? It starts by exploring your idea through conversation.
60
+
61
+ Most commands auto-run `init` on first use — `/opgl:goal "my goal"` works immediately without typing `init`.
62
+
63
+ ### Options
64
+
65
+ ```bash
66
+ opengoal init --docs .planning # Use a different path instead of docs/
67
+ opengoal init --codebase src # Point templates at a sub-directory codebase (default: .)
68
+ opengoal init --tools cursor # Install for a specific tool
69
+ opengoal init --tools cursor,windsurf # Multiple tools
70
+ opengoal init --no-subagent # Disable subagent delegation (enabled by default)
71
+ opengoal init --root path/to/proj # Install into a different project directory
72
+ opengoal init --force # Overwrite existing files
73
+ opengoal init --dry-run # Preview files to install
74
+ opengoal init --prefix <name> # Slash-command prefix (default: opgl)
75
+ opengoal init --from-prefix <name> # Clean up command files left by a previous prefix
76
+ ```
77
+
78
+ `--tools` targets `Claude Code`, `Cursor`, `Windsurf`, and [20+ others](docs/supported-tools.md).
79
+
80
+ ## Document structure
81
+
82
+ ```
83
+ docs/
84
+ ├── CONTEXT.md ← Project context, principles, workflow
85
+ ├── GOAL.md ← Current objective and checklist
86
+ ├── CHECKPOINT.md ← Last session progress
87
+ ├── DESIGN.md ← Implementation design (as needed)
88
+ ├── PLAN.md ← Implementation plan (auto-generated for complex tasks)
89
+ ├── ROADMAP.md ← Milestone-based overall plan
90
+ ├── BACKLOG.md ← Deferred out-of-scope discoveries
91
+ ├── OVERVIEW.md ← Full project overview (as needed)
92
+ └── suspended/ ← Suspended goals and parked sub-goals
93
+ ```
94
+
95
+ | Document | Question it answers | Lifespan |
96
+ |----------|-------------------|----------|
97
+ | `CONTEXT.md` | What is this project and how do I work on it? | Project lifetime |
98
+ | `GOAL.md` | What should I do right now? | Until goal is achieved |
99
+ | `CHECKPOINT.md` | Where did the last session leave off? | Per session (overwritten) |
100
+ | `DESIGN.md` | How do I implement this? | Until goal is achieved |
101
+ | `PLAN.md` | How do I implement this task? | Auto-generated → auto-archived |
102
+ | `ROADMAP.md` | Where am I in the big picture? | Project lifetime |
103
+ | `BACKLOG.md` | What did I discover but defer? | Project lifetime |
104
+ | `OVERVIEW.md` | What does this whole project look like? | Project lifetime |
105
+
106
+ Start with just `GOAL.md` and expand to `ROADMAP.md`, or lay out the big picture in `ROADMAP.md` and drill down to `GOAL.md`. Either way, OpenGoal keeps "what to do now" visible on markdown.
107
+
108
+ <details>
109
+ <summary>GOAL.md example</summary>
110
+
111
+ ```markdown
112
+ ---
113
+ id: session-auth
114
+ goal: Migrate auth from JWT to session-based
115
+ status: in-progress
116
+ started: 2026-04-04
117
+ ---
118
+
119
+ ## Tasks
120
+
121
+ - [x] 1. Set up session store
122
+ - [ ] 2. Replace middleware — Step 1/2 (session middleware in progress)
123
+ - [x] 2.1. Implement session middleware
124
+ - [ ] 2.2. Remove legacy JWT code
125
+ - [ ] 3. DB schema migration
126
+ - [ ] 4. Integration tests
127
+ ```
128
+
129
+ </details>
130
+
131
+ <details>
132
+ <summary>CONTEXT.md example</summary>
133
+
134
+ ```markdown
135
+ # Project Overview
136
+ Express + PostgreSQL REST API server.
137
+ Auth migration from JWT to session-based in progress.
138
+
139
+ # Architecture
140
+ - src/server/ — HTTP routing (Express)
141
+ - src/auth/ — Auth middleware
142
+ - src/db/ — Database access layer
143
+
144
+ # Principles
145
+ - Zero downtime during migration
146
+ - Backward compatibility with existing clients
147
+
148
+ # Resources
149
+ - DB: PostgreSQL 14, migrations via prisma
150
+ - Auth: express-session + connect-pg-simple
151
+ ```
152
+
153
+ </details>
154
+
155
+ <details>
156
+ <summary>ROADMAP.md example</summary>
157
+
158
+ ```markdown
159
+ ---
160
+ id: api-v2
161
+ title: API v2 migration
162
+ status: active
163
+ started: 2026-03-01
164
+ ---
165
+
166
+ - [x] **M1: Auth migration**
167
+ - [ ] **M2: Rate limiting**
168
+ - [ ] **M3: API versioning**
169
+ ```
170
+
171
+ </details>
172
+
173
+ ## Commands
174
+
175
+ | | Command | Description |
176
+ |---|---------|-------------|
177
+ | <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` | Start session — read docs, assess current state, suggest next action |
178
+ | <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` | Execute goal — proceed through `GOAL.md` tasks in order |
179
+ | <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` | Create and sync `CONTEXT.md` |
180
+ | <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` management (init, breakdown, checkpoint, suspend, resume, subgoal, archive) |
181
+ | <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` management (init, sync, archive) |
182
+ | <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` milestone management (init, add, archive) |
183
+ | <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` full project overview |
184
+ | <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` | Verify consistency across goal, design, and implementation |
185
+ | <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` | Session wrap-up — sync decisions into living documents |
186
+
187
+ Two skills install alongside them — `opengoal-flow` (when to document, when to checkpoint,
188
+ and when a discovery becomes a goal of its own) and `opengoal-subagent` (how work is split,
189
+ and what the main agent never hands off). You never invoke a skill directly; the commands
190
+ load them when they need them.
191
+
192
+ ### Invocation
193
+
194
+ You don't always need to type `/opgl:` — when intent is clear from context, natural language works too.
195
+
196
+ | Path | `/opgl` required? | Example |
197
+ |------|-------------------|---------|
198
+ | **Explicit invocation** | Yes | `/opgl goal init`, `/opgl:goal init & design init` |
199
+ | **Confirming a recent recommendation** | No | AI: "Recommend `/opgl:goal init`" → User: "ok" / "go" |
200
+ | **Continuation in active flow** | No | (after goal init) User: "breakdown now" |
201
+ | **Task-execution intent** | No | "proceed with task 6" → `/opgl:go`, "save progress" → `/opgl:goal checkpoint` |
202
+
203
+ With clear context, natural language alone triggers execution. `/opgl` serves as an escape hatch when context is ambiguous.
204
+
205
+ ## Usage flow
206
+
207
+ ### Applying to an existing project
208
+
209
+ ```
210
+ You: /opgl:scout
211
+ AI: Found an existing codebase. No CONTEXT.md yet.
212
+ Set up project context with `/opgl:context`?
213
+
214
+ You: /opgl:context init
215
+ AI: ✓ docs/CONTEXT.md created
216
+ To set a goal: `/opgl:goal init`
217
+
218
+ You: /opgl:goal Migrate auth module from JWT to session-based
219
+ AI: ✓ docs/GOAL.md created (5 tasks)
220
+ Recommend `/opgl:design init` — implementation task with file-level decisions.
221
+
222
+ You: /opgl:design init
223
+ AI: ✓ docs/DESIGN.md created
224
+ Session store selection, migration strategy, rollback plan included
225
+
226
+ You: /opgl:go
227
+ AI: Task 1/5: Set up session store... ✓ done
228
+ Task 2/5: Replace middleware... ✓ done
229
+ Task 3/5 requires DB schema changes. Proceed?
230
+ ```
231
+
232
+ ### New project
233
+
234
+ ```
235
+ You: /opgl:scout Let's discuss building a real-time collaborative editor
236
+ AI: (Discovery Mode — exploring tech stack, requirements, constraints)
237
+ ...
238
+ ✓ docs/CONTEXT.md created
239
+
240
+ You: /opgl:roadmap init
241
+ AI: ✓ docs/ROADMAP.md created
242
+ ├── M1: Core editor engine
243
+ ├── M2: Real-time sync (CRDT)
244
+ └── M3: Deployment & infrastructure
245
+
246
+ You: /opgl:goal
247
+ AI: Selecting M1 from ROADMAP.md.
248
+ ✓ docs/GOAL.md created
249
+
250
+ You: /opgl:goal breakdown
251
+ AI: Decomposed into 7 subtasks
252
+
253
+ You: /opgl:goal breakdown 3
254
+ AI: Decomposed Task 3 into 4 subtasks (3.1–3.4)
255
+
256
+ You: /opgl:go
257
+ AI: Task 1/7: Project initialization... ✓ done
258
+ Task 2/7: Editor core implementation... ✓ done
259
+ Task 3/7: CRDT sync engine... ✓ done
260
+
261
+ You: /opgl:goal checkpoint
262
+ AI: ✓ docs/CHECKPOINT.md saved
263
+ (If the session drops, the next one picks up where you left off)
264
+
265
+ ... (continue in next session, all tasks complete)
266
+
267
+ You: /opgl:goal archive
268
+ AI: ✓ Archived 4 files to docs/archive/goals/2026-04-04-editor-core/
269
+ (GOAL.md, DESIGN.md, PLAN.md, CHECKPOINT.md)
270
+ Marked M1 done in ROADMAP.md.
271
+ ```
272
+
273
+ ### Resuming work
274
+
275
+ ```
276
+ You: /opgl:scout
277
+ AI: CONTEXT.md ✓ | GOAL.md ✓ (3/5 complete)
278
+ You were working on API endpoints in the previous session.
279
+ Resume with `/opgl:go`?
280
+ ```
281
+
282
+ ### After a context compaction
283
+
284
+ When the conversation gets compacted mid-work, just re-invoke the command:
285
+
286
+ ```
287
+ You: /opgl:go
288
+ AI: GOAL.md ✓ (3/7 complete) — Task 4, Step 2/3
289
+ Resuming: conflict resolution in the CRDT sync engine.
290
+ ```
291
+
292
+ One command brings everything back — `GOAL.md`, and the checkpoint if you made one — and work continues from the `— Step N/M` annotation instead of starting over. Use `/opgl:scout` if you want a state report first.
293
+
294
+ ### Handling blockers
295
+
296
+ When something comes up mid-goal that must be fixed first:
297
+
298
+ ```
299
+ You: (during Goal A) Let's fix this dependency bug first.
300
+ AI: Suggest: /opgl:goal suspend + /opgl:goal init "Fix dependency bug"
301
+ You: ok
302
+ AI: ✓ Goal A suspended to docs/suspended/goal-a/
303
+ ✓ New GOAL.md created for the blocker.
304
+
305
+ ... (work through the blocker, archive when done)
306
+
307
+ You: /opgl:goal resume
308
+ AI: Resumed: Goal A. Continue with /opgl:go?
309
+ ```
310
+
311
+ Nested blockers follow the same pattern — suspend stacks, resume presents a list when multiple goals are paused. If a sub-goal is active, park it first with `/opgl:goal subgoal pause` — `suspend` and `init` are refused while one is active.
312
+
313
+ ### Handling sub-goals
314
+
315
+ Sometimes what comes up isn't a blocker — the goal can still move forward — but it's bigger than a task, needed now, and a different kind of work than the goal itself, so it can't just wait in `BACKLOG.md` either:
316
+
317
+ ```
318
+ You: (during Goal A: job-application pipeline) I need a YAML→PDF portfolio builder for this — it needs its own architecture decisions first.
319
+ AI: Doesn't block Goal A, but it's too big to just do inline. Suggest: /opgl:goal subgoal init "Portfolio PDF builder"
320
+ You: ok
321
+ AI: ✓ Goal A parked to docs/suspended/job-application-pipeline/
322
+ ✓ New GOAL.md created, linked to Goal A.
323
+
324
+ ... (design and build the portfolio tool, archive when done)
325
+
326
+ AI: ✓ Sub-goal archived. Back on Goal A — pointer task checked off.
327
+ ```
328
+
329
+ If the goal can't proceed without it, park it as a blocker instead — see above.
330
+
331
+ ## In the field
332
+
333
+ The same goal documents carry a multi-year application build and a weekend plugin.
334
+ That range is the point.
335
+
336
+ **Long-horizon builds**
337
+
338
+ - [Planura](https://github.com/opellen/Planura) — a native direct-modeling 3D application
339
+ (C++20 / Qt 6 / OpenGL): half-edge geometry kernel, CSG solid modeling, inference-driven
340
+ drawing, on [Ordo](https://github.com/opellen/Ordo), its purpose-built application framework.
341
+ - [Ordo](https://github.com/opellen/Ordo) — a typed-event application framework for C++20, extracted from
342
+ Planura. An event is a plain struct: the type is the identity, the fields are the payload.
343
+ - Reverse-engineering campaigns — the domain OpenGoal was designed in, where the goal is
344
+ large, the path is unknown, and progress depends on splitting it finely.
345
+
346
+ **Applications & tools**
347
+
348
+ - [SeedNote](https://github.com/opellen/Seed-Note) — a structured block editor for Android (Kotlin / Jetpack Compose)
349
+ - [ScreenUse](https://github.com/opellen/Screen-Use) — a scenario-driven UI replay and verification tool that drives a real app and records it
350
+ - [OpenIllust](https://github.com/opellen/OpenIllust) — campaign-driven AI vector asset production for Claude Code and
351
+ Codex; the logo set in this repository was produced with it
352
+
353
+ **Focused tools**
354
+
355
+ - [Hilo](https://github.com/opellen/Hilo) — an Obsidian highlighting plugin
356
+ - [Loft](https://github.com/opellen/Loft) — an Obsidian image upload plugin
357
+
358
+ ## From the **gap**
359
+
360
+ > **It didn't start with application development.**
361
+ >
362
+ > OpenGoal was built for work where the goal is large, the path is unknown, and progress
363
+ > only comes from splitting the unknown into small, verifiable steps that a human and an
364
+ > agent can hand back and forth over a long horizon — long reverse-engineering campaigns,
365
+ > in the original case. Everything else it is used for inherited that shape.
366
+ >
367
+ > **Heavy workflows weren't always necessary.**
368
+ >
369
+ > All I wanted was a small fix — did I really need all this?
370
+ > Exhaustive discussions with question bombardment and airtight specifications weren't always necessary.
371
+ > Thorough processes are appealing. But AI kept absorbing more and more,
372
+ > and I started to think that maybe the safety nets we want to lean on were, in many cases, becoming excessive shackles.
373
+ > Yet context needed to persist.
374
+ >
375
+ > **I wanted to focus on the present.**
376
+ >
377
+ > I wanted to pull the "current goal" out from under specs and task lists.
378
+ > I wanted to create a "present" that both I and AI could immediately understand and focus on.
379
+ > Whether you grow from small to large, or descend from the big picture —
380
+ > either direction, I wanted a structure where "what to do now" is immediately visible.
381
+ >
382
+ > **I wanted to fill the gap.**
383
+ >
384
+ > I sometimes start with OpenSpec and cross over to OpenGoal, and vice versa.
385
+ > Sometimes I equip Superpowers.
386
+ > What works well should still be used well.
387
+ > I needed something that could sit in front of — or between — completeness and power.
388
+
389
+ ## Notation
390
+
391
+ OpenGoal's commands and skills aren't written as plain prose. They follow a small markdown notation — `## Constraints`, `(condition) => action` dispatch rules, `for each`, `loop until`.
392
+
393
+ The form follows published work on pseudocode prompting. CodeAgents (2025) reported that describing agent workflows as pseudocode rather than prose cut token usage by 55–87% while improving task performance by 3–36 points.
394
+
395
+ The syntax and priority rules are documented in [docs/NOTATION.md](docs/NOTATION.md) — useful if you tweak the installed commands in your own project. For the rationale and research background behind the notation, see [docs/notation-guide.md](docs/notation-guide.md).
396
+
397
+ ## Contributing
398
+
399
+ Issues are welcome — bugs, questions, ideas, disagreements.
400
+
401
+ Pull requests are accepted for platform adapters (`src/platforms/`); I maintain the
402
+ prompt templates myself. See [CONTRIBUTING.md](CONTRIBUTING.md).
403
+
404
+ ### Development
405
+
406
+ ```bash
407
+ git clone https://github.com/opellen/OpenGoal.git
408
+ cd OpenGoal
409
+ npm install
410
+ npm run build
411
+ npm test
412
+ ```
413
+
414
+ ## License
415
+
416
+ MIT License — see [LICENSE](LICENSE) for details.