goalbuddy 0.3.1 → 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 (52) hide show
  1. package/README.md +58 -180
  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.0-release.png +0 -0
  24. package/internal/assets/goalbuddy-v0.3.5-release.png +0 -0
  25. package/internal/cli/goal-maker.mjs +70 -2
  26. package/package.json +3 -2
  27. package/plugins/goalbuddy/.claude-plugin/plugin.json +2 -2
  28. package/plugins/goalbuddy/.codex-plugin/plugin.json +4 -4
  29. package/plugins/goalbuddy/README.md +5 -3
  30. package/plugins/goalbuddy/agents/goal-judge.md +31 -16
  31. package/plugins/goalbuddy/agents/goal-scout.md +38 -13
  32. package/plugins/goalbuddy/agents/goal-worker.md +35 -14
  33. package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +8 -2
  34. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_judge.toml +29 -17
  35. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_scout.toml +34 -14
  36. package/plugins/goalbuddy/skills/goalbuddy/agents/goal_worker.toml +32 -15
  37. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/README.md +8 -4
  38. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
  39. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
  40. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
  41. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
  42. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
  43. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
  44. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
  45. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +940 -24
  46. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
  47. package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +420 -4
  48. package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +116 -6
  49. package/plugins/goalbuddy/skills/goalbuddy/scripts/parallel-plan.mjs +191 -0
  50. package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +248 -0
  51. package/plugins/goalbuddy/skills/goalbuddy/templates/agents.md +2 -2
  52. package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +8 -0
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  <p align="center">
4
4
  <a href="https://goalbuddy.dev">
5
- <img src="internal/assets/goalbuddy-readme-hero.png" alt="GoalBuddy: a /goal operating system for Codex and Claude Code with live boards, Scout, Judge, Worker, receipts, and verification." 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
 
9
9
  <p align="center">
10
- <strong>A /goal operating system for Codex and Claude Code: intake, live boards, agents, receipts, and verification.</strong>
10
+ <strong>A simple operating loop for long <code>/goal</code> runs.</strong>
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -16,243 +16,121 @@
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 is a local companion for **Codex** and **Claude Code** when the work is too broad to trust to a single prompt. It turns rough intent into a durable operating loop: a `goal.md` charter, a machine-readable `state.yaml` board, optional visual boards, Scout/Judge/Worker task flow, compact receipts, and verification before completion.
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
- ```bash
22
- npx goalbuddy # installs for Codex and Claude Code
23
- npx goalbuddy --target codex # installs for Codex only
24
- npx goalbuddy --target claude # installs for Claude Code only
25
- ```
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.
26
22
 
27
- Or install it globally:
23
+ ## Start Here
24
+
25
+ Run one command:
28
26
 
29
27
  ```bash
30
- npm i -g goalbuddy
28
+ npx goalbuddy
31
29
  ```
32
30
 
33
- Then restart your AI coding agent and invoke the installed skill:
31
+ Restart Codex or Claude Code.
32
+
33
+ Then prepare a goal:
34
34
 
35
35
  ```text
36
- $goal-prep # in Codex
37
- /goal-prep # in Claude Code
36
+ $goal-prep
38
37
  ```
39
38
 
40
- `goal-prep` prepares the GoalBuddy board and prints the `/goal` command to run next. It does not start `/goal` automatically.
41
-
42
- ## Why GoalBuddy Exists
43
-
44
- Long-running goals in Codex and Claude Code drift. A request like "improve this project" can turn into unbounded edits, stale verification, and premature completion claims.
45
-
46
- GoalBuddy gives your AI coding agent a durable loop:
39
+ In Claude Code, use:
47
40
 
48
41
  ```text
49
- vague goal -> Scout -> Judge -> Worker -> receipt -> verify -> repeat
42
+ /goal-prep
50
43
  ```
51
44
 
52
- The main `/goal` thread acts as PM. It owns the board, keeps exactly one active task, delegates when useful, records receipts, and only completes after a Judge or PM audit proves the original outcome is done.
45
+ Goal Prep creates the board and prints the exact `/goal` command to run next. That is the whole path.
53
46
 
54
- ## What You Get Locally
47
+ ## What It Creates
55
48
 
56
49
  ```text
57
- docs/goals/<slug>/
50
+ docs/goals/<your-goal>/
58
51
  goal.md
59
52
  state.yaml
60
53
  notes/
54
+ subgoals/ # optional depth-1 child boards
61
55
  ```
62
56
 
63
- - `goal.md` is the editable charter: objective, constraints, tranche, and stop rule.
64
- - `state.yaml` is the board truth: task status, active task, receipts, and verification.
65
- - `notes/` holds longer Scout, Judge, or PM findings when a task receipt would be too large.
57
+ `goal.md` says what you want.
66
58
 
67
- ## The Operating Model
59
+ `state.yaml` tracks the board.
68
60
 
69
- GoalBuddy uses four primitives:
61
+ `notes/` keeps longer findings out of the main thread.
70
62
 
71
- - **Charter**: states what this goal is trying to accomplish and what must stay true.
72
- - **Board**: tracks tasks, status, receipts, and verification freshness.
73
- - **Task**: exactly one active Scout, Judge, Worker, or PM task.
74
- - **Receipt**: compact proof for every completed, blocked, or escalated task.
63
+ `subgoals/` holds optional child boards when one parent task needs a bounded branch of work.
75
64
 
76
- GoalBuddy bundles default agent templates. `goal-prep` records whether matching installed agent configs were actually found; if not, `/goal` can continue through PM fallback, or you can install dedicated agents with:
65
+ ## How It Thinks
77
66
 
78
- ```bash
79
- npx goalbuddy agents # Codex TOML agents
80
- npx goalbuddy agents --target claude # Claude Code markdown subagents
67
+ ```text
68
+ rough idea -> goal prep -> /goal -> scout -> judge -> worker -> receipt -> verify
81
69
  ```
82
70
 
83
- - **Scout** maps repo evidence, workflows, constraints, risks, and candidate next tasks.
84
- - **Judge** resolves ambiguity, scope, risk, task selection, and completion claims.
85
- - **Worker** performs one bounded implementation or recovery slice with explicit files and checks.
71
+ Scout maps the repo.
86
72
 
87
- ## Install Everywhere
88
-
89
- ```bash
90
- npx goalbuddy
91
- ```
73
+ Judge chooses the next bounded slice.
92
74
 
93
- This installs and enables the native Codex plugin in `~/.codex/`, then installs the GoalBuddy skill, Scout/Judge/Worker subagents, and `/goal-prep` slash command into `~/.claude/`. Restart Codex and Claude Code, then use `$goal-prep` in Codex or `/goal-prep` in Claude Code. The Codex plugin bundles the local live board and GitHub Projects visual board backends so Goal Prep can offer a board immediately.
75
+ Worker changes code and leaves a receipt.
94
76
 
95
- If you prefer a global executable:
77
+ `/goal` keeps the loop honest until the original goal is actually done.
96
78
 
97
- ```bash
98
- npm i -g goalbuddy
99
- goalbuddy
100
- ```
79
+ ## Subgoals, Parallel Agents, and Dark Mode
101
80
 
102
- Native Codex `/goal` is still an under-development Codex feature. Before relying on the printed command, confirm your local Codex runtime is logged in and has goals enabled:
81
+ GoalBuddy keeps the model small:
103
82
 
104
- ```bash
105
- codex login status
106
- codex features enable goals
107
- npx goalbuddy doctor --goal-ready
108
- ```
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.
109
88
 
110
- ## Install One Target
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.
111
90
 
112
- Use `--target` when you only want to install or update one agent environment:
91
+ ## Execution Quality
113
92
 
114
- ```bash
115
- npx goalbuddy --target codex
116
- npx goalbuddy --target claude
117
- ```
93
+ GoalBuddy can prepare safe parallel work; it does not run a parallel org chart.
118
94
 
119
- The Claude Code target installs the GoalBuddy skill, the three Scout/Judge/Worker subagents, and the `/goal-prep` slash command into `~/.claude/`. Restart Claude Code, then run:
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.
120
96
 
121
- ```text
122
- /goal-prep
123
- ```
97
+ ## Update
124
98
 
125
- Check the local Claude Code install:
99
+ When a new GoalBuddy version ships:
126
100
 
127
101
  ```bash
128
- npx goalbuddy doctor --target claude
102
+ npx goalbuddy update
129
103
  ```
130
104
 
131
- Use non-default homes:
105
+ That updates both Codex and Claude Code.
132
106
 
133
- ```bash
134
- npx goalbuddy --codex-home /path/to/.codex --claude-home /path/to/.claude
135
- npx goalbuddy --target codex --codex-home /path/to/.codex
136
- npx goalbuddy --target claude --claude-home /path/to/.claude
137
- ```
107
+ ## Live Boards
138
108
 
139
- `install` and `update` prepare both targets by default. `install`, `update`, `doctor`, and `agents` all accept `--target claude|codex`, and `--json` for structured output.
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.
140
110
 
141
- ## Run A Goal
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.
142
112
 
143
- After `goal-prep` creates or repairs the board, start the run with the printed command:
144
-
145
- ```text
146
- /goal Follow docs/goals/<slug>/goal.md.
147
- ```
148
-
149
- Check board health at any time:
150
-
151
- ```bash
152
- # Codex
153
- node ~/.codex/skills/goalbuddy/scripts/check-goal-state.mjs docs/goals/<slug>/state.yaml
154
- # Claude Code
155
- node ~/.claude/skills/goalbuddy/scripts/check-goal-state.mjs docs/goals/<slug>/state.yaml
156
- ```
157
-
158
- For a broad prompt like "Improve my project," the first active task should usually be Scout, not Worker:
159
-
160
- ```yaml
161
- tasks:
162
- - id: T001
163
- type: scout
164
- assignee: Scout
165
- status: active
166
- objective: "Map repo health and identify improvement candidates."
167
- receipt: null
168
- - id: T002
169
- type: judge
170
- assignee: Judge
171
- status: queued
172
- objective: "Choose the next safe implementation task."
173
- receipt: null
174
- - id: T003
175
- type: worker
176
- assignee: Worker
177
- status: queued
178
- objective: "Execute the safe implementation task selected by Judge."
179
- allowed_files: []
180
- verify: []
181
- stop_if:
182
- - "Need files outside allowed_files."
183
- - "Verification fails twice."
184
- receipt: null
185
- ```
186
-
187
- ## Visual Boards
188
-
189
- GoalBuddy can show progress as the goal runs. `goal-prep` can open a local live board inside your AI coding agent before the task list is finished, or prepare a GitHub Projects sync when stakeholders need an external board.
113
+ See [GoalBuddy 0.3.5: Subgoals, Parallel Agents, and Dark Mode](RELEASE-0.3.5.md) for the release notes.
190
114
 
191
115
  <p align="center">
192
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%">
193
117
  </p>
194
118
 
195
- ## Extensions
196
-
197
- The npm package is the stable core. Local Board and GitHub Projects are bundled into the installed GoalBuddy skill so `goal-prep` can offer a visual board immediately. Other optional extensions live under `extend/` and are discovered from the GitHub-hosted `extend/catalog.json`, so users do not need a new npm release for every integration.
198
-
199
- ```bash
200
- npx goalbuddy board docs/goals/<slug>
201
- npx goalbuddy extend github-projects
202
- npx goalbuddy extend
203
- npx goalbuddy extend github-pr-workflow
204
- npx goalbuddy extend install github-pr-workflow --dry-run
205
- ```
206
-
207
- `goalbuddy extend` shows available extensions and detail commands. `goalbuddy extend <id>` shows local install state, activation state, credential requirements, safe-by-default status, and missing environment variables.
208
-
209
- Current catalog examples include:
210
-
211
- - `github-pr-workflow`: prepares receipt-aligned commit and PR handoff text.
212
- - `github-projects`: mirrors GoalBuddy boards into GitHub Projects.
213
- - `local-goal-board`: serves a local live board that updates from `state.yaml` and `notes/`.
214
- - `ai-diff-risk-review`: summarizes risk in the current diff.
215
- - `ci-failure-triage`: maps failing CI back to likely causes and next tasks.
216
- - `docs-drift-audit`: checks whether docs still match implementation.
217
- - `codebase-onboarding-map`: creates a concise repo map from files and conventions.
218
- - `release-readiness`: checks whether a goal is ready to publish.
219
-
220
- Extensions can publish, report, intake, or add role guidance. They are not board truth. `state.yaml` remains authoritative.
221
-
222
- ## Compatibility Window
223
-
224
- GoalBuddy was previously published as `goal-maker`. During the migration window, `npx goal-maker` remains available as a compatibility alias and prints the new command:
225
-
226
- ```bash
227
- npx goalbuddy
228
- ```
229
-
230
- Machine-readable commands such as `npx goal-maker install --json` keep JSON output clean so existing automation can migrate safely.
231
-
232
- Release automation for future npm publishes is documented in [RELEASE.md](RELEASE.md).
233
-
234
- ## Examples
235
-
236
- - `examples/improve-goal-maker/`: a small completed reliability run.
237
- - `examples/extend-catalog-workflow/`: a larger run from product framing through implementation and cleanup.
238
- - `examples/github-pr-workflow-extension/pr-handoff.md`: an extension-generated PR handoff artifact.
119
+ ## Good For
239
120
 
240
- ## Repo Map
121
+ - broad project improvements
122
+ - release prep
123
+ - bug hunts that need evidence
124
+ - refactors with verification steps
125
+ - anything too large for one prompt
241
126
 
242
- - `goalbuddy/SKILL.md`: canonical skill definition (shared by Codex and Claude Code)
243
- - `goalbuddy/agents/`: Scout, Judge, and Worker agent definitions (Codex TOML; Claude Code markdown lives under `plugins/goalbuddy/agents/`)
244
- - `goalbuddy/templates/`: `goal.md`, `state.yaml`, and `note.md`
245
- - `goalbuddy/scripts/check-goal-state.mjs`: v2 board checker
246
- - `internal/cli/goal-maker.mjs`: npm installer CLI for Codex and Claude Code
247
- - `plugins/goalbuddy/`: Codex plugin (`.codex-plugin/`) and Claude Code plugin (`.claude-plugin/`) scaffolds
248
- - `extend/` and `extend/catalog.json`: GitHub-hosted extension surface
249
- - `examples/`: completed sample runs
127
+ ## For This Repo
250
128
 
251
- ## Status
129
+ GoalBuddy is MIT licensed and published on npm.
252
130
 
253
- `0.3.x` adds first-class Claude Code support alongside the existing Codex target. The v2 board and receipt model intentionally rejects old v1 `gate`, `units`, `artifacts`, and `evidence.jsonl` goal folders instead of auto-migrating them.
131
+ The implementation lives in this repo, but the happy path is intentionally tiny: install it, run Goal Prep, then let `/goal` work from the generated files.
254
132
 
255
- Use GoalBuddy to structure autonomous coding-agent work. Keep relying on repo-specific `AGENTS.md`/`CLAUDE.md`, tests, and CI for repo facts.
133
+ For release process details, see [RELEASE.md](RELEASE.md).
256
134
 
257
135
  ## Star History
258
136
 
@@ -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.