pi-gsd 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +374 -0
  3. package/dist/gsd-tools.js +380 -0
  4. package/package.json +72 -0
  5. package/scripts/postinstall.js +272 -0
  6. package/skills/gsd-add-backlog/SKILL.md +78 -0
  7. package/skills/gsd-add-phase/SKILL.md +39 -0
  8. package/skills/gsd-add-tests/SKILL.md +28 -0
  9. package/skills/gsd-add-todo/SKILL.md +42 -0
  10. package/skills/gsd-audit-milestone/SKILL.md +29 -0
  11. package/skills/gsd-audit-uat/SKILL.md +20 -0
  12. package/skills/gsd-autonomous/SKILL.md +34 -0
  13. package/skills/gsd-check-todos/SKILL.md +40 -0
  14. package/skills/gsd-cleanup/SKILL.md +19 -0
  15. package/skills/gsd-complete-milestone/SKILL.md +122 -0
  16. package/skills/gsd-debug/SKILL.md +178 -0
  17. package/skills/gsd-discuss-phase/SKILL.md +55 -0
  18. package/skills/gsd-do/SKILL.md +26 -0
  19. package/skills/gsd-execute-phase/SKILL.md +53 -0
  20. package/skills/gsd-fast/SKILL.md +22 -0
  21. package/skills/gsd-forensics/SKILL.md +51 -0
  22. package/skills/gsd-health/SKILL.md +17 -0
  23. package/skills/gsd-help/SKILL.md +24 -0
  24. package/skills/gsd-insert-phase/SKILL.md +28 -0
  25. package/skills/gsd-join-discord/SKILL.md +19 -0
  26. package/skills/gsd-list-phase-assumptions/SKILL.md +41 -0
  27. package/skills/gsd-list-workspaces/SKILL.md +17 -0
  28. package/skills/gsd-manager/SKILL.md +33 -0
  29. package/skills/gsd-map-codebase/SKILL.md +64 -0
  30. package/skills/gsd-milestone-summary/SKILL.md +45 -0
  31. package/skills/gsd-new-milestone/SKILL.md +39 -0
  32. package/skills/gsd-new-project/SKILL.md +37 -0
  33. package/skills/gsd-new-workspace/SKILL.md +41 -0
  34. package/skills/gsd-next/SKILL.md +19 -0
  35. package/skills/gsd-note/SKILL.md +30 -0
  36. package/skills/gsd-pause-work/SKILL.md +35 -0
  37. package/skills/gsd-plan-milestone-gaps/SKILL.md +28 -0
  38. package/skills/gsd-plan-phase/SKILL.md +38 -0
  39. package/skills/gsd-plant-seed/SKILL.md +21 -0
  40. package/skills/gsd-pr-branch/SKILL.md +20 -0
  41. package/skills/gsd-profile-user/SKILL.md +38 -0
  42. package/skills/gsd-progress/SKILL.md +19 -0
  43. package/skills/gsd-quick/SKILL.md +38 -0
  44. package/skills/gsd-reapply-patches/SKILL.md +126 -0
  45. package/skills/gsd-remove-phase/SKILL.md +26 -0
  46. package/skills/gsd-remove-workspace/SKILL.md +22 -0
  47. package/skills/gsd-research-phase/SKILL.md +200 -0
  48. package/skills/gsd-resume-work/SKILL.md +35 -0
  49. package/skills/gsd-review/SKILL.md +31 -0
  50. package/skills/gsd-review-backlog/SKILL.md +62 -0
  51. package/skills/gsd-session-report/SKILL.md +16 -0
  52. package/skills/gsd-set-profile/SKILL.md +9 -0
  53. package/skills/gsd-settings/SKILL.md +32 -0
  54. package/skills/gsd-ship/SKILL.md +16 -0
  55. package/skills/gsd-stats/SKILL.md +16 -0
  56. package/skills/gsd-thread/SKILL.md +133 -0
  57. package/skills/gsd-ui-phase/SKILL.md +24 -0
  58. package/skills/gsd-ui-review/SKILL.md +24 -0
  59. package/skills/gsd-update/SKILL.md +35 -0
  60. package/skills/gsd-validate-phase/SKILL.md +26 -0
  61. package/skills/gsd-verify-work/SKILL.md +30 -0
  62. package/skills/gsd-workstreams/SKILL.md +72 -0
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "pi-gsd",
3
+ "version": "1.0.3",
4
+ "description": "Get Shit Done - Unofficial port of the renowned AI-native project-planning spec-driven toolkit",
5
+ "main": "dist/gsd-tools.js",
6
+ "bin": {
7
+ "gsd-tools": "./dist/gsd-tools.js",
8
+ "pi-gsd": "./dist/gsd-tools.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsup src/cli.ts --format cjs --out-dir dist --minify --no-splitting && mv dist/cli.js dist/gsd-tools.js && chmod +x dist/gsd-tools.js",
12
+ "dev": "tsup src/cli.ts --format cjs --out-dir dist --watch",
13
+ "typecheck": "tsc --noEmit",
14
+ "build:harnesses": "node scripts/build-harnesses.js --clean",
15
+ "postinstall": "node scripts/postinstall.js",
16
+ "prepublishOnly": "npm run build && node scripts/build-harnesses.js --clean"
17
+ },
18
+ "files": [
19
+ "skills",
20
+ "dist",
21
+ "scripts/postinstall.js",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "engines": {
26
+ "node": ">=18.0.0"
27
+ },
28
+ "keywords": [
29
+ "ai",
30
+ "agent",
31
+ "planning",
32
+ "cli",
33
+ "workflow",
34
+ "get-shit-done",
35
+ "gsd",
36
+ "productivity",
37
+ "project-management",
38
+ "milestones",
39
+ "phases",
40
+ "spec",
41
+ "pi-package"
42
+ ],
43
+ "author": "Alessio Corsi",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/fulgidus/pi-gsd.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/fulgidus/pi-gsd/issues"
51
+ },
52
+ "homepage": "https://github.com/fulgidus/pi-gsd#readme",
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "pi": {
58
+ "skills": [
59
+ "./skills"
60
+ ]
61
+ },
62
+ "dependencies": {
63
+ "@toon-format/toon": "^2.1.0",
64
+ "commander": "^13.0.0",
65
+ "jsonpath-plus": "^10.4.0"
66
+ },
67
+ "devDependencies": {
68
+ "tsup": "^8.0.0",
69
+ "typescript": "^5.0.0",
70
+ "@types/node": "^22.0.0"
71
+ }
72
+ }
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * postinstall.js - GSD harness installer
4
+ *
5
+ * Runs automatically after `npm install get-shit-done-cc`.
6
+ * Copies each AI-platform harness directory from this package's
7
+ * `.gsd/harnesses/<harness>/` into the consumer project's root
8
+ * so the AI agent can discover the GSD workflows, commands, hooks,
9
+ * and CLI binary at the expected platform-native paths.
10
+ *
11
+ * Harness layout inside this package (source):
12
+ * .gsd/harnesses/
13
+ * agent/ → consumer project root: .agent/get-shit-done/
14
+ * claude/ → consumer project root: .claude/get-shit-done/
15
+ * codex/ → consumer project root: .codex/get-shit-done/
16
+ * cursor/ → consumer project root: .cursor/get-shit-done/
17
+ * gemini/ → consumer project root: .gemini/get-shit-done/
18
+ * github/ → consumer project root: .github/get-shit-done/
19
+ * opencode/ → consumer project root: .opencode/get-shit-done/
20
+ * windsurf/ → consumer project root: .windsurf/get-shit-done/
21
+ *
22
+ * Hook files are also copied from `.gsd/hooks/` into each harness
23
+ * that supports the GSD hook system.
24
+ *
25
+ * The script is intentionally defensive: it never overwrites files
26
+ * that already exist (use --force-reinstall env flag to override),
27
+ * and it skips silently if a harness source directory is absent
28
+ * from the package (forward-compatibility).
29
+ *
30
+ * @see README.md §3 (Installation) for usage details.
31
+ */
32
+
33
+ 'use strict';
34
+
35
+ const fs = require('fs');
36
+ const path = require('path');
37
+
38
+ // ─── Constants ────────────────────────────────────────────────────────────────
39
+
40
+ const FORCE = process.env.GSD_FORCE_REINSTALL === '1'
41
+ || process.argv.includes('--force-reinstall');
42
+
43
+ /**
44
+ * Directory that contains this package's files.
45
+ * When executed via npm postinstall, __dirname is the package root.
46
+ */
47
+ const PKG_DIR = path.resolve(__dirname, '..');
48
+
49
+ /**
50
+ * The consuming project's root.
51
+ * npm sets INIT_CWD to the directory where `npm install` was run.
52
+ * Fall back to process.cwd() for programmatic / npx usage.
53
+ */
54
+ const PROJECT_ROOT = process.env.INIT_CWD || process.cwd();
55
+
56
+ /**
57
+ * Harness definitions.
58
+ *
59
+ * Each entry maps:
60
+ * src - subdirectory under <package>/.gsd/harnesses/
61
+ * dest - directory in the consumer project root
62
+ * hooks - whether this platform supports GSD hooks (copied from .gsd/hooks/)
63
+ */
64
+ const HARNESSES = [
65
+ { src: 'agent', dest: '.agent', hooks: true },
66
+ { src: 'claude', dest: '.claude', hooks: true },
67
+ { src: 'codex', dest: '.codex', hooks: false },
68
+ { src: 'cursor', dest: '.cursor', hooks: false },
69
+ { src: 'gemini', dest: '.gemini', hooks: true },
70
+ { src: 'github', dest: '.github', hooks: false },
71
+ { src: 'opencode', dest: '.opencode', hooks: true },
72
+ { src: 'windsurf', dest: '.windsurf', hooks: false },
73
+ ];
74
+
75
+ /**
76
+ * Subdirectory name used inside each harness's dest folder for
77
+ * GSD-specific content (workflows, bin, references, templates …).
78
+ */
79
+ const GSD_SUBDIR = 'get-shit-done';
80
+
81
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
82
+
83
+ /**
84
+ * Recursively copy a directory tree from `src` to `dest`.
85
+ * If `overwrite` is false (default), existing files are left untouched.
86
+ *
87
+ * @param {string} src Absolute source path
88
+ * @param {string} dest Absolute destination path
89
+ * @param {boolean} overwrite Replace existing files when true
90
+ * @returns {{ copied: number, skipped: number }}
91
+ */
92
+ function copyDir(src, dest, overwrite) {
93
+ let copied = 0;
94
+ let skipped = 0;
95
+
96
+ if (!fs.existsSync(src)) return { copied, skipped };
97
+
98
+ fs.mkdirSync(dest, { recursive: true });
99
+
100
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
101
+ const srcEntry = path.join(src, entry.name);
102
+ const destEntry = path.join(dest, entry.name);
103
+
104
+ if (entry.isDirectory()) {
105
+ const sub = copyDir(srcEntry, destEntry, overwrite);
106
+ copied += sub.copied;
107
+ skipped += sub.skipped;
108
+ } else if (entry.isFile()) {
109
+ if (!overwrite && fs.existsSync(destEntry)) {
110
+ skipped++;
111
+ } else {
112
+ fs.copyFileSync(srcEntry, destEntry);
113
+ copied++;
114
+ }
115
+ }
116
+ }
117
+
118
+ return { copied, skipped };
119
+ }
120
+
121
+ /**
122
+ * Emit a coloured status line to stdout.
123
+ * Colours are stripped when stdout is not a TTY (CI / pipe).
124
+ *
125
+ * @param {'ok'|'skip'|'warn'|'err'} level
126
+ * @param {string} msg
127
+ */
128
+ function log(level, msg) {
129
+ const isTTY = process.stdout.isTTY;
130
+ const colours = {
131
+ ok: isTTY ? '\x1b[32m✓\x1b[0m' : '✓',
132
+ skip: isTTY ? '\x1b[33m–\x1b[0m' : '–',
133
+ warn: isTTY ? '\x1b[33m⚠\x1b[0m' : '⚠',
134
+ err: isTTY ? '\x1b[31m✗\x1b[0m' : '✗',
135
+ };
136
+ console.log(` ${colours[level] || ' '} ${msg}`);
137
+ }
138
+
139
+ // ─── Main ─────────────────────────────────────────────────────────────────────
140
+
141
+ function main() {
142
+ // Skip when running inside the package's own development tree
143
+ // (i.e. when INIT_CWD === the package directory itself).
144
+ if (path.resolve(PROJECT_ROOT) === path.resolve(PKG_DIR)) {
145
+ log('skip', 'Running inside package source tree - skipping harness install.');
146
+ return;
147
+ }
148
+
149
+ // Skip when explicitly opted out
150
+ if (process.env.GSD_SKIP_INSTALL === '1') {
151
+ log('skip', 'GSD_SKIP_INSTALL=1 - skipping harness install.');
152
+ return;
153
+ }
154
+
155
+ const harnessesRoot = path.join(PKG_DIR, '.gsd', 'harnesses');
156
+ const hooksRoot = path.join(PKG_DIR, '.gsd', 'hooks');
157
+
158
+ console.log('');
159
+ console.log(' GSD - installing harness files into your project…');
160
+ if (FORCE) console.log(' (force-reinstall mode: existing files will be overwritten)');
161
+ console.log('');
162
+
163
+ let totalCopied = 0;
164
+ let totalSkipped = 0;
165
+ let installed = 0;
166
+
167
+ for (const harness of HARNESSES) {
168
+ const srcHarness = path.join(harnessesRoot, harness.src);
169
+ const destHarness = path.join(PROJECT_ROOT, harness.dest);
170
+
171
+ // ── get-shit-done/ content ──────────────────────────────────────────────
172
+ const srcGsd = path.join(srcHarness, GSD_SUBDIR);
173
+ const destGsd = path.join(destHarness, GSD_SUBDIR);
174
+
175
+ if (!fs.existsSync(srcHarness)) {
176
+ log('skip', `${harness.dest}/${GSD_SUBDIR} (source absent - skipped)`);
177
+ continue;
178
+ }
179
+
180
+ const { copied, skipped } = copyDir(srcGsd, destGsd, FORCE);
181
+ totalCopied += copied;
182
+ totalSkipped += skipped;
183
+
184
+ if (copied > 0 || skipped === 0) {
185
+ log('ok', `${harness.dest}/${GSD_SUBDIR} (${copied} file${copied === 1 ? '' : 's'} installed)`);
186
+ } else {
187
+ log('skip', `${harness.dest}/${GSD_SUBDIR} (already up-to-date, ${skipped} file${skipped === 1 ? '' : 's'} skipped)`);
188
+ }
189
+
190
+ // ── gsd-file-manifest.json ──────────────────────────────────────────────
191
+ const manifestSrc = path.join(srcHarness, 'gsd-file-manifest.json');
192
+ const manifestDest = path.join(destHarness, 'gsd-file-manifest.json');
193
+
194
+ if (fs.existsSync(manifestSrc)) {
195
+ if (!FORCE && fs.existsSync(manifestDest)) {
196
+ totalSkipped++;
197
+ } else {
198
+ fs.mkdirSync(destHarness, { recursive: true });
199
+ fs.copyFileSync(manifestSrc, manifestDest);
200
+ totalCopied++;
201
+ }
202
+ }
203
+
204
+ // ── hooks/ (platform-selective) ─────────────────────────────────────────
205
+ if (harness.hooks && fs.existsSync(hooksRoot)) {
206
+ const destHooks = path.join(destHarness, 'hooks');
207
+ const h = copyDir(hooksRoot, destHooks, FORCE);
208
+ totalCopied += h.copied;
209
+ totalSkipped += h.skipped;
210
+
211
+ if (h.copied > 0) {
212
+ log('ok', `${harness.dest}/hooks (${h.copied} hook${h.copied === 1 ? '' : 's'} installed)`);
213
+ }
214
+ }
215
+
216
+ // ── skills/ (opencode only - present in .gsd/harnesses/opencode/skills) ─
217
+ const srcSkills = path.join(srcHarness, 'skills');
218
+ const destSkills = path.join(destHarness, 'skills');
219
+
220
+ if (fs.existsSync(srcSkills)) {
221
+ const s = copyDir(srcSkills, destSkills, FORCE);
222
+ totalCopied += s.copied;
223
+ totalSkipped += s.skipped;
224
+
225
+ if (s.copied > 0) {
226
+ log('ok', `${harness.dest}/skills (${s.copied} skill file${s.copied === 1 ? '' : 's'} installed)`);
227
+ }
228
+ }
229
+
230
+ installed++;
231
+ }
232
+
233
+ console.log('');
234
+
235
+ if (installed === 0) {
236
+ log('warn', 'No harness source directories found inside the package.');
237
+ log('warn', 'The package may be incomplete. Try: npm install --force get-shit-done-cc');
238
+ console.log('');
239
+ return;
240
+ }
241
+
242
+ console.log(` GSD v${getPackageVersion()} installed successfully.`);
243
+ console.log(` ${totalCopied} file${totalCopied === 1 ? '' : 's'} copied, ${totalSkipped} skipped.`);
244
+ console.log('');
245
+ console.log(' Next steps:');
246
+ console.log(' • Claude / Gemini / Cursor / OpenCode: run /gsd:new-project');
247
+ console.log(' • Claude Code (.agent): run /gsd-new-project');
248
+ console.log(' • Codex: run $gsd-new-project');
249
+ console.log(' • GitHub Copilot: run /gsd:new-project');
250
+ console.log('');
251
+ console.log(' Docs: https://github.com/fulgidus/pi-gsd#readme');
252
+ console.log('');
253
+ }
254
+
255
+ /**
256
+ * Read the version from this package's own package.json.
257
+ * Gracefully returns 'unknown' if the file is unreadable.
258
+ *
259
+ * @returns {string}
260
+ */
261
+ function getPackageVersion() {
262
+ try {
263
+ const pkg = JSON.parse(
264
+ fs.readFileSync(path.join(PKG_DIR, 'package.json'), 'utf8')
265
+ );
266
+ return pkg.version || 'unknown';
267
+ } catch {
268
+ return 'unknown';
269
+ }
270
+ }
271
+
272
+ main();
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: gsd-add-backlog
3
+ description: Add an idea to the backlog parking lot (999.x numbering)
4
+ ---
5
+
6
+ <objective>
7
+ Add a backlog item to the roadmap using 999.x numbering. Backlog items are
8
+ unsequenced ideas that aren't ready for active planning - they live outside
9
+ the normal phase sequence and accumulate context over time.
10
+ </objective>
11
+
12
+ <process>
13
+
14
+ 1. **Read ROADMAP.md** to find existing backlog entries:
15
+
16
+ ```bash
17
+ cat .planning/ROADMAP.md
18
+ ```
19
+
20
+ 2. **Find next backlog number:**
21
+
22
+ ```bash
23
+ NEXT=$(node ".agent/get-shit-done/bin/gsd-tools.cjs" phase next-decimal 999 --raw)
24
+ ```
25
+
26
+ If no 999.x phases exist, start at 999.1.
27
+
28
+ 3. **Create the phase directory:**
29
+
30
+ ```bash
31
+ SLUG=$(node ".agent/get-shit-done/bin/gsd-tools.cjs" generate-slug "$ARGUMENTS")
32
+ mkdir -p ".planning/phases/${NEXT}-${SLUG}"
33
+ touch ".planning/phases/${NEXT}-${SLUG}/.gitkeep"
34
+ ```
35
+
36
+ 4. **Add to ROADMAP.md** under a `## Backlog` section. If the section doesn't exist, create it at the end:
37
+
38
+ ```markdown
39
+ ## Backlog
40
+
41
+ ### Phase {NEXT}: {description} (BACKLOG)
42
+
43
+ **Goal:** [Captured for future planning]
44
+ **Requirements:** TBD
45
+ **Plans:** 0 plans
46
+
47
+ Plans:
48
+
49
+ - [ ] TBD (promote with /gsd-review-backlog when ready)
50
+ ```
51
+
52
+ 5. **Commit:**
53
+
54
+ ```bash
55
+ node ".agent/get-shit-done/bin/gsd-tools.cjs" commit "docs: add backlog item ${NEXT} - ${ARGUMENTS}" --files .planning/ROADMAP.md ".planning/phases/${NEXT}-${SLUG}/.gitkeep"
56
+ ```
57
+
58
+ 6. **Report:**
59
+
60
+ ```
61
+ ## 📋 Backlog Item Added
62
+
63
+ Phase {NEXT}: {description}
64
+ Directory: .planning/phases/{NEXT}-{slug}/
65
+
66
+ This item lives in the backlog parking lot.
67
+ Use /gsd-discuss-phase {NEXT} to explore it further.
68
+ Use /gsd-review-backlog to promote items to active milestone.
69
+ ```
70
+
71
+ </process>
72
+
73
+ <notes>
74
+ - 999.x numbering keeps backlog items out of the active phase sequence
75
+ - Phase directories are created immediately, so /gsd-discuss-phase and /gsd-plan-phase work on them
76
+ - No `Depends on:` field - backlog items are unsequenced by definition
77
+ - Sparse numbering is fine (999.1, 999.3) - always uses next-decimal
78
+ </notes>
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: gsd-add-phase
3
+ description: Add phase to end of current milestone in roadmap
4
+ ---
5
+
6
+
7
+ <objective>
8
+ Add a new integer phase to the end of the current milestone in the roadmap.
9
+
10
+ Routes to the add-phase workflow which handles:
11
+ - Phase number calculation (next sequential integer)
12
+ - Directory creation with slug generation
13
+ - Roadmap structure updates
14
+ - STATE.md roadmap evolution tracking
15
+ </objective>
16
+
17
+ <execution_context>
18
+ @.agent/get-shit-done/workflows/add-phase.md
19
+ </execution_context>
20
+
21
+ <context>
22
+ Arguments: $ARGUMENTS (phase description)
23
+
24
+ Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
25
+ </context>
26
+
27
+ <process>
28
+ **Follow the add-phase workflow** from `@.agent/get-shit-done/workflows/add-phase.md`.
29
+
30
+ The workflow handles all logic including:
31
+ 1. Argument parsing and validation
32
+ 2. Roadmap existence checking
33
+ 3. Current milestone identification
34
+ 4. Next phase number calculation (ignoring decimals)
35
+ 5. Slug generation from description
36
+ 6. Phase directory creation
37
+ 7. Roadmap entry insertion
38
+ 8. STATE.md updates
39
+ </process>
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: gsd-add-tests
3
+ description: Generate tests for a completed phase based on UAT criteria and implementation
4
+ ---
5
+
6
+ <objective>
7
+ Generate unit and E2E tests for a completed phase, using its SUMMARY.md, CONTEXT.md, and VERIFICATION.md as specifications.
8
+
9
+ Analyzes implementation files, classifies them into TDD (unit), E2E (browser), or Skip categories, presents a test plan for user approval, then generates tests following RED-GREEN conventions.
10
+
11
+ Output: Test files committed with message `test(phase-{N}): add unit and E2E tests from add-tests command`
12
+ </objective>
13
+
14
+ <execution_context>
15
+ @.agent/get-shit-done/workflows/add-tests.md
16
+ </execution_context>
17
+
18
+ <context>
19
+ Phase: $ARGUMENTS
20
+
21
+ @.planning/STATE.md
22
+ @.planning/ROADMAP.md
23
+ </context>
24
+
25
+ <process>
26
+ Execute the add-tests workflow from @.agent/get-shit-done/workflows/add-tests.md end-to-end.
27
+ Preserve all workflow gates (classification approval, test plan approval, RED-GREEN verification, gap reporting).
28
+ </process>
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: gsd-add-todo
3
+ description: Capture idea or task as todo from current conversation context
4
+ ---
5
+
6
+
7
+ <objective>
8
+ Capture an idea, task, or issue that surfaces during a GSD session as a structured todo for later work.
9
+
10
+ Routes to the add-todo workflow which handles:
11
+ - Directory structure creation
12
+ - Content extraction from arguments or conversation
13
+ - Area inference from file paths
14
+ - Duplicate detection and resolution
15
+ - Todo file creation with frontmatter
16
+ - STATE.md updates
17
+ - Git commits
18
+ </objective>
19
+
20
+ <execution_context>
21
+ @.agent/get-shit-done/workflows/add-todo.md
22
+ </execution_context>
23
+
24
+ <context>
25
+ Arguments: $ARGUMENTS (optional todo description)
26
+
27
+ State is resolved in-workflow via `init todos` and targeted reads.
28
+ </context>
29
+
30
+ <process>
31
+ **Follow the add-todo workflow** from `@.agent/get-shit-done/workflows/add-todo.md`.
32
+
33
+ The workflow handles all logic including:
34
+ 1. Directory ensuring
35
+ 2. Existing area checking
36
+ 3. Content extraction (arguments or conversation)
37
+ 4. Area inference
38
+ 5. Duplicate checking
39
+ 6. File creation with slug generation
40
+ 7. STATE.md updates
41
+ 8. Git commits
42
+ </process>
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: gsd-audit-milestone
3
+ description: Audit milestone completion against original intent before archiving
4
+ ---
5
+
6
+ <objective>
7
+ Verify milestone achieved its definition of done. Check requirements coverage, cross-phase integration, and end-to-end flows.
8
+
9
+ **This command IS the orchestrator.** Reads existing VERIFICATION.md files (phases already verified during execute-phase), aggregates tech debt and deferred gaps, then spawns integration checker for cross-phase wiring.
10
+ </objective>
11
+
12
+ <execution_context>
13
+ @.agent/get-shit-done/workflows/audit-milestone.md
14
+ </execution_context>
15
+
16
+ <context>
17
+ Version: $ARGUMENTS (optional - defaults to current milestone)
18
+
19
+ Core planning files are resolved in-workflow (`init milestone-op`) and loaded only as needed.
20
+
21
+ **Completed Work:**
22
+ Glob: .planning/phases/_/_-SUMMARY.md
23
+ Glob: .planning/phases/_/_-VERIFICATION.md
24
+ </context>
25
+
26
+ <process>
27
+ Execute the audit-milestone workflow from @.agent/get-shit-done/workflows/audit-milestone.md end-to-end.
28
+ Preserve all workflow gates (scope determination, verification reading, integration check, requirements coverage, routing).
29
+ </process>
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: gsd-audit-uat
3
+ description: Cross-phase audit of all outstanding UAT and verification items
4
+ ---
5
+
6
+ <objective>
7
+ Scan all phases for pending, skipped, blocked, and human_needed UAT items. Cross-reference against codebase to detect stale documentation. Produce prioritized human test plan.
8
+ </objective>
9
+
10
+ <execution_context>
11
+ @.agent/get-shit-done/workflows/audit-uat.md
12
+ </execution_context>
13
+
14
+ <context>
15
+ Core planning files are loaded in-workflow via CLI.
16
+
17
+ **Scope:**
18
+ Glob: .planning/phases/*/*-UAT.md
19
+ Glob: .planning/phases/*/*-VERIFICATION.md
20
+ </context>
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: gsd-autonomous
3
+ description: Run all remaining phases autonomously - discuss→plan→execute per phase
4
+ ---
5
+
6
+ <objective>
7
+ Execute all remaining milestone phases autonomously. For each phase: discuss → plan → execute. Pauses only for user decisions (grey area acceptance, blockers, validation requests).
8
+
9
+ Uses ROADMAP.md phase discovery and Skill() flat invocations for each phase command. After all phases complete: milestone audit → complete → cleanup.
10
+
11
+ **Creates/Updates:**
12
+
13
+ - `.planning/STATE.md` - updated after each phase
14
+ - `.planning/ROADMAP.md` - progress updated after each phase
15
+ - Phase artifacts - CONTEXT.md, PLANs, SUMMARYs per phase
16
+
17
+ **After:** Milestone is complete and cleaned up.
18
+ </objective>
19
+
20
+ <execution_context>
21
+ @.agent/get-shit-done/workflows/autonomous.md
22
+ @.agent/get-shit-done/references/ui-brand.md
23
+ </execution_context>
24
+
25
+ <context>
26
+ Optional flag: `--from N` - start from phase N instead of the first incomplete phase.
27
+
28
+ Project context, phase list, and state are resolved inside the workflow using init commands (`gsd-tools.cjs init milestone-op`, `gsd-tools.cjs roadmap analyze`). No upfront context loading needed.
29
+ </context>
30
+
31
+ <process>
32
+ Execute the autonomous workflow from @.agent/get-shit-done/workflows/autonomous.md end-to-end.
33
+ Preserve all workflow gates (phase discovery, per-phase execution, blocker handling, progress display).
34
+ </process>
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: gsd-check-todos
3
+ description: List pending todos and select one to work on
4
+ ---
5
+
6
+
7
+ <objective>
8
+ List all pending todos, allow selection, load full context for the selected todo, and route to appropriate action.
9
+
10
+ Routes to the check-todos workflow which handles:
11
+ - Todo counting and listing with area filtering
12
+ - Interactive selection with full context loading
13
+ - Roadmap correlation checking
14
+ - Action routing (work now, add to phase, brainstorm, create phase)
15
+ - STATE.md updates and git commits
16
+ </objective>
17
+
18
+ <execution_context>
19
+ @.agent/get-shit-done/workflows/check-todos.md
20
+ </execution_context>
21
+
22
+ <context>
23
+ Arguments: $ARGUMENTS (optional area filter)
24
+
25
+ Todo state and roadmap correlation are loaded in-workflow using `init todos` and targeted reads.
26
+ </context>
27
+
28
+ <process>
29
+ **Follow the check-todos workflow** from `@.agent/get-shit-done/workflows/check-todos.md`.
30
+
31
+ The workflow handles all logic including:
32
+ 1. Todo existence checking
33
+ 2. Area filtering
34
+ 3. Interactive listing and selection
35
+ 4. Full context loading with file summaries
36
+ 5. Roadmap correlation checking
37
+ 6. Action offering and execution
38
+ 7. STATE.md updates
39
+ 8. Git commits
40
+ </process>
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: gsd-cleanup
3
+ description: Archive accumulated phase directories from completed milestones
4
+ ---
5
+
6
+ <objective>
7
+ Archive phase directories from completed milestones into `.planning/milestones/v{X.Y}-phases/`.
8
+
9
+ Use when `.planning/phases/` has accumulated directories from past milestones.
10
+ </objective>
11
+
12
+ <execution_context>
13
+ @.agent/get-shit-done/workflows/cleanup.md
14
+ </execution_context>
15
+
16
+ <process>
17
+ Follow the cleanup workflow at @.agent/get-shit-done/workflows/cleanup.md.
18
+ Identify completed milestones, show a dry-run summary, and archive on confirmation.
19
+ </process>