get-shit-done-cc 1.8.0 → 1.9.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/README.md +104 -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 +363 -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/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/statusline.js} +0 -0
|
@@ -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
|
|
|
@@ -11,7 +11,25 @@ Read config.json for planning behavior settings.
|
|
|
11
11
|
|
|
12
12
|
<process>
|
|
13
13
|
|
|
14
|
-
<step name="
|
|
14
|
+
<step name="resolve_model_profile" priority="first">
|
|
15
|
+
Read model profile for agent spawning:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Default to "balanced" if not set.
|
|
22
|
+
|
|
23
|
+
**Model lookup table:**
|
|
24
|
+
|
|
25
|
+
| Agent | quality | balanced | budget |
|
|
26
|
+
|-------|---------|----------|--------|
|
|
27
|
+
| gsd-executor | opus | sonnet | sonnet |
|
|
28
|
+
|
|
29
|
+
Store resolved model for use in Task calls below.
|
|
30
|
+
</step>
|
|
31
|
+
|
|
32
|
+
<step name="load_project_state">
|
|
15
33
|
Before any operation, read project state:
|
|
16
34
|
|
|
17
35
|
```bash
|
|
@@ -219,7 +237,7 @@ No segmentation benefit - execute entirely in main
|
|
|
219
237
|
```
|
|
220
238
|
1. Run init_agent_tracking step first (see step below)
|
|
221
239
|
|
|
222
|
-
2. Use Task tool with subagent_type="gsd-executor":
|
|
240
|
+
2. Use Task tool with subagent_type="gsd-executor" and model="{executor_model}":
|
|
223
241
|
|
|
224
242
|
Prompt: "Execute plan at .planning/phases/{phase}-{plan}-PLAN.md
|
|
225
243
|
|
|
@@ -371,7 +389,7 @@ For Pattern A (fully autonomous) and Pattern C (decision-dependent), skip this s
|
|
|
371
389
|
|
|
372
390
|
B. If routing = Subagent:
|
|
373
391
|
```
|
|
374
|
-
Spawn Task tool with subagent_type="gsd-executor":
|
|
392
|
+
Spawn Task tool with subagent_type="gsd-executor" and model="{executor_model}":
|
|
375
393
|
|
|
376
394
|
Prompt: "Execute tasks [task numbers/names] from plan at [plan path].
|
|
377
395
|
|
|
@@ -580,7 +598,8 @@ Execute each task in the prompt. **Deviations are normal** - handle them automat
|
|
|
580
598
|
- Continue implementing, applying rules as needed
|
|
581
599
|
- Run the verification
|
|
582
600
|
- Confirm done criteria met
|
|
583
|
-
- **
|
|
601
|
+
- **Update intel entities** for modified files (see `<update_intel_entity>` below)
|
|
602
|
+
- **Commit the task** (see `<task_commit>` below) - includes entity files in commit
|
|
584
603
|
- Track task completion and commit hash for Summary documentation
|
|
585
604
|
- Continue to next task
|
|
586
605
|
|
|
@@ -909,6 +928,148 @@ None - plan executed exactly as written.
|
|
|
909
928
|
|
|
910
929
|
</deviation_documentation>
|
|
911
930
|
|
|
931
|
+
<update_intel_entity>
|
|
932
|
+
|
|
933
|
+
## Update Codebase Intelligence Entity
|
|
934
|
+
|
|
935
|
+
**Trigger:** After each task's `<done>` criteria met, BEFORE committing.
|
|
936
|
+
|
|
937
|
+
This step documents your understanding of modified files. The knowledge base self-evolves as you work.
|
|
938
|
+
|
|
939
|
+
**1. Get files from the just-completed task:**
|
|
940
|
+
|
|
941
|
+
Check the task's `<files>` list. If no `<files>` attribute, use `git status --short` to identify modified files.
|
|
942
|
+
|
|
943
|
+
**2. For each file, determine if significant:**
|
|
944
|
+
|
|
945
|
+
**Skip these patterns (not worth indexing):**
|
|
946
|
+
```bash
|
|
947
|
+
# Build/generated
|
|
948
|
+
node_modules/*, .next/*, dist/*, build/*, .git/*
|
|
949
|
+
|
|
950
|
+
# Tests (their targets are more valuable)
|
|
951
|
+
*.test.*, *.spec.*, __tests__/*, __mocks__/*
|
|
952
|
+
|
|
953
|
+
# Config files (change rarely, low context value)
|
|
954
|
+
package.json, package-lock.json, tsconfig.json, *.config.*, *.config.js, *.config.ts
|
|
955
|
+
|
|
956
|
+
# Environment and locks
|
|
957
|
+
.env*, *.lock, *.log, yarn.lock, pnpm-lock.yaml
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
If file matches skip pattern: continue to next file.
|
|
961
|
+
|
|
962
|
+
**3. Derive entity path:**
|
|
963
|
+
|
|
964
|
+
```bash
|
|
965
|
+
# Convert file path to entity filename
|
|
966
|
+
# src/lib/auth.ts → src-lib-auth.md
|
|
967
|
+
# app/api/users/route.ts → app-api-users-route.md
|
|
968
|
+
|
|
969
|
+
FILE_PATH="$1"
|
|
970
|
+
ENTITY_NAME=$(echo "$FILE_PATH" | sed 's|^[./]*||' | tr '/' '-' | sed 's/\.[^.]*$//')
|
|
971
|
+
ENTITY_PATH=".planning/intel/entities/${ENTITY_NAME}.md"
|
|
972
|
+
```
|
|
973
|
+
|
|
974
|
+
**4. Create intel directory if needed:**
|
|
975
|
+
|
|
976
|
+
```bash
|
|
977
|
+
mkdir -p .planning/intel/entities
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
**5. Check if entity exists:**
|
|
981
|
+
|
|
982
|
+
```bash
|
|
983
|
+
if [ -f "$ENTITY_PATH" ]; then
|
|
984
|
+
ACTION="update"
|
|
985
|
+
else
|
|
986
|
+
ACTION="create"
|
|
987
|
+
fi
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
**6. Create or update entity:**
|
|
991
|
+
|
|
992
|
+
Use template from `~/.claude/get-shit-done/templates/entity.md`.
|
|
993
|
+
|
|
994
|
+
Fill fields based on what you just built:
|
|
995
|
+
|
|
996
|
+
| Field | Source |
|
|
997
|
+
|-------|--------|
|
|
998
|
+
| `path` | Absolute path to file |
|
|
999
|
+
| `type` | Infer: module, component, util, config, api, hook |
|
|
1000
|
+
| `updated` | Today's date (YYYY-MM-DD) |
|
|
1001
|
+
| `status` | active (unless you're deprecating) |
|
|
1002
|
+
| **Purpose** | What you understand this file does |
|
|
1003
|
+
| **Exports** | Extract from the code you just wrote |
|
|
1004
|
+
| **Dependencies** | `[[slugified-path]]` for internal, plain for external |
|
|
1005
|
+
| **Used By** | Add callers if you know them from this session |
|
|
1006
|
+
| **Notes** | Gotchas, patterns, warnings discovered |
|
|
1007
|
+
|
|
1008
|
+
**If updating existing entity:**
|
|
1009
|
+
- Read current content first
|
|
1010
|
+
- Preserve Used By entries you didn't touch
|
|
1011
|
+
- Update sections that changed
|
|
1012
|
+
- Don't remove information unless it's wrong
|
|
1013
|
+
|
|
1014
|
+
**7. Write entity file:**
|
|
1015
|
+
|
|
1016
|
+
```bash
|
|
1017
|
+
# Write the entity content
|
|
1018
|
+
cat > "$ENTITY_PATH" << 'EOF'
|
|
1019
|
+
---
|
|
1020
|
+
path: {path}
|
|
1021
|
+
type: {type}
|
|
1022
|
+
updated: {today}
|
|
1023
|
+
status: active
|
|
1024
|
+
---
|
|
1025
|
+
|
|
1026
|
+
# {filename}
|
|
1027
|
+
|
|
1028
|
+
## Purpose
|
|
1029
|
+
|
|
1030
|
+
{purpose}
|
|
1031
|
+
|
|
1032
|
+
## Exports
|
|
1033
|
+
|
|
1034
|
+
{exports}
|
|
1035
|
+
|
|
1036
|
+
## Dependencies
|
|
1037
|
+
|
|
1038
|
+
{dependencies}
|
|
1039
|
+
|
|
1040
|
+
## Used By
|
|
1041
|
+
|
|
1042
|
+
{used_by}
|
|
1043
|
+
|
|
1044
|
+
## Notes
|
|
1045
|
+
|
|
1046
|
+
{notes}
|
|
1047
|
+
EOF
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
**8. Verify entity was created/updated:**
|
|
1051
|
+
|
|
1052
|
+
```bash
|
|
1053
|
+
head -10 "$ENTITY_PATH"
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
**9. Stage entity file:**
|
|
1057
|
+
|
|
1058
|
+
Entity files are staged along with task code files in the task commit.
|
|
1059
|
+
|
|
1060
|
+
```bash
|
|
1061
|
+
git add "$ENTITY_PATH"
|
|
1062
|
+
```
|
|
1063
|
+
|
|
1064
|
+
**Error handling:**
|
|
1065
|
+
- If entity creation fails: Log warning, continue to task_commit
|
|
1066
|
+
- Entity update is NOT blocking - a failed entity shouldn't stop code from being committed
|
|
1067
|
+
- Log: `"Warning: Could not update entity for {file}: {reason}"`
|
|
1068
|
+
|
|
1069
|
+
**Target size:** Keep entities concise (30-50 lines). Purpose and Exports are most valuable.
|
|
1070
|
+
|
|
1071
|
+
</update_intel_entity>
|
|
1072
|
+
|
|
912
1073
|
<tdd_plan_execution>
|
|
913
1074
|
## TDD Plan Execution
|
|
914
1075
|
|
|
@@ -22,7 +22,25 @@ Documents are reference material for Claude when planning/executing. Always incl
|
|
|
22
22
|
|
|
23
23
|
<process>
|
|
24
24
|
|
|
25
|
-
<step name="
|
|
25
|
+
<step name="resolve_model_profile" priority="first">
|
|
26
|
+
Read model profile for agent spawning:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Default to "balanced" if not set.
|
|
33
|
+
|
|
34
|
+
**Model lookup table:**
|
|
35
|
+
|
|
36
|
+
| Agent | quality | balanced | budget |
|
|
37
|
+
|-------|---------|----------|--------|
|
|
38
|
+
| gsd-codebase-mapper | sonnet | haiku | haiku |
|
|
39
|
+
|
|
40
|
+
Store resolved model for use in Task calls below.
|
|
41
|
+
</step>
|
|
42
|
+
|
|
43
|
+
<step name="check_existing">
|
|
26
44
|
Check if .planning/codebase/ already exists:
|
|
27
45
|
|
|
28
46
|
```bash
|
|
@@ -73,7 +91,7 @@ Continue to spawn_agents.
|
|
|
73
91
|
<step name="spawn_agents">
|
|
74
92
|
Spawn 4 parallel gsd-codebase-mapper agents.
|
|
75
93
|
|
|
76
|
-
Use Task tool with `subagent_type="gsd-codebase-mapper"` and `run_in_background=true` for parallel execution.
|
|
94
|
+
Use Task tool with `subagent_type="gsd-codebase-mapper"`, `model="{mapper_model}"`, and `run_in_background=true` for parallel execution.
|
|
77
95
|
|
|
78
96
|
**CRITICAL:** Use the dedicated `gsd-codebase-mapper` agent, NOT `Explore`. The mapper agent writes documents directly.
|
|
79
97
|
|
|
@@ -82,6 +100,7 @@ Use Task tool with `subagent_type="gsd-codebase-mapper"` and `run_in_background=
|
|
|
82
100
|
Task tool parameters:
|
|
83
101
|
```
|
|
84
102
|
subagent_type: "gsd-codebase-mapper"
|
|
103
|
+
model: "{mapper_model}"
|
|
85
104
|
run_in_background: true
|
|
86
105
|
description: "Map codebase tech stack"
|
|
87
106
|
```
|
|
@@ -104,6 +123,7 @@ Explore thoroughly. Write documents directly using templates. Return confirmatio
|
|
|
104
123
|
Task tool parameters:
|
|
105
124
|
```
|
|
106
125
|
subagent_type: "gsd-codebase-mapper"
|
|
126
|
+
model: "{mapper_model}"
|
|
107
127
|
run_in_background: true
|
|
108
128
|
description: "Map codebase architecture"
|
|
109
129
|
```
|
|
@@ -126,6 +146,7 @@ Explore thoroughly. Write documents directly using templates. Return confirmatio
|
|
|
126
146
|
Task tool parameters:
|
|
127
147
|
```
|
|
128
148
|
subagent_type: "gsd-codebase-mapper"
|
|
149
|
+
model: "{mapper_model}"
|
|
129
150
|
run_in_background: true
|
|
130
151
|
description: "Map codebase conventions"
|
|
131
152
|
```
|
|
@@ -148,6 +169,7 @@ Explore thoroughly. Write documents directly using templates. Return confirmatio
|
|
|
148
169
|
Task tool parameters:
|
|
149
170
|
```
|
|
150
171
|
subagent_type: "gsd-codebase-mapper"
|
|
172
|
+
model: "{mapper_model}"
|
|
151
173
|
run_in_background: true
|
|
152
174
|
description: "Map codebase concerns"
|
|
153
175
|
```
|
|
@@ -20,6 +20,25 @@ No Pass/Fail buttons. No severity questions. Just: "Here's what should happen. D
|
|
|
20
20
|
|
|
21
21
|
<process>
|
|
22
22
|
|
|
23
|
+
<step name="resolve_model_profile" priority="first">
|
|
24
|
+
Read model profile for agent spawning:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Default to "balanced" if not set.
|
|
31
|
+
|
|
32
|
+
**Model lookup table:**
|
|
33
|
+
|
|
34
|
+
| Agent | quality | balanced | budget |
|
|
35
|
+
|-------|---------|----------|--------|
|
|
36
|
+
| gsd-planner | opus | opus | sonnet |
|
|
37
|
+
| gsd-plan-checker | sonnet | sonnet | haiku |
|
|
38
|
+
|
|
39
|
+
Store resolved models for use in Task calls below.
|
|
40
|
+
</step>
|
|
41
|
+
|
|
23
42
|
<step name="check_active_session">
|
|
24
43
|
**First: Check for active UAT sessions**
|
|
25
44
|
|
|
@@ -389,6 +408,7 @@ Plans must be executable prompts.
|
|
|
389
408
|
</downstream_consumer>
|
|
390
409
|
""",
|
|
391
410
|
subagent_type="gsd-planner",
|
|
411
|
+
model="{planner_model}",
|
|
392
412
|
description="Plan gap fixes for Phase {phase}"
|
|
393
413
|
)
|
|
394
414
|
```
|
|
@@ -434,6 +454,7 @@ Return one of:
|
|
|
434
454
|
</expected_output>
|
|
435
455
|
""",
|
|
436
456
|
subagent_type="gsd-plan-checker",
|
|
457
|
+
model="{checker_model}",
|
|
437
458
|
description="Verify Phase {phase} fix plans"
|
|
438
459
|
)
|
|
439
460
|
```
|
|
@@ -474,6 +495,7 @@ Do NOT replan from scratch unless issues are fundamental.
|
|
|
474
495
|
</instructions>
|
|
475
496
|
""",
|
|
476
497
|
subagent_type="gsd-planner",
|
|
498
|
+
model="{planner_model}",
|
|
477
499
|
description="Revise Phase {phase} plans"
|
|
478
500
|
)
|
|
479
501
|
```
|