goalbuddy 0.2.21 → 0.3.0
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/CONTRIBUTING.md +14 -5
- package/README.md +68 -55
- package/goalbuddy/SKILL.md +44 -14
- package/goalbuddy/agents/README.md +15 -8
- package/goalbuddy/extend/github-projects/README.md +105 -0
- package/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +63 -0
- package/goalbuddy/extend/github-projects/extension.yaml +43 -0
- package/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +728 -0
- package/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +362 -0
- package/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +193 -0
- package/goalbuddy/extend/github-projects/test/github-projects.test.mjs +267 -0
- package/goalbuddy/extend/local-goal-board/README.md +75 -0
- package/goalbuddy/extend/local-goal-board/assets/goalbuddy-mark.png +0 -0
- package/goalbuddy/extend/local-goal-board/examples/sample-goal/notes/T001-scout.md +3 -0
- package/goalbuddy/extend/local-goal-board/examples/sample-goal/state.yaml +124 -0
- package/goalbuddy/extend/local-goal-board/extension.yaml +37 -0
- package/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +1225 -0
- package/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +258 -0
- package/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +146 -0
- package/goalbuddy/scripts/check-goal-state.mjs +24 -9
- package/goalbuddy/templates/state.yaml +18 -3
- package/internal/assets/goalbuddy-live-board.jpg +0 -0
- package/internal/cli/goal-maker.mjs +424 -31
- package/internal/cli/postinstall.mjs +3 -3
- package/package.json +7 -2
- package/plugins/goalbuddy/.claude-plugin/plugin.json +24 -0
- package/plugins/goalbuddy/.codex-plugin/plugin.json +5 -4
- package/plugins/goalbuddy/README.md +23 -13
- package/plugins/goalbuddy/agents/goal-judge.md +27 -0
- package/plugins/goalbuddy/agents/goal-scout.md +24 -0
- package/plugins/goalbuddy/agents/goal-worker.md +26 -0
- package/plugins/goalbuddy/commands/goal-prep.md +12 -0
- package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +44 -14
- package/plugins/goalbuddy/skills/goalbuddy/agents/README.md +15 -8
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/README.md +105 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/examples/goal-board-sync/state.yaml +63 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/extension.yaml +43 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/github-projects.mjs +728 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/lib/goal-state.mjs +362 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/scripts/sync-github-project.mjs +193 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/github-projects/test/github-projects.test.mjs +267 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/README.md +75 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/assets/goalbuddy-mark.png +0 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/sample-goal/notes/T001-scout.md +3 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/examples/sample-goal/state.yaml +124 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/extension.yaml +37 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/lib/goal-board.mjs +1225 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/scripts/local-goal-board.mjs +258 -0
- package/plugins/goalbuddy/skills/goalbuddy/extend/local-goal-board/test/local-goal-board.test.mjs +146 -0
- package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +24 -9
- package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +18 -3
package/CONTRIBUTING.md
CHANGED
|
@@ -14,12 +14,20 @@ npm run check
|
|
|
14
14
|
|
|
15
15
|
## Local Install Test
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
GoalBuddy installs into Codex and Claude Code by default. Use temporary home directories so local testing does not overwrite your real install:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
+
# Both targets
|
|
21
|
+
root=$(mktemp -d)
|
|
22
|
+
node internal/cli/goal-maker.mjs --codex-home "$root/codex" --claude-home "$root/claude"
|
|
23
|
+
node internal/cli/goal-maker.mjs doctor --target codex --codex-home "$root/codex"
|
|
24
|
+
node internal/cli/goal-maker.mjs doctor --target claude --claude-home "$root/claude"
|
|
25
|
+
rm -rf "$root"
|
|
26
|
+
|
|
27
|
+
# One target
|
|
20
28
|
tmp=$(mktemp -d)
|
|
21
|
-
node internal/cli/goal-maker.mjs install --
|
|
22
|
-
node internal/cli/goal-maker.mjs doctor --
|
|
29
|
+
node internal/cli/goal-maker.mjs install --target claude --claude-home "$tmp"
|
|
30
|
+
node internal/cli/goal-maker.mjs doctor --target claude --claude-home "$tmp"
|
|
23
31
|
rm -rf "$tmp"
|
|
24
32
|
```
|
|
25
33
|
|
|
@@ -31,7 +39,7 @@ Before opening a PR, verify the npm package contents:
|
|
|
31
39
|
npm pack --dry-run
|
|
32
40
|
```
|
|
33
41
|
|
|
34
|
-
The package should include `README.md`, `internal/assets/`, `package.json`, `internal/cli/`, the canonical `goalbuddy/` skill directory, and `plugins/goalbuddy
|
|
42
|
+
The package should include `README.md`, `internal/assets/`, `package.json`, `internal/cli/`, the canonical `goalbuddy/` skill directory, and `plugins/goalbuddy/` (with both `.codex-plugin/` and `.claude-plugin/` manifests). The temporary `$goal-maker` compatibility skill is generated by the installer; do not add a second tracked skill payload.
|
|
35
43
|
|
|
36
44
|
## Releases
|
|
37
45
|
|
|
@@ -40,7 +48,8 @@ GoalBuddy publishes from GitHub Actions with npm trusted publishing. See [RELEAS
|
|
|
40
48
|
## Contribution Guidelines
|
|
41
49
|
|
|
42
50
|
- Keep the runtime dependency-free unless there is a strong reason.
|
|
43
|
-
- Keep `goalbuddy/` installable as the canonical
|
|
51
|
+
- Keep `goalbuddy/` installable as the canonical skill directory.
|
|
52
|
+
- Keep installation working for both Codex and Claude Code.
|
|
44
53
|
- Keep `$goal-maker` working as a generated compatibility alias until the migration window ends.
|
|
45
54
|
- Prefer small, reviewable changes.
|
|
46
55
|
- Update README or templates when behavior changes.
|
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
|
|
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%">
|
|
6
6
|
</a>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<strong>
|
|
10
|
+
<strong>A /goal operating system for Codex and Claude Code: intake, live boards, agents, receipts, and verification.</strong>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
@@ -16,10 +16,12 @@
|
|
|
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
|
|
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.
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
npx goalbuddy
|
|
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
|
|
23
25
|
```
|
|
24
26
|
|
|
25
27
|
Or install it globally:
|
|
@@ -28,19 +30,20 @@ Or install it globally:
|
|
|
28
30
|
npm i -g goalbuddy
|
|
29
31
|
```
|
|
30
32
|
|
|
31
|
-
Then restart
|
|
33
|
+
Then restart your AI coding agent and invoke the installed skill:
|
|
32
34
|
|
|
33
35
|
```text
|
|
34
|
-
$goal-prep
|
|
36
|
+
$goal-prep # in Codex
|
|
37
|
+
/goal-prep # in Claude Code
|
|
35
38
|
```
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
`goal-prep` prepares the GoalBuddy board and prints the `/goal` command to run next. It does not start `/goal` automatically.
|
|
38
41
|
|
|
39
42
|
## Why GoalBuddy Exists
|
|
40
43
|
|
|
41
|
-
Long Codex
|
|
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.
|
|
42
45
|
|
|
43
|
-
GoalBuddy gives
|
|
46
|
+
GoalBuddy gives your AI coding agent a durable loop:
|
|
44
47
|
|
|
45
48
|
```text
|
|
46
49
|
vague goal -> Scout -> Judge -> Worker -> receipt -> verify -> repeat
|
|
@@ -70,40 +73,32 @@ GoalBuddy uses four primitives:
|
|
|
70
73
|
- **Task**: exactly one active Scout, Judge, Worker, or PM task.
|
|
71
74
|
- **Receipt**: compact proof for every completed, blocked, or escalated task.
|
|
72
75
|
|
|
73
|
-
|
|
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:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx goalbuddy agents # Codex TOML agents
|
|
80
|
+
npx goalbuddy agents --target claude # Claude Code markdown subagents
|
|
81
|
+
```
|
|
74
82
|
|
|
75
83
|
- **Scout** maps repo evidence, workflows, constraints, risks, and candidate next tasks.
|
|
76
84
|
- **Judge** resolves ambiguity, scope, risk, task selection, and completion claims.
|
|
77
85
|
- **Worker** performs one bounded implementation or recovery slice with explicit files and checks.
|
|
78
86
|
|
|
79
|
-
## Install
|
|
80
|
-
|
|
81
|
-
Install and enable the native Codex plugin:
|
|
87
|
+
## Install Everywhere
|
|
82
88
|
|
|
83
89
|
```bash
|
|
84
90
|
npx goalbuddy
|
|
85
91
|
```
|
|
86
92
|
|
|
87
|
-
Restart Codex, then use `$goal-prep
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
npx goalbuddy extend install --all
|
|
91
|
-
```
|
|
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.
|
|
92
94
|
|
|
93
|
-
If you prefer a global executable
|
|
95
|
+
If you prefer a global executable:
|
|
94
96
|
|
|
95
97
|
```bash
|
|
96
98
|
npm i -g goalbuddy
|
|
97
99
|
goalbuddy
|
|
98
100
|
```
|
|
99
101
|
|
|
100
|
-
Use the skill-only fallback if your Codex build does not support plugins:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
npx goalbuddy install
|
|
104
|
-
npx goalbuddy update
|
|
105
|
-
```
|
|
106
|
-
|
|
107
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:
|
|
108
103
|
|
|
109
104
|
```bash
|
|
@@ -112,35 +107,40 @@ codex features enable goals
|
|
|
112
107
|
npx goalbuddy doctor --goal-ready
|
|
113
108
|
```
|
|
114
109
|
|
|
115
|
-
|
|
110
|
+
## Install One Target
|
|
111
|
+
|
|
112
|
+
Use `--target` when you only want to install or update one agent environment:
|
|
116
113
|
|
|
117
114
|
```bash
|
|
118
|
-
npx goalbuddy
|
|
115
|
+
npx goalbuddy --target codex
|
|
116
|
+
npx goalbuddy --target claude
|
|
119
117
|
```
|
|
120
118
|
|
|
121
|
-
|
|
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:
|
|
122
120
|
|
|
123
|
-
```
|
|
124
|
-
|
|
121
|
+
```text
|
|
122
|
+
/goal-prep
|
|
125
123
|
```
|
|
126
124
|
|
|
127
|
-
Check
|
|
125
|
+
Check the local Claude Code install:
|
|
128
126
|
|
|
129
127
|
```bash
|
|
130
|
-
npx goalbuddy
|
|
128
|
+
npx goalbuddy doctor --target claude
|
|
131
129
|
```
|
|
132
130
|
|
|
133
|
-
Use
|
|
131
|
+
Use non-default homes:
|
|
134
132
|
|
|
135
133
|
```bash
|
|
136
|
-
npx goalbuddy --codex-home /path/to/.codex
|
|
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
137
|
```
|
|
138
138
|
|
|
139
|
-
`
|
|
139
|
+
`install` and `update` prepare both targets by default. `install`, `update`, `doctor`, and `agents` all accept `--target claude|codex`, and `--json` for structured output.
|
|
140
140
|
|
|
141
141
|
## Run A Goal
|
|
142
142
|
|
|
143
|
-
After
|
|
143
|
+
After `goal-prep` creates or repairs the board, start the run with the printed command:
|
|
144
144
|
|
|
145
145
|
```text
|
|
146
146
|
/goal Follow docs/goals/<slug>/goal.md.
|
|
@@ -149,17 +149,12 @@ After `$goal-prep` creates or repairs the board, start the run with the printed
|
|
|
149
149
|
Check board health at any time:
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
|
+
# Codex
|
|
152
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
|
|
153
156
|
```
|
|
154
157
|
|
|
155
|
-
Launch the optional local board viewer for a goal:
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
npx goalbuddy board docs/goals/<slug>
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
`goalbuddy board` installs the `local-goal-board` extension from the catalog if needed, writes `.goalbuddy-board/` into the goal directory, and serves a local live-updating board.
|
|
162
|
-
|
|
163
158
|
For a broad prompt like "Improve my project," the first active task should usually be Scout, not Worker:
|
|
164
159
|
|
|
165
160
|
```yaml
|
|
@@ -189,16 +184,24 @@ tasks:
|
|
|
189
184
|
receipt: null
|
|
190
185
|
```
|
|
191
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.
|
|
190
|
+
|
|
191
|
+
<p align="center">
|
|
192
|
+
<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
|
+
</p>
|
|
194
|
+
|
|
192
195
|
## Extensions
|
|
193
196
|
|
|
194
|
-
The npm package is the stable core.
|
|
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.
|
|
195
198
|
|
|
196
199
|
```bash
|
|
200
|
+
npx goalbuddy board docs/goals/<slug>
|
|
201
|
+
npx goalbuddy extend github-projects
|
|
197
202
|
npx goalbuddy extend
|
|
198
203
|
npx goalbuddy extend github-pr-workflow
|
|
199
204
|
npx goalbuddy extend install github-pr-workflow --dry-run
|
|
200
|
-
npx goalbuddy extend install --all --dry-run
|
|
201
|
-
npx goalbuddy extend install --all
|
|
202
205
|
```
|
|
203
206
|
|
|
204
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.
|
|
@@ -207,7 +210,7 @@ Current catalog examples include:
|
|
|
207
210
|
|
|
208
211
|
- `github-pr-workflow`: prepares receipt-aligned commit and PR handoff text.
|
|
209
212
|
- `github-projects`: mirrors GoalBuddy boards into GitHub Projects.
|
|
210
|
-
- `local-goal-board`: serves a local
|
|
213
|
+
- `local-goal-board`: serves a local live board that updates from `state.yaml` and `notes/`.
|
|
211
214
|
- `ai-diff-risk-review`: summarizes risk in the current diff.
|
|
212
215
|
- `ci-failure-triage`: maps failing CI back to likely causes and next tasks.
|
|
213
216
|
- `docs-drift-audit`: checks whether docs still match implementation.
|
|
@@ -236,20 +239,30 @@ Release automation for future npm publishes is documented in [RELEASE.md](RELEAS
|
|
|
236
239
|
|
|
237
240
|
## Repo Map
|
|
238
241
|
|
|
239
|
-
- `goalbuddy/SKILL.md`: canonical Codex
|
|
240
|
-
- `goalbuddy/agents/`: Scout, Judge, and Worker definitions
|
|
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/`)
|
|
241
244
|
- `goalbuddy/templates/`: `goal.md`, `state.yaml`, and `note.md`
|
|
242
245
|
- `goalbuddy/scripts/check-goal-state.mjs`: v2 board checker
|
|
243
|
-
- `internal/cli/goal-maker.mjs`: npm installer CLI
|
|
244
|
-
- `plugins/goalbuddy/`:
|
|
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
|
|
245
248
|
- `extend/` and `extend/catalog.json`: GitHub-hosted extension surface
|
|
246
249
|
- `examples/`: completed sample runs
|
|
247
250
|
|
|
248
251
|
## Status
|
|
249
252
|
|
|
250
|
-
`0.
|
|
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.
|
|
254
|
+
|
|
255
|
+
Use GoalBuddy to structure autonomous coding-agent work. Keep relying on repo-specific `AGENTS.md`/`CLAUDE.md`, tests, and CI for repo facts.
|
|
256
|
+
|
|
257
|
+
## Star History
|
|
251
258
|
|
|
252
|
-
|
|
259
|
+
<a href="https://www.star-history.com/?repos=tolibear%2Fgoalbuddy&type=date&legend=top-left">
|
|
260
|
+
<picture>
|
|
261
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=tolibear/goalbuddy&type=date&theme=dark&legend=top-left" />
|
|
262
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=tolibear/goalbuddy&type=date&legend=top-left" />
|
|
263
|
+
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=tolibear/goalbuddy&type=date&legend=top-left" />
|
|
264
|
+
</picture>
|
|
265
|
+
</a>
|
|
253
266
|
|
|
254
267
|
## License
|
|
255
268
|
|
package/goalbuddy/SKILL.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: goal-prep
|
|
3
|
-
description: Goal Prep for GoalBuddy. Use for broad, long-running, stalled, vague, detailed, planned, or unhealthy Codex work that needs a structured /goal intake, autonomous task discovery, role-tagged Scout/Judge/Worker delegation, one active task, durable receipts, and a PM-owned rolling board that maximizes the chance of a successful goal run.
|
|
3
|
+
description: Goal Prep for GoalBuddy. Use for broad, long-running, stalled, vague, detailed, planned, or unhealthy Codex or Claude Code work that needs a structured /goal intake, autonomous task discovery, role-tagged Scout/Judge/Worker delegation, one active task, durable receipts, and a PM-owned rolling board that maximizes the chance of a successful goal run.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Goal Prep
|
|
7
7
|
|
|
8
|
-
`$goal-prep` prepares a GoalBuddy board. It does not start `/goal` automatically, but the board and starter `/goal` command must be shaped so the next run continues into safe execution by default.
|
|
8
|
+
`$goal-prep` (Codex) or `/goal-prep` (Claude Code) prepares a GoalBuddy board. It does not start `/goal` automatically, but the board and starter `/goal` command must be shaped so the next run continues into safe execution by default.
|
|
9
9
|
|
|
10
|
-
GoalBuddy is for autonomous, long-running Codex work where the PM thread may need to discover the work, define tasks, sequence them, delegate them, execute them, verify them, and keep going without the human decomposing every step.
|
|
10
|
+
GoalBuddy is for autonomous, long-running Codex or Claude Code work where the PM thread may need to discover the work, define tasks, sequence them, delegate them, execute them, verify them, and keep going without the human decomposing every step.
|
|
11
11
|
|
|
12
12
|
The loop is:
|
|
13
13
|
|
|
@@ -24,15 +24,16 @@ There are two different modes:
|
|
|
24
24
|
|
|
25
25
|
This boundary is strict. `$goal-prep` is not a lightweight `/goal`; it is a board compiler.
|
|
26
26
|
|
|
27
|
-
During a `$goal-prep` turn, do not perform the user's requested work, even if the work looks read-only, preparatory, or obviously useful. Do not refresh or load named skills, inspect implementation files, browse reference repos, research design inspiration, generate design plans, generate images/assets, run app-specific checks,
|
|
27
|
+
During a `$goal-prep` turn, do not perform the user's requested work, even if the work looks read-only, preparatory, or obviously useful. Do not refresh or load named skills, inspect implementation files, browse reference repos, research design inspiration, generate design plans, generate images/assets, run app-specific checks, or edit product files. Put those actions into Scout, Judge, Worker, or PM tasks for the later `/goal` run.
|
|
28
28
|
|
|
29
29
|
Allowed `$goal-prep` actions:
|
|
30
30
|
|
|
31
31
|
- run the bundled GoalBuddy update checker and mention a newer version if one is available;
|
|
32
32
|
- ask diagnostic intake questions and wait when required;
|
|
33
|
-
- create or repair only `docs/goals/<slug>/goal.md`, `docs/goals/<slug>/state.yaml`,
|
|
33
|
+
- create or repair only `docs/goals/<slug>/goal.md`, `docs/goals/<slug>/state.yaml`, `docs/goals/<slug>/notes/`, and the generated `.goalbuddy-board/` visual board artifact;
|
|
34
|
+
- create and open the selected visual board surface for the goal;
|
|
34
35
|
- optionally run the GoalBuddy board checker against that `state.yaml`;
|
|
35
|
-
- verify
|
|
36
|
+
- verify GoalBuddy agent availability, if this can be done without touching implementation work, and record `installed`, `bundled_not_installed`, `missing`, or `unknown` truthfully;
|
|
36
37
|
- print exactly `/goal Follow docs/goals/<slug>/goal.md.`;
|
|
37
38
|
- ask whether to start `/goal`, refine the board, or stop.
|
|
38
39
|
|
|
@@ -72,6 +73,22 @@ Extract:
|
|
|
72
73
|
- blind spots: important risks, choices, or success dimensions the user may not have named yet;
|
|
73
74
|
- existing plan facts: user-provided steps, files, constraints, or sequencing that must be preserved but still validated.
|
|
74
75
|
|
|
76
|
+
Ask the visual-board question early, before detailed task shaping:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Do you want to set up a visual board for this?
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Recommended options:
|
|
83
|
+
|
|
84
|
+
1. Local live board (Recommended) - starts immediately, requires no credentials, and lets the user watch tasks populate inside Codex or Claude Code.
|
|
85
|
+
2. GitHub Projects - best when stakeholders need a shared external board and the user can approve GitHub credentials/project details.
|
|
86
|
+
3. No visual board - best for quick or private goals where the file board is enough.
|
|
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.
|
|
89
|
+
|
|
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
|
+
|
|
75
92
|
Ask before board creation when the request is vague, strategic, improvement-oriented, or open-ended and the user has not explicitly said to use defaults. Ask one guided question at a time with 2-3 options and a recommended default, then wait. Continue the diagnostic intake until the user's answers are sufficient to choose the board shape. Do not create or repair `docs/goals/<slug>/` until the diagnostic intake is complete or the user explicitly accepts defaults.
|
|
76
93
|
|
|
77
94
|
For vague or strategic goals, one answer is rarely enough. After each answer, reflect what it implies, name one likely blind spot, and ask the next material question. The goal is to help the user discover what they mean, not merely collect a form value.
|
|
@@ -117,14 +134,15 @@ Stop after each question. Do not create files, repair an existing board, run che
|
|
|
117
134
|
|
|
118
135
|
Minimum diagnostic ladder for vague, strategic, or improvement-oriented goals:
|
|
119
136
|
|
|
120
|
-
1.
|
|
121
|
-
2.
|
|
122
|
-
3.
|
|
123
|
-
4.
|
|
137
|
+
1. Visual board: ask "Do you want to set up a visual board for this?"
|
|
138
|
+
2. Intent target: what kind of improvement or outcome matters most?
|
|
139
|
+
3. Success proof: what evidence would convince the user this worked?
|
|
140
|
+
4. Scope and non-goals: what should remain untouched or explicitly out of scope?
|
|
141
|
+
5. Goal handling: reuse an existing goal, create a fresh goal, or inspect first?
|
|
124
142
|
|
|
125
143
|
Ask these one at a time. Skip a step only when the user's words already answer it clearly. After the user answers one step, do not assume the remaining steps; ask the next unresolved material question.
|
|
126
144
|
|
|
127
|
-
For "make GoalBuddy better", a good first question is which improvement target matters most: intake clarity, board/execution reliability, completion proof/eval coverage, or user experience during long-running goals. A good second question asks what proof would convince the user it improved. A good third question asks whether to reuse an existing
|
|
145
|
+
For "make GoalBuddy better", a good first question is which improvement target matters most: intake clarity, board/execution reliability, completion proof/eval coverage, or user experience during long-running goals. A good second question asks what proof would convince the user it improved. A good third question asks whether to reuse an existing goal, create a fresh goal, or inspect first.
|
|
128
146
|
|
|
129
147
|
## Direct `/goal` Entry
|
|
130
148
|
|
|
@@ -155,9 +173,10 @@ Do:
|
|
|
155
173
|
- classify the goal as `specific`, `open_ended`, `existing_plan`, `recovery`, or `audit`;
|
|
156
174
|
- create or repair `docs/goals/<slug>/`;
|
|
157
175
|
- create `goal.md`, `state.yaml`, and `notes/`;
|
|
176
|
+
- if requested, start the local visual board immediately and open it in the AI coding agent's in-app browser (Codex in-app Browser, Claude Code preview, or the user's regular browser) before filling the task list;
|
|
158
177
|
- seed a role-tagged task board that matches the input shape;
|
|
159
178
|
- make the first active task safe;
|
|
160
|
-
- verify Scout, Worker, and Judge
|
|
179
|
+
- verify Scout, Worker, and Judge agent availability or record an explicit truthful state;
|
|
161
180
|
- print the exact command `/goal Follow docs/goals/<slug>/goal.md.`;
|
|
162
181
|
- ask whether to start now, refine `goal.md`, or stop.
|
|
163
182
|
|
|
@@ -221,7 +240,7 @@ docs/goals/<slug>/
|
|
|
221
240
|
notes/
|
|
222
241
|
```
|
|
223
242
|
|
|
224
|
-
The goal root may contain only `goal.md`, `state.yaml`, and
|
|
243
|
+
The goal root may contain only `goal.md`, `state.yaml`, `notes/`, and generated `.goalbuddy-board/` files when the local visual board is enabled.
|
|
225
244
|
|
|
226
245
|
Most results live inline as task receipts in `state.yaml`. Only create `notes/<task-id>-<slug>.md` when Scout, Judge, or PM output is too large to fit on the task card.
|
|
227
246
|
|
|
@@ -472,7 +491,18 @@ If the checker and your judgment disagree, choose the more conservative state.
|
|
|
472
491
|
|
|
473
492
|
## Agents
|
|
474
493
|
|
|
475
|
-
Scout, Worker, and Judge are
|
|
494
|
+
Scout, Worker, and Judge templates are bundled with GoalBuddy. They may also be installed as user or project agent configs, but a board must not claim `installed` unless the preparer verified the matching agent files.
|
|
495
|
+
|
|
496
|
+
Use these `state.yaml` values:
|
|
497
|
+
|
|
498
|
+
| State | Meaning | Next action |
|
|
499
|
+
|---|---|---|
|
|
500
|
+
| `installed` | Matching Scout/Worker/Judge agent configs were found in the expected user or project agent location. | Continue. |
|
|
501
|
+
| `bundled_not_installed` | The bundled `goal_*.toml` template exists with the skill, but no matching installed agent config was verified. | `/goal` can proceed through PM fallback. If dedicated agents are required before `/goal`, run `npx goalbuddy agents`. |
|
|
502
|
+
| `missing` | Neither an installed config nor the bundled template was verified. | `/goal` can proceed through PM fallback. If dedicated agents are required before `/goal`, run `npx goalbuddy install`. |
|
|
503
|
+
| `unknown` | Agent availability could not be checked. | `/goal` can proceed through PM fallback. To check before `/goal`, run `npx goalbuddy doctor`. |
|
|
504
|
+
|
|
505
|
+
Non-`installed` states are warnings, not false failures, because the main `/goal` PM can perform Scout/Judge/Worker-shaped tasks directly when dedicated agents are unavailable.
|
|
476
506
|
|
|
477
507
|
| Agent | Thinking level | Write access | Use for |
|
|
478
508
|
|---|---:|---:|---|
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
# GoalBuddy Agents
|
|
2
2
|
|
|
3
|
-
This directory contains
|
|
3
|
+
This directory contains skill metadata and bundled agent definitions for Codex and Claude Code.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
4
6
|
|
|
5
7
|
- `openai.yaml` stays with the skill as metadata.
|
|
6
|
-
- `
|
|
8
|
+
- `goal_scout.toml`, `goal_judge.toml`, `goal_worker.toml` — Codex agent configs. Copy into `.codex/agents/` for project-scoped agents or `~/.codex/agents/` for personal agents.
|
|
9
|
+
- Claude Code agent markdown lives in `plugins/goalbuddy/agents/` (installed to `~/.claude/agents/` by `npx goalbuddy --target claude`).
|
|
10
|
+
|
|
11
|
+
## Agent Matrix
|
|
7
12
|
|
|
8
|
-
| Agent |
|
|
9
|
-
|
|
10
|
-
| Scout | `goal_scout.toml` | medium | read-only |
|
|
11
|
-
| Worker | `goal_worker.toml` | low | workspace-write |
|
|
12
|
-
| Judge | `goal_judge.toml` | high | read-only |
|
|
13
|
+
| Agent | Codex file | Claude Code file | Reasoning effort | Write scope |
|
|
14
|
+
|---|---|---|---:|---|
|
|
15
|
+
| Scout | `goal_scout.toml` | `goal-scout.md` | medium | read-only |
|
|
16
|
+
| Worker | `goal_worker.toml` | `goal-worker.md` | low | workspace-write |
|
|
17
|
+
| Judge | `goal_judge.toml` | `goal-judge.md` | high | read-only |
|
|
13
18
|
|
|
14
|
-
Recommended
|
|
19
|
+
## Recommended Codex Config
|
|
15
20
|
|
|
16
21
|
```toml
|
|
17
22
|
[agents]
|
|
@@ -20,4 +25,6 @@ max_depth = 1
|
|
|
20
25
|
job_max_runtime_seconds = 1800
|
|
21
26
|
```
|
|
22
27
|
|
|
28
|
+
## Authority Boundary
|
|
29
|
+
|
|
23
30
|
Only the main `/goal` PM loop may select the active task, mark tasks done, update board truth, or mark the goal complete.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# GitHub Projects
|
|
2
|
+
|
|
3
|
+
Mirror a GoalBuddy `state.yaml` board into GitHub Projects without making GitHub the source of truth.
|
|
4
|
+
|
|
5
|
+
This extension ports the GitHub Projects work from PR #1 into the catalog-based extension system. It keeps the package core dependency-free and optional, while giving teams a practical way to publish a GoalBuddy board into a familiar project surface.
|
|
6
|
+
|
|
7
|
+
## Use When
|
|
8
|
+
|
|
9
|
+
- A long-running GoalBuddy board needs stakeholder visibility in GitHub Projects.
|
|
10
|
+
- A team wants one-way sync from `state.yaml` into ProjectV2 draft issues.
|
|
11
|
+
- The PM needs a dry-run plan before using GitHub credentials.
|
|
12
|
+
- Existing GoalBuddy receipts, verification commands, allowed files, owners, and dependencies should be visible in a board layout.
|
|
13
|
+
|
|
14
|
+
## What It Creates
|
|
15
|
+
|
|
16
|
+
The live sync ensures a GitHub Project has:
|
|
17
|
+
|
|
18
|
+
- Draft issues keyed by `Task ID`, so reruns update existing cards instead of duplicating them.
|
|
19
|
+
- Status mapping: `queued -> Todo`, `active -> In Progress`, `blocked -> Blocked`, `done -> Done`.
|
|
20
|
+
- Single-select fields for `Status`, `Priority`, `Work Type`, and `Agent Lane`.
|
|
21
|
+
- Text fields for `Task ID`, `Owner`, `Goal Role`, `Agent Responsible`, `Credential Gate`, `Parent ID`, `Depends On`, `Receipt Summary`, `Verify`, `Allowed Files`, and `Goal Updated`.
|
|
22
|
+
- A `Goal Board` board-layout view for PM flow.
|
|
23
|
+
|
|
24
|
+
The extension must use the bundled sync script for live writes. Do not use Computer Use, browser automation, or the GitHub web UI to create or repair the board view. Do not replace the script with `gh project` commands; `gh project` does not expose the complete ProjectV2 view creation path this extension needs. The script uses GitHub GraphQL for projects, fields, items, and draft issues, plus the GitHub REST Project views endpoint for the `Goal Board` view.
|
|
25
|
+
|
|
26
|
+
The sync only creates or reuses `Goal Board`. It does not create a default Table view, an `Agent Workboard`, or extra role-specific views. GitHub may still show views that already existed on the Project.
|
|
27
|
+
|
|
28
|
+
The extension does not promise custom board grouping or sort order. GitHub's public Project views REST API currently accepts `name`, `layout`, `filter`, and `visible_fields` when creating a view, and GraphQL exposes grouping/sort fields for reading but not a public mutation for saving them. Because that display state cannot be written reliably through the public API, the sync only creates supported fields, cards, and the single `Goal Board` view.
|
|
29
|
+
|
|
30
|
+
## Inputs
|
|
31
|
+
|
|
32
|
+
- `docs/goals/<slug>/state.yaml`
|
|
33
|
+
- Optional `GITHUB_PROJECT_ID`
|
|
34
|
+
- Optional `GITHUB_PROJECT_OWNER` and `GITHUB_PROJECT_NUMBER`
|
|
35
|
+
- `GITHUB_TOKEN` or `GH_TOKEN` for live sync
|
|
36
|
+
|
|
37
|
+
## Dry Run
|
|
38
|
+
|
|
39
|
+
Dry-run mode does not call GitHub:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node extend/github-projects/scripts/sync-github-project.mjs \
|
|
43
|
+
--state docs/goals/<slug>/state.yaml \
|
|
44
|
+
--dry-run
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For structured output:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
node extend/github-projects/scripts/sync-github-project.mjs \
|
|
51
|
+
--state docs/goals/<slug>/state.yaml \
|
|
52
|
+
--dry-run \
|
|
53
|
+
--json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Live Sync
|
|
57
|
+
|
|
58
|
+
Always run the bundled script for live sync. It creates or reuses the `Goal Board` view as part of the same run that syncs fields and draft issues.
|
|
59
|
+
|
|
60
|
+
Use a ProjectV2 node ID:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
GITHUB_TOKEN=... node extend/github-projects/scripts/sync-github-project.mjs \
|
|
64
|
+
--state docs/goals/<slug>/state.yaml \
|
|
65
|
+
--project-id <project-node-id>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Or use an owner and project number:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
GITHUB_TOKEN=... node extend/github-projects/scripts/sync-github-project.mjs \
|
|
72
|
+
--state docs/goals/<slug>/state.yaml \
|
|
73
|
+
--owner <user-or-org> \
|
|
74
|
+
--project-number <number>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Environment alternatives:
|
|
78
|
+
|
|
79
|
+
- `GITHUB_PROJECT_ID`
|
|
80
|
+
- `GITHUB_PROJECT_OWNER`
|
|
81
|
+
- `GITHUB_PROJECT_NUMBER`
|
|
82
|
+
- `GITHUB_TOKEN` or `GH_TOKEN`
|
|
83
|
+
|
|
84
|
+
## Verification
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
node --test extend/github-projects/test/*.test.mjs
|
|
88
|
+
node extend/github-projects/scripts/sync-github-project.mjs \
|
|
89
|
+
--state extend/github-projects/examples/goal-board-sync/state.yaml \
|
|
90
|
+
--dry-run
|
|
91
|
+
node extend/github-projects/scripts/sync-github-project.mjs \
|
|
92
|
+
--state extend/github-projects/examples/goal-board-sync/state.yaml \
|
|
93
|
+
--dry-run \
|
|
94
|
+
--json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Boundaries
|
|
98
|
+
|
|
99
|
+
- `state.yaml` remains authoritative.
|
|
100
|
+
- The sync is one-way from GoalBuddy to GitHub Projects.
|
|
101
|
+
- Missing GitHub credentials block only live sync, not local dry-run validation.
|
|
102
|
+
- Live sync creates or updates GitHub Project draft issues, fields, and the `Goal Board` view through the bundled script.
|
|
103
|
+
- Agents must not fall back to Computer Use, browser automation, or the GitHub web UI for Project setup.
|
|
104
|
+
- Agents must not claim ProjectV2 board views are UI-only; GitHub's REST Project views API supports creating board-layout views.
|
|
105
|
+
- Native GitHub issue hierarchy and dependencies are represented as fields because ProjectV2 draft issues do not provide full issue relationship semantics.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
goal:
|
|
4
|
+
title: "Goal board sync MVP"
|
|
5
|
+
slug: "goal-board-sync-mvp"
|
|
6
|
+
kind: specific
|
|
7
|
+
tranche: "Mirror a GoalBuddy board into an external Kanban surface."
|
|
8
|
+
status: active
|
|
9
|
+
|
|
10
|
+
rules:
|
|
11
|
+
pm_owns_state: true
|
|
12
|
+
one_active_task: true
|
|
13
|
+
max_write_workers: 1
|
|
14
|
+
no_implementation_without_worker_or_pm_task: true
|
|
15
|
+
no_completion_without_judge_or_pm_audit: true
|
|
16
|
+
|
|
17
|
+
active_task: T002
|
|
18
|
+
|
|
19
|
+
tasks:
|
|
20
|
+
- id: T001
|
|
21
|
+
type: scout
|
|
22
|
+
assignee: Scout
|
|
23
|
+
status: done
|
|
24
|
+
priority: P3
|
|
25
|
+
objective: "Map external board API requirements."
|
|
26
|
+
inputs:
|
|
27
|
+
- "Board API docs"
|
|
28
|
+
constraints:
|
|
29
|
+
- "Read-only."
|
|
30
|
+
expected_output:
|
|
31
|
+
- "Required scopes"
|
|
32
|
+
- "Field mapping"
|
|
33
|
+
receipt:
|
|
34
|
+
result: done
|
|
35
|
+
summary: "The board sync can read GoalBuddy state.yaml and mirror tasks into an external board."
|
|
36
|
+
- id: T002
|
|
37
|
+
type: worker
|
|
38
|
+
assignee: Worker
|
|
39
|
+
status: active
|
|
40
|
+
priority: P1
|
|
41
|
+
objective: "Implement one-way external board sync."
|
|
42
|
+
parent: T001
|
|
43
|
+
depends_on:
|
|
44
|
+
- T001
|
|
45
|
+
allowed_files:
|
|
46
|
+
- "extend/github-projects/scripts/**"
|
|
47
|
+
- "README.md"
|
|
48
|
+
verify:
|
|
49
|
+
- "node --test extend/github-projects/test/*.test.mjs"
|
|
50
|
+
- "node extend/github-projects/scripts/sync-github-project.mjs --state extend/github-projects/examples/goal-board-sync/state.yaml --dry-run"
|
|
51
|
+
stop_if:
|
|
52
|
+
- "Board API credentials are unavailable."
|
|
53
|
+
receipt: null
|
|
54
|
+
- id: T003
|
|
55
|
+
type: judge
|
|
56
|
+
assignee: Judge
|
|
57
|
+
status: queued
|
|
58
|
+
priority: P2
|
|
59
|
+
objective: "Audit whether the board sync MVP is ready to document."
|
|
60
|
+
parent: T002
|
|
61
|
+
depends_on:
|
|
62
|
+
- T002
|
|
63
|
+
receipt: null
|