@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.
@@ -1,4 +1,4 @@
1
- :schema https://developers.openai.com/codex/config-schema.json
1
+ #:schema https://developers.openai.com/codex/config-schema.json
2
2
 
3
3
  # Project-scoped Codex config for get-shit-done-codex.
4
4
  # Loaded only when this project is trusted.
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
- > As of February 25, 2026, Codex is supported upstream. This fork remains focused on Codex-specific UX and compatibility with extra goodies.
8
+ > Codex is now supported upstream. This fork remains focused on Codex-specific UX, compatibility, and cutting-edge experimental features.
9
9
 
10
+ [![CI](https://github.com/undeemed/get-shit-done-codex/actions/workflows/ci.yml/badge.svg)](https://github.com/undeemed/get-shit-done-codex/actions/workflows/ci.yml)
10
11
  [![npm version](https://img.shields.io/npm/v/%40undeemed%2Fget-shit-done-codex?style=flat-square)](https://www.npmjs.com/package/@undeemed/get-shit-done-codex)
11
12
  [![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)](LICENSE)
12
13
  ![npm Downloads](https://img.shields.io/npm/dt/@undeemed/get-shit-done-codex?style=flat-square)
@@ -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
@@ -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 /clear:
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 "/clear - run $gsd-debug to resume" if context filling up.
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 /clear
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
@@ -1211,7 +1211,7 @@ Return structured planning outcome to orchestrator.
1211
1211
 
1212
1212
  Execute: `$gsd-execute-phase {phase}`
1213
1213
 
1214
- <sub>`/clear` first - fresh context window</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
- const codexDir = isGlobal ? path.join(os.homedir(), '.codex') : process.cwd();
362
- return {
363
- codexDir,
364
- locationLabel: isGlobal ? '~/.codex' : '.',
365
- pathPrefix: isGlobal ? '~/.codex/' : './',
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
- if (hasGlobal && hasLocal) {
618
- console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
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 (hasGlobal) {
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>`/clear` first → fresh context window</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. **`/clear` explanation** — always include, keeps it concise but explains why
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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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
- Run `/clear`, then paste:
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 /clear explanation
224
+ ### Don't: Missing session reset explanation
223
225
 
224
226
  ```
225
227
  `$gsd-plan-phase 3`
226
228
 
227
- Run /clear first.
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>`/clear` first → fresh context window</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 /clear -->
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 /clear, it knows exactly where to resume
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 /clear boundaries
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 /clear:
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 /clear:**
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
@@ -88,7 +88,7 @@ Roadmap updated: .planning/ROADMAP.md
88
88
 
89
89
  `$gsd-plan-phase {N}`
90
90
 
91
- <sub>`/clear` first → fresh context window</sub>
91
+ <sub>start a new session first → fresh context window</sub>
92
92
 
93
93
  ---
94
94
 
@@ -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>/clear first → fresh context window</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>/clear first → fresh context window</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>/clear first → fresh context window</sub>
280
+ <sub>start a new session first → fresh context window</sub>
281
281
 
282
282
  ───────────────────────────────────────────────────────────────
283
283
  </offer_next>
@@ -731,7 +731,7 @@ Tag: v[X.Y]
731
731
 
732
732
  `$gsd-new-milestone`
733
733
 
734
- <sub>`/clear` first → fresh context window</sub>
734
+ <sub>start a new session first → fresh context window</sub>
735
735
 
736
736
  ---
737
737
 
@@ -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>`/clear` first → fresh context window</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>/clear first → fresh context window</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>`/clear` first → fresh context window</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: `/clear` first for fresh context.
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 `/clear` — run `$gsd-debug` with no args to resume
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
- /clear
444
+ # start a new session
438
445
  $gsd-plan-phase 1 # Create plans for first phase
439
- /clear
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
- /clear
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
- /clear
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>
@@ -94,7 +94,7 @@ Project state updated: .planning/STATE.md
94
94
 
95
95
  `$gsd-plan-phase {decimal_phase}`
96
96
 
97
- <sub>`/clear` first -> fresh context window</sub>
97
+ <sub>start a new session first fresh context window</sub>
98
98
 
99
99
  ---
100
100
 
@@ -287,7 +287,7 @@ Created .planning/codebase/:
287
287
 
288
288
  `$gsd-new-project`
289
289
 
290
- <sub>`/clear` first → fresh context window</sub>
290
+ <sub>start a new session first → fresh context window</sub>
291
291
 
292
292
  ---
293
293
 
@@ -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>`/clear` first → fresh context window</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>/clear first → fresh context window</sub>
1066
+ <sub>start a new session first → fresh context window</sub>
1067
1067
 
1068
1068
  ---
1069
1069
 
@@ -166,7 +166,7 @@ node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs(roadmap): add gap clo
166
166
 
167
167
  `$gsd-plan-phase {N}`
168
168
 
169
- <sub>`/clear` first → fresh context window</sub>
169
+ <sub>start a new session first → fresh context window</sub>
170
170
 
171
171
  ---
172
172
 
@@ -450,7 +450,7 @@ Verification: {Passed | Passed with override | Skipped}
450
450
 
451
451
  $gsd-execute-phase {X}
452
452
 
453
- <sub>/clear first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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 /clear + paste between stages" },
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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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>`/clear` first → fresh context window</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 /clear, and feeds gaps into $gsd-plan-phase --gaps.
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
- `/clear` then `$gsd-execute-phase {phase} --gaps-only`
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.22.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 by undeemed.",
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
  },