goalbuddy 0.3.2 → 0.3.6

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 (55) hide show
  1. package/README.md +55 -5
  2. package/RELEASE-0.3.5.md +324 -0
  3. package/goalbuddy/SKILL.md +40 -13
  4. package/goalbuddy/agents/README.md +1 -1
  5. package/goalbuddy/agents/goal_judge.toml +33 -17
  6. package/goalbuddy/agents/goal_scout.toml +34 -14
  7. package/goalbuddy/agents/goal_worker.toml +36 -16
  8. package/goalbuddy/extend/local-goal-board/README.md +8 -4
  9. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
  10. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
  11. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
  12. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
  13. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
  14. package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
  15. package/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
  16. package/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +1188 -31
  17. package/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
  18. package/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +479 -5
  19. package/goalbuddy/scripts/check-goal-state.mjs +192 -6
  20. package/goalbuddy/scripts/parallel-plan.mjs +191 -0
  21. package/goalbuddy/scripts/render-task-prompt.mjs +305 -0
  22. package/goalbuddy/templates/agents.md +5 -4
  23. package/goalbuddy/templates/goal.md +18 -4
  24. package/goalbuddy/templates/state.yaml +14 -1
  25. package/internal/assets/goalbuddy-v0.3.5-release.png +0 -0
  26. package/internal/cli/goal-maker.mjs +172 -9
  27. package/package.json +3 -2
  28. package/plugins/goalbuddy/.claude-plugin/plugin.json +2 -2
  29. package/plugins/goalbuddy/.codex-plugin/plugin.json +4 -4
  30. package/plugins/goalbuddy/README.md +5 -3
  31. package/plugins/goalbuddy/agents/goal-judge.md +35 -16
  32. package/plugins/goalbuddy/agents/goal-scout.md +38 -13
  33. package/plugins/goalbuddy/agents/goal-worker.md +37 -14
  34. package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +40 -13
  35. package/plugins/goalbuddy/skills/goalbuddy/agents/README.md +1 -1
  36. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_judge.toml +33 -17
  37. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_scout.toml +34 -14
  38. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_worker.toml +36 -16
  39. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/README.md +8 -4
  40. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
  41. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
  42. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
  43. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
  44. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
  45. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
  46. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
  47. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +1188 -31
  48. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
  49. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +479 -5
  50. package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +192 -6
  51. package/plugins/goalbuddy/skills/goalbuddy/scripts/parallel-plan.mjs +191 -0
  52. package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +305 -0
  53. package/plugins/goalbuddy/skills/goalbuddy/templates/agents.md +5 -4
  54. package/plugins/goalbuddy/skills/goalbuddy/templates/goal.md +18 -4
  55. package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +14 -1
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
 
@@ -44,6 +44,25 @@ In Claude Code, use:
44
44
 
45
45
  Goal Prep creates the board and prints the exact `/goal` command to run next. That is the whole path.
46
46
 
47
+ ## Codex Install Model
48
+
49
+ For Codex, the canonical install is the native plugin plus bundled agents:
50
+
51
+ ```text
52
+ ~/.codex/plugins/cache/goalbuddy/goalbuddy/<version>/
53
+ ~/.codex/agents/goal_judge.toml
54
+ ~/.codex/agents/goal_scout.toml
55
+ ~/.codex/agents/goal_worker.toml
56
+ ```
57
+
58
+ The Codex plugin bundles `$goal-prep`; a clean Codex install should not need personal `~/.codex/skills/goalbuddy` or `~/.codex/skills/goal-maker` folders. Native Codex `/goal` is a separate OpenAI-gated feature. GoalBuddy prepares local boards and handoff prompts for it, but it does not enable or replace native `/goal`.
59
+
60
+ To verify a Codex install:
61
+
62
+ ```bash
63
+ npx goalbuddy doctor --target codex --goal-ready
64
+ ```
65
+
47
66
  ## What It Creates
48
67
 
49
68
  ```text
@@ -51,6 +70,7 @@ docs/goals/<your-goal>/
51
70
  goal.md
52
71
  state.yaml
53
72
  notes/
73
+ subgoals/ # optional depth-1 child boards
54
74
  ```
55
75
 
56
76
  `goal.md` says what you want.
@@ -59,6 +79,8 @@ docs/goals/<your-goal>/
59
79
 
60
80
  `notes/` keeps longer findings out of the main thread.
61
81
 
82
+ `subgoals/` holds optional child boards when one parent task needs a bounded branch of work.
83
+
62
84
  ## How It Thinks
63
85
 
64
86
  ```text
@@ -67,12 +89,36 @@ rough idea -> goal prep -> /goal -> scout -> judge -> worker -> receipt -> verif
67
89
 
68
90
  Scout maps the repo.
69
91
 
70
- Judge chooses the next bounded slice.
92
+ Judge chooses the largest safe useful slice.
71
93
 
72
- Worker changes code and leaves a receipt.
94
+ Worker completes the whole assigned slice and leaves a receipt.
73
95
 
74
96
  `/goal` keeps the loop honest until the original goal is actually done.
75
97
 
98
+ ## Slice Sizing
99
+
100
+ Safe does not mean small. Safe means bounded, explicit, verified, and reversible.
101
+
102
+ GoalBuddy should not optimize for tiny safe tasks. It should optimize for the largest safe useful slice: a working screen, working API path, data pipeline step, backend vertical slice, real bug fix, or milestone review. The board warns when it sees safe-looking work that keeps adding helpers, contracts, proof files, or doc notes without moving the outcome.
103
+
104
+ ## Subgoals, Parallel Agents, and Dark Mode
105
+
106
+ GoalBuddy keeps the model small:
107
+
108
+ - `state.yaml` is the source of truth.
109
+ - A board is a view of one `state.yaml`.
110
+ - The local hub is a switchboard for many boards.
111
+ - A subgoal is one depth-1 `state.yaml` linked from a parent task.
112
+ - Settings are viewer preferences, not workflow state.
113
+
114
+ 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.
115
+
116
+ ## Execution Quality
117
+
118
+ GoalBuddy can prepare safe parallel work; it does not run a parallel org chart.
119
+
120
+ Use `goalbuddy prompt docs/goals/<slug>` to render a compact prompt for the active task without dumping the whole state file. The prompt includes a mandatory `required_spawn_agent_type`; Codex PMs should use that exact GoalBuddy agent (`goal_scout`, `goal_worker`, or `goal_judge`) instead of a generic role agent. 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.
121
+
76
122
  ## Update
77
123
 
78
124
  When a new GoalBuddy version ships:
@@ -85,7 +131,11 @@ That updates both Codex and Claude Code.
85
131
 
86
132
  ## Live Boards
87
133
 
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.
134
+ 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.
135
+
136
+ Multiple local boards reuse one readable `goalbuddy.localhost` hub with an in-header board switcher. When sharing a board in chat or docs, use a real Markdown link such as `[Open GoalBuddy board](http://goalbuddy.localhost:41737/<slug>/)` so the URL is clickable. The viewer also supports dark mode, compact mode, completed-task collapse, active-work motion, and reduced-motion handling.
137
+
138
+ See [GoalBuddy 0.3.5: Subgoals, Parallel Agents, and Dark Mode](RELEASE-0.3.5.md) for the release notes.
89
139
 
90
140
  <p align="center">
91
141
  <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 an actual clickable Markdown link, for example `[Open GoalBuddy board](http://goalbuddy.localhost:41737/<slug>/)`. Do not put the board URL only in a code block, quote, HTML comment, or prose that the UI cannot click.
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
 
@@ -203,15 +203,31 @@ Planning, Scout findings, Judge decisions, and a queued Worker task are not term
203
203
  For execution goals, the default run is continuous:
204
204
 
205
205
  ```text
206
- Discover enough evidence, choose a safe implementation slice, implement it, verify it, audit it, then immediately choose and execute the next safe slice until the full original outcome is complete.
206
+ Discover enough evidence, choose the largest reversible local work package, implement it, verify it, review only at risk or phase boundaries, then immediately choose and execute the next work package until the full original outcome is complete.
207
207
  ```
208
208
 
209
209
  If the first `/goal` run reaches a Judge decision that names a safe Worker task with `allowed_files`, `verify`, and `stop_if`, the PM should activate that Worker and continue in the same run unless a stop condition applies.
210
210
 
211
- After a verified Worker slice and audit, do not mark the thread goal complete merely because that slice passed. A slice audit is a checkpoint. For broad automation or product goals, continue by reopening or advancing the board to the next safe Worker task until the full owner outcome is complete.
211
+ After a verified Worker package, do not mark the thread goal complete merely because that package passed. For broad automation or product goals, continue by reopening or advancing the board to the next safe Worker package until the full owner outcome is complete.
212
212
 
213
213
  Missing owner input, credentials, production access, destructive-operation permission, or policy decisions are blockers for specific tasks, not stopping conditions for the whole goal. When a slice hits one of those blockers, mark that exact task blocked with a receipt, create a safe follow-up or workaround task, and keep doing local, non-destructive work that advances the full outcome.
214
214
 
215
+ ## Slice Sizing Policy
216
+
217
+ A good task is the largest safe useful slice.
218
+
219
+ Small is not the goal. Useful is the goal.
220
+
221
+ Safe does not mean small. Safe means bounded, explicit, verified, and reversible.
222
+
223
+ A good Worker task usually produces a working screen, a working API path, a working data pipeline step, a working backend vertical slice, a real bug fix, or a milestone review. A bad Worker task is one more tiny helper, projection function, contract file, read-only proof, or doc note unless that tiny task is truly blocking progress.
224
+
225
+ Judge picks the largest safe useful next slice. Worker completes the whole assigned slice. Judge reviews the whole slice.
226
+
227
+ After two tiny tasks in a row, PM or Judge should reorient the board. If a demo milestone is complete, the next task should move toward the next real milestone.
228
+
229
+ Tiny tasks are allowed when the failure is isolated, the risk is high, the scope is unknown, or the tiny task unlocks a larger slice. Tiny tasks are bad when they keep happening, do not change behavior, only add wrappers/contracts/proof files, or avoid the real milestone.
230
+
215
231
  ## When To Use
216
232
 
217
233
  Use this skill for goals that are broad, multi-hour, ambiguous, high-risk, already planned, already stale, already red, or likely to need Scout/Judge/Worker delegation.
@@ -267,7 +283,7 @@ What counts as enough for the current tranche?
267
283
  Avoid forever goals. A broad goal should define an execution tranche, for example:
268
284
 
269
285
  ```text
270
- Discover the highest-leverage local improvements, complete successive safe verified implementation slices, audit each slice against the original user outcome, and keep advancing until the full outcome is complete.
286
+ Discover the highest-leverage local improvements, complete successive safe verified work packages, review only at risk or phase boundaries, and keep advancing until the full outcome is complete.
271
287
  ```
272
288
 
273
289
  ## Board
@@ -390,8 +406,9 @@ Judge receipt:
390
406
  ```yaml
391
407
  receipt:
392
408
  result: done
393
- decision: "Do router coverage first; defer auth flake because it is not reproducible locally."
394
- next_allowed_task: T004
409
+ decision: "approved"
410
+ full_outcome_complete: false
411
+ rationale: "Router coverage is verified; continue with the next PM-selected work package."
395
412
  blocked_tasks:
396
413
  - T005
397
414
  ```
@@ -440,7 +457,7 @@ Blocked tasks do not necessarily block the goal. The PM should keep doing safe l
440
457
 
441
458
  - create a Scout task to improve evidence;
442
459
  - create a Judge task to resolve ambiguity;
443
- - create a Worker task for a smaller safe slice;
460
+ - create a Worker task for the largest reversible local work package that can proceed;
444
461
  - write or update a note for handoff;
445
462
  - update receipts and verification freshness.
446
463
 
@@ -471,9 +488,11 @@ After a task completes, immediately write its receipt and select the next active
471
488
 
472
489
  - a final audit proves the full original owner outcome is complete.
473
490
 
474
- Do not stop at "ready for implementation" when a safe Worker task exists. Activate the Worker, execute it, verify it, and then run the audit task.
491
+ Do not stop at "ready for implementation" when a safe Worker task exists. Activate the Worker, execute it, verify it, and keep going.
492
+
493
+ Do not stop after one verified work package when the broader owner outcome still has safe local follow-up work. Advance the board to the next work package unless a risk boundary or final audit is due.
475
494
 
476
- Do not stop after one verified implementation slice when the broader owner outcome still has safe local follow-up slices. Treat a slice audit as permission to advance the board, not as permission to finish, unless the audit explicitly proves the full original outcome is complete.
495
+ Do not create a Judge task after every Worker by default. Use Judge only for phase boundaries, high-risk changes, unclear scope, rejected verification, or final completion. Repeated same-shape work belongs in one Worker package.
477
496
 
478
497
  Do not stop because the current slice needs owner input, credentials, production access, destructive operations, or policy decisions. Mark that slice blocked, spawn or activate the smallest safe local task that can proceed around the blocker, and continue.
479
498
 
@@ -506,9 +525,9 @@ Non-`installed` states are warnings, not false failures, because the main `/goal
506
525
 
507
526
  | Agent | Thinking level | Write access | Use for |
508
527
  |---|---:|---:|---|
509
- | Scout | medium | no | source/spec/repo evidence mapping |
510
- | Worker | low | yes, bounded | one exact implementation or recovery task |
511
- | Judge | high | no | strategic review, ambiguity, scope, completion skepticism |
528
+ | Scout | low | no | targeted source/spec/repo evidence mapping |
529
+ | Worker | medium | yes, bounded | one coherent bounded useful slice |
530
+ | Judge | high | no | phase/risk/final review, ambiguity, scope, completion skepticism |
512
531
 
513
532
  A task's `assignee` determines the agent. The task card is the order. The receipt is the return format.
514
533
 
@@ -538,6 +557,14 @@ reasoning_hint: default # default | low | medium | high | xhigh
538
557
 
539
558
  Treat `reasoning_hint` as PM guidance. It does not override task scope, write permissions, stop conditions, or the one-active-task rule.
540
559
 
560
+ ## Execution Quality Commands
561
+
562
+ 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, continuation warnings, and the expected receipt shape. It should not include broad chat history or dump the whole state file.
563
+
564
+ When dispatching Codex subagents from a GoalBuddy prompt, the `required_spawn_agent_type` is mandatory. Use that exact `spawn_agent` `agent_type` (`goal_scout`, `goal_worker`, or `goal_judge`). Do not substitute generic `scout`, `worker`, or `judge` agents; if the required GoalBuddy agent is unavailable, stop spawning and continue as PM fallback or run `npx goalbuddy agents`/`npx goalbuddy install`. After one `wait_agent` timeout with no visible allowed-file changes, stop waiting, record the timeout, and recover deterministically instead of waiting forever.
565
+
566
+ 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.
567
+
541
568
  ## Completion
542
569
 
543
570
  Never complete because work looks substantial.
@@ -546,7 +573,7 @@ Completion is a Judge or PM audit task. The goal is done only when a final done
546
573
 
547
574
  For execution goals, completion also requires implementation evidence. A final audit cannot call the goal done if the only completed work is planning, discovery, or task selection.
548
575
 
549
- For continuous execution goals, the final audit receipt must include `full_outcome_complete: true`. If the receipt only proves that the current slice or tranche is complete, keep the goal active and queue or activate the next safe Worker/Judge/PM task.
576
+ For continuous execution goals, the final audit receipt must include `full_outcome_complete: true`. If the receipt only proves that the current work package or tranche is complete, keep the goal active and queue or activate the next safe Worker/PM task. Add a Judge only when the next decision is a phase, risk, ambiguity, rejected verification, or final completion review.
550
577
 
551
578
  Queued or active Worker tasks block `goal.status: done`. If a Worker is no longer required, mark it blocked with a receipt explaining why, remove it during PM board maintenance, or replace it with the actual required Worker task before completion.
552
579
 
@@ -13,7 +13,7 @@ This directory contains skill metadata and bundled agent definitions for Codex a
13
13
  | Agent | Codex file | Claude Code file | Reasoning effort | Write scope |
14
14
  |---|---|---|---:|---|
15
15
  | Scout | `goal_scout.toml` | `goal-scout.md` | medium | read-only |
16
- | Worker | `goal_worker.toml` | `goal-worker.md` | low | workspace-write |
16
+ | Worker | `goal_worker.toml` | `goal-worker.md` | medium | workspace-write |
17
17
  | Judge | `goal_judge.toml` | `goal-judge.md` | high | read-only |
18
18
 
19
19
  ## Recommended Codex Config
@@ -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,39 @@ 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 package must include objective, allowed_files, verify commands, and stop_if, and should cover the largest reversible local work package at that boundary.
17
+ - Choose the largest safe useful slice: bounded, explicit, verified, reversible, and outcome-moving. Safety does not mean tiny.
18
+ - Judge a whole useful slice, not one helper at a time.
19
+ - Detect micro-slice loops. Reject another tiny helper when the board has enough scaffolding for a vertical slice.
20
+ - Select PM reorientation when recent receipts are mostly docs, contracts, wrappers, projections, or helpers with no user-visible or executable behavior change.
21
+ - Prefer milestone reviews over helper reviews.
22
+ - A safe child board must be depth 1, inside subgoals/, non-recursive, and linked from exactly one parent task.
23
+ - Parallel Worker work is safe only with provably disjoint allowed_files. Separate boards alone are not proof.
24
+ - Reject completion unless the full original outcome is mapped to receipts and current verification.
25
+ - Do not generate routine next tasks, choose the active task, or mutate state. The PM owns continuation after your review.
14
26
 
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.
27
+ Return exactly one parseable JSON receipt object:
16
28
 
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.
29
+ {
30
+ "goalbuddy_receipt_v1": {
31
+ "result": "done | blocked",
32
+ "task_id": "<T###>",
33
+ "board_path": "<path to state.yaml>",
34
+ "decision": "approved | rejected | approve_subgoal | reject_subgoal | not_complete | complete",
35
+ "full_outcome_complete": false,
36
+ "rationale": "<=120 words>",
37
+ "evidence": [],
38
+ "subgoal_contract": null,
39
+ "parallel_safety": null,
40
+ "blocked_tasks": [],
41
+ "missing_evidence": [],
42
+ "required_board_updates": []
43
+ }
44
+ }
29
45
  """