get-shit-done-cc 1.8.0 → 1.9.1
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 +104 -0
- package/agents/gsd-entity-generator.md +237 -0
- package/agents/gsd-executor.md +15 -0
- package/agents/gsd-planner.md +22 -0
- package/bin/install.js +78 -7
- package/commands/gsd/analyze-codebase.md +410 -0
- package/commands/gsd/audit-milestone.md +20 -1
- package/commands/gsd/debug.md +20 -0
- package/commands/gsd/execute-phase.md +37 -4
- package/commands/gsd/help.md +91 -0
- package/commands/gsd/new-milestone.md +27 -7
- package/commands/gsd/new-project.md +104 -11
- package/commands/gsd/plan-phase.md +84 -26
- package/commands/gsd/progress.md +2 -0
- package/commands/gsd/query-intel.md +128 -0
- package/commands/gsd/quick.md +23 -0
- package/commands/gsd/research-phase.md +20 -0
- package/commands/gsd/set-profile.md +106 -0
- package/commands/gsd/settings.md +136 -0
- package/get-shit-done/references/model-profiles.md +73 -0
- package/get-shit-done/templates/config.json +5 -0
- package/get-shit-done/templates/entity.md +173 -0
- package/get-shit-done/workflows/execute-phase.md +45 -9
- package/get-shit-done/workflows/execute-plan.md +165 -4
- package/get-shit-done/workflows/map-codebase.md +24 -2
- package/get-shit-done/workflows/verify-work.md +22 -0
- package/hooks/dist/gsd-intel-index.js +97 -0
- package/hooks/dist/gsd-intel-prune.js +78 -0
- package/hooks/dist/gsd-intel-session.js +39 -0
- package/hooks/dist/statusline.js +84 -0
- package/package.json +12 -2
- package/scripts/build-hooks.js +95 -0
- /package/hooks/{gsd-check-update.js → dist/gsd-check-update.js} +0 -0
- /package/hooks/{statusline.js → dist/gsd-statusline.js} +0 -0
package/commands/gsd/quick.md
CHANGED
|
@@ -34,6 +34,27 @@ Orchestration is inline - no separate workflow file. Quick mode is deliberately
|
|
|
34
34
|
</context>
|
|
35
35
|
|
|
36
36
|
<process>
|
|
37
|
+
**Step 0: Resolve Model Profile**
|
|
38
|
+
|
|
39
|
+
Read model profile for agent spawning:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Default to "balanced" if not set.
|
|
46
|
+
|
|
47
|
+
**Model lookup table:**
|
|
48
|
+
|
|
49
|
+
| Agent | quality | balanced | budget |
|
|
50
|
+
|-------|---------|----------|--------|
|
|
51
|
+
| gsd-planner | opus | opus | sonnet |
|
|
52
|
+
| gsd-executor | opus | sonnet | sonnet |
|
|
53
|
+
|
|
54
|
+
Store resolved models for use in Task calls below.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
37
58
|
**Step 1: Pre-flight validation**
|
|
38
59
|
|
|
39
60
|
Check that an active GSD project exists:
|
|
@@ -145,6 +166,7 @@ Return: ## PLANNING COMPLETE with plan path
|
|
|
145
166
|
</output>
|
|
146
167
|
",
|
|
147
168
|
subagent_type="gsd-planner",
|
|
169
|
+
model="{planner_model}",
|
|
148
170
|
description="Quick plan: ${DESCRIPTION}"
|
|
149
171
|
)
|
|
150
172
|
```
|
|
@@ -178,6 +200,7 @@ Project state: @.planning/STATE.md
|
|
|
178
200
|
</constraints>
|
|
179
201
|
",
|
|
180
202
|
subagent_type="gsd-executor",
|
|
203
|
+
model="{executor_model}",
|
|
181
204
|
description="Execute: ${DESCRIPTION}"
|
|
182
205
|
)
|
|
183
206
|
```
|
|
@@ -31,6 +31,24 @@ Normalize phase input in step 1 before any directory lookups.
|
|
|
31
31
|
|
|
32
32
|
<process>
|
|
33
33
|
|
|
34
|
+
## 0. Resolve Model Profile
|
|
35
|
+
|
|
36
|
+
Read model profile for agent spawning:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Default to "balanced" if not set.
|
|
43
|
+
|
|
44
|
+
**Model lookup table:**
|
|
45
|
+
|
|
46
|
+
| Agent | quality | balanced | budget |
|
|
47
|
+
|-------|---------|----------|--------|
|
|
48
|
+
| gsd-phase-researcher | opus | sonnet | haiku |
|
|
49
|
+
|
|
50
|
+
Store resolved model for use in Task calls below.
|
|
51
|
+
|
|
34
52
|
## 1. Normalize and Validate Phase
|
|
35
53
|
|
|
36
54
|
```bash
|
|
@@ -132,6 +150,7 @@ Write to: .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
|
|
|
132
150
|
Task(
|
|
133
151
|
prompt=filled_prompt,
|
|
134
152
|
subagent_type="gsd-phase-researcher",
|
|
153
|
+
model="{researcher_model}",
|
|
135
154
|
description="Research Phase {phase}"
|
|
136
155
|
)
|
|
137
156
|
```
|
|
@@ -165,6 +184,7 @@ Research file: @.planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
|
|
|
165
184
|
Task(
|
|
166
185
|
prompt=continuation_prompt,
|
|
167
186
|
subagent_type="gsd-phase-researcher",
|
|
187
|
+
model="{researcher_model}",
|
|
168
188
|
description="Continue research Phase {phase}"
|
|
169
189
|
)
|
|
170
190
|
```
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: set-profile
|
|
3
|
+
description: Switch model profile for GSD agents (quality/balanced/budget)
|
|
4
|
+
arguments:
|
|
5
|
+
- name: profile
|
|
6
|
+
description: "Profile name: quality, balanced, or budget"
|
|
7
|
+
required: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<objective>
|
|
11
|
+
Switch the model profile used by GSD agents. This controls which Claude model each agent uses, balancing quality vs token spend.
|
|
12
|
+
</objective>
|
|
13
|
+
|
|
14
|
+
<profiles>
|
|
15
|
+
| Profile | Description |
|
|
16
|
+
|---------|-------------|
|
|
17
|
+
| **quality** | Opus everywhere except read-only verification |
|
|
18
|
+
| **balanced** | Opus for planning, Sonnet for execution/verification (default) |
|
|
19
|
+
| **budget** | Sonnet for writing, Haiku for research/verification |
|
|
20
|
+
</profiles>
|
|
21
|
+
|
|
22
|
+
<process>
|
|
23
|
+
|
|
24
|
+
## 1. Validate argument
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
if $ARGUMENTS.profile not in ["quality", "balanced", "budget"]:
|
|
28
|
+
Error: Invalid profile "$ARGUMENTS.profile"
|
|
29
|
+
Valid profiles: quality, balanced, budget
|
|
30
|
+
STOP
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 2. Check for project
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
ls .planning/config.json 2>/dev/null
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If no `.planning/` directory:
|
|
40
|
+
```
|
|
41
|
+
Error: No GSD project found.
|
|
42
|
+
Run /gsd:new-project first to initialize a project.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 3. Update config.json
|
|
46
|
+
|
|
47
|
+
Read current config:
|
|
48
|
+
```bash
|
|
49
|
+
cat .planning/config.json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Update `model_profile` field (or add if missing):
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"model_profile": "$ARGUMENTS.profile"
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Write updated config back to `.planning/config.json`.
|
|
60
|
+
|
|
61
|
+
## 4. Confirm
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
✓ Model profile set to: $ARGUMENTS.profile
|
|
65
|
+
|
|
66
|
+
Agents will now use:
|
|
67
|
+
[Show table from model-profiles.md for selected profile]
|
|
68
|
+
|
|
69
|
+
Next spawned agents will use the new profile.
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
</process>
|
|
73
|
+
|
|
74
|
+
<examples>
|
|
75
|
+
|
|
76
|
+
**Switch to budget mode:**
|
|
77
|
+
```
|
|
78
|
+
/gsd:set-profile budget
|
|
79
|
+
|
|
80
|
+
✓ Model profile set to: budget
|
|
81
|
+
|
|
82
|
+
Agents will now use:
|
|
83
|
+
| Agent | Model |
|
|
84
|
+
|-------|-------|
|
|
85
|
+
| gsd-planner | sonnet |
|
|
86
|
+
| gsd-executor | sonnet |
|
|
87
|
+
| gsd-verifier | haiku |
|
|
88
|
+
| ... | ... |
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Switch to quality mode:**
|
|
92
|
+
```
|
|
93
|
+
/gsd:set-profile quality
|
|
94
|
+
|
|
95
|
+
✓ Model profile set to: quality
|
|
96
|
+
|
|
97
|
+
Agents will now use:
|
|
98
|
+
| Agent | Model |
|
|
99
|
+
|-------|-------|
|
|
100
|
+
| gsd-planner | opus |
|
|
101
|
+
| gsd-executor | opus |
|
|
102
|
+
| gsd-verifier | sonnet |
|
|
103
|
+
| ... | ... |
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
</examples>
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd:settings
|
|
3
|
+
description: Configure GSD workflow toggles and model profile
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- AskUserQuestion
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<objective>
|
|
11
|
+
Allow users to toggle workflow agents on/off and select model profile via interactive settings.
|
|
12
|
+
|
|
13
|
+
Updates `.planning/config.json` with workflow preferences and model profile selection.
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<process>
|
|
17
|
+
|
|
18
|
+
## 1. Validate Environment
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
ls .planning/config.json 2>/dev/null
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**If not found:** Error - run `/gsd:new-project` first.
|
|
25
|
+
|
|
26
|
+
## 2. Read Current Config
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cat .planning/config.json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Parse current values (default to `true` if not present):
|
|
33
|
+
- `workflow.research` — spawn researcher during plan-phase
|
|
34
|
+
- `workflow.plan_check` — spawn plan checker during plan-phase
|
|
35
|
+
- `workflow.verifier` — spawn verifier during execute-phase
|
|
36
|
+
- `model_profile` — which model each agent uses (default: `balanced`)
|
|
37
|
+
|
|
38
|
+
## 3. Present Settings
|
|
39
|
+
|
|
40
|
+
Use AskUserQuestion with current values shown:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
AskUserQuestion([
|
|
44
|
+
{
|
|
45
|
+
question: "Which model profile for agents?",
|
|
46
|
+
header: "Model",
|
|
47
|
+
multiSelect: false,
|
|
48
|
+
options: [
|
|
49
|
+
{ label: "Quality", description: "Opus everywhere except verification (highest cost)" },
|
|
50
|
+
{ label: "Balanced (Recommended)", description: "Opus for planning, Sonnet for execution/verification" },
|
|
51
|
+
{ label: "Budget", description: "Sonnet for writing, Haiku for research/verification (lowest cost)" }
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
question: "Spawn Plan Researcher? (researches domain before planning)",
|
|
56
|
+
header: "Research",
|
|
57
|
+
multiSelect: false,
|
|
58
|
+
options: [
|
|
59
|
+
{ label: "Yes", description: "Research phase goals before planning" },
|
|
60
|
+
{ label: "No", description: "Skip research, plan directly" }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
question: "Spawn Plan Checker? (verifies plans before execution)",
|
|
65
|
+
header: "Plan Check",
|
|
66
|
+
multiSelect: false,
|
|
67
|
+
options: [
|
|
68
|
+
{ label: "Yes", description: "Verify plans meet phase goals" },
|
|
69
|
+
{ label: "No", description: "Skip plan verification" }
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
question: "Spawn Execution Verifier? (verifies phase completion)",
|
|
74
|
+
header: "Verifier",
|
|
75
|
+
multiSelect: false,
|
|
76
|
+
options: [
|
|
77
|
+
{ label: "Yes", description: "Verify must-haves after execution" },
|
|
78
|
+
{ label: "No", description: "Skip post-execution verification" }
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
])
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Pre-select based on current config values.**
|
|
85
|
+
|
|
86
|
+
## 4. Update Config
|
|
87
|
+
|
|
88
|
+
Merge new settings into existing config.json:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
...existing_config,
|
|
93
|
+
"model_profile": "quality" | "balanced" | "budget",
|
|
94
|
+
"workflow": {
|
|
95
|
+
"research": true/false,
|
|
96
|
+
"plan_check": true/false,
|
|
97
|
+
"verifier": true/false
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Write updated config to `.planning/config.json`.
|
|
103
|
+
|
|
104
|
+
## 5. Confirm Changes
|
|
105
|
+
|
|
106
|
+
Display:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
+
GSD ► SETTINGS UPDATED
|
|
111
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
112
|
+
|
|
113
|
+
| Setting | Value |
|
|
114
|
+
|----------------------|-------|
|
|
115
|
+
| Model Profile | {quality/balanced/budget} |
|
|
116
|
+
| Plan Researcher | {On/Off} |
|
|
117
|
+
| Plan Checker | {On/Off} |
|
|
118
|
+
| Execution Verifier | {On/Off} |
|
|
119
|
+
|
|
120
|
+
These settings apply to future /gsd:plan-phase and /gsd:execute-phase runs.
|
|
121
|
+
|
|
122
|
+
Quick commands:
|
|
123
|
+
- /gsd:set-profile <profile> — switch model profile
|
|
124
|
+
- /gsd:plan-phase --research — force research
|
|
125
|
+
- /gsd:plan-phase --skip-research — skip research
|
|
126
|
+
- /gsd:plan-phase --skip-verify — skip plan check
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
</process>
|
|
130
|
+
|
|
131
|
+
<success_criteria>
|
|
132
|
+
- [ ] Current config read
|
|
133
|
+
- [ ] User presented with 4 settings (profile + 3 toggles)
|
|
134
|
+
- [ ] Config updated with model_profile and workflow section
|
|
135
|
+
- [ ] Changes confirmed to user
|
|
136
|
+
</success_criteria>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Model Profiles
|
|
2
|
+
|
|
3
|
+
Model profiles control which Claude model each GSD agent uses. This allows balancing quality vs token spend.
|
|
4
|
+
|
|
5
|
+
## Profile Definitions
|
|
6
|
+
|
|
7
|
+
| Agent | `quality` | `balanced` | `budget` |
|
|
8
|
+
|-------|-----------|------------|----------|
|
|
9
|
+
| gsd-planner | opus | opus | sonnet |
|
|
10
|
+
| gsd-roadmapper | opus | sonnet | sonnet |
|
|
11
|
+
| gsd-executor | opus | sonnet | sonnet |
|
|
12
|
+
| gsd-phase-researcher | opus | sonnet | haiku |
|
|
13
|
+
| gsd-project-researcher | opus | sonnet | haiku |
|
|
14
|
+
| gsd-research-synthesizer | sonnet | sonnet | haiku |
|
|
15
|
+
| gsd-debugger | opus | sonnet | sonnet |
|
|
16
|
+
| gsd-codebase-mapper | sonnet | haiku | haiku |
|
|
17
|
+
| gsd-verifier | sonnet | sonnet | haiku |
|
|
18
|
+
| gsd-plan-checker | sonnet | sonnet | haiku |
|
|
19
|
+
| gsd-integration-checker | sonnet | sonnet | haiku |
|
|
20
|
+
|
|
21
|
+
## Profile Philosophy
|
|
22
|
+
|
|
23
|
+
**quality** - Maximum reasoning power
|
|
24
|
+
- Opus for all decision-making agents
|
|
25
|
+
- Sonnet for read-only verification
|
|
26
|
+
- Use when: quota available, critical architecture work
|
|
27
|
+
|
|
28
|
+
**balanced** (default) - Smart allocation
|
|
29
|
+
- Opus only for planning (where architecture decisions happen)
|
|
30
|
+
- Sonnet for execution and research (follows explicit instructions)
|
|
31
|
+
- Sonnet for verification (needs reasoning, not just pattern matching)
|
|
32
|
+
- Use when: normal development, good balance of quality and cost
|
|
33
|
+
|
|
34
|
+
**budget** - Minimal Opus usage
|
|
35
|
+
- Sonnet for anything that writes code
|
|
36
|
+
- Haiku for research and verification
|
|
37
|
+
- Use when: conserving quota, high-volume work, less critical phases
|
|
38
|
+
|
|
39
|
+
## Resolution Logic
|
|
40
|
+
|
|
41
|
+
Orchestrators resolve model before spawning:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
1. Read .planning/config.json
|
|
45
|
+
2. Get model_profile (default: "balanced")
|
|
46
|
+
3. Look up agent in table above
|
|
47
|
+
4. Pass model parameter to Task call
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Switching Profiles
|
|
51
|
+
|
|
52
|
+
Runtime: `/gsd:set-profile <profile>`
|
|
53
|
+
|
|
54
|
+
Per-project default: Set in `.planning/config.json`:
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"model_profile": "balanced"
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Design Rationale
|
|
62
|
+
|
|
63
|
+
**Why Opus for gsd-planner?**
|
|
64
|
+
Planning involves architecture decisions, goal decomposition, and task design. This is where model quality has the highest impact.
|
|
65
|
+
|
|
66
|
+
**Why Sonnet for gsd-executor?**
|
|
67
|
+
Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.
|
|
68
|
+
|
|
69
|
+
**Why Sonnet (not Haiku) for verifiers in balanced?**
|
|
70
|
+
Verification requires goal-backward reasoning - checking if code *delivers* what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.
|
|
71
|
+
|
|
72
|
+
**Why Haiku for gsd-codebase-mapper?**
|
|
73
|
+
Read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Entity Template
|
|
2
|
+
|
|
3
|
+
Template for `.planning/codebase/{entity-slug}.md` - file-level intelligence documentation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## File Template
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
---
|
|
11
|
+
path: {path}
|
|
12
|
+
type: {type}
|
|
13
|
+
updated: {updated}
|
|
14
|
+
status: {status}
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# {filename}
|
|
18
|
+
|
|
19
|
+
## Purpose
|
|
20
|
+
|
|
21
|
+
{purpose}
|
|
22
|
+
|
|
23
|
+
## Exports
|
|
24
|
+
|
|
25
|
+
{exports}
|
|
26
|
+
|
|
27
|
+
## Dependencies
|
|
28
|
+
|
|
29
|
+
{dependencies}
|
|
30
|
+
|
|
31
|
+
## Used By
|
|
32
|
+
|
|
33
|
+
{used_by}
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
|
|
37
|
+
{notes}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Field Reference
|
|
43
|
+
|
|
44
|
+
### Frontmatter
|
|
45
|
+
|
|
46
|
+
| Field | Values | Description |
|
|
47
|
+
|-------|--------|-------------|
|
|
48
|
+
| `path` | Absolute path | Full path to the file |
|
|
49
|
+
| `type` | module, component, util, config, test, api, hook | Primary classification |
|
|
50
|
+
| `updated` | YYYY-MM-DD | Last time this entity was updated |
|
|
51
|
+
| `status` | active, deprecated, stub | Current state |
|
|
52
|
+
|
|
53
|
+
### Sections
|
|
54
|
+
|
|
55
|
+
**Purpose** (required)
|
|
56
|
+
1-3 sentences covering:
|
|
57
|
+
- What this file does
|
|
58
|
+
- Why it exists
|
|
59
|
+
- Who/what uses it (high-level)
|
|
60
|
+
|
|
61
|
+
**Exports** (required for modules with exports)
|
|
62
|
+
List each export with signature and description:
|
|
63
|
+
```markdown
|
|
64
|
+
- `functionName(arg: Type): ReturnType` - What it does
|
|
65
|
+
- `ClassName` - What it represents
|
|
66
|
+
- `CONSTANT_NAME` - What value it holds
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For files without exports (config, tests), write "None" or describe what the file defines.
|
|
70
|
+
|
|
71
|
+
**Dependencies** (required)
|
|
72
|
+
Internal dependencies use wiki-links (slugified paths):
|
|
73
|
+
```markdown
|
|
74
|
+
- [[src-lib-db]] - Database client
|
|
75
|
+
- [[src-types-user]] - User type definitions
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
External dependencies use plain text:
|
|
79
|
+
```markdown
|
|
80
|
+
- react - Component framework
|
|
81
|
+
- jose - JWT handling
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Used By** (grows over time)
|
|
85
|
+
Files that import this one, using wiki-links:
|
|
86
|
+
```markdown
|
|
87
|
+
- [[src-app-api-auth-route]]
|
|
88
|
+
- [[src-components-dashboard]]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Initially may be empty or incomplete. Updated as Claude encounters imports.
|
|
92
|
+
|
|
93
|
+
**Notes** (optional)
|
|
94
|
+
Patterns, gotchas, or context:
|
|
95
|
+
```markdown
|
|
96
|
+
- Uses singleton pattern for connection pooling
|
|
97
|
+
- WARNING: Must call `init()` before any other method
|
|
98
|
+
- Related: See [[src-lib-cache]] for caching layer
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Slug Convention
|
|
104
|
+
|
|
105
|
+
Entity slugs are derived from file paths:
|
|
106
|
+
- `src/lib/db.ts` becomes `src-lib-db`
|
|
107
|
+
- `src/app/api/auth/route.ts` becomes `src-app-api-auth-route`
|
|
108
|
+
|
|
109
|
+
Rule: Replace `/` and `.` with `-`, drop file extension.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Example
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
---
|
|
117
|
+
path: /project/src/lib/auth.ts
|
|
118
|
+
type: util
|
|
119
|
+
updated: 2025-01-15
|
|
120
|
+
status: active
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
# auth.ts
|
|
124
|
+
|
|
125
|
+
## Purpose
|
|
126
|
+
|
|
127
|
+
JWT token management using jose library. Handles token creation, verification, and refresh rotation. Used by all protected API routes via middleware.
|
|
128
|
+
|
|
129
|
+
## Exports
|
|
130
|
+
|
|
131
|
+
- `createAccessToken(userId: string): Promise<string>` - Creates 15-min access token
|
|
132
|
+
- `createRefreshToken(userId: string): Promise<string>` - Creates 7-day refresh token
|
|
133
|
+
- `verifyToken(token: string): Promise<TokenPayload>` - Validates and decodes token
|
|
134
|
+
- `rotateRefresh(oldToken: string): Promise<TokenPair>` - Issues new token pair
|
|
135
|
+
|
|
136
|
+
## Dependencies
|
|
137
|
+
|
|
138
|
+
- [[src-lib-db]] - Stores refresh tokens for revocation
|
|
139
|
+
- [[src-types-auth]] - TokenPayload, TokenPair types
|
|
140
|
+
- jose - JWT signing and verification
|
|
141
|
+
- bcrypt - Password hashing
|
|
142
|
+
|
|
143
|
+
## Used By
|
|
144
|
+
|
|
145
|
+
- [[src-middleware]]
|
|
146
|
+
- [[src-app-api-auth-login-route]]
|
|
147
|
+
- [[src-app-api-auth-logout-route]]
|
|
148
|
+
- [[src-app-api-auth-refresh-route]]
|
|
149
|
+
|
|
150
|
+
## Notes
|
|
151
|
+
|
|
152
|
+
- Access tokens are stateless; refresh tokens stored in DB for revocation
|
|
153
|
+
- Uses RS256 algorithm with keys from environment
|
|
154
|
+
- WARNING: Never log token values, even in debug mode
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Guidelines
|
|
160
|
+
|
|
161
|
+
**When to create/update:**
|
|
162
|
+
- After modifying a file during plan execution
|
|
163
|
+
- When encountering a file that lacks documentation
|
|
164
|
+
- When relationships change (new imports, exports)
|
|
165
|
+
|
|
166
|
+
**Minimal viable entity:**
|
|
167
|
+
At minimum, an entity needs frontmatter + Purpose. Other sections can be "TBD" if unknown.
|
|
168
|
+
|
|
169
|
+
**Accuracy over completeness:**
|
|
170
|
+
Better to have partial accurate info than complete guesses. Mark unknowns explicitly.
|
|
171
|
+
|
|
172
|
+
**Link discovery:**
|
|
173
|
+
The hook that processes entities extracts all `[[wiki-links]]` to build the relationship graph. Ensure links use correct slug format.
|
|
@@ -13,7 +13,27 @@ Read config.json for planning behavior settings.
|
|
|
13
13
|
|
|
14
14
|
<process>
|
|
15
15
|
|
|
16
|
-
<step name="
|
|
16
|
+
<step name="resolve_model_profile" priority="first">
|
|
17
|
+
Read model profile for agent spawning:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Default to "balanced" if not set.
|
|
24
|
+
|
|
25
|
+
**Model lookup table:**
|
|
26
|
+
|
|
27
|
+
| Agent | quality | balanced | budget |
|
|
28
|
+
|-------|---------|----------|--------|
|
|
29
|
+
| gsd-executor | opus | sonnet | sonnet |
|
|
30
|
+
| gsd-verifier | sonnet | sonnet | haiku |
|
|
31
|
+
| general-purpose | — | — | — |
|
|
32
|
+
|
|
33
|
+
Store resolved models for use in Task calls below.
|
|
34
|
+
</step>
|
|
35
|
+
|
|
36
|
+
<step name="load_project_state">
|
|
17
37
|
Before any operation, read project state:
|
|
18
38
|
|
|
19
39
|
```bash
|
|
@@ -170,9 +190,18 @@ Execute each wave in sequence. Autonomous plans within a wave run in parallel.
|
|
|
170
190
|
- Bad: "Executing terrain generation plan"
|
|
171
191
|
- Good: "Procedural terrain generator using Perlin noise — creates height maps, biome zones, and collision meshes. Required before vehicle physics can interact with ground."
|
|
172
192
|
|
|
173
|
-
2. **
|
|
193
|
+
2. **Read files and spawn all autonomous agents in wave simultaneously:**
|
|
174
194
|
|
|
175
|
-
|
|
195
|
+
Before spawning, read file contents. The `@` syntax does not work across Task() boundaries - content must be inlined.
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Read each plan in the wave
|
|
199
|
+
PLAN_CONTENT=$(cat "{plan_path}")
|
|
200
|
+
STATE_CONTENT=$(cat .planning/STATE.md)
|
|
201
|
+
CONFIG_CONTENT=$(cat .planning/config.json 2>/dev/null)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Use Task tool with multiple parallel calls. Each agent gets prompt with inlined content:
|
|
176
205
|
|
|
177
206
|
```
|
|
178
207
|
<objective>
|
|
@@ -189,9 +218,14 @@ Execute each wave in sequence. Autonomous plans within a wave run in parallel.
|
|
|
189
218
|
</execution_context>
|
|
190
219
|
|
|
191
220
|
<context>
|
|
192
|
-
Plan:
|
|
193
|
-
|
|
194
|
-
|
|
221
|
+
Plan:
|
|
222
|
+
{plan_content}
|
|
223
|
+
|
|
224
|
+
Project state:
|
|
225
|
+
{state_content}
|
|
226
|
+
|
|
227
|
+
Config (if exists):
|
|
228
|
+
{config_content}
|
|
195
229
|
</context>
|
|
196
230
|
|
|
197
231
|
<success_criteria>
|
|
@@ -260,7 +294,7 @@ Plans with `autonomous: false` require user interaction.
|
|
|
260
294
|
|
|
261
295
|
1. **Spawn agent for checkpoint plan:**
|
|
262
296
|
```
|
|
263
|
-
Task(prompt="{subagent-task-prompt}", subagent_type="
|
|
297
|
+
Task(prompt="{subagent-task-prompt}", subagent_type="gsd-executor", model="{executor_model}")
|
|
264
298
|
```
|
|
265
299
|
|
|
266
300
|
2. **Agent runs until checkpoint:**
|
|
@@ -299,7 +333,8 @@ Plans with `autonomous: false` require user interaction.
|
|
|
299
333
|
```
|
|
300
334
|
Task(
|
|
301
335
|
prompt=filled_continuation_template,
|
|
302
|
-
subagent_type="
|
|
336
|
+
subagent_type="gsd-executor",
|
|
337
|
+
model="{executor_model}"
|
|
303
338
|
)
|
|
304
339
|
```
|
|
305
340
|
|
|
@@ -375,7 +410,8 @@ Phase goal: {goal from ROADMAP.md}
|
|
|
375
410
|
|
|
376
411
|
Check must_haves against actual codebase. Create VERIFICATION.md.
|
|
377
412
|
Verify what actually exists in the code.",
|
|
378
|
-
subagent_type="gsd-verifier"
|
|
413
|
+
subagent_type="gsd-verifier",
|
|
414
|
+
model="{verifier_model}"
|
|
379
415
|
)
|
|
380
416
|
```
|
|
381
417
|
|