goalbuddy 0.2.10
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 +45 -0
- package/LICENSE +21 -0
- package/README.md +215 -0
- package/examples/extend-catalog-workflow/goal.md +53 -0
- package/examples/extend-catalog-workflow/notes/T001-extension-model-map.md +47 -0
- package/examples/extend-catalog-workflow/notes/T002-architecture-decision.md +48 -0
- package/examples/extend-catalog-workflow/notes/T003-implementation-summary.md +43 -0
- package/examples/extend-catalog-workflow/notes/T004-root-extend-folder.md +24 -0
- package/examples/extend-catalog-workflow/notes/T005-layout-cleanup.md +46 -0
- package/examples/extend-catalog-workflow/notes/T006-catalog-location.md +50 -0
- package/examples/extend-catalog-workflow/notes/T999-completion-audit.md +36 -0
- package/examples/extend-catalog-workflow/state.yaml +327 -0
- package/examples/github-pr-workflow-extension/pr-handoff.md +46 -0
- package/examples/improve-goal-maker/goal.md +51 -0
- package/examples/improve-goal-maker/notes/T001-repo-map.md +59 -0
- package/examples/improve-goal-maker/notes/T002-risk-map.md +37 -0
- package/examples/improve-goal-maker/state.yaml +224 -0
- package/goal-maker/SKILL.md +18 -0
- package/goal-maker/agents/README.md +23 -0
- package/goal-maker/agents/config-snippet.toml +5 -0
- package/goal-maker/agents/goal_judge.toml +29 -0
- package/goal-maker/agents/goal_scout.toml +26 -0
- package/goal-maker/agents/goal_worker.toml +28 -0
- package/goal-maker/agents/openai.yaml +6 -0
- package/goal-maker/scripts/check-goal-state.mjs +370 -0
- package/goal-maker/scripts/install-agents.mjs +28 -0
- package/goal-maker/templates/agents.md +48 -0
- package/goal-maker/templates/goal-prompt.txt +1 -0
- package/goal-maker/templates/goal.md +71 -0
- package/goal-maker/templates/note.md +22 -0
- package/goal-maker/templates/state.yaml +125 -0
- package/goalbuddy/SKILL.md +484 -0
- package/goalbuddy/agents/README.md +23 -0
- package/goalbuddy/agents/config-snippet.toml +5 -0
- package/goalbuddy/agents/goal_judge.toml +29 -0
- package/goalbuddy/agents/goal_scout.toml +26 -0
- package/goalbuddy/agents/goal_worker.toml +28 -0
- package/goalbuddy/agents/openai.yaml +6 -0
- package/goalbuddy/scripts/check-goal-state.mjs +370 -0
- package/goalbuddy/scripts/install-agents.mjs +28 -0
- package/goalbuddy/templates/agents.md +48 -0
- package/goalbuddy/templates/goal-prompt.txt +1 -0
- package/goalbuddy/templates/goal.md +71 -0
- package/goalbuddy/templates/note.md +22 -0
- package/goalbuddy/templates/state.yaml +125 -0
- package/internal/assets/extend-release.png +0 -0
- package/internal/assets/extend-release.svg +83 -0
- package/internal/assets/goal-maker-flow.png +0 -0
- package/internal/cli/check-publish-version.mjs +86 -0
- package/internal/cli/goal-maker.mjs +1061 -0
- package/package.json +65 -0
- package/plugins/goalbuddy/.codex-plugin/plugin.json +48 -0
- package/plugins/goalbuddy/README.md +29 -0
- package/plugins/goalbuddy/assets/goalbuddy-icon.svg +8 -0
- package/plugins/goalbuddy/skills/goalbuddy/SKILL.md +484 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/README.md +23 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/config-snippet.toml +5 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_judge.toml +29 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_scout.toml +26 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/goal_worker.toml +28 -0
- package/plugins/goalbuddy/skills/goalbuddy/agents/openai.yaml +6 -0
- package/plugins/goalbuddy/skills/goalbuddy/scripts/check-goal-state.mjs +370 -0
- package/plugins/goalbuddy/skills/goalbuddy/scripts/install-agents.mjs +28 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/agents.md +48 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/goal-prompt.txt +1 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/goal.md +71 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/note.md +22 -0
- package/plugins/goalbuddy/skills/goalbuddy/templates/state.yaml +125 -0
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "goalbuddy",
|
|
3
|
+
"version": "0.2.10",
|
|
4
|
+
"description": "Turn open-ended Codex goals into a GoalBuddy Scout/Judge/Worker board with receipts, verification, and optional extensions.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"goalbuddy": "internal/cli/goal-maker.mjs",
|
|
8
|
+
"goal-maker": "internal/cli/goal-maker.mjs"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"README.md",
|
|
12
|
+
"CONTRIBUTING.md",
|
|
13
|
+
"examples",
|
|
14
|
+
"plugins/goalbuddy",
|
|
15
|
+
"internal/assets",
|
|
16
|
+
"internal/cli",
|
|
17
|
+
"goalbuddy/SKILL.md",
|
|
18
|
+
"goalbuddy/agents",
|
|
19
|
+
"goalbuddy/scripts",
|
|
20
|
+
"goalbuddy/templates",
|
|
21
|
+
"goal-maker/SKILL.md",
|
|
22
|
+
"goal-maker/agents",
|
|
23
|
+
"goal-maker/scripts",
|
|
24
|
+
"goal-maker/templates"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"check": "node --check internal/cli/goal-maker.mjs goal-maker/scripts/*.mjs goalbuddy/scripts/*.mjs && node --test internal/test/*.test.mjs",
|
|
28
|
+
"test": "node --test internal/test/*.test.mjs",
|
|
29
|
+
"pack:dry-run": "npm pack --dry-run",
|
|
30
|
+
"publish:check": "node internal/cli/check-publish-version.mjs && npm run pack:dry-run",
|
|
31
|
+
"prepublishOnly": "node internal/cli/check-publish-version.mjs"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/tolibear/goalbuddy.git"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"codex",
|
|
39
|
+
"codex-skill",
|
|
40
|
+
"openai-codex",
|
|
41
|
+
"goalbuddy",
|
|
42
|
+
"goal",
|
|
43
|
+
"task-board",
|
|
44
|
+
"receipts",
|
|
45
|
+
"project-management",
|
|
46
|
+
"automation",
|
|
47
|
+
"cli",
|
|
48
|
+
"workflow",
|
|
49
|
+
"agent",
|
|
50
|
+
"extensions",
|
|
51
|
+
"verification"
|
|
52
|
+
],
|
|
53
|
+
"author": "tolibear",
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/tolibear/goalbuddy/issues"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/tolibear/goalbuddy#readme",
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=18"
|
|
61
|
+
},
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "goalbuddy",
|
|
3
|
+
"version": "0.2.10",
|
|
4
|
+
"description": "Turn broad Codex work into verified GoalBuddy boards with Scout, Judge, Worker, receipts, and optional extensions.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "tolibear",
|
|
7
|
+
"email": "support@tolibear.com",
|
|
8
|
+
"url": "https://github.com/tolibear"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/tolibear/goalbuddy#readme",
|
|
11
|
+
"repository": "https://github.com/tolibear/goalbuddy",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"goalbuddy",
|
|
15
|
+
"codex",
|
|
16
|
+
"skills",
|
|
17
|
+
"goal",
|
|
18
|
+
"task-board",
|
|
19
|
+
"receipts",
|
|
20
|
+
"workflow",
|
|
21
|
+
"extensions"
|
|
22
|
+
],
|
|
23
|
+
"skills": "./skills/",
|
|
24
|
+
"interface": {
|
|
25
|
+
"displayName": "GoalBuddy",
|
|
26
|
+
"shortDescription": "Turn broad Codex work into verified Scout/Judge/Worker boards",
|
|
27
|
+
"longDescription": "GoalBuddy packages a structured Codex goal workflow for broad, long-running, or ambiguous engineering work. It creates durable goal charters, task boards, receipts, verification gates, extension handoffs, and compatibility guidance for teams moving from goal-maker.",
|
|
28
|
+
"developerName": "tolibear",
|
|
29
|
+
"category": "Coding",
|
|
30
|
+
"capabilities": [
|
|
31
|
+
"Interactive",
|
|
32
|
+
"Read",
|
|
33
|
+
"Write"
|
|
34
|
+
],
|
|
35
|
+
"websiteURL": "https://github.com/tolibear/goalbuddy",
|
|
36
|
+
"privacyPolicyURL": "https://github.com/tolibear/goalbuddy#privacy",
|
|
37
|
+
"termsOfServiceURL": "https://github.com/tolibear/goalbuddy#license",
|
|
38
|
+
"defaultPrompt": [
|
|
39
|
+
"Prepare a GoalBuddy board for this goal",
|
|
40
|
+
"Audit this GoalBuddy board and continue safely",
|
|
41
|
+
"Install GoalBuddy extensions and verify setup"
|
|
42
|
+
],
|
|
43
|
+
"brandColor": "#2563EB",
|
|
44
|
+
"composerIcon": "./assets/goalbuddy-icon.svg",
|
|
45
|
+
"logo": "./assets/goalbuddy-icon.svg",
|
|
46
|
+
"screenshots": []
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# GoalBuddy Codex Plugin
|
|
2
|
+
|
|
3
|
+
GoalBuddy packages the canonical `$goalbuddy` skill as a Codex plugin so teams can install the reusable workflow as a plugin while keeping the npm CLI for local setup, doctor checks, and extension management.
|
|
4
|
+
|
|
5
|
+
## What It Contains
|
|
6
|
+
|
|
7
|
+
- `.codex-plugin/plugin.json`: plugin metadata and Codex UI copy.
|
|
8
|
+
- `skills/goalbuddy/`: the installable GoalBuddy skill payload.
|
|
9
|
+
- `assets/goalbuddy-icon.svg`: lightweight plugin icon.
|
|
10
|
+
|
|
11
|
+
## Local Testing
|
|
12
|
+
|
|
13
|
+
From the repo root:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm run check
|
|
17
|
+
npx goalbuddy doctor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
For local CLI testing before npm publish:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node internal/cli/goal-maker.mjs install --catalog-url extend/catalog.json
|
|
24
|
+
node internal/cli/goal-maker.mjs doctor
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Release Notes
|
|
28
|
+
|
|
29
|
+
The plugin is prepared for the `tolibear/goalbuddy` repo and `goalbuddy` npm package. Do not publish this plugin until the owner completes the GitHub and npm handoff steps in `docs/goals/goalbuddy-rebrand-plugin/state.yaml`.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">GoalBuddy icon</title>
|
|
3
|
+
<desc id="desc">A blue rounded square with a white checkmark and board columns.</desc>
|
|
4
|
+
<rect width="64" height="64" rx="14" fill="#2563EB"/>
|
|
5
|
+
<path d="M18 18h28a4 4 0 0 1 4 4v20a4 4 0 0 1-4 4H18a4 4 0 0 1-4-4V22a4 4 0 0 1 4-4Z" fill="#FFFFFF" opacity=".16"/>
|
|
6
|
+
<path d="M24 24v16M34 24v16M44 24v16" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" opacity=".65"/>
|
|
7
|
+
<path d="m22 35 7 7 14-18" fill="none" stroke="#FFFFFF" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
</svg>
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: goalbuddy
|
|
3
|
+
description: 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.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GoalBuddy
|
|
7
|
+
|
|
8
|
+
`$goalbuddy` 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
|
+
|
|
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.
|
|
11
|
+
|
|
12
|
+
The loop is:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
raw user intent -> intake compiler -> discovery/plan validation/execution board -> one active task -> receipt -> board update -> repeat
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Intake Compiler
|
|
19
|
+
|
|
20
|
+
Before creating, repairing, or running a board, privately translate the user's input into a Goal Intake. The input may be vague, specific, or detailed with an existing plan. Do not dump the intake to the user unless they ask for it.
|
|
21
|
+
|
|
22
|
+
Extract:
|
|
23
|
+
|
|
24
|
+
- original request: the shortest faithful user wording;
|
|
25
|
+
- interpreted outcome: what must become true;
|
|
26
|
+
- input shape: `vague | specific | existing_plan | recovery | audit`;
|
|
27
|
+
- audience or beneficiary;
|
|
28
|
+
- non-goals and hard constraints;
|
|
29
|
+
- authority: `requested | approved | inferred | needs_approval | blocked`;
|
|
30
|
+
- proof type: `test | demo | artifact | metric | review | source_backed_answer | decision`;
|
|
31
|
+
- completion proof: the observable signal for full outcome completion;
|
|
32
|
+
- likely misfire: how `/goal` could succeed at the wrong thing;
|
|
33
|
+
- blind spots: important risks, choices, or success dimensions the user may not have named yet;
|
|
34
|
+
- existing plan facts: user-provided steps, files, constraints, or sequencing that must be preserved but still validated.
|
|
35
|
+
|
|
36
|
+
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.
|
|
37
|
+
|
|
38
|
+
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.
|
|
39
|
+
|
|
40
|
+
Proceed with labeled assumptions and seed a safe board only when at least one is true:
|
|
41
|
+
|
|
42
|
+
- the user provides a specific outcome and enough completion proof to choose the first phase;
|
|
43
|
+
- the user provides an existing plan or concrete artifact to validate;
|
|
44
|
+
- the request is clearly recovery or audit with a target path, error, failing command, or stale board;
|
|
45
|
+
- the user says to proceed, use defaults, or prepare the board now.
|
|
46
|
+
|
|
47
|
+
If a missing answer materially changes outcome, authority, scope, risk, owner, completion proof, or board-handling choice, ask even if the user provided details.
|
|
48
|
+
|
|
49
|
+
Examples:
|
|
50
|
+
|
|
51
|
+
- Vague input: start with Scout, then Judge, bounded Worker, final audit.
|
|
52
|
+
- Specific input with incomplete evidence: start with Scout or Judge before Worker.
|
|
53
|
+
- Existing plan: preserve the plan as facts, start with PM or Judge plan validation, then queue bounded Worker slices from the validated plan.
|
|
54
|
+
- Recovery: start with Scout evidence mapping or Judge triage before writes.
|
|
55
|
+
- Audit: keep the board read-only unless the user approves follow-up execution.
|
|
56
|
+
|
|
57
|
+
The intake compiler is an internal strut for `/goal`: it exists to make the first board correct, not to create process theater.
|
|
58
|
+
|
|
59
|
+
## Guided Intake Surface
|
|
60
|
+
|
|
61
|
+
For interactive vague or improvement-oriented input, run a diagnostic intake. Show only the current turn of the diagnostic, not the private intake:
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
I read this as: [one-sentence interpreted outcome].
|
|
65
|
+
|
|
66
|
+
One possible blind spot: [a risk, unstated choice, or success dimension the user may not have named].
|
|
67
|
+
|
|
68
|
+
[One material question?]
|
|
69
|
+
|
|
70
|
+
1. [Recommended direction] (Recommended) - [when it wins]
|
|
71
|
+
2. [Second direction] - [when it wins]
|
|
72
|
+
3. [Third direction, only if genuinely useful] - [when it wins]
|
|
73
|
+
|
|
74
|
+
My default would be [option] because [short reason].
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Stop after each question. Do not create files, repair an existing board, run checks, or print `/goal` until the diagnostic intake is complete. Do not dump the private intake.
|
|
78
|
+
|
|
79
|
+
Minimum diagnostic ladder for vague, strategic, or improvement-oriented goals:
|
|
80
|
+
|
|
81
|
+
1. Intent target: what kind of improvement or outcome matters most?
|
|
82
|
+
2. Success proof: what evidence would convince the user this worked?
|
|
83
|
+
3. Scope and non-goals: what should remain untouched or explicitly out of scope?
|
|
84
|
+
4. Board handling: reuse an existing board, create a fresh board, or inspect first?
|
|
85
|
+
|
|
86
|
+
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.
|
|
87
|
+
|
|
88
|
+
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 board, create a fresh board, or inspect first.
|
|
89
|
+
|
|
90
|
+
## Direct `/goal` Entry
|
|
91
|
+
|
|
92
|
+
When `/goal` is invoked with raw user intent instead of an existing `docs/goals/<slug>/goal.md` path, run the Intake Compiler before doing implementation work. The PM should not treat raw `/goal` text as an execution plan until it has:
|
|
93
|
+
|
|
94
|
+
- classified the input shape;
|
|
95
|
+
- preserved any existing plan facts;
|
|
96
|
+
- identified the likely misfire and at least one blind spot;
|
|
97
|
+
- recorded authority and proof;
|
|
98
|
+
- answered or explicitly defaulted the diagnostic ladder for vague/strategic input;
|
|
99
|
+
- selected the safest first active task;
|
|
100
|
+
- either asked the required guided intake question or written `goal.md` and `state.yaml` from a sufficiently clear intake.
|
|
101
|
+
|
|
102
|
+
If the raw input is detailed and already contains a plan, the first board task should validate and operationalize that plan rather than rediscovering from scratch. If the raw input is vague, run the diagnostic intake before creating the board unless the user explicitly says to use defaults. If the raw input is blocked by authority, policy, destructive action, credentials, or ambiguous completion proof, ask one guided question with options or create the smallest safe read-only task only after the user chooses to proceed.
|
|
103
|
+
|
|
104
|
+
The target is not literal certainty. It is the highest practical likelihood of a successful goal run: preserve the user's intent, avoid the likely misfire, pick the earliest responsible phase, require proof, and keep advancing safe work until a final audit proves the full outcome.
|
|
105
|
+
|
|
106
|
+
## What `$goalbuddy` Does
|
|
107
|
+
|
|
108
|
+
When invoked directly, run intake first. For vague, strategic, improvement-oriented, or open-ended input, run the diagnostic intake and stop before creating or repairing the board until enough material answers are known. For sufficiently clear, planned, recovery, audit, or explicitly-defaulted input, prepare or repair the board and stop for user choice.
|
|
109
|
+
|
|
110
|
+
Do:
|
|
111
|
+
|
|
112
|
+
- clarify or infer the goal title and slug;
|
|
113
|
+
- run the Intake Compiler;
|
|
114
|
+
- ask diagnostic intake questions when clarity would materially improve the board;
|
|
115
|
+
- classify the goal as `specific`, `open_ended`, `existing_plan`, `recovery`, or `audit`;
|
|
116
|
+
- create or repair `docs/goals/<slug>/`;
|
|
117
|
+
- create `goal.md`, `state.yaml`, and `notes/`;
|
|
118
|
+
- seed a role-tagged task board that matches the input shape;
|
|
119
|
+
- make the first active task safe;
|
|
120
|
+
- verify Scout, Worker, and Judge agents are installed or explain what is missing;
|
|
121
|
+
- print the exact command `/goal Follow docs/goals/<slug>/goal.md.`;
|
|
122
|
+
- ask whether to start now, refine `goal.md`, or stop.
|
|
123
|
+
|
|
124
|
+
Do not:
|
|
125
|
+
|
|
126
|
+
- start `/goal` automatically;
|
|
127
|
+
- create or repair a board from vague/open-ended input before diagnostic intake is complete;
|
|
128
|
+
- create `evidence.jsonl`, `units/`, or `artifacts/` for new v2 goals;
|
|
129
|
+
- edit implementation files before the board exists;
|
|
130
|
+
- invent implementation tasks from vibes when the intake requires Scout, Judge, or plan validation first;
|
|
131
|
+
- discard a user-provided plan; preserve it as facts and validate it before execution;
|
|
132
|
+
- treat `goal.md` as board truth when it conflicts with `state.yaml`.
|
|
133
|
+
|
|
134
|
+
## Default Bias: Users Want Work Done
|
|
135
|
+
|
|
136
|
+
Unless the user explicitly asks for planning only, treat a GoalBuddy request as a request for work to happen.
|
|
137
|
+
|
|
138
|
+
Planning, Scout findings, Judge decisions, and a queued Worker task are not terminal outcomes when the user's original ask is for a working capability, automation, fix, cleanup, or backend/frontend behavior. They are setup for execution.
|
|
139
|
+
|
|
140
|
+
For execution goals, the default run is continuous:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
Discover enough evidence, choose a safe implementation slice, implement it, verify it, audit it, then immediately choose and execute the next safe slice until the full original outcome is complete.
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
If the first `/goal` run reaches a Judge decision that names a safe Worker task with `allowed_files`, `verify`, and `stop_if`, the PM should activate that Worker and continue in the same run unless a stop condition applies.
|
|
147
|
+
|
|
148
|
+
After a verified Worker slice and audit, do not mark the thread goal complete merely because that slice passed. A slice audit is a checkpoint. For broad automation or product goals, continue by reopening or advancing the board to the next safe Worker task until the full owner outcome is complete.
|
|
149
|
+
|
|
150
|
+
Missing owner input, credentials, production access, destructive-operation permission, or policy decisions are blockers for specific tasks, not stopping conditions for the whole goal. When a slice hits one of those blockers, mark that exact task blocked with a receipt, create a safe follow-up or workaround task, and keep doing local, non-destructive work that advances the full outcome.
|
|
151
|
+
|
|
152
|
+
## When To Use
|
|
153
|
+
|
|
154
|
+
Use this skill for goals that are broad, multi-hour, ambiguous, high-risk, already planned, already stale, already red, or likely to need Scout/Judge/Worker delegation.
|
|
155
|
+
|
|
156
|
+
For a one-change task, do not create a GoalBuddy board.
|
|
157
|
+
|
|
158
|
+
Scout and Judge tasks may identify optional extension, plugin, publishing, reporting, or channel opportunities as improvement candidates. Treat those as normal board tasks. Extensions are supporting surfaces; `state.yaml` remains board truth.
|
|
159
|
+
|
|
160
|
+
## The Four Primitives
|
|
161
|
+
|
|
162
|
+
1. **Charter**: `goal.md` says what the current tranche is trying to accomplish and what constraints matter.
|
|
163
|
+
2. **Board**: `state.yaml` is the rolling task list and machine truth.
|
|
164
|
+
3. **Task**: exactly one active task may be worked at a time.
|
|
165
|
+
4. **Receipt**: every completed, blocked, or escalated task leaves a compact durable result on the task card.
|
|
166
|
+
|
|
167
|
+
Agents are not a separate primitive. They are the assignee type on a task.
|
|
168
|
+
|
|
169
|
+
## Control Files
|
|
170
|
+
|
|
171
|
+
For a v2 goal, create only:
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
docs/goals/<slug>/
|
|
175
|
+
goal.md
|
|
176
|
+
state.yaml
|
|
177
|
+
notes/
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
The goal root may contain only `goal.md`, `state.yaml`, and `notes/`.
|
|
181
|
+
|
|
182
|
+
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.
|
|
183
|
+
|
|
184
|
+
Use:
|
|
185
|
+
|
|
186
|
+
- `templates/goal.md`
|
|
187
|
+
- `templates/state.yaml`
|
|
188
|
+
- `templates/note.md`
|
|
189
|
+
|
|
190
|
+
## Charter
|
|
191
|
+
|
|
192
|
+
The charter answers:
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
What did the user originally ask for?
|
|
196
|
+
What are we trying to improve?
|
|
197
|
+
What input shape did the intake identify?
|
|
198
|
+
What constraints are non-negotiable?
|
|
199
|
+
Is this goal specific, open-ended, existing-plan, recovery, or audit?
|
|
200
|
+
What likely misfire must the PM avoid?
|
|
201
|
+
What counts as enough for the current tranche?
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Avoid forever goals. A broad goal should define an execution tranche, for example:
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
Discover the highest-leverage local improvements, complete successive safe verified implementation slices, audit each slice against the original user outcome, and keep advancing until the full outcome is complete.
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Board
|
|
211
|
+
|
|
212
|
+
`state.yaml` is the board and machine truth. A task card has:
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
id: T001
|
|
216
|
+
type: scout | judge | worker | pm
|
|
217
|
+
assignee: Scout | Judge | Worker | PM
|
|
218
|
+
status: queued | active | blocked | done
|
|
219
|
+
objective: "<one sentence>"
|
|
220
|
+
inputs: []
|
|
221
|
+
constraints: []
|
|
222
|
+
expected_output: []
|
|
223
|
+
receipt: null
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Worker tasks additionally require:
|
|
227
|
+
|
|
228
|
+
```yaml
|
|
229
|
+
allowed_files: []
|
|
230
|
+
verify: []
|
|
231
|
+
stop_if: []
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The PM owns the board. Scout, Judge, and Worker return receipts; they do not select the next active task or mark the goal complete.
|
|
235
|
+
|
|
236
|
+
## Seed Boards
|
|
237
|
+
|
|
238
|
+
If the goal is vague, the first active task is Scout, but the seeded board should still lead toward execution. Queue Judge selection, a bounded Worker slot, and a final audit.
|
|
239
|
+
|
|
240
|
+
If the user provides an existing plan, do not ignore it and do not execute it blindly. Preserve the plan in `goal.intake.existing_plan_facts`, make the first active task PM or Judge validation, and queue Worker slices only after the plan is checked for evidence, risk, allowed files, verification, and stop conditions.
|
|
241
|
+
|
|
242
|
+
Example open-ended seed:
|
|
243
|
+
|
|
244
|
+
```yaml
|
|
245
|
+
tasks:
|
|
246
|
+
- id: T001
|
|
247
|
+
type: scout
|
|
248
|
+
assignee: Scout
|
|
249
|
+
status: active
|
|
250
|
+
objective: "Map repo health and identify improvement candidates."
|
|
251
|
+
receipt: null
|
|
252
|
+
- id: T002
|
|
253
|
+
type: scout
|
|
254
|
+
assignee: Scout
|
|
255
|
+
status: queued
|
|
256
|
+
objective: "Find verification commands, flaky tests, stale docs, dependency risks, and easy safety wins."
|
|
257
|
+
receipt: null
|
|
258
|
+
- id: T003
|
|
259
|
+
type: judge
|
|
260
|
+
assignee: Judge
|
|
261
|
+
status: queued
|
|
262
|
+
objective: "Choose the first safe implementation task by impact, confidence, reversibility, and verification strength."
|
|
263
|
+
expected_output:
|
|
264
|
+
- "Decision"
|
|
265
|
+
- "Exact Worker objective"
|
|
266
|
+
- "allowed_files"
|
|
267
|
+
- "verify"
|
|
268
|
+
- "stop_if"
|
|
269
|
+
receipt: null
|
|
270
|
+
- id: T004
|
|
271
|
+
type: worker
|
|
272
|
+
assignee: Worker
|
|
273
|
+
status: queued
|
|
274
|
+
objective: "Execute the first safe implementation task selected by Judge."
|
|
275
|
+
allowed_files: []
|
|
276
|
+
verify: []
|
|
277
|
+
stop_if:
|
|
278
|
+
- "Need files outside allowed_files."
|
|
279
|
+
- "Behavior is ambiguous."
|
|
280
|
+
- "Verification fails twice."
|
|
281
|
+
receipt: null
|
|
282
|
+
- id: T999
|
|
283
|
+
type: judge
|
|
284
|
+
assignee: Judge
|
|
285
|
+
status: queued
|
|
286
|
+
objective: "Audit whether the implemented slice satisfies the original user outcome for this tranche."
|
|
287
|
+
receipt: null
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
If the goal is specific but evidence is incomplete, start with Scout. If risk or priority is unclear, queue Judge before Worker. If evidence is adequate and implementation is bounded, the first active task may be Worker.
|
|
291
|
+
|
|
292
|
+
If the goal is audit, keep the active task read-only. Queue execution only if the user asks for fixes or approves follow-up implementation.
|
|
293
|
+
|
|
294
|
+
## Task Rules
|
|
295
|
+
|
|
296
|
+
A task is the only work that may happen.
|
|
297
|
+
|
|
298
|
+
- Scout tasks are read-only and produce findings.
|
|
299
|
+
- Judge tasks are read-only and produce decisions or constraints.
|
|
300
|
+
- Worker tasks may write only inside `allowed_files`.
|
|
301
|
+
- PM tasks may update control files and board state.
|
|
302
|
+
|
|
303
|
+
No implementation without an active Worker or PM task that explicitly allows it.
|
|
304
|
+
|
|
305
|
+
At most one write-capable Worker may be active. Do not run parallel Workers unless `state.yaml` proves disjoint write scopes and the user explicitly asked for parallel agent work.
|
|
306
|
+
|
|
307
|
+
## Receipts
|
|
308
|
+
|
|
309
|
+
A receipt is compact proof that the task happened and what it changed, learned, decided, blocked, or spawned.
|
|
310
|
+
|
|
311
|
+
Scout receipt:
|
|
312
|
+
|
|
313
|
+
```yaml
|
|
314
|
+
receipt:
|
|
315
|
+
result: done
|
|
316
|
+
summary: "Found three high-leverage candidates: flaky auth tests, missing router coverage, stale build docs."
|
|
317
|
+
evidence:
|
|
318
|
+
- test/auth/session.test.ts
|
|
319
|
+
- src/router/index.ts
|
|
320
|
+
- README.md
|
|
321
|
+
spawned_tasks:
|
|
322
|
+
- T004
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Judge receipt:
|
|
326
|
+
|
|
327
|
+
```yaml
|
|
328
|
+
receipt:
|
|
329
|
+
result: done
|
|
330
|
+
decision: "Do router coverage first; defer auth flake because it is not reproducible locally."
|
|
331
|
+
next_allowed_task: T004
|
|
332
|
+
blocked_tasks:
|
|
333
|
+
- T005
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Worker receipt:
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
receipt:
|
|
340
|
+
result: done
|
|
341
|
+
changed_files:
|
|
342
|
+
- src/billing/router.ts
|
|
343
|
+
- test/billing/router.test.ts
|
|
344
|
+
commands:
|
|
345
|
+
- cmd: git diff --check
|
|
346
|
+
status: pass
|
|
347
|
+
- cmd: npm test -- test/billing/router.test.ts
|
|
348
|
+
status: pass
|
|
349
|
+
summary: "invoice.paid now routes through eventRouter.dispatch; regression test added."
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
For long findings or decisions, write `notes/<task-id>-<slug>.md` and point to it:
|
|
353
|
+
|
|
354
|
+
```yaml
|
|
355
|
+
receipt:
|
|
356
|
+
result: done
|
|
357
|
+
note: notes/T001-repo-map.md
|
|
358
|
+
summary: "Repo map completed; three candidate tranches found."
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Computed Gate
|
|
362
|
+
|
|
363
|
+
Do not store manual gate booleans.
|
|
364
|
+
|
|
365
|
+
The gate is computed from the active task:
|
|
366
|
+
|
|
367
|
+
- active Scout: edits are not allowed; receipt must include findings or a note.
|
|
368
|
+
- active Judge: edits are not allowed; receipt must include a decision.
|
|
369
|
+
- active Worker: edits are allowed only inside `allowed_files`; receipt must include changed files and commands.
|
|
370
|
+
- active PM: edits are limited to control files unless the task explicitly allows otherwise.
|
|
371
|
+
|
|
372
|
+
If verification is red, stale, blocked, or unknown, choose recovery, Scout, Judge, or PM board work before feature work.
|
|
373
|
+
|
|
374
|
+
## Blocked Does Not Mean Stop
|
|
375
|
+
|
|
376
|
+
Blocked tasks do not necessarily block the goal. The PM should keep doing safe local board work when possible:
|
|
377
|
+
|
|
378
|
+
- create a Scout task to improve evidence;
|
|
379
|
+
- create a Judge task to resolve ambiguity;
|
|
380
|
+
- create a Worker task for a smaller safe slice;
|
|
381
|
+
- write or update a note for handoff;
|
|
382
|
+
- update receipts and verification freshness.
|
|
383
|
+
|
|
384
|
+
Avoid setting `goal.status: blocked` for missing input, credentials, production access, destructive-operation permission, or policy decisions. Block the specific task instead, record the missing requirement, and continue with every safe local workaround or adjacent slice.
|
|
385
|
+
|
|
386
|
+
## Continuation Rule
|
|
387
|
+
|
|
388
|
+
After a task completes, immediately write its receipt and select the next active task unless:
|
|
389
|
+
|
|
390
|
+
- a final audit proves the full original owner outcome is complete.
|
|
391
|
+
|
|
392
|
+
Do not stop at "ready for implementation" when a safe Worker task exists. Activate the Worker, execute it, verify it, and then run the audit task.
|
|
393
|
+
|
|
394
|
+
Do not stop after one verified implementation slice when the broader owner outcome still has safe local follow-up slices. Treat a slice audit as permission to advance the board, not as permission to finish, unless the audit explicitly proves the full original outcome is complete.
|
|
395
|
+
|
|
396
|
+
Do not stop because the current slice needs owner input, credentials, production access, destructive operations, or policy decisions. Mark that slice blocked, spawn or activate the smallest safe local task that can proceed around the blocker, and continue.
|
|
397
|
+
|
|
398
|
+
Do not mark a goal or tranche done while any queued or active Worker task is still required for the user's original outcome. Complete it, block it with a receipt, or replace it with a smaller safe Worker task.
|
|
399
|
+
|
|
400
|
+
Do not end with an active task marked done.
|
|
401
|
+
|
|
402
|
+
Run the checker when available:
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
node <skill-path>/scripts/check-goal-state.mjs docs/goals/<slug>/state.yaml
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
If the checker and your judgment disagree, choose the more conservative state.
|
|
409
|
+
|
|
410
|
+
## Agents
|
|
411
|
+
|
|
412
|
+
Scout, Worker, and Judge are default-installed roles.
|
|
413
|
+
|
|
414
|
+
| Agent | Thinking level | Write access | Use for |
|
|
415
|
+
|---|---:|---:|---|
|
|
416
|
+
| Scout | medium | no | source/spec/repo evidence mapping |
|
|
417
|
+
| Worker | low | yes, bounded | one exact implementation or recovery task |
|
|
418
|
+
| Judge | high | no | strategic review, ambiguity, scope, completion skepticism |
|
|
419
|
+
|
|
420
|
+
A task's `assignee` determines the agent. The task card is the order. The receipt is the return format.
|
|
421
|
+
|
|
422
|
+
Only the main `/goal` PM may choose the active task, update the board, mark tasks done, or mark the goal complete.
|
|
423
|
+
|
|
424
|
+
## PM Thinking Policy
|
|
425
|
+
|
|
426
|
+
The main `/goal` thread is the PM. It owns board truth, chooses active tasks, decides when Scout/Judge/Worker receipts are sufficient, and records completion.
|
|
427
|
+
|
|
428
|
+
Recommended PM thinking:
|
|
429
|
+
|
|
430
|
+
| Goal mode | PM thinking |
|
|
431
|
+
|---|---:|
|
|
432
|
+
| specific, bounded | medium |
|
|
433
|
+
| open-ended | high |
|
|
434
|
+
| recovery | high |
|
|
435
|
+
| audit | high |
|
|
436
|
+
| high-risk or multi-day final audit | xhigh optional |
|
|
437
|
+
|
|
438
|
+
Do not use `xhigh` by default. Use it only when a wrong board, scope, or completion decision would be materially more expensive than latency and cost.
|
|
439
|
+
|
|
440
|
+
Tasks may include an optional `reasoning_hint` field:
|
|
441
|
+
|
|
442
|
+
```yaml
|
|
443
|
+
reasoning_hint: default # default | low | medium | high | xhigh
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
Treat `reasoning_hint` as PM guidance. It does not override task scope, write permissions, stop conditions, or the one-active-task rule.
|
|
447
|
+
|
|
448
|
+
## Completion
|
|
449
|
+
|
|
450
|
+
Never complete because work looks substantial.
|
|
451
|
+
|
|
452
|
+
Completion is a Judge or PM audit task. The goal is done only when a final done Judge or PM receipt says the full original outcome is complete and maps completion to current receipts, verification, and the user's original outcome.
|
|
453
|
+
|
|
454
|
+
For execution goals, completion also requires implementation evidence. A final audit cannot call the goal done if the only completed work is planning, discovery, or task selection.
|
|
455
|
+
|
|
456
|
+
For continuous execution goals, the final audit receipt must include `full_outcome_complete: true`. If the receipt only proves that the current slice or tranche is complete, keep the goal active and queue or activate the next safe Worker/Judge/PM task.
|
|
457
|
+
|
|
458
|
+
Queued or active Worker tasks block `goal.status: done`. If a Worker is no longer required, mark it blocked with a receipt explaining why, remove it during PM board maintenance, or replace it with the actual required Worker task before completion.
|
|
459
|
+
|
|
460
|
+
Default final task:
|
|
461
|
+
|
|
462
|
+
```yaml
|
|
463
|
+
- id: T999
|
|
464
|
+
type: judge
|
|
465
|
+
assignee: Judge
|
|
466
|
+
status: queued
|
|
467
|
+
objective: "Audit whether the current tranche is complete."
|
|
468
|
+
inputs:
|
|
469
|
+
- "All done task receipts"
|
|
470
|
+
- "Last verification"
|
|
471
|
+
- "Current dirty diff"
|
|
472
|
+
expected_output:
|
|
473
|
+
- "complete | not_complete"
|
|
474
|
+
- "full_outcome_complete: true | false"
|
|
475
|
+
- "missing evidence"
|
|
476
|
+
- "next task if not complete"
|
|
477
|
+
receipt: null
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
## Default `/goal` Shape
|
|
481
|
+
|
|
482
|
+
```text
|
|
483
|
+
/goal Follow docs/goals/<slug>/goal.md.
|
|
484
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# GoalBuddy Agents
|
|
2
|
+
|
|
3
|
+
This directory contains both skill metadata and bundled agent definitions.
|
|
4
|
+
|
|
5
|
+
- `openai.yaml` stays with the skill as metadata.
|
|
6
|
+
- `goal_*.toml` files can be copied into `.codex/agents/` for project-scoped agents or `~/.codex/agents/` for personal agents.
|
|
7
|
+
|
|
8
|
+
| Agent | File | Reasoning effort | Sandbox |
|
|
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
|
+
|
|
14
|
+
Recommended config:
|
|
15
|
+
|
|
16
|
+
```toml
|
|
17
|
+
[agents]
|
|
18
|
+
max_threads = 4
|
|
19
|
+
max_depth = 1
|
|
20
|
+
job_max_runtime_seconds = 1800
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Only the main `/goal` PM loop may select the active task, mark tasks done, update board truth, or mark the goal complete.
|