@undeemed/get-shit-done-codex 1.22.0 → 1.23.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/.codex/config.toml +1 -1
- package/README.md +3 -1
- package/agents/gsd-debugger.md +3 -3
- package/agents/gsd-planner.md +1 -1
- package/bin/install.js +49 -24
- package/get-shit-done/references/continuation-format.md +17 -11
- package/get-shit-done/references/ui-brand.md +1 -1
- package/get-shit-done/templates/DEBUG.md +4 -4
- package/get-shit-done/templates/UAT.md +1 -1
- package/get-shit-done/workflows/add-phase.md +1 -1
- package/get-shit-done/workflows/audit-milestone.md +3 -3
- package/get-shit-done/workflows/complete-milestone.md +1 -1
- package/get-shit-done/workflows/discuss-phase.md +2 -2
- package/get-shit-done/workflows/execute-phase.md +1 -1
- package/get-shit-done/workflows/execute-plan.md +1 -1
- package/get-shit-done/workflows/help.md +13 -6
- package/get-shit-done/workflows/insert-phase.md +1 -1
- package/get-shit-done/workflows/map-codebase.md +1 -1
- package/get-shit-done/workflows/new-milestone.md +1 -1
- package/get-shit-done/workflows/new-project.md +1 -1
- package/get-shit-done/workflows/plan-milestone-gaps.md +1 -1
- package/get-shit-done/workflows/plan-phase.md +1 -1
- package/get-shit-done/workflows/progress.md +7 -7
- package/get-shit-done/workflows/resume-project.md +2 -2
- package/get-shit-done/workflows/settings.md +1 -1
- package/get-shit-done/workflows/transition.md +3 -3
- package/get-shit-done/workflows/verify-work.md +2 -2
- package/package.json +2 -2
package/.codex/config.toml
CHANGED
package/README.md
CHANGED
|
@@ -5,8 +5,9 @@ A meta-prompting, context engineering and spec-driven development system for [Op
|
|
|
5
5
|
Fork of [get-shit-done](https://github.com/taches/get-shit-done) by TÂCHES, adapted for Codex CLI by [undeemed](https://github.com/undeemed).
|
|
6
6
|
|
|
7
7
|
> [!CAUTION]
|
|
8
|
-
>
|
|
8
|
+
> Codex is now supported upstream. This fork remains focused on Codex-specific UX, compatibility, and cutting-edge experimental features.
|
|
9
9
|
|
|
10
|
+
[](https://github.com/undeemed/get-shit-done-codex/actions/workflows/ci.yml)
|
|
10
11
|
[](https://www.npmjs.com/package/@undeemed/get-shit-done-codex)
|
|
11
12
|
[](LICENSE)
|
|
12
13
|

|
|
@@ -46,6 +47,7 @@ npx @undeemed/get-shit-done-codex --global
|
|
|
46
47
|
```bash
|
|
47
48
|
npx @undeemed/get-shit-done-codex --global # Install to ~/.codex/
|
|
48
49
|
npx @undeemed/get-shit-done-codex --local # Install to current directory
|
|
50
|
+
npx @undeemed/get-shit-done-codex --path . # Install to a specific directory
|
|
49
51
|
npx @undeemed/get-shit-done-codex --global --migrate # Clean up legacy prompts/
|
|
50
52
|
npx @undeemed/get-shit-done-codex --verify --global # Check install integrity
|
|
51
53
|
npx @undeemed/get-shit-done-codex --verify --repair --global # Auto-repair
|
package/agents/gsd-debugger.md
CHANGED
|
@@ -812,7 +812,7 @@ gathering -> investigating -> fixing -> verifying -> awaiting_human_verify -> re
|
|
|
812
812
|
|
|
813
813
|
## Resume Behavior
|
|
814
814
|
|
|
815
|
-
When reading debug file after
|
|
815
|
+
When reading debug file after session reset:
|
|
816
816
|
1. Parse frontmatter -> know status
|
|
817
817
|
2. Read Current Focus -> know exactly what was happening
|
|
818
818
|
3. Read Eliminated -> know what NOT to retry
|
|
@@ -897,7 +897,7 @@ Gather symptoms through questioning. Update file after EACH answer.
|
|
|
897
897
|
- Otherwise -> proceed to fix_and_verify
|
|
898
898
|
- **ELIMINATED:** Append to Eliminated section, form new hypothesis, return to Phase 2
|
|
899
899
|
|
|
900
|
-
**Context management:** After 5+ evidence entries, ensure Current Focus is updated. Suggest "
|
|
900
|
+
**Context management:** After 5+ evidence entries, ensure Current Focus is updated. Suggest "start a new session — run $gsd-debug to resume" if context filling up.
|
|
901
901
|
</step>
|
|
902
902
|
|
|
903
903
|
<step name="resume_from_file">
|
|
@@ -1239,7 +1239,7 @@ Check for mode flags in prompt context:
|
|
|
1239
1239
|
- [ ] Current Focus always reflects NOW
|
|
1240
1240
|
- [ ] Evidence appended for every finding
|
|
1241
1241
|
- [ ] Eliminated prevents re-investigation
|
|
1242
|
-
- [ ] Can resume perfectly from any
|
|
1242
|
+
- [ ] Can resume perfectly from any session reset
|
|
1243
1243
|
- [ ] Root cause confirmed with evidence before fixing
|
|
1244
1244
|
- [ ] Fix verified against original symptoms
|
|
1245
1245
|
- [ ] Appropriate return format based on mode
|
package/agents/gsd-planner.md
CHANGED
|
@@ -1211,7 +1211,7 @@ Return structured planning outcome to orchestrator.
|
|
|
1211
1211
|
|
|
1212
1212
|
Execute: `$gsd-execute-phase {phase}`
|
|
1213
1213
|
|
|
1214
|
-
<sub
|
|
1214
|
+
<sub>start a new session first — fresh context window</sub>
|
|
1215
1215
|
```
|
|
1216
1216
|
|
|
1217
1217
|
## Gap Closure Plans Created
|
package/bin/install.js
CHANGED
|
@@ -41,6 +41,8 @@ const hasRepair = args.includes('--repair');
|
|
|
41
41
|
const hasNoVersionCheck = args.includes('--no-version-check') || process.env.GSD_SKIP_VERSION_CHECK === '1';
|
|
42
42
|
const hasMigrate = args.includes('--migrate');
|
|
43
43
|
const hasSkipMigrate = args.includes('--skip-migrate') || args.includes('--no-migrate');
|
|
44
|
+
const pathIdx = args.indexOf('--path');
|
|
45
|
+
const customPath = pathIdx !== -1 && args[pathIdx + 1] ? args[pathIdx + 1] : null;
|
|
44
46
|
const isInteractiveTerminal = Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
45
47
|
const codexMode = 'skills';
|
|
46
48
|
|
|
@@ -52,6 +54,7 @@ if (hasHelp) {
|
|
|
52
54
|
${yellow}Options:${reset}
|
|
53
55
|
${cyan}-g, --global${reset} Install globally (to ~/.codex/)
|
|
54
56
|
${cyan}-l, --local${reset} Install locally (to current directory)
|
|
57
|
+
${cyan}--path <dir>${reset} Install into a specific directory
|
|
55
58
|
${cyan}--migrate${reset} Apply detected legacy surface cleanup without prompting
|
|
56
59
|
${cyan}--skip-migrate${reset} Keep legacy surface files when migration is detected
|
|
57
60
|
${cyan}--verify${reset} Verify current install integrity
|
|
@@ -66,6 +69,9 @@ if (hasHelp) {
|
|
|
66
69
|
${dim}# Install to current project only${reset}
|
|
67
70
|
npx ${NPM_PACKAGE} --local
|
|
68
71
|
|
|
72
|
+
${dim}# Install to a specific directory${reset}
|
|
73
|
+
npx ${NPM_PACKAGE} --path /path/to/project
|
|
74
|
+
|
|
69
75
|
${dim}# Verify global installation${reset}
|
|
70
76
|
npx ${NPM_PACKAGE} --verify --global
|
|
71
77
|
|
|
@@ -357,13 +363,24 @@ function showCachedVersionWarning() {
|
|
|
357
363
|
}
|
|
358
364
|
}
|
|
359
365
|
|
|
360
|
-
function getInstallContext(isGlobal) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
366
|
+
function getInstallContext(isGlobal, targetPath) {
|
|
367
|
+
let codexDir;
|
|
368
|
+
let locationLabel;
|
|
369
|
+
let pathPrefix;
|
|
370
|
+
if (targetPath) {
|
|
371
|
+
codexDir = path.resolve(targetPath);
|
|
372
|
+
locationLabel = targetPath;
|
|
373
|
+
pathPrefix = codexDir.endsWith(path.sep) ? codexDir : `${codexDir}${path.sep}`;
|
|
374
|
+
} else if (isGlobal) {
|
|
375
|
+
codexDir = path.join(os.homedir(), '.codex');
|
|
376
|
+
locationLabel = '~/.codex';
|
|
377
|
+
pathPrefix = '~/.codex/';
|
|
378
|
+
} else {
|
|
379
|
+
codexDir = process.cwd();
|
|
380
|
+
locationLabel = '.';
|
|
381
|
+
pathPrefix = './';
|
|
382
|
+
}
|
|
383
|
+
return { codexDir, locationLabel, pathPrefix };
|
|
367
384
|
}
|
|
368
385
|
|
|
369
386
|
function listPromptCommandFiles(promptsDir) {
|
|
@@ -388,9 +405,9 @@ function detectInstalledMode(promptCount, skillCount) {
|
|
|
388
405
|
return 'none';
|
|
389
406
|
}
|
|
390
407
|
|
|
391
|
-
function verifyInstall(isGlobal) {
|
|
408
|
+
function verifyInstall(isGlobal, targetPath) {
|
|
392
409
|
const src = path.join(__dirname, '..');
|
|
393
|
-
const { codexDir, locationLabel } = getInstallContext(isGlobal);
|
|
410
|
+
const { codexDir, locationLabel } = getInstallContext(isGlobal, targetPath);
|
|
394
411
|
const promptsDir = path.join(codexDir, 'prompts');
|
|
395
412
|
const skillsDir = path.join(codexDir, 'skills');
|
|
396
413
|
const workflowRoot = path.join(codexDir, 'get-shit-done');
|
|
@@ -447,9 +464,9 @@ function verifyInstall(isGlobal) {
|
|
|
447
464
|
return { ok, detectedMode };
|
|
448
465
|
}
|
|
449
466
|
|
|
450
|
-
function installCore(isGlobal, migrationPlan, applyMigration, done = () => {}) {
|
|
467
|
+
function installCore(isGlobal, migrationPlan, applyMigration, done = () => {}, targetPath) {
|
|
451
468
|
const src = path.join(__dirname, '..');
|
|
452
|
-
const { codexDir, locationLabel, pathPrefix } = getInstallContext(isGlobal);
|
|
469
|
+
const { codexDir, locationLabel, pathPrefix } = getInstallContext(isGlobal, targetPath);
|
|
453
470
|
|
|
454
471
|
console.log(` Installing to ${cyan}${locationLabel}${reset}\n`);
|
|
455
472
|
fs.mkdirSync(codexDir, { recursive: true });
|
|
@@ -546,12 +563,12 @@ function installCore(isGlobal, migrationPlan, applyMigration, done = () => {}) {
|
|
|
546
563
|
}
|
|
547
564
|
}
|
|
548
565
|
|
|
549
|
-
function install(isGlobal, done = () => {}) {
|
|
550
|
-
const { codexDir } = getInstallContext(isGlobal);
|
|
566
|
+
function install(isGlobal, done = () => {}, targetPath) {
|
|
567
|
+
const { codexDir } = getInstallContext(isGlobal, targetPath);
|
|
551
568
|
const migrationPlan = detectMigrationPlan(codexDir);
|
|
552
569
|
|
|
553
570
|
if (!migrationPlan.hasChanges) {
|
|
554
|
-
installCore(isGlobal, migrationPlan, false, done);
|
|
571
|
+
installCore(isGlobal, migrationPlan, false, done, targetPath);
|
|
555
572
|
return;
|
|
556
573
|
}
|
|
557
574
|
|
|
@@ -560,13 +577,13 @@ function install(isGlobal, done = () => {}) {
|
|
|
560
577
|
|
|
561
578
|
if (hasMigrate) {
|
|
562
579
|
console.log(` ${green}✓${reset} Migration approved by --migrate`);
|
|
563
|
-
installCore(isGlobal, migrationPlan, true, done);
|
|
580
|
+
installCore(isGlobal, migrationPlan, true, done, targetPath);
|
|
564
581
|
return;
|
|
565
582
|
}
|
|
566
583
|
|
|
567
584
|
if (hasSkipMigrate) {
|
|
568
585
|
console.log(` ${yellow}Skipping migration due to --skip-migrate.${reset}`);
|
|
569
|
-
installCore(isGlobal, migrationPlan, false, done);
|
|
586
|
+
installCore(isGlobal, migrationPlan, false, done, targetPath);
|
|
570
587
|
return;
|
|
571
588
|
}
|
|
572
589
|
|
|
@@ -589,7 +606,7 @@ function install(isGlobal, done = () => {}) {
|
|
|
589
606
|
if (!applyMigration) {
|
|
590
607
|
console.log(` ${yellow}Keeping legacy files.${reset}`);
|
|
591
608
|
}
|
|
592
|
-
installCore(isGlobal, migrationPlan, applyMigration, done);
|
|
609
|
+
installCore(isGlobal, migrationPlan, applyMigration, done, targetPath);
|
|
593
610
|
});
|
|
594
611
|
}
|
|
595
612
|
|
|
@@ -614,8 +631,14 @@ function promptLocation(done) {
|
|
|
614
631
|
});
|
|
615
632
|
}
|
|
616
633
|
|
|
617
|
-
|
|
618
|
-
|
|
634
|
+
const locationFlagCount = [hasGlobal, hasLocal, !!customPath].filter(Boolean).length;
|
|
635
|
+
if (locationFlagCount > 1) {
|
|
636
|
+
console.error(` ${yellow}Cannot specify more than one of --global, --local, and --path${reset}`);
|
|
637
|
+
process.exit(1);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
if (pathIdx !== -1 && !customPath) {
|
|
641
|
+
console.error(` ${yellow}--path requires a directory argument${reset}`);
|
|
619
642
|
process.exit(1);
|
|
620
643
|
}
|
|
621
644
|
|
|
@@ -634,21 +657,23 @@ if (!hasNoVersionCheck && !hasVerify) {
|
|
|
634
657
|
}
|
|
635
658
|
|
|
636
659
|
if (hasVerify) {
|
|
637
|
-
const isGlobal = hasLocal ? false : true;
|
|
638
|
-
let result = verifyInstall(isGlobal);
|
|
660
|
+
const isGlobal = customPath ? false : (hasLocal ? false : true);
|
|
661
|
+
let result = verifyInstall(isGlobal, customPath);
|
|
639
662
|
|
|
640
663
|
if (!result.ok && hasRepair) {
|
|
641
664
|
console.log(`\n ${yellow}Repairing install...${reset}\n`);
|
|
642
665
|
install(isGlobal, () => {
|
|
643
666
|
console.log('');
|
|
644
|
-
const repaired = verifyInstall(isGlobal);
|
|
667
|
+
const repaired = verifyInstall(isGlobal, customPath);
|
|
645
668
|
process.exit(repaired.ok ? 0 : 1);
|
|
646
|
-
});
|
|
669
|
+
}, customPath);
|
|
647
670
|
} else {
|
|
648
671
|
process.exit(result.ok ? 0 : 1);
|
|
649
672
|
}
|
|
650
673
|
} else {
|
|
651
|
-
if (
|
|
674
|
+
if (customPath) {
|
|
675
|
+
install(false, () => {}, customPath);
|
|
676
|
+
} else if (hasGlobal) {
|
|
652
677
|
install(true);
|
|
653
678
|
} else if (hasLocal) {
|
|
654
679
|
install(false);
|
|
@@ -13,7 +13,7 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
13
13
|
|
|
14
14
|
`{command to copy-paste}`
|
|
15
15
|
|
|
16
|
-
<sub
|
|
16
|
+
<sub>start a new session first → fresh context window</sub>
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -29,7 +29,7 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
29
29
|
1. **Always show what it is** — name + description, never just a command path
|
|
30
30
|
2. **Pull context from source** — ROADMAP.md for phases, PLAN.md `<objective>` for plans
|
|
31
31
|
3. **Command in inline code** — backticks, easy to copy-paste, renders as clickable link
|
|
32
|
-
4.
|
|
32
|
+
4. **New session reminder** — always include, keeps it concise but explains why
|
|
33
33
|
5. **"Also available" not "Other options"** — sounds more app-like
|
|
34
34
|
6. **Visual separators** — `---` above and below to make it stand out
|
|
35
35
|
|
|
@@ -46,7 +46,7 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
46
46
|
|
|
47
47
|
`$gsd-execute-phase 2`
|
|
48
48
|
|
|
49
|
-
<sub
|
|
49
|
+
<sub>start a new session first → fresh context window</sub>
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
@@ -71,7 +71,7 @@ Add note that this is the last plan and what comes after:
|
|
|
71
71
|
|
|
72
72
|
`$gsd-execute-phase 2`
|
|
73
73
|
|
|
74
|
-
<sub
|
|
74
|
+
<sub>start a new session first → fresh context window</sub>
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
|
@@ -93,7 +93,7 @@ Add note that this is the last plan and what comes after:
|
|
|
93
93
|
|
|
94
94
|
`$gsd-plan-phase 2`
|
|
95
95
|
|
|
96
|
-
<sub
|
|
96
|
+
<sub>start a new session first → fresh context window</sub>
|
|
97
97
|
|
|
98
98
|
---
|
|
99
99
|
|
|
@@ -122,7 +122,7 @@ Show completion status before next action:
|
|
|
122
122
|
|
|
123
123
|
`$gsd-plan-phase 3`
|
|
124
124
|
|
|
125
|
-
<sub
|
|
125
|
+
<sub>start a new session first → fresh context window</sub>
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
@@ -151,7 +151,7 @@ When there's no clear primary action:
|
|
|
151
151
|
|
|
152
152
|
**To research unknowns:** `$gsd-research-phase 3`
|
|
153
153
|
|
|
154
|
-
<sub
|
|
154
|
+
<sub>start a new session first → fresh context window</sub>
|
|
155
155
|
|
|
156
156
|
---
|
|
157
157
|
```
|
|
@@ -171,7 +171,7 @@ All 4 phases shipped
|
|
|
171
171
|
|
|
172
172
|
`$gsd-new-milestone`
|
|
173
173
|
|
|
174
|
-
<sub
|
|
174
|
+
<sub>start a new session first → fresh context window</sub>
|
|
175
175
|
|
|
176
176
|
---
|
|
177
177
|
```
|
|
@@ -182,6 +182,7 @@ All 4 phases shipped
|
|
|
182
182
|
|
|
183
183
|
```markdown
|
|
184
184
|
### Phase 2: Authentication
|
|
185
|
+
|
|
185
186
|
**Goal**: JWT login flow with refresh tokens
|
|
186
187
|
```
|
|
187
188
|
|
|
@@ -191,6 +192,7 @@ Extract: `**Phase 2: Authentication** — JWT login flow with refresh tokens`
|
|
|
191
192
|
|
|
192
193
|
```markdown
|
|
193
194
|
Plans:
|
|
195
|
+
|
|
194
196
|
- [ ] 02-03: Add refresh token rotation
|
|
195
197
|
```
|
|
196
198
|
|
|
@@ -213,18 +215,18 @@ Extract: `**02-03: Refresh Token Rotation** — Add /api/auth/refresh with slidi
|
|
|
213
215
|
```
|
|
214
216
|
## To Continue
|
|
215
217
|
|
|
216
|
-
|
|
218
|
+
Start a new session, then paste:
|
|
217
219
|
$gsd-execute-phase 2
|
|
218
220
|
```
|
|
219
221
|
|
|
220
222
|
User has no idea what 02-03 is about.
|
|
221
223
|
|
|
222
|
-
### Don't: Missing
|
|
224
|
+
### Don't: Missing session reset explanation
|
|
223
225
|
|
|
224
226
|
```
|
|
225
227
|
`$gsd-plan-phase 3`
|
|
226
228
|
|
|
227
|
-
|
|
229
|
+
Start a new session first.
|
|
228
230
|
```
|
|
229
231
|
|
|
230
232
|
Doesn't explain why. User might skip it.
|
|
@@ -241,9 +243,13 @@ Sounds like an afterthought. Use "Also available:" instead.
|
|
|
241
243
|
### Don't: Fenced code blocks for commands
|
|
242
244
|
|
|
243
245
|
```
|
|
246
|
+
|
|
244
247
|
```
|
|
248
|
+
|
|
245
249
|
$gsd-plan-phase 3
|
|
250
|
+
|
|
246
251
|
```
|
|
252
|
+
|
|
247
253
|
```
|
|
248
254
|
|
|
249
255
|
Fenced blocks inside templates create nesting ambiguity. Use inline backticks instead.
|
|
@@ -110,7 +110,7 @@ Always at end of major completions.
|
|
|
110
110
|
|
|
111
111
|
`{copy-paste command}`
|
|
112
112
|
|
|
113
|
-
<sub
|
|
113
|
+
<sub>start a new session first → fresh context window</sub>
|
|
114
114
|
|
|
115
115
|
───────────────────────────────────────────────────────────────
|
|
116
116
|
|
|
@@ -32,7 +32,7 @@ reproduction: [how to trigger]
|
|
|
32
32
|
started: [when it broke / always broken]
|
|
33
33
|
|
|
34
34
|
## Eliminated
|
|
35
|
-
<!-- APPEND only - prevents re-investigating after
|
|
35
|
+
<!-- APPEND only - prevents re-investigating after a session reset -->
|
|
36
36
|
|
|
37
37
|
- hypothesis: [theory that was wrong]
|
|
38
38
|
evidence: [what disproved it]
|
|
@@ -68,7 +68,7 @@ files_changed: []
|
|
|
68
68
|
**Current Focus:**
|
|
69
69
|
- OVERWRITE entirely on each update
|
|
70
70
|
- Always reflects what Codex is doing RIGHT NOW
|
|
71
|
-
- If Codex reads this after
|
|
71
|
+
- If Codex reads this after a session reset, it knows exactly where to resume
|
|
72
72
|
- Fields: hypothesis, test, expecting, next_action
|
|
73
73
|
|
|
74
74
|
**Symptoms:**
|
|
@@ -81,7 +81,7 @@ files_changed: []
|
|
|
81
81
|
- APPEND only - never remove entries
|
|
82
82
|
- Prevents re-investigating dead ends after context reset
|
|
83
83
|
- Each entry: hypothesis, evidence that disproved it, timestamp
|
|
84
|
-
- Critical for efficiency across
|
|
84
|
+
- Critical for efficiency across session boundaries
|
|
85
85
|
|
|
86
86
|
**Evidence:**
|
|
87
87
|
- APPEND only - never remove entries
|
|
@@ -140,7 +140,7 @@ files_changed: []
|
|
|
140
140
|
|
|
141
141
|
<resume_behavior>
|
|
142
142
|
|
|
143
|
-
When Codex reads this file after
|
|
143
|
+
When Codex reads this file after a session reset:
|
|
144
144
|
|
|
145
145
|
1. Parse frontmatter → know status
|
|
146
146
|
2. Read Current Focus → know exactly what was happening
|
|
@@ -156,7 +156,7 @@ skipped: [N]
|
|
|
156
156
|
- Commit file
|
|
157
157
|
- Present summary with next steps
|
|
158
158
|
|
|
159
|
-
**Resume after
|
|
159
|
+
**Resume after session reset:**
|
|
160
160
|
1. Read frontmatter → know phase and status
|
|
161
161
|
2. Read Current Test → know where we are
|
|
162
162
|
3. Find first [pending] result → continue from there
|
|
@@ -198,7 +198,7 @@ All requirements covered. Cross-phase integration verified. E2E flows complete.
|
|
|
198
198
|
|
|
199
199
|
$gsd-complete-milestone {version}
|
|
200
200
|
|
|
201
|
-
<sub
|
|
201
|
+
<sub>start a new session first → fresh context window</sub>
|
|
202
202
|
|
|
203
203
|
───────────────────────────────────────────────────────────────
|
|
204
204
|
|
|
@@ -235,7 +235,7 @@ $gsd-complete-milestone {version}
|
|
|
235
235
|
|
|
236
236
|
$gsd-plan-milestone-gaps
|
|
237
237
|
|
|
238
|
-
<sub
|
|
238
|
+
<sub>start a new session first → fresh context window</sub>
|
|
239
239
|
|
|
240
240
|
───────────────────────────────────────────────────────────────
|
|
241
241
|
|
|
@@ -277,7 +277,7 @@ $gsd-complete-milestone {version}
|
|
|
277
277
|
|
|
278
278
|
$gsd-plan-milestone-gaps
|
|
279
279
|
|
|
280
|
-
<sub
|
|
280
|
+
<sub>start a new session first → fresh context window</sub>
|
|
281
281
|
|
|
282
282
|
───────────────────────────────────────────────────────────────
|
|
283
283
|
</offer_next>
|
|
@@ -399,7 +399,7 @@ Created: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
|
|
399
399
|
|
|
400
400
|
`$gsd-plan-phase ${PHASE}`
|
|
401
401
|
|
|
402
|
-
<sub
|
|
402
|
+
<sub>start a new session first → fresh context window</sub>
|
|
403
403
|
|
|
404
404
|
---
|
|
405
405
|
|
|
@@ -505,7 +505,7 @@ Task(
|
|
|
505
505
|
Auto-advance pipeline finished: discuss → plan → execute
|
|
506
506
|
|
|
507
507
|
Next: $gsd-discuss-phase ${NEXT_PHASE} --auto
|
|
508
|
-
<sub
|
|
508
|
+
<sub>start a new session first → fresh context window</sub>
|
|
509
509
|
```
|
|
510
510
|
- **PLANNING COMPLETE** → Planning done, execution didn't complete:
|
|
511
511
|
```
|
|
@@ -349,7 +349,7 @@ All automated checks passed. {N} items need human testing:
|
|
|
349
349
|
|
|
350
350
|
`$gsd-plan-phase {X} --gaps`
|
|
351
351
|
|
|
352
|
-
<sub
|
|
352
|
+
<sub>start a new session first → fresh context window</sub>
|
|
353
353
|
|
|
354
354
|
Also: `cat {phase_dir}/{phase_num}-VERIFICATION.md` — full report
|
|
355
355
|
Also: `$gsd-verify-work {X}` — manual testing first
|
|
@@ -427,7 +427,7 @@ ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null | wc -l
|
|
|
427
427
|
| summaries = plans, current < highest phase | **B: Phase done** | Show completion, suggest `$gsd-plan-phase {Z+1}` + `$gsd-verify-work {Z}` + `$gsd-discuss-phase {Z+1}` |
|
|
428
428
|
| summaries = plans, current = highest phase | **C: Milestone done** | Show banner, suggest `$gsd-complete-milestone` + `$gsd-verify-work` + `$gsd-add-phase` |
|
|
429
429
|
|
|
430
|
-
All routes:
|
|
430
|
+
All routes: start a new session first for fresh context.
|
|
431
431
|
</step>
|
|
432
432
|
|
|
433
433
|
</process>
|
|
@@ -33,12 +33,14 @@ $gsd-new-project → $gsd-plan-phase → $gsd-execute-phase → repeat
|
|
|
33
33
|
Initialize new project through unified flow.
|
|
34
34
|
|
|
35
35
|
One command takes you from idea to ready-for-planning:
|
|
36
|
+
|
|
36
37
|
- Deep questioning to understand what you're building
|
|
37
38
|
- Optional domain research (spawns 4 parallel researcher agents)
|
|
38
39
|
- Requirements definition with v1/v2/out-of-scope scoping
|
|
39
40
|
- Roadmap creation with phase breakdown and success criteria
|
|
40
41
|
|
|
41
42
|
Creates all `.planning/` artifacts:
|
|
43
|
+
|
|
42
44
|
- `PROJECT.md` — vision and requirements
|
|
43
45
|
- `config.json` — workflow mode (interactive/yolo)
|
|
44
46
|
- `research/` — domain research (if selected)
|
|
@@ -119,6 +121,7 @@ Usage: `$gsd-execute-phase 5`
|
|
|
119
121
|
Execute small, ad-hoc tasks with GSD guarantees but skip optional agents.
|
|
120
122
|
|
|
121
123
|
Quick mode uses the same system with a shorter path:
|
|
124
|
+
|
|
122
125
|
- Spawns planner + executor (skips researcher, checker, verifier)
|
|
123
126
|
- Quick tasks live in `.planning/quick/` separate from planned phases
|
|
124
127
|
- Updates STATE.md tracking (not ROADMAP.md)
|
|
@@ -226,7 +229,7 @@ Systematic debugging with persistent state across context resets.
|
|
|
226
229
|
- Gathers symptoms through adaptive questioning
|
|
227
230
|
- Creates `.planning/debug/[slug].md` to track investigation
|
|
228
231
|
- Investigates using scientific method (evidence → hypothesis → test)
|
|
229
|
-
- Survives
|
|
232
|
+
- Survives session resets — run `$gsd-debug` with no args to resume
|
|
230
233
|
- Archives resolved issues to `.planning/debug/resolved/`
|
|
231
234
|
|
|
232
235
|
Usage: `$gsd-debug "login button doesn't work"`
|
|
@@ -406,19 +409,23 @@ Change anytime by editing `.planning/config.json`
|
|
|
406
409
|
Configure how planning artifacts are managed in `.planning/config.json`:
|
|
407
410
|
|
|
408
411
|
**`planning.commit_docs`** (default: `true`)
|
|
412
|
+
|
|
409
413
|
- `true`: Planning artifacts committed to git (standard workflow)
|
|
410
414
|
- `false`: Planning artifacts kept local-only, not committed
|
|
411
415
|
|
|
412
416
|
When `commit_docs: false`:
|
|
417
|
+
|
|
413
418
|
- Add `.planning/` to your `.gitignore`
|
|
414
419
|
- Useful for OSS contributions, client projects, or keeping planning private
|
|
415
420
|
- All planning files still work normally, just not tracked in git
|
|
416
421
|
|
|
417
422
|
**`planning.search_gitignored`** (default: `false`)
|
|
423
|
+
|
|
418
424
|
- `true`: Add `--no-ignore` to broad ripgrep searches
|
|
419
425
|
- Only needed when `.planning/` is gitignored and you want project-wide searches to include it
|
|
420
426
|
|
|
421
427
|
Example config:
|
|
428
|
+
|
|
422
429
|
```json
|
|
423
430
|
{
|
|
424
431
|
"planning": {
|
|
@@ -434,9 +441,9 @@ Example config:
|
|
|
434
441
|
|
|
435
442
|
```
|
|
436
443
|
$gsd-new-project # Unified flow: questioning → research → requirements → roadmap
|
|
437
|
-
|
|
444
|
+
# start a new session
|
|
438
445
|
$gsd-plan-phase 1 # Create plans for first phase
|
|
439
|
-
|
|
446
|
+
# start a new session
|
|
440
447
|
$gsd-execute-phase 1 # Execute all plans in phase
|
|
441
448
|
```
|
|
442
449
|
|
|
@@ -458,7 +465,7 @@ $gsd-execute-phase 5.1
|
|
|
458
465
|
|
|
459
466
|
```
|
|
460
467
|
$gsd-complete-milestone 1.0.0
|
|
461
|
-
|
|
468
|
+
# start a new session
|
|
462
469
|
$gsd-new-milestone # Start next milestone (questioning → research → requirements → roadmap)
|
|
463
470
|
```
|
|
464
471
|
|
|
@@ -476,7 +483,7 @@ $gsd-check-todos api # Filter by area
|
|
|
476
483
|
```
|
|
477
484
|
$gsd-debug "form submission fails silently" # Start debug session
|
|
478
485
|
# ... investigation happens, context fills up ...
|
|
479
|
-
|
|
486
|
+
# start a new session
|
|
480
487
|
$gsd-debug # Resume from where you left off
|
|
481
488
|
```
|
|
482
489
|
|
|
@@ -486,4 +493,4 @@ $gsd-debug # Resume from where you left off
|
|
|
486
493
|
- Read `.planning/STATE.md` for current context
|
|
487
494
|
- Check `.planning/ROADMAP.md` for phase status
|
|
488
495
|
- Run `$gsd-progress` to check where you're up to
|
|
489
|
-
</reference>
|
|
496
|
+
</reference>
|
|
@@ -357,7 +357,7 @@ node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs: create milestone v[X
|
|
|
357
357
|
|
|
358
358
|
`$gsd-discuss-phase [N]` — gather context and clarify approach
|
|
359
359
|
|
|
360
|
-
<sub
|
|
360
|
+
<sub>start a new session first → fresh context window</sub>
|
|
361
361
|
|
|
362
362
|
Also: `$gsd-plan-phase [N]` — skip discussion, plan directly
|
|
363
363
|
```
|
|
@@ -1063,7 +1063,7 @@ Exit skill and invoke SlashCommand("$gsd-discuss-phase 1 --auto")
|
|
|
1063
1063
|
|
|
1064
1064
|
$gsd-discuss-phase 1 — gather context and clarify approach
|
|
1065
1065
|
|
|
1066
|
-
<sub
|
|
1066
|
+
<sub>start a new session first → fresh context window</sub>
|
|
1067
1067
|
|
|
1068
1068
|
---
|
|
1069
1069
|
|
|
@@ -450,7 +450,7 @@ Verification: {Passed | Passed with override | Skipped}
|
|
|
450
450
|
|
|
451
451
|
$gsd-execute-phase {X}
|
|
452
452
|
|
|
453
|
-
<sub
|
|
453
|
+
<sub>start a new session first → fresh context window</sub>
|
|
454
454
|
|
|
455
455
|
───────────────────────────────────────────────────────────────
|
|
456
456
|
|
|
@@ -181,7 +181,7 @@ Read its `<objective>` section.
|
|
|
181
181
|
|
|
182
182
|
`$gsd-execute-phase {phase}`
|
|
183
183
|
|
|
184
|
-
<sub
|
|
184
|
+
<sub>start a new session first → fresh context window</sub>
|
|
185
185
|
|
|
186
186
|
---
|
|
187
187
|
```
|
|
@@ -204,7 +204,7 @@ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
|
|
|
204
204
|
|
|
205
205
|
`$gsd-plan-phase {phase-number}`
|
|
206
206
|
|
|
207
|
-
<sub
|
|
207
|
+
<sub>start a new session first → fresh context window</sub>
|
|
208
208
|
|
|
209
209
|
---
|
|
210
210
|
```
|
|
@@ -220,7 +220,7 @@ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
|
|
|
220
220
|
|
|
221
221
|
`$gsd-discuss-phase {phase}` — gather context and clarify approach
|
|
222
222
|
|
|
223
|
-
<sub
|
|
223
|
+
<sub>start a new session first → fresh context window</sub>
|
|
224
224
|
|
|
225
225
|
---
|
|
226
226
|
|
|
@@ -246,7 +246,7 @@ UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
|
|
|
246
246
|
|
|
247
247
|
`$gsd-plan-phase {phase} --gaps`
|
|
248
248
|
|
|
249
|
-
<sub
|
|
249
|
+
<sub>start a new session first → fresh context window</sub>
|
|
250
250
|
|
|
251
251
|
---
|
|
252
252
|
|
|
@@ -293,7 +293,7 @@ Read ROADMAP.md to get the next phase's name and goal.
|
|
|
293
293
|
|
|
294
294
|
`$gsd-discuss-phase {Z+1}` — gather context and clarify approach
|
|
295
295
|
|
|
296
|
-
<sub
|
|
296
|
+
<sub>start a new session first → fresh context window</sub>
|
|
297
297
|
|
|
298
298
|
---
|
|
299
299
|
|
|
@@ -321,7 +321,7 @@ All {N} phases finished!
|
|
|
321
321
|
|
|
322
322
|
`$gsd-complete-milestone`
|
|
323
323
|
|
|
324
|
-
<sub
|
|
324
|
+
<sub>start a new session first → fresh context window</sub>
|
|
325
325
|
|
|
326
326
|
---
|
|
327
327
|
|
|
@@ -352,7 +352,7 @@ Ready to plan the next milestone.
|
|
|
352
352
|
|
|
353
353
|
`$gsd-new-milestone`
|
|
354
354
|
|
|
355
|
-
<sub
|
|
355
|
+
<sub>start a new session first → fresh context window</sub>
|
|
356
356
|
|
|
357
357
|
---
|
|
358
358
|
```
|
|
@@ -217,7 +217,7 @@ Based on user selection, route to appropriate workflow:
|
|
|
217
217
|
|
|
218
218
|
`$gsd-execute-phase {phase}`
|
|
219
219
|
|
|
220
|
-
<sub
|
|
220
|
+
<sub>start a new session first → fresh context window</sub>
|
|
221
221
|
|
|
222
222
|
---
|
|
223
223
|
```
|
|
@@ -231,7 +231,7 @@ Based on user selection, route to appropriate workflow:
|
|
|
231
231
|
|
|
232
232
|
`$gsd-plan-phase [phase-number]`
|
|
233
233
|
|
|
234
|
-
<sub
|
|
234
|
+
<sub>start a new session first → fresh context window</sub>
|
|
235
235
|
|
|
236
236
|
---
|
|
237
237
|
|
|
@@ -80,7 +80,7 @@ AskUserQuestion([
|
|
|
80
80
|
header: "Auto",
|
|
81
81
|
multiSelect: false,
|
|
82
82
|
options: [
|
|
83
|
-
{ label: "No (Recommended)", description: "Manual
|
|
83
|
+
{ label: "No (Recommended)", description: "Manual new session + paste between stages" },
|
|
84
84
|
{ label: "Yes", description: "Chain stages via Task() subagents (same isolation)" }
|
|
85
85
|
]
|
|
86
86
|
},
|
|
@@ -409,7 +409,7 @@ Exit skill and invoke SlashCommand("$gsd-discuss-phase [X+1] --auto")
|
|
|
409
409
|
|
|
410
410
|
`$gsd-discuss-phase [X+1]` — gather context and clarify approach
|
|
411
411
|
|
|
412
|
-
<sub
|
|
412
|
+
<sub>start a new session first → fresh context window</sub>
|
|
413
413
|
|
|
414
414
|
---
|
|
415
415
|
|
|
@@ -434,7 +434,7 @@ Exit skill and invoke SlashCommand("$gsd-discuss-phase [X+1] --auto")
|
|
|
434
434
|
|
|
435
435
|
`$gsd-plan-phase [X+1]`
|
|
436
436
|
|
|
437
|
-
<sub
|
|
437
|
+
<sub>start a new session first → fresh context window</sub>
|
|
438
438
|
|
|
439
439
|
---
|
|
440
440
|
|
|
@@ -485,7 +485,7 @@ Exit skill and invoke SlashCommand("$gsd-complete-milestone {version}")
|
|
|
485
485
|
|
|
486
486
|
`$gsd-complete-milestone {version}`
|
|
487
487
|
|
|
488
|
-
<sub
|
|
488
|
+
<sub>start a new session first → fresh context window</sub>
|
|
489
489
|
|
|
490
490
|
---
|
|
491
491
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Validate built features through conversational testing with persistent state. Creates UAT.md that tracks test progress, survives
|
|
2
|
+
Validate built features through conversational testing with persistent state. Creates UAT.md that tracks test progress, survives session resets, and feeds gaps into $gsd-plan-phase --gaps.
|
|
3
3
|
|
|
4
4
|
User tests, Codex records. One test at a time. Plain text responses.
|
|
5
5
|
</purpose>
|
|
@@ -511,7 +511,7 @@ Plans verified and ready for execution.
|
|
|
511
511
|
|
|
512
512
|
**Execute fixes** — run fix plans
|
|
513
513
|
|
|
514
|
-
|
|
514
|
+
start a new session, then `$gsd-execute-phase {phase} --gaps-only`
|
|
515
515
|
|
|
516
516
|
───────────────────────────────────────────────────────────────
|
|
517
517
|
```
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undeemed/get-shit-done-codex",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "A meta-prompting, context engineering and spec-driven development system for OpenAI Codex (CLI and Desktop). Fork of get-shit-done by TÂCHES, adapted for Codex
|
|
3
|
+
"version": "1.23.0",
|
|
4
|
+
"description": "A meta-prompting, context engineering and spec-driven development system for OpenAI Codex (CLI and Desktop). Fork of get-shit-done by TÂCHES, adapted for Codex.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"get-shit-done-codex": "bin/install.js"
|
|
7
7
|
},
|