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.
- package/README.md +54 -0
- package/bin/install.js +209 -0
- package/package.json +29 -0
- package/skills/gsd/SKILL.md +178 -0
- package/skills/gsd/apply/.gitkeep +0 -0
- package/skills/gsd/apply/SKILL.md +182 -0
- package/skills/gsd/auto/.gitkeep +0 -0
- package/skills/gsd/auto/SKILL.md +129 -0
- package/skills/gsd/auto/auto-loop.sh +350 -0
- package/skills/gsd/checklists/.gitkeep +0 -0
- package/skills/gsd/checklists/planning-ready.md +36 -0
- package/skills/gsd/checklists/unify-complete.md +41 -0
- package/skills/gsd/discuss/.gitkeep +0 -0
- package/skills/gsd/discuss/SKILL.md +145 -0
- package/skills/gsd/plan/.gitkeep +0 -0
- package/skills/gsd/plan/SKILL.md +250 -0
- package/skills/gsd/prompts/.gitkeep +0 -0
- package/skills/gsd/prompts/apply-instructions.txt +98 -0
- package/skills/gsd/prompts/plan-instructions.txt +76 -0
- package/skills/gsd/prompts/reassess-instructions.txt +65 -0
- package/skills/gsd/prompts/unify-instructions.txt +126 -0
- package/skills/gsd/seed/SKILL.md +186 -0
- package/skills/gsd/seed/types/application/.gitkeep +0 -0
- package/skills/gsd/seed/types/application/config.md +30 -0
- package/skills/gsd/seed/types/application/guide.md +81 -0
- package/skills/gsd/seed/types/application/loadout.md +31 -0
- package/skills/gsd/seed/types/campaign/.gitkeep +0 -0
- package/skills/gsd/seed/types/campaign/config.md +27 -0
- package/skills/gsd/seed/types/campaign/guide.md +57 -0
- package/skills/gsd/seed/types/campaign/loadout.md +30 -0
- package/skills/gsd/seed/types/client/.gitkeep +0 -0
- package/skills/gsd/seed/types/client/config.md +27 -0
- package/skills/gsd/seed/types/client/guide.md +57 -0
- package/skills/gsd/seed/types/client/loadout.md +31 -0
- package/skills/gsd/seed/types/utility/.gitkeep +0 -0
- package/skills/gsd/seed/types/utility/config.md +27 -0
- package/skills/gsd/seed/types/utility/guide.md +49 -0
- package/skills/gsd/seed/types/utility/loadout.md +20 -0
- package/skills/gsd/seed/types/workflow/.gitkeep +0 -0
- package/skills/gsd/seed/types/workflow/config.md +28 -0
- package/skills/gsd/seed/types/workflow/guide.md +65 -0
- package/skills/gsd/seed/types/workflow/loadout.md +21 -0
- package/skills/gsd/status/.gitkeep +0 -0
- package/skills/gsd/status/SKILL.md +157 -0
- package/skills/gsd/templates/.gitkeep +0 -0
- package/skills/gsd/templates/PLAN.xml +65 -0
- package/skills/gsd/templates/PLANNING.md +63 -0
- package/skills/gsd/templates/STATE.md +41 -0
- package/skills/gsd/templates/UNIFY.md +43 -0
- package/skills/gsd/unify/.gitkeep +0 -0
- 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
|