gsd-codex-cli 1.20.0 → 1.20.2
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/skills/get-shit-done-codex/SKILL.md +9 -8
- package/.codex/skills/get-shit-done-codex/references/compat.md +4 -3
- package/README.md +89 -690
- package/bin/install-codex.js +18 -15
- package/get-shit-done/bin/gsd-tools.cjs +29 -8
- package/get-shit-done/bin/gsd-tools.test.cjs +59 -9
- package/hooks/dist/gsd-check-update.js +9 -4
- package/package.json +15 -15
|
@@ -25,14 +25,15 @@ Use this skill to run `gsd-*` prompts under `Codex` while preserving upstream GS
|
|
|
25
25
|
- Replace Bash/JQ patterns with PowerShell and `ConvertFrom-Json`.
|
|
26
26
|
- Replace AskUserQuestion interactions with direct user prompts in chat.
|
|
27
27
|
|
|
28
|
-
## Subagent lifecycle (required)
|
|
29
|
-
- Spawn only when the upstream workflow explicitly defines a `Task(...)` role.
|
|
30
|
-
- For each spawned subagent:
|
|
31
|
-
- Start with `spawn_agent` and provide the role source from `.claude/agents/gsd-*.md`.
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
28
|
+
## Subagent lifecycle (required)
|
|
29
|
+
- Spawn only when the upstream workflow explicitly defines a `Task(...)` role.
|
|
30
|
+
- For each spawned subagent:
|
|
31
|
+
- Start with `spawn_agent` and provide the role source from `.claude/agents/gsd-*.md`.
|
|
32
|
+
- Do not set `agent_type` to a GSD role. Codex only accepts `default`, `explorer`, or `worker` (or omit `agent_type`).
|
|
33
|
+
- Wait for completion before proceeding: `wait`.
|
|
34
|
+
- Explicitly close the agent after it finishes (`close_agent`) to release resources.
|
|
35
|
+
- Keep prompt-level sequencing intact; do not continue to subsequent steps until waiting + closure are complete.
|
|
36
|
+
- If an agent fails or exceeds retry policy, stop that phase of workflow and surface a clear remediation step.
|
|
36
37
|
|
|
37
38
|
## Required GSD roles (must map by name)
|
|
38
39
|
- `gsd-project-researcher`
|
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
- Keep `--raw` when upstream workflow uses it.
|
|
15
15
|
- Parse JSON by `ConvertFrom-Json`.
|
|
16
16
|
|
|
17
|
-
## Subagent mapping
|
|
18
|
-
- `subagent_type=gsd-*` maps to equivalent role contract in `.claude/agents/gsd-*.md`.
|
|
19
|
-
- Unspecified `subagent_type` values default to command-context Codex agent behavior.
|
|
17
|
+
## Subagent mapping
|
|
18
|
+
- `subagent_type=gsd-*` maps to equivalent role contract in `.claude/agents/gsd-*.md`.
|
|
19
|
+
- Unspecified `subagent_type` values default to command-context Codex agent behavior.
|
|
20
|
+
- Do not pass `agent_type=gsd-*` to `spawn_agent`. Codex only accepts `default`, `explorer`, or `worker` (or omit `agent_type`).
|
|
20
21
|
|
|
21
22
|
## Required GSD subagents
|
|
22
23
|
- `gsd-project-researcher`
|
package/README.md
CHANGED
|
@@ -1,690 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
The
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
npx get-shit-done-cc@latest
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
<details>
|
|
94
|
-
<summary><strong>Non-interactive Install (Docker, CI, Scripts)</strong></summary>
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
# Claude Code
|
|
98
|
-
npx get-shit-done-cc --claude --global # Install to ~/.claude/
|
|
99
|
-
npx get-shit-done-cc --claude --local # Install to ./.claude/
|
|
100
|
-
|
|
101
|
-
# OpenCode (open source, free models)
|
|
102
|
-
npx get-shit-done-cc --opencode --global # Install to ~/.config/opencode/
|
|
103
|
-
|
|
104
|
-
# Gemini CLI
|
|
105
|
-
npx get-shit-done-cc --gemini --global # Install to ~/.gemini/
|
|
106
|
-
|
|
107
|
-
# All runtimes
|
|
108
|
-
npx get-shit-done-cc --all --global # Install to all directories
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Use `--global` (`-g`) or `--local` (`-l`) to skip the location prompt.
|
|
112
|
-
Use `--claude`, `--opencode`, `--gemini`, or `--all` to skip the runtime prompt.
|
|
113
|
-
|
|
114
|
-
</details>
|
|
115
|
-
|
|
116
|
-
<details>
|
|
117
|
-
<summary><strong>Development Installation</strong></summary>
|
|
118
|
-
|
|
119
|
-
Clone the repository and run the installer locally:
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
git clone https://github.com/glittercowboy/get-shit-done.git
|
|
123
|
-
cd get-shit-done
|
|
124
|
-
node bin/install.js --claude --local
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Installs to `./.claude/` for testing modifications before contributing.
|
|
128
|
-
|
|
129
|
-
</details>
|
|
130
|
-
|
|
131
|
-
### Recommended: Skip Permissions Mode
|
|
132
|
-
|
|
133
|
-
GSD is designed for frictionless automation. Run Claude Code with:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
claude --dangerously-skip-permissions
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
> [!TIP]
|
|
140
|
-
> This is how GSD is intended to be used — stopping to approve `date` and `git commit` 50 times defeats the purpose.
|
|
141
|
-
|
|
142
|
-
<details>
|
|
143
|
-
<summary><strong>Alternative: Granular Permissions</strong></summary>
|
|
144
|
-
|
|
145
|
-
If you prefer not to use that flag, add this to your project's `.claude/settings.json`:
|
|
146
|
-
|
|
147
|
-
```json
|
|
148
|
-
{
|
|
149
|
-
"permissions": {
|
|
150
|
-
"allow": [
|
|
151
|
-
"Bash(date:*)",
|
|
152
|
-
"Bash(echo:*)",
|
|
153
|
-
"Bash(cat:*)",
|
|
154
|
-
"Bash(ls:*)",
|
|
155
|
-
"Bash(mkdir:*)",
|
|
156
|
-
"Bash(wc:*)",
|
|
157
|
-
"Bash(head:*)",
|
|
158
|
-
"Bash(tail:*)",
|
|
159
|
-
"Bash(sort:*)",
|
|
160
|
-
"Bash(grep:*)",
|
|
161
|
-
"Bash(tr:*)",
|
|
162
|
-
"Bash(git add:*)",
|
|
163
|
-
"Bash(git commit:*)",
|
|
164
|
-
"Bash(git status:*)",
|
|
165
|
-
"Bash(git log:*)",
|
|
166
|
-
"Bash(git diff:*)",
|
|
167
|
-
"Bash(git tag:*)"
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
</details>
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## How It Works
|
|
178
|
-
|
|
179
|
-
> **Already have code?** Run `/gsd:map-codebase` first. It spawns parallel agents to analyze your stack, architecture, conventions, and concerns. Then `/gsd:new-project` knows your codebase — questions focus on what you're adding, and planning automatically loads your patterns.
|
|
180
|
-
|
|
181
|
-
### 1. Initialize Project
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
/gsd:new-project
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
One command, one flow. The system:
|
|
188
|
-
|
|
189
|
-
1. **Questions** — Asks until it understands your idea completely (goals, constraints, tech preferences, edge cases)
|
|
190
|
-
2. **Research** — Spawns parallel agents to investigate the domain (optional but recommended)
|
|
191
|
-
3. **Requirements** — Extracts what's v1, v2, and out of scope
|
|
192
|
-
4. **Roadmap** — Creates phases mapped to requirements
|
|
193
|
-
|
|
194
|
-
You approve the roadmap. Now you're ready to build.
|
|
195
|
-
|
|
196
|
-
**Creates:** `PROJECT.md`, `REQUIREMENTS.md`, `ROADMAP.md`, `STATE.md`, `.planning/research/`
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
### 2. Discuss Phase
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
/gsd:discuss-phase 1
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
**This is where you shape the implementation.**
|
|
207
|
-
|
|
208
|
-
Your roadmap has a sentence or two per phase. That's not enough context to build something the way *you* imagine it. This step captures your preferences before anything gets researched or planned.
|
|
209
|
-
|
|
210
|
-
The system analyzes the phase and identifies gray areas based on what's being built:
|
|
211
|
-
|
|
212
|
-
- **Visual features** → Layout, density, interactions, empty states
|
|
213
|
-
- **APIs/CLIs** → Response format, flags, error handling, verbosity
|
|
214
|
-
- **Content systems** → Structure, tone, depth, flow
|
|
215
|
-
- **Organization tasks** → Grouping criteria, naming, duplicates, exceptions
|
|
216
|
-
|
|
217
|
-
For each area you select, it asks until you're satisfied. The output — `CONTEXT.md` — feeds directly into the next two steps:
|
|
218
|
-
|
|
219
|
-
1. **Researcher reads it** — Knows what patterns to investigate ("user wants card layout" → research card component libraries)
|
|
220
|
-
2. **Planner reads it** — Knows what decisions are locked ("infinite scroll decided" → plan includes scroll handling)
|
|
221
|
-
|
|
222
|
-
The deeper you go here, the more the system builds what you actually want. Skip it and you get reasonable defaults. Use it and you get *your* vision.
|
|
223
|
-
|
|
224
|
-
**Creates:** `{phase}-CONTEXT.md`
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
### 3. Plan Phase
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
/gsd:plan-phase 1
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
The system:
|
|
235
|
-
|
|
236
|
-
1. **Researches** — Investigates how to implement this phase, guided by your CONTEXT.md decisions
|
|
237
|
-
2. **Plans** — Creates 2-3 atomic task plans with XML structure
|
|
238
|
-
3. **Verifies** — Checks plans against requirements, loops until they pass
|
|
239
|
-
|
|
240
|
-
Each plan is small enough to execute in a fresh context window. No degradation, no "I'll be more concise now."
|
|
241
|
-
|
|
242
|
-
**Creates:** `{phase}-RESEARCH.md`, `{phase}-{N}-PLAN.md`
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
### 4. Execute Phase
|
|
247
|
-
|
|
248
|
-
```
|
|
249
|
-
/gsd:execute-phase 1
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
The system:
|
|
253
|
-
|
|
254
|
-
1. **Runs plans in waves** — Parallel where possible, sequential when dependent
|
|
255
|
-
2. **Fresh context per plan** — 200k tokens purely for implementation, zero accumulated garbage
|
|
256
|
-
3. **Commits per task** — Every task gets its own atomic commit
|
|
257
|
-
4. **Verifies against goals** — Checks the codebase delivers what the phase promised
|
|
258
|
-
|
|
259
|
-
Walk away, come back to completed work with clean git history.
|
|
260
|
-
|
|
261
|
-
**Creates:** `{phase}-{N}-SUMMARY.md`, `{phase}-VERIFICATION.md`
|
|
262
|
-
|
|
263
|
-
**How Wave Execution Works:**
|
|
264
|
-
|
|
265
|
-
Plans are grouped into "waves" based on dependencies. Within each wave, plans run in parallel. Waves run sequentially.
|
|
266
|
-
|
|
267
|
-
```
|
|
268
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
269
|
-
│ PHASE EXECUTION │
|
|
270
|
-
├─────────────────────────────────────────────────────────────────────┤
|
|
271
|
-
│ │
|
|
272
|
-
│ WAVE 1 (parallel) WAVE 2 (parallel) WAVE 3 │
|
|
273
|
-
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
274
|
-
│ │ Plan 01 │ │ Plan 02 │ → │ Plan 03 │ │ Plan 04 │ → │ Plan 05 │ │
|
|
275
|
-
│ │ │ │ │ │ │ │ │ │ │ │
|
|
276
|
-
│ │ User │ │ Product │ │ Orders │ │ Cart │ │ Checkout│ │
|
|
277
|
-
│ │ Model │ │ Model │ │ API │ │ API │ │ UI │ │
|
|
278
|
-
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
|
|
279
|
-
│ │ │ ↑ ↑ ↑ │
|
|
280
|
-
│ └───────────┴──────────────┴───────────┘ │ │
|
|
281
|
-
│ Dependencies: Plan 03 needs Plan 01 │ │
|
|
282
|
-
│ Plan 04 needs Plan 02 │ │
|
|
283
|
-
│ Plan 05 needs Plans 03 + 04 │ │
|
|
284
|
-
│ │
|
|
285
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Why waves matter:**
|
|
289
|
-
- Independent plans → Same wave → Run in parallel
|
|
290
|
-
- Dependent plans → Later wave → Wait for dependencies
|
|
291
|
-
- File conflicts → Sequential plans or same plan
|
|
292
|
-
|
|
293
|
-
This is why "vertical slices" (Plan 01: User feature end-to-end) parallelize better than "horizontal layers" (Plan 01: All models, Plan 02: All APIs).
|
|
294
|
-
|
|
295
|
-
**Creates:** `{phase_num}-{N}-SUMMARY.md`, `{phase_num}-VERIFICATION.md`
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
### 5. Verify Work
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
/gsd:verify-work 1
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**This is where you confirm it actually works.**
|
|
306
|
-
|
|
307
|
-
Automated verification checks that code exists and tests pass. But does the feature *work* the way you expected? This is your chance to use it.
|
|
308
|
-
|
|
309
|
-
The system:
|
|
310
|
-
|
|
311
|
-
1. **Extracts testable deliverables** — What you should be able to do now
|
|
312
|
-
2. **Walks you through one at a time** — "Can you log in with email?" Yes/no, or describe what's wrong
|
|
313
|
-
3. **Diagnoses failures automatically** — Spawns debug agents to find root causes
|
|
314
|
-
4. **Creates verified fix plans** — Ready for immediate re-execution
|
|
315
|
-
|
|
316
|
-
If everything passes, you move on. If something's broken, you don't manually debug — you just run `/gsd:execute-phase` again with the fix plans it created.
|
|
317
|
-
|
|
318
|
-
**Creates:** `{phase}-UAT.md`, fix plans if issues found
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
### 6. Repeat → Complete → Next Milestone
|
|
323
|
-
|
|
324
|
-
```
|
|
325
|
-
/gsd:discuss-phase 2
|
|
326
|
-
/gsd:plan-phase 2
|
|
327
|
-
/gsd:execute-phase 2
|
|
328
|
-
/gsd:verify-work 2
|
|
329
|
-
...
|
|
330
|
-
/gsd:complete-milestone
|
|
331
|
-
/gsd:new-milestone
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
Loop **discuss → plan → execute → verify** until milestone complete.
|
|
335
|
-
|
|
336
|
-
Each phase gets your input (discuss), proper research (plan), clean execution (execute), and human verification (verify). Context stays fresh. Quality stays high.
|
|
337
|
-
|
|
338
|
-
When all phases are done, `/gsd:complete-milestone` archives the milestone and tags the release.
|
|
339
|
-
|
|
340
|
-
Then `/gsd:new-milestone` starts the next version — same flow as `new-project` but for your existing codebase. You describe what you want to build next, the system researches the domain, you scope requirements, and it creates a fresh roadmap. Each milestone is a clean cycle: define → build → ship.
|
|
341
|
-
|
|
342
|
-
---
|
|
343
|
-
|
|
344
|
-
### Quick Mode
|
|
345
|
-
|
|
346
|
-
```
|
|
347
|
-
/gsd:quick
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
**For ad-hoc tasks that don't need full planning.**
|
|
351
|
-
|
|
352
|
-
Quick mode gives you GSD guarantees (atomic commits, state tracking) with a faster path:
|
|
353
|
-
|
|
354
|
-
- **Same agents** — Planner + executor, same quality
|
|
355
|
-
- **Skips optional steps** — No research, no plan checker, no verifier
|
|
356
|
-
- **Separate tracking** — Lives in `.planning/quick/`, not phases
|
|
357
|
-
|
|
358
|
-
Use for: bug fixes, small features, config changes, one-off tasks.
|
|
359
|
-
|
|
360
|
-
```
|
|
361
|
-
/gsd:quick
|
|
362
|
-
> What do you want to do? "Add dark mode toggle to settings"
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
**Creates:** `.planning/quick/001-add-dark-mode-toggle/PLAN.md`, `SUMMARY.md`
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## Why It Works
|
|
370
|
-
|
|
371
|
-
### Context Engineering
|
|
372
|
-
|
|
373
|
-
Claude Code is incredibly powerful *if* you give it the context it needs. Most people don't.
|
|
374
|
-
|
|
375
|
-
GSD handles it for you:
|
|
376
|
-
|
|
377
|
-
| File | What it does |
|
|
378
|
-
|------|--------------|
|
|
379
|
-
| `PROJECT.md` | Project vision, always loaded |
|
|
380
|
-
| `research/` | Ecosystem knowledge (stack, features, architecture, pitfalls) |
|
|
381
|
-
| `REQUIREMENTS.md` | Scoped v1/v2 requirements with phase traceability |
|
|
382
|
-
| `ROADMAP.md` | Where you're going, what's done |
|
|
383
|
-
| `STATE.md` | Decisions, blockers, position — memory across sessions |
|
|
384
|
-
| `PLAN.md` | Atomic task with XML structure, verification steps |
|
|
385
|
-
| `SUMMARY.md` | What happened, what changed, committed to history |
|
|
386
|
-
| `todos/` | Captured ideas and tasks for later work |
|
|
387
|
-
|
|
388
|
-
Size limits based on where Claude's quality degrades. Stay under, get consistent excellence.
|
|
389
|
-
|
|
390
|
-
### XML Prompt Formatting
|
|
391
|
-
|
|
392
|
-
Every plan is structured XML optimized for Claude:
|
|
393
|
-
|
|
394
|
-
```xml
|
|
395
|
-
<task type="auto">
|
|
396
|
-
<name>Create login endpoint</name>
|
|
397
|
-
<files>src/app/api/auth/login/route.ts</files>
|
|
398
|
-
<action>
|
|
399
|
-
Use jose for JWT (not jsonwebtoken - CommonJS issues).
|
|
400
|
-
Validate credentials against users table.
|
|
401
|
-
Return httpOnly cookie on success.
|
|
402
|
-
</action>
|
|
403
|
-
<verify>curl -X POST localhost:3000/api/auth/login returns 200 + Set-Cookie</verify>
|
|
404
|
-
<done>Valid credentials return cookie, invalid return 401</done>
|
|
405
|
-
</task>
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
Precise instructions. No guessing. Verification built in.
|
|
409
|
-
|
|
410
|
-
### Multi-Agent Orchestration
|
|
411
|
-
|
|
412
|
-
Every stage uses the same pattern: a thin orchestrator spawns specialized agents, collects results, and routes to the next step.
|
|
413
|
-
|
|
414
|
-
| Stage | Orchestrator does | Agents do |
|
|
415
|
-
|-------|------------------|-----------|
|
|
416
|
-
| Research | Coordinates, presents findings | 4 parallel researchers investigate stack, features, architecture, pitfalls |
|
|
417
|
-
| Planning | Validates, manages iteration | Planner creates plans, checker verifies, loop until pass |
|
|
418
|
-
| Execution | Groups into waves, tracks progress | Executors implement in parallel, each with fresh 200k context |
|
|
419
|
-
| Verification | Presents results, routes next | Verifier checks codebase against goals, debuggers diagnose failures |
|
|
420
|
-
|
|
421
|
-
The orchestrator never does heavy lifting. It spawns agents, waits, integrates results.
|
|
422
|
-
|
|
423
|
-
**The result:** You can run an entire phase — deep research, multiple plans created and verified, thousands of lines of code written across parallel executors, automated verification against goals — and your main context window stays at 30-40%. The work happens in fresh subagent contexts. Your session stays fast and responsive.
|
|
424
|
-
|
|
425
|
-
### Atomic Git Commits
|
|
426
|
-
|
|
427
|
-
Each task gets its own commit immediately after completion:
|
|
428
|
-
|
|
429
|
-
```bash
|
|
430
|
-
abc123f docs(08-02): complete user registration plan
|
|
431
|
-
def456g feat(08-02): add email confirmation flow
|
|
432
|
-
hij789k feat(08-02): implement password hashing
|
|
433
|
-
lmn012o feat(08-02): create registration endpoint
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
> [!NOTE]
|
|
437
|
-
> **Benefits:** Git bisect finds exact failing task. Each task independently revertable. Clear history for Claude in future sessions. Better observability in AI-automated workflow.
|
|
438
|
-
|
|
439
|
-
Every commit is surgical, traceable, and meaningful.
|
|
440
|
-
|
|
441
|
-
### Modular by Design
|
|
442
|
-
|
|
443
|
-
- Add phases to current milestone
|
|
444
|
-
- Insert urgent work between phases
|
|
445
|
-
- Complete milestones and start fresh
|
|
446
|
-
- Adjust plans without rebuilding everything
|
|
447
|
-
|
|
448
|
-
You're never locked in. The system adapts.
|
|
449
|
-
|
|
450
|
-
---
|
|
451
|
-
|
|
452
|
-
## Commands
|
|
453
|
-
|
|
454
|
-
### Core Workflow
|
|
455
|
-
|
|
456
|
-
| Command | What it does |
|
|
457
|
-
|---------|--------------|
|
|
458
|
-
| `/gsd:new-project [--auto]` | Full initialization: questions → research → requirements → roadmap |
|
|
459
|
-
| `/gsd:discuss-phase [N]` | Capture implementation decisions before planning |
|
|
460
|
-
| `/gsd:plan-phase [N]` | Research + plan + verify for a phase |
|
|
461
|
-
| `/gsd:execute-phase <N>` | Execute all plans in parallel waves, verify when complete |
|
|
462
|
-
| `/gsd:verify-work [N]` | Manual user acceptance testing ¹ |
|
|
463
|
-
| `/gsd:audit-milestone` | Verify milestone achieved its definition of done |
|
|
464
|
-
| `/gsd:complete-milestone` | Archive milestone, tag release |
|
|
465
|
-
| `/gsd:new-milestone [name]` | Start next version: questions → research → requirements → roadmap |
|
|
466
|
-
|
|
467
|
-
### Navigation
|
|
468
|
-
|
|
469
|
-
| Command | What it does |
|
|
470
|
-
|---------|--------------|
|
|
471
|
-
| `/gsd:progress` | Where am I? What's next? |
|
|
472
|
-
| `/gsd:help` | Show all commands and usage guide |
|
|
473
|
-
| `/gsd:update` | Update GSD with changelog preview |
|
|
474
|
-
| `/gsd:join-discord` | Join the GSD Discord community |
|
|
475
|
-
|
|
476
|
-
### Brownfield
|
|
477
|
-
|
|
478
|
-
| Command | What it does |
|
|
479
|
-
|---------|--------------|
|
|
480
|
-
| `/gsd:map-codebase` | Analyze existing codebase before new-project |
|
|
481
|
-
|
|
482
|
-
### Phase Management
|
|
483
|
-
|
|
484
|
-
| Command | What it does |
|
|
485
|
-
|---------|--------------|
|
|
486
|
-
| `/gsd:add-phase` | Append phase to roadmap |
|
|
487
|
-
| `/gsd:insert-phase [N]` | Insert urgent work between phases |
|
|
488
|
-
| `/gsd:remove-phase [N]` | Remove future phase, renumber |
|
|
489
|
-
| `/gsd:list-phase-assumptions [N]` | See Claude's intended approach before planning |
|
|
490
|
-
| `/gsd:plan-milestone-gaps` | Create phases to close gaps from audit |
|
|
491
|
-
|
|
492
|
-
### Session
|
|
493
|
-
|
|
494
|
-
| Command | What it does |
|
|
495
|
-
|---------|--------------|
|
|
496
|
-
| `/gsd:pause-work` | Create handoff when stopping mid-phase |
|
|
497
|
-
| `/gsd:resume-work` | Restore from last session |
|
|
498
|
-
|
|
499
|
-
### Utilities
|
|
500
|
-
|
|
501
|
-
| Command | What it does |
|
|
502
|
-
|---------|--------------|
|
|
503
|
-
| `/gsd:settings` | Configure model profile and workflow agents |
|
|
504
|
-
| `/gsd:set-profile <profile>` | Switch model profile (quality/balanced/budget) |
|
|
505
|
-
| `/gsd:add-todo [desc]` | Capture idea for later |
|
|
506
|
-
| `/gsd:check-todos` | List pending todos |
|
|
507
|
-
| `/gsd:debug [desc]` | Systematic debugging with persistent state |
|
|
508
|
-
| `/gsd:quick [--full]` | Execute ad-hoc task with GSD guarantees (`--full` adds plan-checking and verification) |
|
|
509
|
-
| `/gsd:health [--repair]` | Validate `.planning/` directory integrity, auto-repair with `--repair` |
|
|
510
|
-
|
|
511
|
-
<sup>¹ Contributed by reddit user OracleGreyBeard</sup>
|
|
512
|
-
|
|
513
|
-
---
|
|
514
|
-
|
|
515
|
-
## Configuration
|
|
516
|
-
|
|
517
|
-
GSD stores project settings in `.planning/config.json`. Configure during `/gsd:new-project` or update later with `/gsd:settings`. For the full config schema, workflow toggles, git branching options, and per-agent model breakdown, see the [User Guide](docs/USER-GUIDE.md#configuration-reference).
|
|
518
|
-
|
|
519
|
-
### Core Settings
|
|
520
|
-
|
|
521
|
-
| Setting | Options | Default | What it controls |
|
|
522
|
-
|---------|---------|---------|------------------|
|
|
523
|
-
| `mode` | `yolo`, `interactive` | `interactive` | Auto-approve vs confirm at each step |
|
|
524
|
-
| `depth` | `quick`, `standard`, `comprehensive` | `standard` | Planning thoroughness (phases × plans) |
|
|
525
|
-
|
|
526
|
-
### Model Profiles
|
|
527
|
-
|
|
528
|
-
Control which Claude model each agent uses. Balance quality vs token spend.
|
|
529
|
-
|
|
530
|
-
| Profile | Planning | Execution | Verification |
|
|
531
|
-
|---------|----------|-----------|--------------|
|
|
532
|
-
| `quality` | Opus | Opus | Sonnet |
|
|
533
|
-
| `balanced` (default) | Opus | Sonnet | Sonnet |
|
|
534
|
-
| `budget` | Sonnet | Sonnet | Haiku |
|
|
535
|
-
|
|
536
|
-
Switch profiles:
|
|
537
|
-
```
|
|
538
|
-
/gsd:set-profile budget
|
|
539
|
-
```
|
|
540
|
-
|
|
541
|
-
Or configure via `/gsd:settings`.
|
|
542
|
-
|
|
543
|
-
### Workflow Agents
|
|
544
|
-
|
|
545
|
-
These spawn additional agents during planning/execution. They improve quality but add tokens and time.
|
|
546
|
-
|
|
547
|
-
| Setting | Default | What it does |
|
|
548
|
-
|---------|---------|--------------|
|
|
549
|
-
| `workflow.research` | `true` | Researches domain before planning each phase |
|
|
550
|
-
| `workflow.plan_check` | `true` | Verifies plans achieve phase goals before execution |
|
|
551
|
-
| `workflow.verifier` | `true` | Confirms must-haves were delivered after execution |
|
|
552
|
-
|
|
553
|
-
Use `/gsd:settings` to toggle these, or override per-invocation:
|
|
554
|
-
- `/gsd:plan-phase --skip-research`
|
|
555
|
-
- `/gsd:plan-phase --skip-verify`
|
|
556
|
-
|
|
557
|
-
### Execution
|
|
558
|
-
|
|
559
|
-
| Setting | Default | What it controls |
|
|
560
|
-
|---------|---------|------------------|
|
|
561
|
-
| `parallelization.enabled` | `true` | Run independent plans simultaneously |
|
|
562
|
-
| `planning.commit_docs` | `true` | Track `.planning/` in git |
|
|
563
|
-
|
|
564
|
-
### Git Branching
|
|
565
|
-
|
|
566
|
-
Control how GSD handles branches during execution.
|
|
567
|
-
|
|
568
|
-
| Setting | Options | Default | What it does |
|
|
569
|
-
|---------|---------|---------|--------------|
|
|
570
|
-
| `git.branching_strategy` | `none`, `phase`, `milestone` | `none` | Branch creation strategy |
|
|
571
|
-
| `git.phase_branch_template` | string | `gsd/phase-{phase}-{slug}` | Template for phase branches |
|
|
572
|
-
| `git.milestone_branch_template` | string | `gsd/{milestone}-{slug}` | Template for milestone branches |
|
|
573
|
-
|
|
574
|
-
**Strategies:**
|
|
575
|
-
- **`none`** — Commits to current branch (default GSD behavior)
|
|
576
|
-
- **`phase`** — Creates a branch per phase, merges at phase completion
|
|
577
|
-
- **`milestone`** — Creates one branch for entire milestone, merges at completion
|
|
578
|
-
|
|
579
|
-
At milestone completion, GSD offers squash merge (recommended) or merge with history.
|
|
580
|
-
|
|
581
|
-
---
|
|
582
|
-
|
|
583
|
-
## Security
|
|
584
|
-
|
|
585
|
-
### Protecting Sensitive Files
|
|
586
|
-
|
|
587
|
-
GSD's codebase mapping and analysis commands read files to understand your project. **Protect files containing secrets** by adding them to Claude Code's deny list:
|
|
588
|
-
|
|
589
|
-
1. Open Claude Code settings (`.claude/settings.json` or global)
|
|
590
|
-
2. Add sensitive file patterns to the deny list:
|
|
591
|
-
|
|
592
|
-
```json
|
|
593
|
-
{
|
|
594
|
-
"permissions": {
|
|
595
|
-
"deny": [
|
|
596
|
-
"Read(.env)",
|
|
597
|
-
"Read(.env.*)",
|
|
598
|
-
"Read(**/secrets/*)",
|
|
599
|
-
"Read(**/*credential*)",
|
|
600
|
-
"Read(**/*.pem)",
|
|
601
|
-
"Read(**/*.key)"
|
|
602
|
-
]
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
This prevents Claude from reading these files entirely, regardless of what commands you run.
|
|
608
|
-
|
|
609
|
-
> [!IMPORTANT]
|
|
610
|
-
> GSD includes built-in protections against committing secrets, but defense-in-depth is best practice. Deny read access to sensitive files as a first line of defense.
|
|
611
|
-
|
|
612
|
-
---
|
|
613
|
-
|
|
614
|
-
## Troubleshooting
|
|
615
|
-
|
|
616
|
-
**Commands not found after install?**
|
|
617
|
-
- Restart Claude Code to reload slash commands
|
|
618
|
-
- Verify files exist in `~/.claude/commands/gsd/` (global) or `./.claude/commands/gsd/` (local)
|
|
619
|
-
|
|
620
|
-
**Commands not working as expected?**
|
|
621
|
-
- Run `/gsd:help` to verify installation
|
|
622
|
-
- Re-run `npx get-shit-done-cc` to reinstall
|
|
623
|
-
|
|
624
|
-
**Updating to the latest version?**
|
|
625
|
-
```bash
|
|
626
|
-
npx get-shit-done-cc@latest
|
|
627
|
-
```
|
|
628
|
-
|
|
629
|
-
**Using Docker or containerized environments?**
|
|
630
|
-
|
|
631
|
-
If file reads fail with tilde paths (`~/.claude/...`), set `CLAUDE_CONFIG_DIR` before installing:
|
|
632
|
-
```bash
|
|
633
|
-
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-cc --global
|
|
634
|
-
```
|
|
635
|
-
This ensures absolute paths are used instead of `~` which may not expand correctly in containers.
|
|
636
|
-
|
|
637
|
-
### Uninstalling
|
|
638
|
-
|
|
639
|
-
To remove GSD completely:
|
|
640
|
-
|
|
641
|
-
```bash
|
|
642
|
-
# Global installs
|
|
643
|
-
npx get-shit-done-cc --claude --global --uninstall
|
|
644
|
-
npx get-shit-done-cc --opencode --global --uninstall
|
|
645
|
-
|
|
646
|
-
# Local installs (current project)
|
|
647
|
-
npx get-shit-done-cc --claude --local --uninstall
|
|
648
|
-
npx get-shit-done-cc --opencode --local --uninstall
|
|
649
|
-
```
|
|
650
|
-
|
|
651
|
-
This removes all GSD commands, agents, hooks, and settings while preserving your other configurations.
|
|
652
|
-
|
|
653
|
-
---
|
|
654
|
-
|
|
655
|
-
## Community Ports
|
|
656
|
-
|
|
657
|
-
OpenCode and Gemini CLI are now natively supported via `npx get-shit-done-cc`.
|
|
658
|
-
|
|
659
|
-
These community ports pioneered multi-runtime support:
|
|
660
|
-
|
|
661
|
-
| Project | Platform | Description |
|
|
662
|
-
|---------|----------|-------------|
|
|
663
|
-
| [gsd-opencode](https://github.com/rokicool/gsd-opencode) | OpenCode | Original OpenCode adaptation |
|
|
664
|
-
| gsd-gemini (archived) | Gemini CLI | Original Gemini adaptation by uberfuzzy |
|
|
665
|
-
|
|
666
|
-
---
|
|
667
|
-
|
|
668
|
-
## Star History
|
|
669
|
-
|
|
670
|
-
<a href="https://star-history.com/#glittercowboy/get-shit-done&Date">
|
|
671
|
-
<picture>
|
|
672
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date&theme=dark" />
|
|
673
|
-
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date" />
|
|
674
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date" />
|
|
675
|
-
</picture>
|
|
676
|
-
</a>
|
|
677
|
-
|
|
678
|
-
---
|
|
679
|
-
|
|
680
|
-
## License
|
|
681
|
-
|
|
682
|
-
MIT License. See [LICENSE](LICENSE) for details.
|
|
683
|
-
|
|
684
|
-
---
|
|
685
|
-
|
|
686
|
-
<div align="center">
|
|
687
|
-
|
|
688
|
-
**Claude Code is powerful. GSD makes it reliable.**
|
|
689
|
-
|
|
690
|
-
</div>
|
|
1
|
+
# Get Shit Done - Codex Fork
|
|
2
|
+
|
|
3
|
+
This repository packages the get-shit-done (GSD) workflow for Codex. It installs Codex prompts plus the supporting GSD reference files used by the workflows and agents.
|
|
4
|
+
|
|
5
|
+
Use this fork if you want the GSD workflow inside Codex with a simple installer that works for a single project or your home directory.
|
|
6
|
+
|
|
7
|
+
## Quick Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx gsd-codex-cli@latest --path .
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Install globally (prompts available from any project):
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx gsd-codex-cli@latest --global
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
You can combine both:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx gsd-codex-cli@latest --path . --global
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## What Gets Installed
|
|
26
|
+
|
|
27
|
+
The installer copies these directories into the target location:
|
|
28
|
+
|
|
29
|
+
- `.codex/prompts` and `.codex/skills` for Codex commands
|
|
30
|
+
- `.claude/get-shit-done` for workflow references
|
|
31
|
+
- `.claude/agents` for agent definitions
|
|
32
|
+
|
|
33
|
+
This fork is Codex-first, but the Claude assets are kept alongside for compatibility with the upstream workflow files.
|
|
34
|
+
|
|
35
|
+
## Using the Prompts
|
|
36
|
+
|
|
37
|
+
Open your project in Codex and run these prompts from the prompt list:
|
|
38
|
+
|
|
39
|
+
- `gsd-new-project`
|
|
40
|
+
- `gsd-plan-phase`
|
|
41
|
+
- `gsd-execute-phase`
|
|
42
|
+
|
|
43
|
+
All Codex prompts live in `.codex/prompts`.
|
|
44
|
+
|
|
45
|
+
## Update
|
|
46
|
+
|
|
47
|
+
Re-run the installer to update your local or global install. It overwrites the existing files with the latest version.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx gsd-codex-cli@latest --path . --global
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## CLI Options
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
--path <dir> Install into a specific directory (defaults to current directory)
|
|
57
|
+
--global Also install to your home directory (~/.codex and ~/.claude)
|
|
58
|
+
--help Show help
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Development
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
git clone https://github.com/redstar1337/get-shit-done-codex.git
|
|
65
|
+
cd get-shit-done-codex
|
|
66
|
+
node bin/install-codex.js --path .
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Run tests and build hooks:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm test
|
|
73
|
+
npm run build:hooks
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Notes
|
|
77
|
+
|
|
78
|
+
- This package is published as `gsd-codex-cli`. Use `npx gsd-codex-cli@latest` for installs.
|
|
79
|
+
- The npm binary names `get-shit-done-codex` and `get-shit-done-cc` are still provided for compatibility after install.
|
|
80
|
+
|
|
81
|
+
## Upstream
|
|
82
|
+
|
|
83
|
+
GSD originated in the upstream repository by TACHES. This fork keeps the core workflow and adds Codex-native prompts and packaging.
|
|
84
|
+
|
|
85
|
+
Upstream: https://github.com/glittercowboy/get-shit-done
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
MIT. See `LICENSE`.
|
package/bin/install-codex.js
CHANGED
|
@@ -65,21 +65,24 @@ function resolveSourceDir(repoRelative, fallbackRelative) {
|
|
|
65
65
|
throw new Error(`Missing source directory "${repoRelative}"${fallbackMessage} in repository root ${repoRoot}`);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
function copyCodexToDirectory(baseDir) {
|
|
69
|
-
const targetCodex = path.join(baseDir, '.codex');
|
|
70
|
-
const targetClaude = path.join(baseDir, '.claude');
|
|
71
|
-
const sourceCodex = path.join(repoRoot, '.codex');
|
|
72
|
-
const sourceGetShitDone = resolveSourceDir('get-shit-done', '.claude/get-shit-done');
|
|
73
|
-
const sourceAgents = resolveSourceDir('agents', '.claude/agents');
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
ensureDir(
|
|
77
|
-
ensureDir(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
copyRecursive(
|
|
81
|
-
copyRecursive(
|
|
82
|
-
|
|
68
|
+
function copyCodexToDirectory(baseDir) {
|
|
69
|
+
const targetCodex = path.join(baseDir, '.codex');
|
|
70
|
+
const targetClaude = path.join(baseDir, '.claude');
|
|
71
|
+
const sourceCodex = path.join(repoRoot, '.codex');
|
|
72
|
+
const sourceGetShitDone = resolveSourceDir('get-shit-done', '.claude/get-shit-done');
|
|
73
|
+
const sourceAgents = resolveSourceDir('agents', '.claude/agents');
|
|
74
|
+
const versionDest = path.join(targetClaude, 'get-shit-done', 'VERSION');
|
|
75
|
+
|
|
76
|
+
ensureDir(baseDir);
|
|
77
|
+
ensureDir(targetCodex);
|
|
78
|
+
ensureDir(targetClaude);
|
|
79
|
+
|
|
80
|
+
copyRecursive(sourceCodex, targetCodex);
|
|
81
|
+
copyRecursive(sourceGetShitDone, path.join(targetClaude, 'get-shit-done'));
|
|
82
|
+
copyRecursive(sourceAgents, path.join(targetClaude, 'agents'));
|
|
83
|
+
ensureDir(path.dirname(versionDest));
|
|
84
|
+
fs.writeFileSync(versionDest, `${pkg.version}\n`);
|
|
85
|
+
}
|
|
83
86
|
|
|
84
87
|
copyCodexToDirectory(targetDir);
|
|
85
88
|
|
|
@@ -2697,14 +2697,35 @@ function cmdPhaseAdd(cwd, description, raw) {
|
|
|
2697
2697
|
// Build phase entry
|
|
2698
2698
|
const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /gsd:plan-phase ${newPhaseNum} to break down)\n`;
|
|
2699
2699
|
|
|
2700
|
-
// Find insertion point:
|
|
2701
|
-
|
|
2702
|
-
const
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2700
|
+
// Find insertion point: inside last milestone block (if grouped), otherwise before Progress or end
|
|
2701
|
+
const progressMatch = content.match(/^##\s+Progress\b/m);
|
|
2702
|
+
const progressIdx = progressMatch ? progressMatch.index : -1;
|
|
2703
|
+
const searchEnd = progressIdx >= 0 ? progressIdx : content.length;
|
|
2704
|
+
const beforeProgress = content.slice(0, searchEnd);
|
|
2705
|
+
|
|
2706
|
+
const milestonePattern = /^###\s+.*v\d+\.\d+.*$/gmi;
|
|
2707
|
+
const milestoneHeaders = [];
|
|
2708
|
+
let mm;
|
|
2709
|
+
while ((mm = milestonePattern.exec(beforeProgress)) !== null) {
|
|
2710
|
+
milestoneHeaders.push({ index: mm.index });
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
let insertIdx = content.length;
|
|
2714
|
+
if (milestoneHeaders.length > 0) {
|
|
2715
|
+
const target = milestoneHeaders[milestoneHeaders.length - 1];
|
|
2716
|
+
let nextHeaderIdx = searchEnd;
|
|
2717
|
+
for (const header of milestoneHeaders) {
|
|
2718
|
+
if (header.index > target.index) {
|
|
2719
|
+
nextHeaderIdx = header.index;
|
|
2720
|
+
break;
|
|
2721
|
+
}
|
|
2722
|
+
}
|
|
2723
|
+
insertIdx = nextHeaderIdx;
|
|
2724
|
+
} else if (progressIdx >= 0) {
|
|
2725
|
+
insertIdx = progressIdx;
|
|
2726
|
+
}
|
|
2727
|
+
|
|
2728
|
+
const updatedContent = content.slice(0, insertIdx) + phaseEntry + content.slice(insertIdx);
|
|
2708
2729
|
|
|
2709
2730
|
fs.writeFileSync(roadmapPath, updatedContent, 'utf-8');
|
|
2710
2731
|
|
|
@@ -1375,19 +1375,69 @@ describe('phase add command', () => {
|
|
|
1375
1375
|
assert.ok(roadmap.includes('**Depends on:** Phase 2'), 'should depend on previous');
|
|
1376
1376
|
});
|
|
1377
1377
|
|
|
1378
|
-
test('handles empty roadmap', () => {
|
|
1379
|
-
fs.writeFileSync(
|
|
1380
|
-
path.join(tmpDir, '.planning', 'ROADMAP.md'),
|
|
1381
|
-
`# Roadmap v1.0\n`
|
|
1382
|
-
);
|
|
1378
|
+
test('handles empty roadmap', () => {
|
|
1379
|
+
fs.writeFileSync(
|
|
1380
|
+
path.join(tmpDir, '.planning', 'ROADMAP.md'),
|
|
1381
|
+
`# Roadmap v1.0\n`
|
|
1382
|
+
);
|
|
1383
1383
|
|
|
1384
1384
|
const result = runGsdTools('phase add Initial Setup', tmpDir);
|
|
1385
1385
|
assert.ok(result.success, `Command failed: ${result.error}`);
|
|
1386
1386
|
|
|
1387
|
-
const output = JSON.parse(result.output);
|
|
1388
|
-
assert.strictEqual(output.phase_number, 1, 'should be phase 1');
|
|
1389
|
-
});
|
|
1390
|
-
|
|
1387
|
+
const output = JSON.parse(result.output);
|
|
1388
|
+
assert.strictEqual(output.phase_number, 1, 'should be phase 1');
|
|
1389
|
+
});
|
|
1390
|
+
|
|
1391
|
+
test('inserts before Progress in milestone-grouped roadmap', () => {
|
|
1392
|
+
fs.writeFileSync(
|
|
1393
|
+
path.join(tmpDir, '.planning', 'ROADMAP.md'),
|
|
1394
|
+
`# Roadmap: Demo
|
|
1395
|
+
|
|
1396
|
+
## Milestones
|
|
1397
|
+
- v1.0 MVP - Phases 1-4 (shipped)
|
|
1398
|
+
- v1.1 Growth - Phases 5-6 (in progress)
|
|
1399
|
+
- v2.0 Scale - Phases 7-8 (planned)
|
|
1400
|
+
|
|
1401
|
+
## Phases
|
|
1402
|
+
|
|
1403
|
+
<details>
|
|
1404
|
+
<summary>v1.0 MVP (Phases 1-4) - SHIPPED</summary>
|
|
1405
|
+
|
|
1406
|
+
### Phase 1: Foundation
|
|
1407
|
+
**Goal:** Setup
|
|
1408
|
+
|
|
1409
|
+
</details>
|
|
1410
|
+
|
|
1411
|
+
### v1.1 Growth (In Progress)
|
|
1412
|
+
|
|
1413
|
+
#### Phase 5: Growth
|
|
1414
|
+
**Goal:** Build growth
|
|
1415
|
+
|
|
1416
|
+
### v2.0 Scale (Planned)
|
|
1417
|
+
|
|
1418
|
+
#### Phase 6: Scale
|
|
1419
|
+
**Goal:** Scale system
|
|
1420
|
+
|
|
1421
|
+
## Progress
|
|
1422
|
+
|
|
1423
|
+
| Phase | Plans |
|
|
1424
|
+
| 1 | 0/1 |
|
|
1425
|
+
`
|
|
1426
|
+
);
|
|
1427
|
+
|
|
1428
|
+
const result = runGsdTools('phase add Security', tmpDir);
|
|
1429
|
+
assert.ok(result.success, `Command failed: ${result.error}`);
|
|
1430
|
+
|
|
1431
|
+
const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
|
|
1432
|
+
const phaseIdx = roadmap.indexOf('Phase 7: Security');
|
|
1433
|
+
const progressIdx = roadmap.indexOf('## Progress');
|
|
1434
|
+
const milestoneIdx = roadmap.indexOf('### v2.0 Scale');
|
|
1435
|
+
|
|
1436
|
+
assert.ok(phaseIdx !== -1, 'should include new phase');
|
|
1437
|
+
assert.ok(phaseIdx > milestoneIdx, 'new phase should be inside last milestone block');
|
|
1438
|
+
assert.ok(phaseIdx < progressIdx, 'new phase should appear before Progress');
|
|
1439
|
+
});
|
|
1440
|
+
});
|
|
1391
1441
|
|
|
1392
1442
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
1393
1443
|
// phase insert command
|
|
@@ -40,10 +40,15 @@ const child = spawn(process.execPath, ['-e', `
|
|
|
40
40
|
}
|
|
41
41
|
} catch (e) {}
|
|
42
42
|
|
|
43
|
-
let latest = null;
|
|
44
|
-
try {
|
|
45
|
-
latest = execSync('npm view
|
|
46
|
-
} catch (e) {}
|
|
43
|
+
let latest = null;
|
|
44
|
+
try {
|
|
45
|
+
latest = execSync('npm view gsd-codex-cli version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
|
|
46
|
+
} catch (e) {}
|
|
47
|
+
if (!latest) {
|
|
48
|
+
try {
|
|
49
|
+
latest = execSync('npm view get-shit-done-cc version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
|
|
50
|
+
} catch (e) {}
|
|
51
|
+
}
|
|
47
52
|
|
|
48
53
|
const result = {
|
|
49
54
|
update_available: latest && installed !== latest,
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "gsd-codex-cli",
|
|
3
|
-
"version": "1.20.
|
|
4
|
-
"description": "Codex-native package for the get-shit-done workflow with native subagent orchestration.",
|
|
5
|
-
"bin": {
|
|
6
|
-
"gsd-codex-cli": "bin/install-codex.js",
|
|
7
|
-
"get-shit-done-codex": "bin/install-codex.js",
|
|
8
|
-
"get-shit-done-cc": "bin/install.js"
|
|
9
|
-
},
|
|
2
|
+
"name": "gsd-codex-cli",
|
|
3
|
+
"version": "1.20.2",
|
|
4
|
+
"description": "Codex-native package for the get-shit-done workflow with native subagent orchestration.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"gsd-codex-cli": "bin/install-codex.js",
|
|
7
|
+
"get-shit-done-codex": "bin/install-codex.js",
|
|
8
|
+
"get-shit-done-cc": "bin/install.js"
|
|
9
|
+
},
|
|
10
10
|
"files": [
|
|
11
11
|
"bin",
|
|
12
12
|
".codex",
|
|
@@ -29,16 +29,16 @@
|
|
|
29
29
|
"context-engineering",
|
|
30
30
|
"spec-driven-development"
|
|
31
31
|
],
|
|
32
|
-
"author": "TÂCHES / Codex port by
|
|
32
|
+
"author": "TÂCHES / Codex port by redstar1337",
|
|
33
33
|
"license": "MIT",
|
|
34
34
|
"repository": {
|
|
35
35
|
"type": "git",
|
|
36
|
-
"url": "git+https://github.com/
|
|
36
|
+
"url": "git+https://github.com/redstar1337/get-shit-done-codex.git"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/redstar1337/get-shit-done-codex",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/redstar1337/get-shit-done-codex/issues"
|
|
37
41
|
},
|
|
38
|
-
"homepage": "https://github.com/ahmed118-glitch/get-shit-done-codex",
|
|
39
|
-
"bugs": {
|
|
40
|
-
"url": "https://github.com/ahmed118-glitch/get-shit-done-codex/issues"
|
|
41
|
-
},
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=16.7.0"
|
|
44
44
|
},
|
|
@@ -49,6 +49,6 @@
|
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build:hooks": "node scripts/build-hooks.js",
|
|
51
51
|
"prepublishOnly": "npm run build:hooks",
|
|
52
|
-
"test": "node --test get-shit-done/bin/gsd-tools.test.cjs"
|
|
52
|
+
"test": "node --test get-shit-done/bin/gsd-tools.test.cjs"
|
|
53
53
|
}
|
|
54
54
|
}
|