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.
- package/README.md +28 -3
- package/RELEASE-0.3.5.md +324 -0
- package/goalbuddy/SKILL.md +8 -2
- package/goalbuddy/agents/goal_judge.toml +29 -17
- package/goalbuddy/agents/goal_scout.toml +34 -14
- package/goalbuddy/agents/goal_worker.toml +32 -15
- package/goalbuddy/extend/local-goal-board/README.md +8 -4
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
- package/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
- package/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
- package/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +940 -24
- package/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
- package/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +420 -4
- package/goalbuddy/scripts/check-goal-state.mjs +116 -6
- package/goalbuddy/scripts/parallel-plan.mjs +191 -0
- package/goalbuddy/scripts/render-task-prompt.mjs +248 -0
- package/goalbuddy/templates/agents.md +2 -2
- package/goalbuddy/templates/state.yaml +8 -0
- package/internal/assets/goalbuddy-v0.3.5-release.png +0 -0
- package/internal/cli/goal-maker.mjs +64 -1
- package/package.json +3 -2
- package/plugins/goalbuddy/.claude-plugin/plugin.json +2 -2
- package/plugins/goalbuddy/.codex-plugin/plugin.json +4 -4
- package/plugins/goalbuddy/README.md +5 -3
- package/plugins/goalbuddy/agents/goal-judge.md +31 -16
- package/plugins/goalbuddy/agents/goal-scout.md +38 -13
- package/plugins/goalbuddy/agents/goal-worker.md +35 -14
- package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +8 -2
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_judge.toml +29 -17
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_scout.toml +34 -14
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_worker.toml +32 -15
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/README.md +8 -4
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/goal.md +3 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/notes/.gitkeep +1 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/state.yaml +60 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/goal.md +3 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/notes/.gitkeep +1 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/subgoal-parent/subgoals/T004-board-view/state.yaml +52 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +6 -4
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +940 -24
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +389 -54
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +420 -4
- package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +116 -6
- package/plugins/goalbuddy/skills/goalbuddy/scripts/parallel-plan.mjs +191 -0
- package/plugins/goalbuddy/skills/goalbuddy/scripts/render-task-prompt.mjs +248 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/agents.md +2 -2
- 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.
|
|
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%">
|
package/RELEASE-0.3.5.md
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# GoalBuddy 0.3.5: Subgoals, Parallel Agents, and Dark Mode
|
|
2
|
+
|
|
3
|
+
Release date: 2026-05-12
|
|
4
|
+
|
|
5
|
+

|
|
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/`
|
package/goalbuddy/SKILL.md
CHANGED
|
@@ -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.
|
|
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 |
|
|
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 = "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
Return exactly one parseable JSON receipt object:
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
3
|
-
model_reasoning_effort = "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
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
|
-
|
|
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 = "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
+
Return exactly one parseable JSON receipt object:
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
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
|
|
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 @@
|
|
|
1
|
+
|