goalbuddy 0.3.2 → 0.3.5

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 (51) hide show
  1. package/README.md +28 -3
  2. package/RELEASE-0.3.5.md +324 -0
  3. package/goalbuddy/SKILL.md +8 -2
  4. package/goalbuddy/agents/goal_judge.toml +29 -17
  5. package/goalbuddy/agents/goal_scout.toml +34 -14
  6. package/goalbuddy/agents/goal_worker.toml +32 -15
  7. package/goalbuddy/extend/local-goal-board/README.md +8 -4
  8. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
  9. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
  10. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
  11. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
  12. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
  13. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
  14. package/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
  15. package/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +940 -24
  16. package/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
  17. package/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +420 -4
  18. package/goalbuddy/scripts/check-goal-state.mjs +116 -6
  19. package/goalbuddy/scripts/parallel-plan.mjs +191 -0
  20. package/goalbuddy/scripts/render-task-prompt.mjs +248 -0
  21. package/goalbuddy/templates/agents.md +2 -2
  22. package/goalbuddy/templates/state.yaml +8 -0
  23. package/internal/assets/goalbuddy-v0.3.5-release.png +0 -0
  24. package/internal/cli/goal-maker.mjs +64 -1
  25. package/package.json +3 -2
  26. package/plugins/goalbuddy/.claude-plugin/plugin.json +2 -2
  27. package/plugins/goalbuddy/.codex-plugin/plugin.json +4 -4
  28. package/plugins/goalbuddy/README.md +5 -3
  29. package/plugins/goalbuddy/agents/goal-judge.md +31 -16
  30. package/plugins/goalbuddy/agents/goal-scout.md +38 -13
  31. package/plugins/goalbuddy/agents/goal-worker.md +35 -14
  32. package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +8 -2
  33. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_judge.toml +29 -17
  34. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_scout.toml +34 -14
  35. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_worker.toml +32 -15
  36. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/README.md +8 -4
  37. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
  38. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
  39. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
  40. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
  41. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
  42. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
  43. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
  44. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +940 -24
  45. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
  46. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +420 -4
  47. package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +116 -6
  48. package/plugins/goalbuddy/skills/goalbuddy/scripts/parallel-plan.mjs +191 -0
  49. package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +248 -0
  50. package/plugins/goalbuddy/skills/goalbuddy/templates/agents.md +2 -2
  51. package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +8 -0
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <p align="center">
4
4
  <a href="https://goalbuddy.dev">
5
- <img src="internal/assets/goalbuddy-v0.3.0-release.png" alt="GoalBuddy v0.3.0 release: Claude Code support, npx goalbuddy installs into Codex and Claude Code, and npx goalbuddy update keeps both current." width="100%">
5
+ <img src="internal/assets/goalbuddy-v0.3.5-release.png" alt="GoalBuddy v0.3.5 release: Subgoals, parallel agents, and dark mode." width="100%">
6
6
  </a>
7
7
  </p>
8
8
 
@@ -16,7 +16,7 @@
16
16
  <a href="https://goalbuddy.dev"><img alt="goalbuddy.dev" src="https://img.shields.io/badge/site-goalbuddy.dev-684cff?style=flat-square"></a>
17
17
  </p>
18
18
 
19
- GoalBuddy helps Codex and Claude Code stay oriented during long coding tasks.
19
+ GoalBuddy helps Codex and Claude Code stay oriented during long coding tasks, especially when the work branches into subgoals, parallel agents, and long-running verification.
20
20
 
21
21
  It gives `/goal` a small local workspace: a charter, a board, notes, receipts, and a clear next task. The work stays in your repo, so a run can pause, resume, verify, and keep going without re-inventing the plan every turn.
22
22
 
@@ -51,6 +51,7 @@ docs/goals/<your-goal>/
51
51
  goal.md
52
52
  state.yaml
53
53
  notes/
54
+ subgoals/ # optional depth-1 child boards
54
55
  ```
55
56
 
56
57
  `goal.md` says what you want.
@@ -59,6 +60,8 @@ docs/goals/<your-goal>/
59
60
 
60
61
  `notes/` keeps longer findings out of the main thread.
61
62
 
63
+ `subgoals/` holds optional child boards when one parent task needs a bounded branch of work.
64
+
62
65
  ## How It Thinks
63
66
 
64
67
  ```text
@@ -73,6 +76,24 @@ Worker changes code and leaves a receipt.
73
76
 
74
77
  `/goal` keeps the loop honest until the original goal is actually done.
75
78
 
79
+ ## Subgoals, Parallel Agents, and Dark Mode
80
+
81
+ GoalBuddy keeps the model small:
82
+
83
+ - `state.yaml` is the source of truth.
84
+ - A board is a view of one `state.yaml`.
85
+ - The local hub is a switchboard for many boards.
86
+ - A subgoal is one depth-1 `state.yaml` linked from a parent task.
87
+ - Settings are viewer preferences, not workflow state.
88
+
89
+ Use subgoals for bounded child work that belongs to a parent task. Use multiple local boards when parallel agents or separate goal runs are active at the same time. Keep the board open in light or dark mode while the work moves.
90
+
91
+ ## Execution Quality
92
+
93
+ GoalBuddy can prepare safe parallel work; it does not run a parallel org chart.
94
+
95
+ Use `goalbuddy prompt docs/goals/<slug>` to render a compact prompt for the active task without dumping the whole state file. Use `goalbuddy parallel-plan docs/goals/<slug>` to inspect read-only or disjoint write-scope work that can be handed to native Codex or Claude Code agent flows. The command reports recommendations only; it does not mutate state or spawn agents.
96
+
76
97
  ## Update
77
98
 
78
99
  When a new GoalBuddy version ships:
@@ -85,7 +106,11 @@ That updates both Codex and Claude Code.
85
106
 
86
107
  ## Live Boards
87
108
 
88
- GoalBuddy can open a local board while the work is running, so you can see the plan, active task, receipts, and verification status without digging through the chat.
109
+ GoalBuddy can open a local board while the work is running, so you can see the plan, active task, receipts, subgoals, and verification status without digging through the chat.
110
+
111
+ Multiple local boards reuse one readable `goalbuddy.localhost` hub with an in-header board switcher. The viewer also supports dark mode, compact mode, completed-task collapse, active-work motion, and reduced-motion handling.
112
+
113
+ See [GoalBuddy 0.3.5: Subgoals, Parallel Agents, and Dark Mode](RELEASE-0.3.5.md) for the release notes.
89
114
 
90
115
  <p align="center">
91
116
  <img src="internal/assets/goalbuddy-live-board.jpg" alt="GoalBuddy local live board open next to Codex while Scout, Judge, and Worker tasks populate." width="100%">
@@ -0,0 +1,324 @@
1
+ # GoalBuddy 0.3.5: Subgoals, Parallel Agents, and Dark Mode
2
+
3
+ Release date: 2026-05-12
4
+
5
+ ![GoalBuddy v0.3.5 release: Subgoals, parallel agents, and dark mode.](https://raw.githubusercontent.com/tolibear/goalbuddy/v0.3.5/internal/assets/goalbuddy-v0.3.5-release.png)
6
+
7
+ This is the release where GoalBuddy starts feeling less like a single board and more like a calm local workspace for serious agent work.
8
+
9
+ 0.3.5 adds three big things:
10
+
11
+ - **Subgoals**: depth-1 child boards for branching work.
12
+ - **Parallel agents**: safe, explicit surfaces for parallel Scout, Judge, and bounded Worker handoffs.
13
+ - **Dark mode**: a cleaner local board that can stay open all day without punishing your eyes.
14
+
15
+ Under the hood, this release also hardens GoalBuddy's execution model: stricter agent contracts, deterministic task prompts, conservative parallel planning, stronger checker rules, and safer child-board rendering.
16
+
17
+ Update with:
18
+
19
+ ```bash
20
+ npx goalbuddy update
21
+ ```
22
+
23
+ ## The Headline
24
+
25
+ GoalBuddy still has one simple job: keep long `/goal` runs oriented until the real outcome is done.
26
+
27
+ 0.3.5 makes that loop much easier to run when the work branches, when more than one agent is helping, or when you want a live board open beside Codex or Claude Code.
28
+
29
+ The model stays intentionally small:
30
+
31
+ - `goal.md` is the charter.
32
+ - `state.yaml` is the ledger.
33
+ - A board is a view of one `state.yaml`.
34
+ - A subgoal is one depth-1 child `state.yaml` linked from a parent task.
35
+ - The local hub is navigation, not workflow truth.
36
+ - Viewer settings are preferences, not state.
37
+
38
+ ## Subgoals
39
+
40
+ Subgoals give GoalBuddy a clean way to branch without turning into project-management software.
41
+
42
+ A parent task can now link to a child board under `subgoals/`:
43
+
44
+ ```yaml
45
+ subgoal:
46
+ status: active
47
+ path: subgoals/T004-board-view/state.yaml
48
+ owner: Worker
49
+ created_from: T004
50
+ depth: 1
51
+ rollup_receipt: null
52
+ ```
53
+
54
+ The local board renders that child board inside the parent task detail, so you can open one task and see the focused child workflow underneath it.
55
+
56
+ What this is good for:
57
+
58
+ - a parent task that needs a focused implementation branch
59
+ - a verification slice that deserves its own mini-board
60
+ - a Scout/Judge/Worker path that should stay bounded
61
+ - parallel work that needs a visible surface without losing the parent context
62
+
63
+ What it is not:
64
+
65
+ - recursive planning
66
+ - nested subgoals
67
+ - a separate project hierarchy
68
+ - a new source of truth
69
+
70
+ One parent task can have one depth-1 child board. That is the whole trick.
71
+
72
+ ## Parallel Agents
73
+
74
+ GoalBuddy 0.3.5 is parallel-agent-ready, but deliberately not an automatic scheduler.
75
+
76
+ That distinction matters.
77
+
78
+ GoalBuddy now helps you prepare safe parallel work surfaces:
79
+
80
+ - Scouts are read-only and safe to run in parallel by default.
81
+ - Judges are read-only and safe on separate board decisions.
82
+ - Workers are only safe when they are on separate boards or have provably disjoint `allowed_files`.
83
+ - Ambiguous Worker write scopes fail closed.
84
+
85
+ Use the new planner:
86
+
87
+ ```bash
88
+ goalbuddy parallel-plan docs/goals/<slug>
89
+ ```
90
+
91
+ It reports active tasks across the parent board and linked child boards:
92
+
93
+ - board path
94
+ - task id
95
+ - role
96
+ - recommended agent
97
+ - reasoning hint
98
+ - whether it is safe to parallelize
99
+ - why
100
+ - the exact prompt-render command
101
+
102
+ It does not mutate state. It does not spawn agents. It does not pretend overlap is safe.
103
+
104
+ That keeps GoalBuddy in the sweet spot: it makes parallel execution easier to see and safer to hand off, while native Codex or Claude Code agent flows still do the actual dispatch.
105
+
106
+ ## Dark Mode
107
+
108
+ The local board now has real dark mode.
109
+
110
+ Not "the background changed and half the text disappeared" dark mode. The board, task cards, modals, settings, detail sections, receipt text, and embedded child boards all get readable dark styling.
111
+
112
+ The board also adds global viewer settings:
113
+
114
+ - Theme: system, light, dark
115
+ - Density: comfortable, compact
116
+ - Completed column: show, collapse
117
+ - Open boards: last viewed, newest
118
+ - Motion: system, reduce, allow
119
+
120
+ Settings are local viewer preferences and live at:
121
+
122
+ ```text
123
+ ~/.goalbuddy/local-board-settings.json
124
+ ```
125
+
126
+ Tests can override that path with:
127
+
128
+ ```bash
129
+ GOALBUDDY_LOCAL_BOARD_SETTINGS_PATH=/tmp/goalbuddy-settings.json
130
+ ```
131
+
132
+ ## The Local Board Got Sharper
133
+
134
+ The board header now matches the GoalBuddy site style more closely:
135
+
136
+ - GoalBuddy mark and wordmark
137
+ - green live blip beside the wordmark
138
+ - board selector only when multiple boards are running
139
+ - GitHub stars link that opens in a new window
140
+ - cleaner settings gear
141
+
142
+ Multiple boards now share one readable local hub:
143
+
144
+ ```text
145
+ http://goalbuddy.localhost:41737/
146
+ ```
147
+
148
+ Each board gets its own path:
149
+
150
+ ```text
151
+ http://goalbuddy.localhost:41737/subgoal-parent-board/
152
+ http://goalbuddy.localhost:41737/local-kanban-board-extension/
153
+ ```
154
+
155
+ Launch another board while the hub is already running and GoalBuddy registers it with the existing local server instead of replacing the first board.
156
+
157
+ If port `41737` is occupied by something that is not GoalBuddy, the CLI says so clearly.
158
+
159
+ ## Active Work Is Easier To See
160
+
161
+ Active cards now have a visible in-progress treatment: a subtle moving border that makes the current task obvious at a glance.
162
+
163
+ The motion respects:
164
+
165
+ - `prefers-reduced-motion`
166
+ - the board Motion setting
167
+
168
+ So the board can feel alive without becoming noisy.
169
+
170
+ ## Better Agent Contracts
171
+
172
+ Scout, Judge, and Worker now have sharper contracts.
173
+
174
+ Scout:
175
+
176
+ - read-only
177
+ - compact evidence
178
+ - no edits
179
+ - no task selection
180
+ - receipt-shaped output
181
+
182
+ Judge:
183
+
184
+ - read-only
185
+ - phase gates and risky decisions only
186
+ - completion skepticism
187
+ - parallel-safety decisions
188
+ - subgoal approval boundaries
189
+
190
+ Worker:
191
+
192
+ - edits only `allowed_files`
193
+ - runs listed verification
194
+ - stops when scope expands
195
+ - returns changed files and verification results
196
+ - treats parallel Worker safety conservatively
197
+
198
+ This is the durable GoalBuddy model:
199
+
200
+ ```text
201
+ Scout maps. Judge gates. Worker patches. Receipts prove. state.yaml decides.
202
+ ```
203
+
204
+ ## Deterministic Prompt Rendering
205
+
206
+ New command:
207
+
208
+ ```bash
209
+ goalbuddy prompt docs/goals/<slug>
210
+ goalbuddy prompt docs/goals/<slug> --task T004
211
+ goalbuddy prompt --board docs/goals/<slug>/state.yaml --task T004
212
+ ```
213
+
214
+ The renderer emits compact task-specific prompts with:
215
+
216
+ - board path
217
+ - task id
218
+ - task type
219
+ - objective
220
+ - inputs
221
+ - constraints
222
+ - allowed files
223
+ - verify commands
224
+ - stop conditions
225
+ - reasoning hint
226
+ - recommended agent
227
+ - expected receipt shape
228
+
229
+ It avoids the bad handoff pattern where a subagent gets the entire state file, chat history assumptions, and too much inherited context.
230
+
231
+ ## Checker And Durability
232
+
233
+ The checker now understands 0.3.5 branching.
234
+
235
+ It accepts:
236
+
237
+ - depth-1 subgoals under the parent goal root
238
+ - child boards with `goal.md`, `state.yaml`, and `notes/`
239
+ - parent tasks linked to valid child boards
240
+ - Worker changed files that match simple `allowed_files` globs
241
+
242
+ It rejects:
243
+
244
+ - child paths outside the parent root
245
+ - child paths that do not point to `state.yaml`
246
+ - missing child state files
247
+ - nested child subgoals
248
+ - invalid child board state
249
+ - done Workers with changed files outside scope
250
+ - final completion without the expected verification and audit evidence
251
+
252
+ The board renderer also fails closed on invalid child paths, so a malformed subgoal cannot make the local board read a `state.yaml` outside the parent goal root.
253
+
254
+ ## Demo
255
+
256
+ Run the bundled parent/child board:
257
+
258
+ ```bash
259
+ node goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs \
260
+ --goal goalbuddy/extend/local-goal-board/examples/subgoal-parent
261
+ ```
262
+
263
+ Then try:
264
+
265
+ - switch to dark mode from the gear menu
266
+ - open task `T004` to see the embedded child board
267
+ - launch another board and use the header selector
268
+ - run `goalbuddy parallel-plan goalbuddy/extend/local-goal-board/examples/subgoal-parent`
269
+ - run `goalbuddy prompt goalbuddy/extend/local-goal-board/examples/subgoal-parent`
270
+
271
+ ## Tests
272
+
273
+ 0.3.5 adds or expands coverage for:
274
+
275
+ - parent task subgoal payloads
276
+ - embedded child boards
277
+ - missing child state files
278
+ - outside-root child paths
279
+ - live child-state updates over SSE
280
+ - multi-board hub registration
281
+ - settings persistence and normalization
282
+ - dark-mode readability surfaces
283
+ - prompt rendering
284
+ - read-only parallel planning
285
+ - overlapping Worker write scopes
286
+ - overlapping Worker glob patterns
287
+ - checker rejection for outside-root, missing, and nested subgoals
288
+ - plugin/source mirror consistency
289
+
290
+ Verified locally with:
291
+
292
+ ```bash
293
+ npm run check
294
+ git diff --check
295
+ npm run publish:check
296
+ ```
297
+
298
+ ## Release Boundaries
299
+
300
+ This release intentionally does not add:
301
+
302
+ - automatic parallel-agent spawning
303
+ - a parallel Worker scheduler
304
+ - automatic receipt application
305
+ - UI controls for creating or editing subgoals
306
+ - recursive/nested subgoals
307
+ - cloud-hosted board state
308
+
309
+ The principle is Karpathy-level simple:
310
+
311
+ ```text
312
+ One board owns one state file. A subgoal is one child state file. Parallel work is allowed only when the write boundaries are clear.
313
+ ```
314
+
315
+ That gives GoalBuddy a stronger execution loop without making it heavy.
316
+
317
+ ## Package Notes
318
+
319
+ This release updates:
320
+
321
+ - npm package version: `0.3.5`
322
+ - Codex plugin version: `0.3.5`
323
+ - Claude Code plugin version: `0.3.5`
324
+ - mirrored GoalBuddy skill files under `plugins/goalbuddy/skills/goalbuddy/`
@@ -85,7 +85,7 @@ Recommended options:
85
85
  2. GitHub Projects - best when stakeholders need a shared external board and the user can approve GitHub credentials/project details.
86
86
  3. No visual board - best for quick or private goals where the file board is enough.
87
87
 
88
- If the user chooses the local live board, create the goal directory, `notes/`, and an initial minimal `state.yaml` as soon as the slug is known, then run `npx goalbuddy board docs/goals/<slug>` and open the printed local URL in the AI coding agent's in-app browser (the Codex in-app Browser, the Claude Code preview, or the user's regular browser). In short: start the local board before filling the task list so the board pops up right away and cards populate live as `state.yaml` changes. Keep the printed URL in the final prep response as a fallback, but do not make the URL the primary experience.
88
+ If the user chooses the local live board, create the goal directory, `notes/`, and an initial minimal `state.yaml` as soon as the slug is known, then run `npx goalbuddy board docs/goals/<slug>` and open the printed local URL in the AI coding agent's in-app browser (the Codex in-app Browser, the Claude Code preview, or the user's regular browser). The default local hub is `http://goalbuddy.localhost:41737/`, and board URLs normally look like `http://goalbuddy.localhost:41737/<slug>/`. In short: start the local board before filling the task list so the board pops up right away and cards populate live as `state.yaml` changes. Include the printed board URL in the final prep response as the operator fallback, but do not make the URL the primary experience.
89
89
 
90
90
  If the user chooses GitHub Projects, ask for approval and the required project target before any live write. Create or sync the GitHub Project at the same early point as the local board: after the goal root and skeleton `state.yaml` exist, before the detailed task list is finished, then sync again as tasks populate. Run a dry-run sync first when possible. Missing GitHub credentials or project details should not block local board creation or goal prep; record the missing requirement in `visual_board.github_projects` and seed a PM setup task.
91
91
 
@@ -506,7 +506,7 @@ Non-`installed` states are warnings, not false failures, because the main `/goal
506
506
 
507
507
  | Agent | Thinking level | Write access | Use for |
508
508
  |---|---:|---:|---|
509
- | Scout | medium | no | source/spec/repo evidence mapping |
509
+ | Scout | low | no | targeted source/spec/repo evidence mapping |
510
510
  | Worker | low | yes, bounded | one exact implementation or recovery task |
511
511
  | Judge | high | no | strategic review, ambiguity, scope, completion skepticism |
512
512
 
@@ -538,6 +538,12 @@ reasoning_hint: default # default | low | medium | high | xhigh
538
538
 
539
539
  Treat `reasoning_hint` as PM guidance. It does not override task scope, write permissions, stop conditions, or the one-active-task rule.
540
540
 
541
+ ## Execution Quality Commands
542
+
543
+ Use `goalbuddy prompt docs/goals/<slug>` to render a compact prompt for the active task. The prompt includes only task-specific material, safe agent metadata, and the expected receipt shape. It should not include broad chat history or dump the whole state file.
544
+
545
+ Use `goalbuddy parallel-plan docs/goals/<slug>` when the user explicitly asks for parallel agent work. It is read-only: it recommends safe Scout/Judge handoffs and Worker handoffs only when write scopes are known and disjoint. It does not mutate `state.yaml`, create sub-goals, apply receipts, or spawn agents.
546
+
541
547
  ## Completion
542
548
 
543
549
  Never complete because work looks substantial.
@@ -1,5 +1,5 @@
1
1
  name = "goal_judge"
2
- description = "High-thinking strategic reviewer for GoalBuddy escalation: ambiguity, risky scope, source/product conflicts, safety/API/live decisions, and tranche completion."
2
+ description = "GoalBuddy Judge. Skeptical read-only gate for ambiguity, risky scope, phase transitions, completion, and parallel-safety decisions."
3
3
  model_reasoning_effort = "high"
4
4
  sandbox_mode = "read-only"
5
5
  nickname_candidates = ["Judge", "Reviewer", "Architect"]
@@ -7,23 +7,35 @@ nickname_candidates = ["Judge", "Reviewer", "Architect"]
7
7
  developer_instructions = """
8
8
  You are Judge for GoalBuddy.
9
9
 
10
- Thinking level: high.
11
- Mode: strategic reviewer and escalation authority.
10
+ Use Judge only for decisions that require judgment: contradictory sources, risky scope, dependency order, phase gates, live/API/security/persistence choices, completion, or whether work can safely branch into a depth-1 sub-goal. Routine checks belong to the checker.
12
11
 
13
- Think as a skeptical staff engineer and project-management systems designer. You decide and constrain; you do not broadly implement.
12
+ Hard contract:
13
+ - Read only. Do not edit, stage, install, or implement.
14
+ - Read state receipts before raw files. Then read only the inputs named in the Judge task.
15
+ - Be skeptical of progress. Lots of files, docs, or tests are not completion.
16
+ - A safe Worker task must include exact objective, allowed_files, verify commands, and stop_if.
17
+ - A safe child board must be depth 1, inside subgoals/, non-recursive, and linked from exactly one parent task.
18
+ - Parallel Worker work is safe only with provably disjoint allowed_files. Separate boards alone are not proof.
19
+ - Reject completion unless the full original outcome is mapped to receipts and current verification.
20
+ - Do not choose the active task or mutate state.
14
21
 
15
- Use when source, tests, product behavior, API/live strategy, dirty scope, giant-file risk, safety/auth/money/persistence semantics, task priority, or completion readiness is ambiguous.
22
+ Return exactly one parseable JSON receipt object:
16
23
 
17
- Do not approve based on lots of docs or lots of tests. Require coherent receipts and current verification.
18
-
19
- Return a compact Judge receipt for the PM to paste into state.yaml:
20
- - result
21
- - decision
22
- - evidence
23
- - next_allowed_task when work may continue
24
- - blocked_tasks when work should not proceed
25
- - completion decision when auditing a tranche
26
- - required board updates
27
-
28
- Do not broadly implement, select the active task, or mark the goal complete yourself.
24
+ {
25
+ "goalbuddy_receipt_v1": {
26
+ "result": "done | blocked",
27
+ "task_id": "<T###>",
28
+ "board_path": "<path to state.yaml>",
29
+ "decision": "approve_next | reject_next | approve_subgoal | reject_subgoal | not_complete | complete",
30
+ "full_outcome_complete": false,
31
+ "rationale": "<=120 words>",
32
+ "evidence": [],
33
+ "next_allowed_task": null,
34
+ "subgoal_contract": null,
35
+ "parallel_safety": null,
36
+ "blocked_tasks": [],
37
+ "missing_evidence": [],
38
+ "required_board_updates": []
39
+ }
40
+ }
29
41
  """
@@ -1,26 +1,46 @@
1
1
  name = "goal_scout"
2
- description = "Read-only evidence mapper for one GoalBuddy task. Finds repo/source/spec evidence, verification commands, ambiguities, and candidate next tasks."
3
- model_reasoning_effort = "medium"
2
+ description = "GoalBuddy Scout. Read-only mapper for one active task. Produces a compact evidence receipt, not a plan, implementation, or next active task."
3
+ model_reasoning_effort = "low"
4
4
  sandbox_mode = "read-only"
5
5
  nickname_candidates = ["Scout", "Mapper", "Tracer"]
6
6
 
7
7
  developer_instructions = """
8
8
  You are Scout for GoalBuddy.
9
9
 
10
- Thinking level: medium.
11
- Mode: read-only evidence mapping.
10
+ Default effort: low. Use deeper analysis only when the task explicitly asks for conflict synthesis, full-doc reading, or architecture discovery.
12
11
 
13
- You are read-only. Do not edit files, stage files, run destructive commands, or claim implementation is complete.
12
+ Hard contract:
13
+ - Read only. Do not edit, stage, install, start long-running services, or spawn agents.
14
+ - Work only on the active Scout task the PM gives you.
15
+ - Prefer targeted inspection over broad dumps. Do not paste full files or long command output.
16
+ - Read receipts and named inputs first. Only expand to extra files when needed to answer the task.
17
+ - Return evidence, contradictions, and candidate facts. Do not choose the next active task and do not mark completion.
14
18
 
15
- Given one active Scout task, map repo/source/spec evidence, verification commands, health signals, improvement candidates, target files, tests, and unresolved ambiguity.
19
+ Parallel safety:
20
+ - Scout may run in parallel with other Scouts because it is read-only.
21
+ - If asked to work on a child board, inspect only that child board plus explicitly linked parent context.
22
+ - Never mutate parent or child state.
16
23
 
17
- Return a compact Scout receipt for the PM to paste into state.yaml:
18
- - result
19
- - summary
20
- - evidence paths
21
- - note path if findings are too large for the task card
22
- - spawned_tasks when useful
23
- - ambiguity requiring Judge
24
+ Budget:
25
+ - Max 12 shell commands unless the task explicitly allows more.
26
+ - Max 12 evidence items.
27
+ - Summary max 120 words.
28
+ - If findings are long, request a note file path from the PM instead of dumping content.
24
29
 
25
- Do not select the active task or mark the goal complete.
30
+ Return exactly one parseable JSON receipt object:
31
+
32
+ {
33
+ "goalbuddy_receipt_v1": {
34
+ "result": "done | blocked",
35
+ "task_id": "<T###>",
36
+ "board_path": "<path to state.yaml>",
37
+ "summary": "<=120 words>",
38
+ "evidence": [],
39
+ "facts": [],
40
+ "contradictions": [],
41
+ "ambiguity_requiring_judge": [],
42
+ "commands": [],
43
+ "note_needed": false
44
+ }
45
+ }
26
46
  """
@@ -1,5 +1,5 @@
1
1
  name = "goal_worker"
2
- description = "Low-thinking bounded implementer for exactly one GoalBuddy Worker task with allowed files, verification commands, and stop conditions."
2
+ description = "GoalBuddy Worker. Bounded writer for exactly one active Worker task. Edits only allowed_files, runs verify, returns receipt."
3
3
  model_reasoning_effort = "low"
4
4
  sandbox_mode = "workspace-write"
5
5
  nickname_candidates = ["Worker", "Patch", "Fixer"]
@@ -7,22 +7,39 @@ nickname_candidates = ["Worker", "Patch", "Fixer"]
7
7
  developer_instructions = """
8
8
  You are Worker for GoalBuddy.
9
9
 
10
- Thinking level: low.
11
- Mode: one bounded writer.
10
+ Default effort: low. Only use higher effort when the task explicitly sets reasoning_hint medium or high.
12
11
 
13
- Execute exactly one active Worker task. Do not broaden scope.
12
+ Hard contract:
13
+ - Execute exactly one Worker task on exactly one board.
14
+ - Before editing, identify board_path, task_id, allowed_files, verify, and stop_if from the task. If any are missing, stop.
15
+ - Edit only files matching allowed_files. Do not edit GoalBuddy control files unless explicitly listed.
16
+ - Do not decide product strategy, architecture direction, live/API/deployment policy, or completion readiness.
17
+ - Do not spawn agents.
18
+ - Do not create child sub-goals unless the task explicitly allows it.
19
+ - Run the verify commands exactly as listed after edits. You may make at most two fix attempts.
20
+ - Stop immediately if required evidence is missing, a file outside allowed_files is needed, source/product/tests conflict, or verification still fails after two attempts.
21
+ - Keep the diff minimal and reversible.
14
22
 
15
- You may edit only the task's allowed_files. You may update only explicitly named control files if the PM included them in scope. Do not decide product behavior, retained/excluded scope, API/live/deployment strategy, architecture direction, parity, or completion readiness.
23
+ Parallel safety:
24
+ - Do not assume parallel Worker safety.
25
+ - If another active Worker may touch the same files, stop and report a blocker.
26
+ - Work on a child board only when the task board_path points to that child state.yaml.
27
+ - Never mutate the parent board from a child Worker unless the parent board file is explicitly in allowed_files.
16
28
 
17
- Stop immediately if required evidence is missing, files outside scope are needed, source/tests/product conflict, verification fails twice, or the diff exceeds the task budget.
29
+ Return exactly one parseable JSON receipt object:
18
30
 
19
- Return a compact Worker receipt for the PM to paste into state.yaml:
20
- - result
21
- - changed_files
22
- - commands run with pass/fail
23
- - summary
24
- - remaining_blockers
25
- - needs_judge when strategy or ambiguity remains
26
-
27
- Do not select the next active task or mark the goal complete.
31
+ {
32
+ "goalbuddy_receipt_v1": {
33
+ "result": "done | blocked",
34
+ "task_id": "<T###>",
35
+ "board_path": "<path to state.yaml>",
36
+ "changed_files": [],
37
+ "commands": [],
38
+ "summary": "<=120 words>",
39
+ "remaining_blockers": [],
40
+ "needs_judge": false,
41
+ "verification_attempts": 1,
42
+ "stopped_because": null
43
+ }
44
+ }
28
45
  """
@@ -2,13 +2,14 @@
2
2
 
3
3
  Generate a small local GoalBuddy board for a goal directory and watch it update live while agents work.
4
4
 
5
- The extension keeps `state.yaml` authoritative. It writes static web app files into the goal directory and serves them from a local-only Node server. The browser subscribes to Server-Sent Events, so cards update as `state.yaml` or `notes/` changes without a manual reload.
5
+ The extension keeps `state.yaml` authoritative. It writes static web app files into the goal directory and serves them from a local-only Node server. The browser subscribes to Server-Sent Events, so cards update as `state.yaml`, `notes/`, or linked depth-1 sub-goal state changes without a manual reload.
6
6
 
7
7
  ## Use When
8
8
 
9
9
  - A human wants a local board view during a GoalBuddy run.
10
10
  - The team wants GitHub-Projects-like visibility without GitHub credentials.
11
11
  - A goal should expose in-progress, completed, and blocked cards from local files.
12
+ - A parent task should show a depth-1 child board without replacing the parent board.
12
13
 
13
14
  ## Generate And Serve
14
15
 
@@ -28,7 +29,7 @@ docs/goals/<slug>/.goalbuddy-board/
28
29
  app.js
29
30
  ```
30
31
 
31
- Then it starts a server on `127.0.0.1` and prints the local URL.
32
+ Then it starts or reuses the shared local board hub at `http://goalbuddy.localhost:41737/`. The server still binds to loopback, so no `/etc/hosts` setup is required. The printed board URL includes the goal slug, like `http://goalbuddy.localhost:41737/my-goal/`. When multiple goal boards are active, each board shows a switcher in the header so you can move between parent boards, child boards, and parallel runs without leaving the board view.
32
33
 
33
34
  ## Check Without A Long-Running Server
34
35
 
@@ -45,6 +46,8 @@ The server watches:
45
46
 
46
47
  - `docs/goals/<slug>/state.yaml`
47
48
  - `docs/goals/<slug>/notes/`
49
+ - linked `docs/goals/<slug>/subgoals/**/state.yaml`
50
+ - linked `docs/goals/<slug>/subgoals/**/notes/`
48
51
 
49
52
  When either changes, the server re-reads the goal board and pushes a fresh board payload to connected browsers over `/events`.
50
53
 
@@ -55,7 +58,7 @@ When either changes, the server re-reads the goal board and pushes a fresh board
55
58
  - `blocked` tasks appear under **Blocked**.
56
59
  - `done` tasks appear under **Completed**, the right-most column.
57
60
 
58
- Clicking a card opens a detail modal with the task objective, status, assignee, inputs, constraints, expected output, verify commands, allowed files, stop conditions, and receipt details. If a receipt points to a note, the modal includes that note content as plain text.
61
+ Clicking a card opens a detail modal with the task objective, status, assignee, inputs, constraints, expected output, verify commands, allowed files, stop conditions, and receipt details. If the task links a sub-goal, the modal includes a read-only child board. If a receipt points to a note, the modal includes that note content as plain text.
59
62
 
60
63
  ## Verification
61
64
 
@@ -70,6 +73,7 @@ node extend/local-goal-board/scripts/local-goal-board.mjs \
70
73
  ## Boundaries
71
74
 
72
75
  - `state.yaml` remains the source of truth.
73
- - The server binds to `127.0.0.1` by default.
76
+ - The server binds to `127.0.0.1:41737` by default, advertises `http://goalbuddy.localhost:41737/`, and reuses that URL as a multi-board hub with in-board header navigation.
77
+ - Sub-goals are file-rendered depth-1 child boards; the UI does not create, mutate, or recurse sub-goals.
74
78
  - The generated UI renders file content as text, not raw HTML.
75
79
  - No package dependencies are required.
@@ -0,0 +1,3 @@
1
+ # Subgoal Parent Board
2
+
3
+ Fixture for rendering a parent task with a linked depth-1 child board.