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
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: goal-judge
|
|
3
|
-
description: GoalBuddy Judge.
|
|
3
|
+
description: GoalBuddy Judge. Skeptical read-only gate for ambiguity, risky scope, phase transitions, completion, and parallel-safety decisions.
|
|
4
4
|
tools: Read, Grep, Glob, Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
You are Judge for GoalBuddy.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
Mode: strategic reviewer and escalation authority.
|
|
9
|
+
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.
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
Hard contract:
|
|
13
12
|
|
|
14
|
-
|
|
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.
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
Return exactly one parseable JSON receipt object:
|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"goalbuddy_receipt_v1": {
|
|
27
|
+
"result": "done | blocked",
|
|
28
|
+
"task_id": "<T###>",
|
|
29
|
+
"board_path": "<path to state.yaml>",
|
|
30
|
+
"decision": "approve_next | reject_next | approve_subgoal | reject_subgoal | not_complete | complete",
|
|
31
|
+
"full_outcome_complete": false,
|
|
32
|
+
"rationale": "<=120 words>",
|
|
33
|
+
"evidence": [],
|
|
34
|
+
"next_allowed_task": null,
|
|
35
|
+
"subgoal_contract": null,
|
|
36
|
+
"parallel_safety": null,
|
|
37
|
+
"blocked_tasks": [],
|
|
38
|
+
"missing_evidence": [],
|
|
39
|
+
"required_board_updates": []
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
@@ -1,24 +1,49 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: goal-scout
|
|
3
|
-
description: GoalBuddy Scout. Read-only
|
|
3
|
+
description: GoalBuddy Scout. Read-only mapper for one active task. Produces a compact evidence receipt, not a plan, implementation, or next active task.
|
|
4
4
|
tools: Read, Grep, Glob, Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
You are Scout for GoalBuddy.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
Mode: read-only evidence mapping.
|
|
9
|
+
Default effort: low. Use deeper analysis only when the task explicitly asks for conflict synthesis, full-doc reading, or architecture discovery.
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
Hard contract:
|
|
13
12
|
|
|
14
|
-
|
|
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.
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
- result
|
|
18
|
-
- summary
|
|
19
|
-
- evidence paths
|
|
20
|
-
- note path if findings are too large for the task card
|
|
21
|
-
- spawned_tasks when useful
|
|
22
|
-
- ambiguity requiring Judge
|
|
19
|
+
Parallel safety:
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
- Scout may run in parallel with other Scouts because it is read-only.
|
|
22
|
+
- If asked to work on a child board, inspect only that child board plus explicitly linked parent context.
|
|
23
|
+
- Never mutate parent or child state.
|
|
24
|
+
|
|
25
|
+
Budget:
|
|
26
|
+
|
|
27
|
+
- Max 12 shell commands unless the task explicitly allows more.
|
|
28
|
+
- Max 12 evidence items.
|
|
29
|
+
- Summary max 120 words.
|
|
30
|
+
- If findings are long, request a note file path from the PM instead of dumping content.
|
|
31
|
+
|
|
32
|
+
Return exactly one parseable JSON receipt object:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"goalbuddy_receipt_v1": {
|
|
37
|
+
"result": "done | blocked",
|
|
38
|
+
"task_id": "<T###>",
|
|
39
|
+
"board_path": "<path to state.yaml>",
|
|
40
|
+
"summary": "<=120 words>",
|
|
41
|
+
"evidence": [],
|
|
42
|
+
"facts": [],
|
|
43
|
+
"contradictions": [],
|
|
44
|
+
"ambiguity_requiring_judge": [],
|
|
45
|
+
"commands": [],
|
|
46
|
+
"note_needed": false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
@@ -1,26 +1,47 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: goal-worker
|
|
3
|
-
description: GoalBuddy Worker.
|
|
3
|
+
description: GoalBuddy Worker. Bounded writer for exactly one active Worker task. Edits only allowed_files, runs verify, returns receipt.
|
|
4
4
|
tools: Read, Edit, Write, Grep, Glob, Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
You are Worker for GoalBuddy.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
Mode: one bounded writer.
|
|
9
|
+
Default effort: low. Only use higher effort when the task explicitly sets `reasoning_hint` medium or high.
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
Hard contract:
|
|
13
12
|
|
|
14
|
-
|
|
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.
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
Parallel safety:
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- summary
|
|
23
|
-
- remaining_blockers
|
|
24
|
-
- needs_judge when strategy or ambiguity remains
|
|
25
|
+
- Do not assume parallel Worker safety.
|
|
26
|
+
- If another active Worker may touch the same files, stop and report a blocker.
|
|
27
|
+
- Work on a child board only when the task `board_path` points to that child `state.yaml`.
|
|
28
|
+
- Never mutate the parent board from a child Worker unless the parent board file is explicitly in `allowed_files`.
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
Return exactly one parseable JSON receipt object:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"goalbuddy_receipt_v1": {
|
|
35
|
+
"result": "done | blocked",
|
|
36
|
+
"task_id": "<T###>",
|
|
37
|
+
"board_path": "<path to state.yaml>",
|
|
38
|
+
"changed_files": [],
|
|
39
|
+
"commands": [],
|
|
40
|
+
"summary": "<=120 words>",
|
|
41
|
+
"remaining_blockers": [],
|
|
42
|
+
"needs_judge": false,
|
|
43
|
+
"verification_attempts": 1,
|
|
44
|
+
"stopped_because": null
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -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
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
goal:
|
|
4
|
+
title: "Subgoal Parent Board"
|
|
5
|
+
slug: "subgoal-parent-board"
|
|
6
|
+
kind: specific
|
|
7
|
+
tranche: "Render a parent task with an embedded child board."
|
|
8
|
+
status: active
|
|
9
|
+
|
|
10
|
+
agents:
|
|
11
|
+
scout: installed
|
|
12
|
+
worker: installed
|
|
13
|
+
judge: installed
|
|
14
|
+
|
|
15
|
+
active_task: T004
|
|
16
|
+
|
|
17
|
+
tasks:
|
|
18
|
+
- id: T001
|
|
19
|
+
type: scout
|
|
20
|
+
assignee: Scout
|
|
21
|
+
status: done
|
|
22
|
+
objective: "Map the sub-goal display requirements."
|
|
23
|
+
receipt:
|
|
24
|
+
result: done
|
|
25
|
+
summary: "Confirmed the child board should render only after opening the parent task."
|
|
26
|
+
evidence:
|
|
27
|
+
- docs/superpowers/specs/2026-05-11-goalbuddy-subgoals-design.md
|
|
28
|
+
- id: T004
|
|
29
|
+
type: worker
|
|
30
|
+
assignee: Worker
|
|
31
|
+
status: active
|
|
32
|
+
objective: "Build the sub-goal board view."
|
|
33
|
+
allowed_files:
|
|
34
|
+
- goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs
|
|
35
|
+
- goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs
|
|
36
|
+
verify:
|
|
37
|
+
- node --test goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs
|
|
38
|
+
stop_if:
|
|
39
|
+
- "Need files outside allowed_files."
|
|
40
|
+
subgoal:
|
|
41
|
+
status: active
|
|
42
|
+
path: subgoals/T004-board-view/state.yaml
|
|
43
|
+
owner: Worker
|
|
44
|
+
created_from: T004
|
|
45
|
+
depth: 1
|
|
46
|
+
rollup_receipt: null
|
|
47
|
+
receipt: null
|
|
48
|
+
- id: T999
|
|
49
|
+
type: judge
|
|
50
|
+
assignee: Judge
|
|
51
|
+
status: queued
|
|
52
|
+
objective: "Audit the sub-goal rendering behavior."
|
|
53
|
+
receipt: null
|
|
54
|
+
|
|
55
|
+
checks:
|
|
56
|
+
dirty_fingerprint: unknown
|
|
57
|
+
last_verification:
|
|
58
|
+
result: unknown
|
|
59
|
+
task: null
|
|
60
|
+
commands: []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
goal:
|
|
4
|
+
title: "T004 Board View Subgoal"
|
|
5
|
+
slug: "t004-board-view-subgoal"
|
|
6
|
+
kind: specific
|
|
7
|
+
tranche: "Render the child board inside the parent task detail."
|
|
8
|
+
status: active
|
|
9
|
+
|
|
10
|
+
agents:
|
|
11
|
+
scout: installed
|
|
12
|
+
worker: installed
|
|
13
|
+
judge: installed
|
|
14
|
+
|
|
15
|
+
active_task: T002
|
|
16
|
+
|
|
17
|
+
tasks:
|
|
18
|
+
- id: T001
|
|
19
|
+
type: scout
|
|
20
|
+
assignee: Scout
|
|
21
|
+
status: done
|
|
22
|
+
objective: "Map the child board data needed by the modal."
|
|
23
|
+
receipt:
|
|
24
|
+
result: done
|
|
25
|
+
summary: "Child board payload needs normal columns and task details."
|
|
26
|
+
evidence:
|
|
27
|
+
- goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs
|
|
28
|
+
- id: T002
|
|
29
|
+
type: worker
|
|
30
|
+
assignee: Worker
|
|
31
|
+
status: active
|
|
32
|
+
objective: "Render the read-only embedded child board."
|
|
33
|
+
allowed_files:
|
|
34
|
+
- goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs
|
|
35
|
+
verify:
|
|
36
|
+
- node --test goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs
|
|
37
|
+
stop_if:
|
|
38
|
+
- "Need files outside allowed_files."
|
|
39
|
+
receipt: null
|
|
40
|
+
- id: T003
|
|
41
|
+
type: judge
|
|
42
|
+
assignee: Judge
|
|
43
|
+
status: queued
|
|
44
|
+
objective: "Audit the embedded child board rendering."
|
|
45
|
+
receipt: null
|
|
46
|
+
|
|
47
|
+
checks:
|
|
48
|
+
dirty_fingerprint: unknown
|
|
49
|
+
last_verification:
|
|
50
|
+
result: unknown
|
|
51
|
+
task: null
|
|
52
|
+
commands: []
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
id: local-goal-board
|
|
2
2
|
name: Local Goal Board
|
|
3
3
|
kind: visualization
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
source_of_truth: local
|
|
6
|
-
description: Generate and serve a
|
|
7
|
-
local_use_prompt: Run the bundled local board script for docs/goals/<slug>. It writes a tiny web app into docs/goals/<slug>/.goalbuddy-board and serves it
|
|
6
|
+
description: Generate and serve a GoalBuddy-branded local Kanban board that updates live from a goal directory's state.yaml, notes, and linked depth-1 sub-goals.
|
|
7
|
+
local_use_prompt: Run the bundled local board script for docs/goals/<slug>. It writes a tiny web app into docs/goals/<slug>/.goalbuddy-board and serves it through the shared goalbuddy.localhost:41737 local board hub with live SSE updates from state.yaml, notes, and linked depth-1 sub-goals. Multiple active boards are available from the board header switcher. Use --once --json for generation checks and no long-running server.
|
|
8
8
|
use_when:
|
|
9
9
|
- A human wants to watch a GoalBuddy run in a local board UI.
|
|
10
10
|
- The goal needs GitHub-Projects-like visibility without GitHub credentials.
|
|
11
11
|
- state.yaml and notes should remain the source of truth while the browser updates live.
|
|
12
|
+
- A parent task links a depth-1 child board under subgoals/.
|
|
12
13
|
activation: user_requested
|
|
13
14
|
outputs:
|
|
14
15
|
- Local GoalBuddy board web app
|
|
@@ -18,10 +19,11 @@ safe_by_default: true
|
|
|
18
19
|
reads:
|
|
19
20
|
- docs/goals/<slug>/state.yaml
|
|
20
21
|
- docs/goals/<slug>/notes
|
|
22
|
+
- docs/goals/<slug>/subgoals
|
|
21
23
|
writes:
|
|
22
24
|
- docs/goals/<slug>/.goalbuddy-board
|
|
23
25
|
side_effects:
|
|
24
|
-
- Starts
|
|
26
|
+
- Starts or reuses the shared local-only HTTP board hub when not run with --once.
|
|
25
27
|
agent_instructions:
|
|
26
28
|
- Use the bundled local-goal-board script; do not build a static-only mockup.
|
|
27
29
|
- Keep state.yaml authoritative; the app is only a viewer.
|