get-shit-done-cc 1.10.0-experimental.0 → 1.10.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.
Files changed (61) hide show
  1. package/README.md +16 -17
  2. package/agents/gsd-executor.md +375 -37
  3. package/agents/gsd-planner.md +108 -15
  4. package/bin/install.js +163 -238
  5. package/commands/gsd/help.md +0 -43
  6. package/commands/gsd/new-project.md +8 -94
  7. package/commands/gsd/plan-phase.md +5 -35
  8. package/get-shit-done/references/verification-patterns.md +1 -1
  9. package/get-shit-done/templates/phase-prompt.md +4 -4
  10. package/get-shit-done/templates/state.md +0 -37
  11. package/get-shit-done/workflows/execute-phase.md +1 -44
  12. package/get-shit-done/workflows/execute-plan.md +856 -34
  13. package/hooks/dist/gsd-statusline.js +9 -6
  14. package/package.json +7 -10
  15. package/agents/design-specialist.md +0 -222
  16. package/commands/gsd/autopilot.md +0 -518
  17. package/commands/gsd/checkpoints.md +0 -229
  18. package/commands/gsd/design-system.md +0 -70
  19. package/commands/gsd/discuss-design.md +0 -77
  20. package/commands/gsd/extend.md +0 -80
  21. package/get-shit-done/references/ccr-integration.md +0 -468
  22. package/get-shit-done/references/checkpoint-execution.md +0 -369
  23. package/get-shit-done/references/checkpoint-types.md +0 -728
  24. package/get-shit-done/references/deviation-rules.md +0 -215
  25. package/get-shit-done/references/framework-patterns.md +0 -543
  26. package/get-shit-done/references/ui-principles.md +0 -258
  27. package/get-shit-done/skills/gsd-extend/SKILL.md +0 -154
  28. package/get-shit-done/skills/gsd-extend/references/agent-structure.md +0 -305
  29. package/get-shit-done/skills/gsd-extend/references/extension-anatomy.md +0 -123
  30. package/get-shit-done/skills/gsd-extend/references/reference-structure.md +0 -408
  31. package/get-shit-done/skills/gsd-extend/references/template-structure.md +0 -370
  32. package/get-shit-done/skills/gsd-extend/references/validation-rules.md +0 -140
  33. package/get-shit-done/skills/gsd-extend/references/workflow-structure.md +0 -253
  34. package/get-shit-done/skills/gsd-extend/templates/agent-template.md +0 -234
  35. package/get-shit-done/skills/gsd-extend/templates/reference-template.md +0 -239
  36. package/get-shit-done/skills/gsd-extend/templates/workflow-template.md +0 -169
  37. package/get-shit-done/skills/gsd-extend/workflows/create-approach.md +0 -332
  38. package/get-shit-done/skills/gsd-extend/workflows/list-extensions.md +0 -133
  39. package/get-shit-done/skills/gsd-extend/workflows/remove-extension.md +0 -93
  40. package/get-shit-done/skills/gsd-extend/workflows/validate-extension.md +0 -184
  41. package/get-shit-done/templates/autopilot-script-simple.sh +0 -181
  42. package/get-shit-done/templates/autopilot-script.sh +0 -1142
  43. package/get-shit-done/templates/autopilot-script.sh.backup +0 -1142
  44. package/get-shit-done/templates/design-system.md +0 -238
  45. package/get-shit-done/templates/phase-design.md +0 -205
  46. package/get-shit-done/templates/phase-models-template.json +0 -71
  47. package/get-shit-done/tui/App.tsx +0 -169
  48. package/get-shit-done/tui/README.md +0 -107
  49. package/get-shit-done/tui/build.js +0 -37
  50. package/get-shit-done/tui/components/ActivityFeed.tsx +0 -126
  51. package/get-shit-done/tui/components/PhaseCard.tsx +0 -86
  52. package/get-shit-done/tui/components/StatsBar.tsx +0 -147
  53. package/get-shit-done/tui/dist/index.js +0 -387
  54. package/get-shit-done/tui/index.tsx +0 -12
  55. package/get-shit-done/tui/package-lock.json +0 -1074
  56. package/get-shit-done/tui/package.json +0 -22
  57. package/get-shit-done/tui/utils/pipeReader.ts +0 -129
  58. package/get-shit-done/workflows/design-system.md +0 -245
  59. package/get-shit-done/workflows/discuss-design.md +0 -330
  60. package/get-shit-done/workflows/execute-plan-auth.md +0 -122
  61. package/get-shit-done/workflows/execute-plan-checkpoints.md +0 -541
@@ -1,518 +0,0 @@
1
- ---
2
- name: gsd:autopilot
3
- description: Fully automated milestone execution from existing roadmap
4
- argument-hint: "[--from-phase N] [--dry-run] [--background] [--model file.json]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- - Grep
12
- - AskUserQuestion
13
- ---
14
-
15
- <objective>
16
- Generate and run a shell script that autonomously executes all remaining phases in the current milestone.
17
-
18
- Each phase: plan → execute → verify → handle gaps → next phase.
19
-
20
- The shell script outer loop provides infinite context (each `claude -p` gets fresh 200k). State persists in `.planning/` enabling resume after interruption.
21
-
22
- **Requires:** `.planning/ROADMAP.md` (run `/gsd:new-project` first)
23
- </objective>
24
-
25
- <execution_context>
26
- @~/.claude/get-shit-done/references/ui-brand.md
27
- @~/.claude/get-shit-done/templates/autopilot-script.sh
28
- </execution_context>
29
-
30
- <context>
31
- Arguments: $ARGUMENTS
32
-
33
- **Flags:**
34
- - `--from-phase N` — Start from specific phase (default: first incomplete)
35
- - `--dry-run` — Generate script but don't run it
36
- - `--background` — Run detached with nohup (default: attached with streaming output)
37
- - `--model file.json` — Use custom phase models config (default: .planning/phase-models.json)
38
- </context>
39
-
40
- **Model Configuration:**
41
-
42
- The autopilot supports per-phase model selection via CCR (Claude Code Router). When CCR is detected:
43
- 1. Creates `.planning/phase-models.json` from template (first run)
44
- 2. Allows custom model per phase for different task types
45
- 3. Falls back to native `claude` command if CCR unavailable
46
-
47
- Example configuration structure:
48
- ```json
49
- {
50
- "default_model": "claude-3-5-sonnet-latest",
51
- "phases": {
52
- "1": { "model": "claude-3-5-sonnet-latest" },
53
- "2": { "model": "claude-3-5-opus-latest" },
54
- "gaps": { "model": "claude-3-5-sonnet-latest" }
55
- },
56
- "provider_routing": {
57
- "claude-3-5-sonnet-latest": {
58
- "provider": "anthropic",
59
- "base_url": "https://api.anthropic.com"
60
- },
61
- "glm-4.7": {
62
- "provider": "z-ai",
63
- "base_url": "https://open.bigmodel.cn/api/paas/v4/"
64
- }
65
- }
66
- }
67
- ```
68
-
69
- **Benefits:**
70
- - Use expensive models (Opus) only for complex phases
71
- - Use GLM-4.7 for cost-effective routine tasks
72
- - Mix providers (Anthropic + OpenAI + Z-AI) for optimization
73
- - Per-phase routing matches task complexity to model capability
74
-
75
- **New: Beautiful Ink TUI**
76
-
77
- The autopilot now includes a stunning React/Ink-based terminal UI that provides:
78
-
79
- - **Rich visual components** with proper layouts, borders, and spacing
80
- - **Real-time phase progress** with completion tracking
81
- - **Live activity feed** with emoji indicators and color coding
82
- - **Cost and time statistics** with visual progress bars
83
- - **Smooth animations** and transitions
84
- - **Professional terminal graphics** using modern Ink components
85
-
86
- **Requirements:** Node.js 16+ for the Ink TUI. Falls back to bash TUI if unavailable.
87
-
88
- **Auto-detection:** The autopilot automatically detects and uses the Ink TUI if:
89
- 1. Node.js is installed
90
- 2. The TUI package is available (installed with GSD)
91
-
92
- Otherwise, it gracefully falls back to the classic bash display.
93
-
94
- ## Example TUI Layout
95
-
96
- ```
97
- ╔═══════════════════════════════════════════════════════════════╗
98
- ║ ██████╗ ███████╗██████╗ ║
99
- ║ ██╔════╝ ██╔════╝██╔══██╗ ║
100
- ║ ██║ ███╗███████╗██║ ██║ ║
101
- ║ ██║ ██║╚════██║██║ ██║ ║
102
- ║ ╚██████╔╝███████║██████╔╝ ║
103
- ║ ╚═════╝ ╚══════╝╚═════╝ ║
104
- ║ ║
105
- ║ GET SHIT DONE - AUTOPILOT ║
106
- ╚═══════════════════════════════════════════════════════════════╝
107
-
108
- ┌─────────────────────────────────┬─────────────────────────────────┐
109
- │ ┌─────────────────────────────┐ │ ┌─────────────────────────────┐ │
110
- │ │ PHASE 1: Project Setup │ │ │ Activity Feed │ │
111
- │ │ │ │ │ │ │
112
- │ │ Progress ████████░░░░░ 50% │ │ │ [14:32:15] 🔧 BUILDING: │ │
113
- │ │ │ │ │ src/components/App.tsx │ │
114
- │ │ Stages │ │ │ │ │
115
- │ │ ✓ RESEARCH 2m │ │ [14:32:01] ✓ COMMIT: │ │
116
- │ │ ✓ PLANNING 1m │ │ Initial commit │ │
117
- │ │ ○ BUILDING active│ │ │ │
118
- │ └─────────────────────────────┘ │ └─────────────────────────────┘ │
119
- └─────────────────────────────────┴─────────────────────────────────┘
120
-
121
- ┌─────────────────────────────────────────────────────────────────┐
122
- │ 📊 Execution Stats Elapsed: 5m 23s │
123
- │ Phases ██████████████░░░░░░░░░░░░░░░░░░░ 2/5 │
124
- │ Time 5m 23s (remaining: ~13m) │
125
- │ Tokens: 45,230 Cost: $0.68 │
126
- └─────────────────────────────────────────────────────────────────┘
127
- ```
128
- </context>
129
-
130
- <process>
131
-
132
- ## 1. Validate Prerequisites
133
-
134
- ```bash
135
- # Check roadmap exists
136
- if [ ! -f .planning/ROADMAP.md ]; then
137
- echo "ERROR: No roadmap found. Run /gsd:new-project first."
138
- exit 1
139
- fi
140
-
141
- # Check not already running
142
- if [ -f .planning/autopilot.lock ]; then
143
- PID=$(cat .planning/autopilot.lock)
144
- if ps -p $PID > /dev/null 2>&1; then
145
- echo "ERROR: Autopilot already running (PID: $PID)"
146
- echo "To force restart: rm .planning/autopilot.lock"
147
- exit 1
148
- fi
149
- fi
150
- ```
151
-
152
- ## 2. Parse Roadmap State
153
-
154
- ```bash
155
- # Get incomplete phases
156
- INCOMPLETE=$(grep -E "^- \[ \] \*\*Phase" .planning/ROADMAP.md | sed 's/.*Phase \([0-9.]*\).*/\1/' | tr '\n' ' ')
157
-
158
- # Get completed phases
159
- COMPLETED=$(grep -E "^- \[x\] \*\*Phase" .planning/ROADMAP.md | sed 's/.*Phase \([0-9.]*\).*/\1/' | tr '\n' ' ')
160
-
161
- # Check autopilot state for resume
162
- if [ -f .planning/STATE.md ]; then
163
- AUTOPILOT_STATUS=$(grep "^- \*\*Mode:\*\*" .planning/STATE.md | sed 's/.*: //')
164
- LAST_PHASE=$(grep "^- \*\*Current Phase:\*\*" .planning/STATE.md | sed 's/.*: //')
165
- fi
166
- ```
167
-
168
- **If no incomplete phases:** Report milestone already complete, offer `/gsd:complete-milestone`.
169
-
170
- **If `--from-phase N` specified:** Validate phase exists, use as start point.
171
-
172
- **If autopilot was interrupted (Mode: running):** Auto-resume from last phase.
173
-
174
- ## 3. Load Config
175
-
176
- ```bash
177
- # Read config values
178
- CHECKPOINT_MODE=$(cat .planning/config.json 2>/dev/null | grep -o '"checkpoint_mode"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "queue")
179
- MAX_RETRIES=$(cat .planning/config.json 2>/dev/null | grep -o '"max_retries"[[:space:]]*:[[:space:]]*[0-9]*' | grep -o '[0-9]*$' || echo "3")
180
- BUDGET_LIMIT=$(cat .planning/config.json 2>/dev/null | grep -o '"budget_limit_usd"[[:space:]]*:[[:space:]]*[0-9.]*' | grep -o '[0-9.]*$' || echo "0")
181
- WEBHOOK_URL=$(cat .planning/config.json 2>/dev/null | grep -o '"notify_webhook"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "")
182
- MODEL_PROFILE=$(cat .planning/config.json 2>/dev/null | grep -o '"model_profile"[[:space:]]*:[[:space:]]*"[^"]*"' | grep -o '"[^"]*"$' | tr -d '"' || echo "balanced")
183
- ```
184
-
185
- **Check for CCR availability:**
186
- ```bash
187
- if command -v ccr &> /dev/null; then
188
- CCR_AVAILABLE=true
189
- if [ ! -f .planning/phase-models.json ]; then
190
- # Copy template
191
- cp ~/.claude/get-shit-done/templates/phase-models-template.json .planning/phase-models.json
192
- echo "Created .planning/phase-models.json from template"
193
- fi
194
- else
195
- CCR_AVAILABLE=false
196
- fi
197
- ```
198
-
199
- **Load model configuration:**
200
- ```bash
201
- if [ "$CCR_AVAILABLE" = true ] && [ -f .planning/phase-models.json ]; then
202
- PHASE_MODELS_CONFIG=".planning/phase-models.json"
203
- else
204
- PHASE_MODELS_CONFIG=""
205
- fi
206
- ```
207
-
208
- ## 4. Present Execution Plan
209
-
210
- ```
211
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
212
- GSD ► AUTOPILOT
213
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
214
-
215
- **Milestone:** [from ROADMAP.md]
216
-
217
- | Status | Phases |
218
- |--------|--------|
219
- | ✓ Complete | {completed_phases} |
220
- | ○ Remaining | {incomplete_phases} |
221
-
222
- **Settings:**
223
- - Checkpoint mode: {queue|skip}
224
- - Max retries: {N}
225
- - Budget limit: ${N} (0 = unlimited)
226
- - Notifications: {webhook|bell|none}
227
- - Model Routing: {CCR|native claude}
228
-
229
- ───────────────────────────────────────────────────────────────
230
-
231
- **Model Configuration:**
232
- {if CCR_AVAILABLE}
233
- Available models from .planning/phase-models.json:
234
- - Default: {default_model}
235
- - Per-phase routing: enabled
236
- {/if}
237
- {if !CCR_AVAILABLE}
238
- Using native claude command (CCR not detected)
239
- {/if}
240
-
241
- ───────────────────────────────────────────────────────────────
242
-
243
- **Execution Plan:**
244
-
245
- For each remaining phase:
246
- 1. Load model config for phase
247
- 2. Plan phase (if no plans exist)
248
- 3. Execute phase (parallel waves)
249
- 4. Verify phase goal
250
- 5. If gaps found → plan gaps → execute gaps → re-verify
251
- 6. Move to next phase
252
-
253
- Checkpoints queued to: `.planning/checkpoints/pending/`
254
-
255
- ───────────────────────────────────────────────────────────────
256
- ```
257
-
258
- ## 5. Generate Script
259
-
260
- Read template from `@~/.claude/get-shit-done/templates/autopilot-script.sh` and fill:
261
- - `{{project_dir}}` — Current directory (absolute path)
262
- - `{{project_name}}` — From PROJECT.md
263
- - `{{phases}}` — Array of incomplete phase numbers
264
- - `{{checkpoint_mode}}` — queue or skip
265
- - `{{max_retries}}` — From config
266
- - `{{budget_limit}}` — From config (0 = unlimited)
267
- - `{{webhook_url}}` — From config (empty = disabled)
268
- - `{{model_profile}}` — From config
269
- - `{{timestamp}}` — Current datetime
270
-
271
- Write to `.planning/autopilot.sh`:
272
- ```bash
273
- mkdir -p .planning/logs .planning/checkpoints/pending .planning/checkpoints/approved
274
- chmod +x .planning/autopilot.sh
275
- ```
276
-
277
- **Ensure gitignore entries exist** (autopilot transient files should not be committed):
278
- ```bash
279
- # Add to .gitignore if not already present
280
- GITIGNORE_ENTRIES="
281
- # GSD autopilot (transient files)
282
- .planning/autopilot.sh
283
- .planning/autopilot.lock
284
- .planning/logs/
285
- .planning/checkpoints/
286
- .planning/phase-models.json
287
- "
288
-
289
- if [ -f .gitignore ]; then
290
- if ! grep -q "GSD autopilot" .gitignore; then
291
- echo "$GITIGNORE_ENTRIES" >> .gitignore
292
- fi
293
- else
294
- echo "$GITIGNORE_ENTRIES" > .gitignore
295
- fi
296
- ```
297
-
298
- **Copy phase models template:**
299
- ```bash
300
- if [ -n "$PHASE_MODELS_CONFIG" ] && [ ! -f ".planning/phase-models.json" ]; then
301
- cp ~/.claude/get-shit-done/templates/phase-models-template.json \
302
- .planning/phase-models.json
303
- echo "Created .planning/phase-models.json from template"
304
- echo "Edit this file to customize per-phase model selection"
305
- fi
306
- ```
307
-
308
- **Update gitignore for phase models:**
309
- ```bash
310
- if ! grep -q "phase-models.json" .gitignore; then
311
- echo ".planning/phase-models.json" >> .gitignore
312
- fi
313
- ```
314
-
315
- ## 6. Present Run Instructions
316
-
317
- **IMPORTANT:** The autopilot script must run **outside** of Claude Code in a separate terminal. Claude Code's Bash tool has a 10-minute timeout which would interrupt long-running execution.
318
-
319
- Present the following:
320
-
321
- ```
322
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
323
- GSD ► AUTOPILOT READY
324
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
325
-
326
- Script generated: .planning/autopilot.sh
327
- Model config: {if CCR_AVAILABLE}.planning/phase-models.json{else}CCR not detected - using default model{endif}
328
-
329
- ───────────────────────────────────────────────────────────────
330
-
331
- ## Run in a separate terminal
332
-
333
- **Attached (recommended — see output live):**
334
- ```
335
- cd {project_dir} && bash .planning/autopilot.sh
336
- ```
337
-
338
- **Background (for overnight runs):**
339
- ```
340
- cd {project_dir} && nohup bash .planning/autopilot.sh > .planning/logs/autopilot.log 2>&1 &
341
- ```
342
-
343
- **With CCR model routing:**
344
- ```
345
- cd {project_dir} && ccr code --model {default_model} -- bash .planning/autopilot.sh
346
- ```
347
-
348
- **Monitor logs:**
349
- ```
350
- tail -f .planning/logs/autopilot.log
351
- ```
352
-
353
- ───────────────────────────────────────────────────────────────
354
-
355
- **Model Selection:**
356
- - Phase models configured in .planning/phase-models.json
357
- - CCR detected: {if CCR_AVAILABLE}Yes - using per-phase routing{else}No - using native claude{endif}
358
- - Edit phase-models.json to customize models per phase
359
-
360
- **Why a separate terminal?**
361
- Claude Code's Bash tool has a 10-minute timeout. Autopilot runs for
362
- hours across multiple phases — it needs to run independently.
363
-
364
- **Resume after interruption:**
365
- Just run the script again. It detects completed phases and continues.
366
-
367
- **Check on checkpoints:**
368
- `/gsd:checkpoints` — review and approve any pending human input
369
-
370
- ───────────────────────────────────────────────────────────────
371
- ```
372
-
373
- ## 7. Update State
374
-
375
- Before presenting instructions, update STATE.md to mark autopilot as ready:
376
-
377
- ```markdown
378
- ## Autopilot
379
-
380
- - **Mode:** running
381
- - **Started:** [timestamp]
382
- - **Current Phase:** [first phase]
383
- - **Phases Remaining:** [list]
384
- - **Checkpoints Pending:** (none yet)
385
- - **Last Error:** none
386
- ```
387
-
388
- </process>
389
-
390
- <checkpoint_queue>
391
- Plans with `autonomous: false` pause at checkpoints.
392
-
393
- **Queue structure:**
394
- ```
395
- .planning/checkpoints/
396
- ├── pending/
397
- │ └── phase-03-plan-02.json # Waiting for user
398
- └── approved/
399
- └── phase-03-plan-02.json # User approved, ready to continue
400
- ```
401
-
402
- **Pending checkpoint format:**
403
- ```json
404
- {
405
- "phase": "03",
406
- "plan": "02",
407
- "plan_name": "OAuth Integration",
408
- "checkpoint_type": "auth-gate",
409
- "awaiting": "OAuth client credentials for Google",
410
- "context": "Plan paused after task 2. Tasks 3-4 require OAuth setup.",
411
- "created": "2026-01-26T14:30:00Z",
412
- "completed_tasks": [
413
- {"task": 1, "commit": "abc123", "name": "Create OAuth service skeleton"},
414
- {"task": 2, "commit": "def456", "name": "Add Google OAuth config structure"}
415
- ]
416
- }
417
- ```
418
-
419
- **Approved checkpoint format:**
420
- ```json
421
- {
422
- "phase": "03",
423
- "plan": "02",
424
- "approved": true,
425
- "response": "Client ID: xxx, Secret: yyy",
426
- "approved_at": "2026-01-26T15:00:00Z"
427
- }
428
- ```
429
-
430
- **Workflow:**
431
- 1. Executor hits checkpoint → writes to `pending/`
432
- 2. Autopilot logs checkpoint, continues with other phases
433
- 3. User reviews `pending/` (manually or via `/gsd:checkpoints`)
434
- 4. User creates approval in `approved/`
435
- 5. Next autopilot run (or current if phase revisited) picks up approval
436
- 6. Continuation agent spawned with approval context
437
- </checkpoint_queue>
438
-
439
- <cost_tracking>
440
- Track token usage for budget enforcement:
441
-
442
- **Per-phase logging:**
443
- After each `claude -p` call, parse output for token counts:
444
- ```bash
445
- # Extract from claude -p output (format varies)
446
- TOKENS=$(grep -o 'tokens: [0-9]*' "$LOG_FILE" | tail -1 | grep -o '[0-9]*')
447
- ```
448
-
449
- **Accumulate in state:**
450
- ```markdown
451
- ## Cost Tracking
452
-
453
- | Phase | Tokens | Est. Cost |
454
- |-------|--------|-----------|
455
- | 1 | 45,230 | $0.68 |
456
- | 2 | 62,100 | $0.93 |
457
- | Total | 107,330 | $1.61 |
458
- ```
459
-
460
- **Budget check:**
461
- ```bash
462
- if [ "$BUDGET_LIMIT" -gt 0 ]; then
463
- TOTAL_COST=$(calculate_cost)
464
- if (( $(echo "$TOTAL_COST > $BUDGET_LIMIT" | bc -l) )); then
465
- notify "Budget exceeded: \$$TOTAL_COST / \$$BUDGET_LIMIT"
466
- update_state "paused" "budget_exceeded"
467
- exit 0
468
- fi
469
- fi
470
- ```
471
- </cost_tracking>
472
-
473
- <notifications>
474
- **Terminal bell:**
475
- ```bash
476
- echo -e "\a" # On completion or error
477
- ```
478
-
479
- **Webhook:**
480
- ```bash
481
- notify() {
482
- local message="$1"
483
- local status="${2:-info}"
484
-
485
- if [ -n "$WEBHOOK_URL" ]; then
486
- curl -s -X POST "$WEBHOOK_URL" \
487
- -H "Content-Type: application/json" \
488
- -d "{\"text\": \"GSD Autopilot: $message\", \"status\": \"$status\"}" \
489
- > /dev/null 2>&1
490
- fi
491
-
492
- # Always terminal bell
493
- echo -e "\a"
494
- }
495
- ```
496
-
497
- **Notification triggers:**
498
- - Phase complete
499
- - Checkpoint queued
500
- - Error/retry
501
- - Budget warning (80%)
502
- - Budget exceeded
503
- - Milestone complete
504
- </notifications>
505
-
506
- <success_criteria>
507
- - [ ] Roadmap exists validation
508
- - [ ] Lock file prevents concurrent runs
509
- - [ ] Incomplete phases parsed from ROADMAP.md
510
- - [ ] Resume detection from STATE.md
511
- - [ ] Config loaded (checkpoint mode, retries, budget, webhook)
512
- - [ ] Execution plan presented clearly
513
- - [ ] User confirms before running
514
- - [ ] Script generated with project-specific values
515
- - [ ] Execution mode matches user choice
516
- - [ ] STATE.md updated with autopilot section
517
- - [ ] Logs written to .planning/logs/
518
- </success_criteria>