gsd-cc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +54 -0
  2. package/bin/install.js +209 -0
  3. package/package.json +29 -0
  4. package/skills/gsd/SKILL.md +178 -0
  5. package/skills/gsd/apply/.gitkeep +0 -0
  6. package/skills/gsd/apply/SKILL.md +182 -0
  7. package/skills/gsd/auto/.gitkeep +0 -0
  8. package/skills/gsd/auto/SKILL.md +129 -0
  9. package/skills/gsd/auto/auto-loop.sh +350 -0
  10. package/skills/gsd/checklists/.gitkeep +0 -0
  11. package/skills/gsd/checklists/planning-ready.md +36 -0
  12. package/skills/gsd/checklists/unify-complete.md +41 -0
  13. package/skills/gsd/discuss/.gitkeep +0 -0
  14. package/skills/gsd/discuss/SKILL.md +145 -0
  15. package/skills/gsd/plan/.gitkeep +0 -0
  16. package/skills/gsd/plan/SKILL.md +250 -0
  17. package/skills/gsd/prompts/.gitkeep +0 -0
  18. package/skills/gsd/prompts/apply-instructions.txt +98 -0
  19. package/skills/gsd/prompts/plan-instructions.txt +76 -0
  20. package/skills/gsd/prompts/reassess-instructions.txt +65 -0
  21. package/skills/gsd/prompts/unify-instructions.txt +126 -0
  22. package/skills/gsd/seed/SKILL.md +186 -0
  23. package/skills/gsd/seed/types/application/.gitkeep +0 -0
  24. package/skills/gsd/seed/types/application/config.md +30 -0
  25. package/skills/gsd/seed/types/application/guide.md +81 -0
  26. package/skills/gsd/seed/types/application/loadout.md +31 -0
  27. package/skills/gsd/seed/types/campaign/.gitkeep +0 -0
  28. package/skills/gsd/seed/types/campaign/config.md +27 -0
  29. package/skills/gsd/seed/types/campaign/guide.md +57 -0
  30. package/skills/gsd/seed/types/campaign/loadout.md +30 -0
  31. package/skills/gsd/seed/types/client/.gitkeep +0 -0
  32. package/skills/gsd/seed/types/client/config.md +27 -0
  33. package/skills/gsd/seed/types/client/guide.md +57 -0
  34. package/skills/gsd/seed/types/client/loadout.md +31 -0
  35. package/skills/gsd/seed/types/utility/.gitkeep +0 -0
  36. package/skills/gsd/seed/types/utility/config.md +27 -0
  37. package/skills/gsd/seed/types/utility/guide.md +49 -0
  38. package/skills/gsd/seed/types/utility/loadout.md +20 -0
  39. package/skills/gsd/seed/types/workflow/.gitkeep +0 -0
  40. package/skills/gsd/seed/types/workflow/config.md +28 -0
  41. package/skills/gsd/seed/types/workflow/guide.md +65 -0
  42. package/skills/gsd/seed/types/workflow/loadout.md +21 -0
  43. package/skills/gsd/status/.gitkeep +0 -0
  44. package/skills/gsd/status/SKILL.md +157 -0
  45. package/skills/gsd/templates/.gitkeep +0 -0
  46. package/skills/gsd/templates/PLAN.xml +65 -0
  47. package/skills/gsd/templates/PLANNING.md +63 -0
  48. package/skills/gsd/templates/STATE.md +41 -0
  49. package/skills/gsd/templates/UNIFY.md +43 -0
  50. package/skills/gsd/unify/.gitkeep +0 -0
  51. package/skills/gsd/unify/SKILL.md +230 -0
package/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # GSD-CC — Get Shit Done on Claude Code
2
+
3
+ A project management system for AI-powered software development. Structure your ideas, break them into executable units, and let Claude Code do the work — guided or fully autonomous.
4
+
5
+ ## Why GSD-CC?
6
+
7
+ Claude Code is the best coding agent available. But without structure, large projects degrade into chaos: context rot, lost decisions, no quality control.
8
+
9
+ GSD-CC orchestrates Claude Code with native Skills (Markdown) — no API costs, no dependencies, no custom agent.
10
+
11
+ | Feature | GSD-CC |
12
+ |---------|--------|
13
+ | Runtime | Claude Code (native) |
14
+ | Cost model | Max Plan (flat rate) |
15
+ | Dependencies | Zero (Markdown + Bash) |
16
+ | Quality control | Mandatory UNIFY after every slice |
17
+ | Boundary enforcement | Explicit DO NOT CHANGE rules per task |
18
+ | Custom project types | Drop 3 files, done |
19
+
20
+ ## Install
21
+
22
+ ```bash
23
+ npx gsd-cc # Install globally (default)
24
+ npx gsd-cc --local # Install to current project only
25
+ npx gsd-cc --uninstall
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ ```bash
31
+ claude # Open Claude Code
32
+ > /gsd-cc # That's it. The router handles the rest.
33
+ ```
34
+
35
+ GSD-CC reads your project state and suggests the next action. The full cycle:
36
+
37
+ **SEED** (ideation) → **PLAN** (tasks with acceptance criteria) → **APPLY** (execute) → **UNIFY** (mandatory plan vs. actual)
38
+
39
+ Auto-mode runs tasks autonomously via `claude -p` on your Max Plan.
40
+
41
+ ## Requirements
42
+
43
+ - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installed
44
+ - Claude Code **Max Plan** (recommended for auto-mode)
45
+ - **Git** initialized in your project
46
+ - **jq** installed (`brew install jq`) — required for auto-mode
47
+
48
+ ## Documentation
49
+
50
+ Full documentation, architecture details, and custom type guide: [GitHub](https://github.com/0ui-labs/GSD-CC)
51
+
52
+ ## License
53
+
54
+ [MIT](https://github.com/0ui-labs/GSD-CC/blob/main/LICENSE)
package/bin/install.js ADDED
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+ const readline = require('readline');
7
+
8
+ // Colors
9
+ const cyan = '\x1b[36m';
10
+ const green = '\x1b[32m';
11
+ const yellow = '\x1b[33m';
12
+ const red = '\x1b[31m';
13
+ const dim = '\x1b[2m';
14
+ const reset = '\x1b[0m';
15
+
16
+ const pkg = require('../package.json');
17
+
18
+ const banner = `
19
+ ${cyan} ██████╗ ███████╗██████╗ ██████╗ ██████╗
20
+ ██╔════╝ ██╔════╝██╔══██╗ ██╔════╝██╔════╝
21
+ ██║ ███╗███████╗██║ ██║█████╗██║ ██║
22
+ ██║ ██║╚════██║██║ ██║╚════╝██║ ██║
23
+ ╚██████╔╝███████║██████╔╝ ╚██████╗╚██████╗
24
+ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝${reset}
25
+
26
+ Get Shit Done on Claude Code ${dim}v${pkg.version}${reset}
27
+ `;
28
+
29
+ // Parse args
30
+ const args = process.argv.slice(2);
31
+ const hasGlobal = args.includes('--global') || args.includes('-g');
32
+ const hasLocal = args.includes('--local') || args.includes('-l');
33
+ const hasUninstall = args.includes('--uninstall');
34
+ const hasHelp = args.includes('--help') || args.includes('-h');
35
+
36
+ console.log(banner);
37
+
38
+ if (hasHelp) {
39
+ console.log(` ${yellow}Usage:${reset} npx gsd-cc [options]
40
+
41
+ ${yellow}Options:${reset}
42
+ ${cyan}-g, --global${reset} Install globally to ~/.claude/skills/gsd/ ${dim}(default)${reset}
43
+ ${cyan}-l, --local${reset} Install locally to ./.claude/skills/gsd/
44
+ ${cyan}--uninstall${reset} Remove GSD-CC skills
45
+ ${cyan}-h, --help${reset} Show this help message
46
+
47
+ ${yellow}Examples:${reset}
48
+ ${dim}# Install globally (default)${reset}
49
+ npx gsd-cc
50
+
51
+ ${dim}# Install to current project only${reset}
52
+ npx gsd-cc --local
53
+
54
+ ${dim}# Remove GSD-CC${reset}
55
+ npx gsd-cc --uninstall
56
+ `);
57
+ process.exit(0);
58
+ }
59
+
60
+ /**
61
+ * Recursively copy a directory
62
+ */
63
+ function copyDir(src, dest) {
64
+ fs.mkdirSync(dest, { recursive: true });
65
+ const entries = fs.readdirSync(src, { withFileTypes: true });
66
+
67
+ for (const entry of entries) {
68
+ const srcPath = path.join(src, entry.name);
69
+ const destPath = path.join(dest, entry.name);
70
+
71
+ if (entry.isDirectory()) {
72
+ copyDir(srcPath, destPath);
73
+ } else {
74
+ fs.copyFileSync(srcPath, destPath);
75
+ }
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Remove a directory recursively
81
+ */
82
+ function removeDir(dir) {
83
+ if (fs.existsSync(dir)) {
84
+ fs.rmSync(dir, { recursive: true, force: true });
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+
90
+ /**
91
+ * Resolve target directory
92
+ */
93
+ function getTargetDir(isGlobal) {
94
+ if (isGlobal) {
95
+ return path.join(os.homedir(), '.claude', 'skills', 'gsd');
96
+ }
97
+ return path.join(process.cwd(), '.claude', 'skills', 'gsd');
98
+ }
99
+
100
+ /**
101
+ * Install skills to target directory
102
+ */
103
+ function install(isGlobal) {
104
+ const skillsSrc = path.join(__dirname, '..', 'skills', 'gsd');
105
+ const targetDir = getTargetDir(isGlobal);
106
+ const label = isGlobal
107
+ ? targetDir.replace(os.homedir(), '~')
108
+ : targetDir.replace(process.cwd(), '.');
109
+
110
+ if (!fs.existsSync(skillsSrc)) {
111
+ console.error(` ${red}Error:${reset} Skills source not found at ${skillsSrc}`);
112
+ process.exit(1);
113
+ }
114
+
115
+ console.log(` Installing to ${cyan}${label}${reset}\n`);
116
+
117
+ // Copy skills
118
+ copyDir(skillsSrc, targetDir);
119
+
120
+ // Make auto-loop.sh executable if it exists
121
+ const autoLoop = path.join(targetDir, 'auto', 'auto-loop.sh');
122
+ if (fs.existsSync(autoLoop)) {
123
+ fs.chmodSync(autoLoop, 0o755);
124
+ }
125
+
126
+ // Count installed files
127
+ let fileCount = 0;
128
+ function countFiles(dir) {
129
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
130
+ for (const entry of entries) {
131
+ if (entry.isDirectory()) {
132
+ countFiles(path.join(dir, entry.name));
133
+ } else {
134
+ fileCount++;
135
+ }
136
+ }
137
+ }
138
+ countFiles(targetDir);
139
+
140
+ console.log(` ${green}✓${reset} Installed ${fileCount} files to ${label}`);
141
+ console.log(`
142
+ ${green}Done.${reset} Open Claude Code and type ${cyan}/gsd-cc${reset} to start.
143
+ `);
144
+ }
145
+
146
+ /**
147
+ * Uninstall skills
148
+ */
149
+ function uninstall() {
150
+ const globalDir = getTargetDir(true);
151
+ const localDir = getTargetDir(false);
152
+
153
+ let removed = false;
154
+
155
+ if (removeDir(globalDir)) {
156
+ console.log(` ${green}✓${reset} Removed global install (${globalDir.replace(os.homedir(), '~')})`);
157
+ removed = true;
158
+ }
159
+
160
+ if (removeDir(localDir)) {
161
+ console.log(` ${green}✓${reset} Removed local install (${localDir.replace(process.cwd(), '.')})`);
162
+ removed = true;
163
+ }
164
+
165
+ if (!removed) {
166
+ console.log(` ${yellow}No GSD-CC installation found.${reset}`);
167
+ } else {
168
+ console.log(`\n ${green}Done.${reset} GSD-CC has been removed.`);
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Prompt for install location
174
+ */
175
+ function promptLocation() {
176
+ const rl = readline.createInterface({
177
+ input: process.stdin,
178
+ output: process.stdout,
179
+ });
180
+
181
+ const globalPath = getTargetDir(true).replace(os.homedir(), '~');
182
+
183
+ console.log(` ${yellow}Where would you like to install?${reset}
184
+
185
+ ${cyan}1${reset}) Global ${dim}(${globalPath})${reset} — available in all projects
186
+ ${cyan}2${reset}) Local ${dim}(./.claude/skills/gsd/)${reset} — this project only
187
+ `);
188
+
189
+ rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
190
+ rl.close();
191
+ console.log();
192
+ const choice = answer.trim() || '1';
193
+ install(choice !== '2');
194
+ });
195
+ }
196
+
197
+ // Main
198
+ if (hasUninstall) {
199
+ uninstall();
200
+ } else if (hasGlobal && hasLocal) {
201
+ console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
202
+ process.exit(1);
203
+ } else if (hasGlobal) {
204
+ install(true);
205
+ } else if (hasLocal) {
206
+ install(false);
207
+ } else {
208
+ promptLocation();
209
+ }
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "gsd-cc",
3
+ "version": "0.1.0",
4
+ "description": "Get Shit Done on Claude Code — structured AI development with your Max plan",
5
+ "author": "Philipp Briese (https://github.com/0ui-labs)",
6
+ "homepage": "https://github.com/0ui-labs/GSD-CC#readme",
7
+ "bin": {
8
+ "gsd-cc": "./bin/install.js"
9
+ },
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "claude-code",
13
+ "ai-development",
14
+ "project-management",
15
+ "gsd",
16
+ "claude",
17
+ "anthropic",
18
+ "coding-agent",
19
+ "ai-agents",
20
+ "developer-tools"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/0ui-labs/GSD-CC"
25
+ },
26
+ "engines": {
27
+ "node": ">=16.0.0"
28
+ }
29
+ }
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: gsd-cc
3
+ description: >
4
+ GSD project management. Reads .gsd/STATE.md and suggests the one
5
+ next action. Use when user types /gsd-cc, mentions project planning,
6
+ milestones, slices, or tasks. Also triggers when no .gsd/ exists
7
+ and user wants to start a new project.
8
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
9
+ ---
10
+
11
+ # /gsd-cc — Main Router
12
+
13
+ You are the GSD-CC router. Your job is to read the current project state and suggest **exactly one** next action. Not a menu. Not "what do you want to do?". One clear recommendation.
14
+
15
+ ## Step 1: Detect State
16
+
17
+ Check what exists on disk:
18
+
19
+ ```
20
+ 1. Does .gsd/ directory exist?
21
+ 2. Does .gsd/STATE.md exist? If yes, read it.
22
+ 3. Does .gsd/PLANNING.md exist?
23
+ 4. Does .gsd/M001-ROADMAP.md exist? (check for any M*-ROADMAP.md)
24
+ 5. Does .gsd/auto.lock exist? (crash/interrupt)
25
+ 6. Which S*-PLAN.md files exist?
26
+ 7. Which S*-UNIFY.md files exist?
27
+ 8. Which S*-T*-SUMMARY.md files exist?
28
+ ```
29
+
30
+ Use `Glob` to check for file patterns. Use `Read` for STATE.md.
31
+
32
+ ## Step 2: Route to Action
33
+
34
+ Follow this decision tree **top to bottom**. Take the FIRST match:
35
+
36
+ ### Crash Recovery
37
+ ```
38
+ IF .gsd/auto.lock exists:
39
+ → Read the lock file.
40
+ → Check if the task's SUMMARY.md exists.
41
+ - If SUMMARY exists: "S{nn}/T{nn} finished but auto-mode was interrupted. Clean up and continue?"
42
+ - If no SUMMARY: "S{nn}/T{nn} was interrupted mid-execution. Resume or restart this task?"
43
+ → Wait for user confirmation, then delete auto.lock and proceed.
44
+ ```
45
+
46
+ ### No Project
47
+ ```
48
+ IF .gsd/ does not exist:
49
+ → "No project found. What do you want to build?"
50
+ → Delegate to /gsd-cc-seed for ideation.
51
+ ```
52
+
53
+ ### Ideation Done, No Roadmap
54
+ ```
55
+ IF .gsd/PLANNING.md exists AND no M*-ROADMAP.md exists:
56
+ → "Your plan is ready. Shall I create a roadmap with milestones and slices?"
57
+ → On confirmation: read PLANNING.md and PROJECT.md, create M001-ROADMAP.md
58
+ with slices, update STATE.md.
59
+ ```
60
+
61
+ ### Roadmap Exists, Next Slice Needs Planning
62
+ ```
63
+ IF M*-ROADMAP.md exists AND there are slices without a S*-PLAN.md:
64
+ → Find the first unplanned slice.
65
+ → "Next up: S{nn} — {slice name}. Plan it in detail?"
66
+ → On confirmation: delegate to /gsd-cc-plan.
67
+ ```
68
+
69
+ ### Plan Ready, Not Executed
70
+ ```
71
+ IF S*-PLAN.md exists for current slice AND no T*-SUMMARY.md files for it:
72
+ → "S{nn} is planned with {n} tasks. Execute manually or auto?"
73
+ → "manual" → delegate to /gsd-cc-apply
74
+ → "auto" → delegate to /gsd-cc-auto
75
+ ```
76
+
77
+ ### Execution In Progress
78
+ ```
79
+ IF some T*-SUMMARY.md exist but not all tasks are done:
80
+ → Find next incomplete task.
81
+ → "S{nn}/T{nn} is next: {task name}. Continue?"
82
+ → On confirmation: delegate to /gsd-cc-apply for that task.
83
+ ```
84
+
85
+ ### UNIFY Required (MANDATORY — NO ESCAPE)
86
+ ```
87
+ IF all tasks for current slice have SUMMARY.md files
88
+ AND no S*-UNIFY.md exists for that slice:
89
+ → "All tasks for S{nn} are done. UNIFY is required before moving on."
90
+ → Do NOT offer alternatives. Do NOT let the user skip.
91
+ → Delegate to /gsd-cc-unify immediately.
92
+ ```
93
+
94
+ ### UNIFY Done, Next Slice
95
+ ```
96
+ IF S*-UNIFY.md exists for current slice:
97
+ → Check roadmap for next pending slice.
98
+ → If next slice exists: "S{nn} complete and unified. Continue with S{nn+1} — {name}?"
99
+ → If no next slice: go to Milestone Complete.
100
+ ```
101
+
102
+ ### Milestone Complete
103
+ ```
104
+ IF all slices are unified:
105
+ → "Milestone M{n} is complete! All slices planned, executed, and unified."
106
+ → "Start a new milestone or wrap up?"
107
+ ```
108
+
109
+ ## Step 3: Respond
110
+
111
+ Follow these UX rules strictly:
112
+
113
+ 1. **One action.** Always suggest exactly ONE thing. Never present a numbered menu.
114
+ 2. **Be direct.** State where we are and what's next. No preamble.
115
+ 3. **Quick confirmation.** If the user says "yes", "go", "ja", "weiter", "ok", "do it" — execute immediately. Don't ask again.
116
+ 4. **Show context.** Include the current milestone, slice, and task position so the user knows where they are.
117
+ 5. **Short format.** Use this structure:
118
+
119
+ ```
120
+ {Current position — e.g. "M001 / S02 / T03"}
121
+
122
+ {What just happened or where we are — one line}
123
+
124
+ {Suggested next action — one line, phrased as a question or suggestion}
125
+ ```
126
+
127
+ Example:
128
+ ```
129
+ M001 / S01
130
+
131
+ Planning complete. 3 tasks, 4 acceptance criteria.
132
+
133
+ Execute S01? (manual or auto)
134
+ ```
135
+
136
+ ## Delegating to Sub-Skills
137
+
138
+ When routing to a sub-skill, tell the user what you're doing and then invoke the skill:
139
+ - Ideation → `/gsd-cc-seed`
140
+ - Discussion → `/gsd-cc-discuss`
141
+ - Planning → `/gsd-cc-plan`
142
+ - Execution → `/gsd-cc-apply`
143
+ - Reconciliation → `/gsd-cc-unify`
144
+ - Auto mode → `/gsd-cc-auto`
145
+ - Status overview → `/gsd-cc-status`
146
+
147
+ Power users can invoke these directly. But the default path only needs `/gsd-cc` + Enter.
148
+
149
+ ## Roadmap Creation
150
+
151
+ When the user confirms roadmap creation (after PLANNING.md exists):
152
+
153
+ 1. Read `.gsd/PLANNING.md` and `.gsd/PROJECT.md`
154
+ 2. Read `.gsd/type.json` for rigor level
155
+ 3. Break the project into **slices** — each slice is a coherent unit of work:
156
+ - A slice should be completable in 2-7 tasks
157
+ - Each task must fit in one context window
158
+ - Slices should be ordered by dependency (foundations first)
159
+ 4. Write `.gsd/M001-ROADMAP.md` with this format:
160
+
161
+ ```markdown
162
+ # M001 — {Milestone Name}
163
+
164
+ ## Slices
165
+
166
+ ### S01 — {Slice Name}
167
+ {One paragraph description of what this slice delivers}
168
+
169
+ ### S02 — {Slice Name}
170
+ {One paragraph description}
171
+
172
+ ...
173
+ ```
174
+
175
+ 5. Update `.gsd/STATE.md`:
176
+ - Set `current_slice: S01`
177
+ - Set `phase: roadmap-complete`
178
+ - Update the Progress table with all slices as `pending`
File without changes
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: gsd-cc-apply
3
+ description: >
4
+ Execute the next task in the current slice. Loads task plan, enforces
5
+ boundaries, implements actions, verifies acceptance criteria, writes
6
+ summary, commits to git. Use when /gsd-cc routes here, when user says
7
+ /gsd-cc-apply, or when a planned slice is ready for execution.
8
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
9
+ ---
10
+
11
+ # /gsd-cc-apply — Task Execution
12
+
13
+ You execute one task at a time from the current slice plan. Each task has a plan with acceptance criteria and boundaries. Follow the plan precisely.
14
+
15
+ ## Step 1: Determine Current Task
16
+
17
+ 1. Read `.gsd/STATE.md` — get `current_slice` and `current_task`
18
+ 2. If `current_task` is `—` or empty, start with `T01`
19
+ 3. Construct the task plan path: `.gsd/S{nn}-T{nn}-PLAN.md`
20
+
21
+ If the task plan file doesn't exist, stop and tell the user: "No plan found for S{nn}/T{nn}. Run /gsd-cc-plan first."
22
+
23
+ ## Step 2: Load Context (Context Matrix)
24
+
25
+ Load ONLY these files — nothing else:
26
+
27
+ | File | Purpose |
28
+ |------|---------|
29
+ | `.gsd/S{nn}-T{nn}-PLAN.md` | The task plan (primary input) |
30
+ | `.gsd/S{nn}-PLAN.md` | Slice overview for context |
31
+ | `.gsd/DECISIONS.md` | Decisions that affect implementation |
32
+ | `.gsd/S{nn}-T{prev}-SUMMARY.md` | Previous task summaries (all that exist for this slice) |
33
+
34
+ **Do NOT load:** PLANNING.md, ROADMAP.md, PROJECT.md, RESEARCH.md, CONTEXT.md, or files from other slices. These are not needed during execution and waste context window space.
35
+
36
+ ## Step 3: Read and Announce the Plan
37
+
38
+ Parse the task plan XML. Display to the user:
39
+
40
+ ```
41
+ S{nn} / T{nn} — {task name}
42
+
43
+ Files: {file list}
44
+ ACs: {count} acceptance criteria
45
+ ```
46
+
47
+ Then read the boundaries aloud:
48
+
49
+ ```
50
+ Boundaries:
51
+ DO NOT CHANGE: {file list with reasons}
52
+ ```
53
+
54
+ This makes boundaries visible to you and to the user before any code is written.
55
+
56
+ ## Step 4: Enforce Boundaries
57
+
58
+ Before writing any code, internalize the boundary rules:
59
+
60
+ **For each file listed in `<boundaries>` as DO NOT CHANGE:**
61
+ - Do NOT open it in Edit
62
+ - Do NOT write to it
63
+ - You MAY Read it for reference
64
+ - If you find yourself needing to change a boundary file, STOP and tell the user: "T{nn} needs to modify {file} which is in the boundaries. This is a plan issue — should I adjust?"
65
+
66
+ This is non-negotiable. Boundary violations are tracked in UNIFY.
67
+
68
+ ## Step 5: Execute Actions
69
+
70
+ Follow the `<action>` steps from the task plan. For each step:
71
+
72
+ 1. **Do exactly what it says.** Don't reinterpret or "improve" the plan.
73
+ 2. **Create or modify files** as specified in `<files>`.
74
+ 3. **Write tests** if the action says to write tests.
75
+ 4. **Reference ACs** — make sure your implementation satisfies the acceptance criteria.
76
+
77
+ If you encounter an issue during execution:
78
+ - **Minor issue** (typo in plan, obvious small fix): fix it, note it in the summary.
79
+ - **Major issue** (plan is wrong, dependency missing, approach doesn't work): STOP. Tell the user. Don't improvise a different approach.
80
+
81
+ ## Step 6: Verify Acceptance Criteria
82
+
83
+ Run the `<verify>` command from the task plan. For each AC:
84
+
85
+ ```
86
+ AC-1: {Given/When/Then summary}
87
+ → Pass ✓ | Partial ⚠ | Fail ✗
88
+ Evidence: {test output, manual verification, etc.}
89
+ ```
90
+
91
+ **All ACs must pass before proceeding.** If an AC fails:
92
+ 1. Try to fix the issue (within the scope of this task)
93
+ 2. Re-run verification
94
+ 3. If it still fails after a reasonable attempt, mark it as Partial or Fail and note why in the summary
95
+
96
+ ## Step 7: Write Task Summary
97
+
98
+ Create `.gsd/S{nn}-T{nn}-SUMMARY.md`:
99
+
100
+ ```markdown
101
+ # S{nn}/T{nn} — {task name}
102
+
103
+ ## Status
104
+ {complete | partial | blocked}
105
+
106
+ ## What Was Done
107
+ {Brief description of what was implemented, 3-5 bullet points}
108
+
109
+ ## Files Changed
110
+ {List of files created or modified, with one-line description each}
111
+
112
+ ## Acceptance Criteria Results
113
+
114
+ | AC | Status | Evidence |
115
+ |----|--------|----------|
116
+ | AC-1 | Pass ✓ | {evidence} |
117
+ | AC-2 | Pass ✓ | {evidence} |
118
+
119
+ ## Decisions Made
120
+ {Any implementation decisions not in the original plan, with rationale.
121
+ "None — implemented as planned." if nothing deviated.}
122
+
123
+ ## Issues
124
+ {Any problems encountered. "None." if clean execution.}
125
+ ```
126
+
127
+ ## Step 8: Git Commit
128
+
129
+ Stage and commit the changes from this task:
130
+
131
+ ```bash
132
+ git add {specific files changed by this task}
133
+ git commit -m "feat(S{nn}/T{nn}): {task name}"
134
+ ```
135
+
136
+ **Commit only the files this task changed.** Do not `git add -A` — that could include unrelated changes.
137
+
138
+ ## Step 9: Update STATE.md
139
+
140
+ Determine what comes next:
141
+
142
+ ### If there are more tasks in this slice:
143
+ ```
144
+ current_task: T{nn+1}
145
+ phase: applying
146
+ ```
147
+
148
+ ### If this was the LAST task in the slice:
149
+ ```
150
+ current_task: T{nn}
151
+ phase: apply-complete
152
+ unify_required: true
153
+ ```
154
+
155
+ Setting `phase: apply-complete` triggers the UNIFY requirement. The `/gsd-cc` router will not allow any other action until UNIFY is done.
156
+
157
+ Update the Progress table in STATE.md with the AC results.
158
+
159
+ ## Step 10: Report and Continue
160
+
161
+ ```
162
+ S{nn}/T{nn} complete.
163
+
164
+ AC-1: Pass ✓
165
+ AC-2: Pass ✓
166
+ Committed: feat(S{nn}/T{nn}): {task name}
167
+
168
+ {If more tasks: "Next: T{nn+1} — {name}. Continue?"}
169
+ {If last task: "All tasks done. UNIFY is required next. Type /gsd-cc to proceed."}
170
+ ```
171
+
172
+ If the user says "yes", "go", "weiter" — immediately start the next task (go back to Step 1 with the next task).
173
+
174
+ ## Multi-Task Flow
175
+
176
+ In manual mode, the user stays in the session. After each task:
177
+ - Report results
178
+ - Ask if they want to continue
179
+ - If yes, seamlessly start the next task
180
+ - The user can interrupt at any time between tasks
181
+
182
+ This is different from auto mode (`/gsd-cc-auto`), where each task gets its own fresh `claude -p` session.
File without changes