@slamb2k/mad-skills 2.0.17 → 2.0.19
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/.claude-plugin/plugin.json +1 -1
- package/hooks/hooks.json +2 -2
- package/hooks/lib/state.cjs +22 -1
- package/hooks/session-guard.cjs +124 -17
- package/package.json +1 -1
- package/skills/brace/SKILL.md +33 -8
- package/skills/brace/references/report-template.md +37 -33
- package/skills/build/SKILL.md +52 -21
- package/skills/distil/SKILL.md +56 -14
- package/skills/dock/SKILL.md +54 -18
- package/skills/keel/SKILL.md +30 -33
- package/skills/manifest.json +11 -11
- package/skills/prime/SKILL.md +41 -6
- package/skills/rig/SKILL.md +33 -8
- package/skills/rig/references/report-template.md +25 -22
- package/skills/ship/SKILL.md +46 -11
- package/skills/speccy/SKILL.md +47 -7
- package/skills/sync/SKILL.md +40 -9
package/hooks/hooks.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"hooks": {
|
|
3
3
|
"SessionStart": [{
|
|
4
4
|
"matcher": "startup|clear|compact",
|
|
5
|
-
"hooks": [{ "type": "command", "command": "node
|
|
5
|
+
"hooks": [{ "type": "command", "command": "_R=\"${CLAUDE_PLUGIN_ROOT}\"; [ -z \"$_R\" ] && _R=\"$HOME/.claude/plugins/marketplaces/slamb2k\"; node \"$_R/hooks/session-guard.cjs\" check", "timeout": 30 }]
|
|
6
6
|
}],
|
|
7
7
|
"UserPromptSubmit": [{
|
|
8
|
-
"hooks": [{ "type": "command", "command": "node
|
|
8
|
+
"hooks": [{ "type": "command", "command": "_R=\"${CLAUDE_PLUGIN_ROOT}\"; [ -z \"$_R\" ] && _R=\"$HOME/.claude/plugins/marketplaces/slamb2k\"; node \"$_R/hooks/session-guard.cjs\" remind", "timeout": 10 }]
|
|
9
9
|
}]
|
|
10
10
|
}
|
|
11
11
|
}
|
package/hooks/lib/state.cjs
CHANGED
|
@@ -49,4 +49,25 @@ function isRecentlyChecked(projectDir, seconds = 5) {
|
|
|
49
49
|
return (Date.now() - data.timestamp) < seconds * 1000;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
// ─── persistent per-project preferences ───────────────────────────────
|
|
53
|
+
|
|
54
|
+
function prefsPath(projectDir) {
|
|
55
|
+
return join(STATE_DIR, `${projectKey(projectDir)}-prefs.json`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function loadPrefs(projectDir) {
|
|
59
|
+
const path = prefsPath(projectDir);
|
|
60
|
+
if (!existsSync(path)) return {};
|
|
61
|
+
try {
|
|
62
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
63
|
+
} catch {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function savePrefs(projectDir, prefs) {
|
|
69
|
+
ensureDir();
|
|
70
|
+
writeFileSync(prefsPath(projectDir), JSON.stringify(prefs, null, 2));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = { save, load, clear, isRecentlyChecked, loadPrefs, savePrefs };
|
package/hooks/session-guard.cjs
CHANGED
|
@@ -57,7 +57,8 @@ function check() {
|
|
|
57
57
|
'No CLAUDE.md found. Want me to set up this project for Claude Code?',
|
|
58
58
|
'single_select',
|
|
59
59
|
[
|
|
60
|
-
'"
|
|
60
|
+
'"Set up with BRACE" \u2014 run `/brace` to scaffold CLAUDE.md + GOTCHA framework (goals, tools, context)',
|
|
61
|
+
'"Basic init" \u2014 run `/init` to scaffold CLAUDE.md only',
|
|
61
62
|
'"Skip" \u2014 continue without one',
|
|
62
63
|
],
|
|
63
64
|
);
|
|
@@ -67,6 +68,12 @@ function check() {
|
|
|
67
68
|
|
|
68
69
|
output.add(`[SESSION GUARD] \u2705 CLAUDE.md found in: ${PROJECT_DIR}`);
|
|
69
70
|
|
|
71
|
+
// 1b) BRACE framework check
|
|
72
|
+
checkBrace(PROJECT_DIR, output);
|
|
73
|
+
|
|
74
|
+
// 1c) Rig (dev tooling) check
|
|
75
|
+
checkRig(PROJECT_DIR, output);
|
|
76
|
+
|
|
70
77
|
// 2) Task List ID
|
|
71
78
|
checkTaskList(PROJECT_DIR, gitRoot, output);
|
|
72
79
|
|
|
@@ -111,33 +118,119 @@ function remind() {
|
|
|
111
118
|
|
|
112
119
|
state.clear(PROJECT_DIR);
|
|
113
120
|
|
|
114
|
-
//
|
|
115
|
-
if (!pending.context.includes('\u26A0\uFE0F') && !pending.context.includes('\u2139\uFE0F')) {
|
|
116
|
-
console.log(JSON.stringify({}));
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Strip banner from re-emission (already shown at SessionStart)
|
|
121
|
+
// Split into banner and SESSION GUARD body
|
|
121
122
|
const lines = pending.context.split('\n');
|
|
122
123
|
const guardIdx = lines.findIndex(l => l.startsWith('[SESSION GUARD]'));
|
|
124
|
+
const banner = guardIdx >= 0 ? lines.slice(0, guardIdx).join('\n').trim() : '';
|
|
123
125
|
const body = guardIdx >= 0 ? lines.slice(guardIdx).join('\n') : pending.context;
|
|
124
126
|
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
const hasWarnings = pending.context.includes('\u26A0\uFE0F') || pending.context.includes('\u2139\uFE0F');
|
|
128
|
+
const parts = [];
|
|
129
|
+
|
|
130
|
+
// Always include banner with display directive
|
|
131
|
+
if (banner) {
|
|
132
|
+
parts.push(
|
|
133
|
+
'[SESSION GUARD] DISPLAY: Render the banner below in a fenced code block before any other response.',
|
|
134
|
+
'',
|
|
135
|
+
banner,
|
|
136
|
+
'',
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Include warnings/signals if present
|
|
141
|
+
if (hasWarnings) {
|
|
142
|
+
parts.push(
|
|
143
|
+
'[SESSION GUARD \u2014 FIRST PROMPT REMINDER]',
|
|
144
|
+
'The following was detected at session start. Act on these items NOW using',
|
|
145
|
+
'AskUserQuestion BEFORE proceeding with the user\'s request.',
|
|
146
|
+
'',
|
|
147
|
+
body,
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Nothing to emit (no banner, no warnings)
|
|
152
|
+
if (parts.length === 0) {
|
|
153
|
+
console.log(JSON.stringify({}));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
132
156
|
|
|
133
157
|
console.log(JSON.stringify({
|
|
134
158
|
hookSpecificOutput: {
|
|
135
159
|
hookEventName: 'UserPromptSubmit',
|
|
136
|
-
additionalContext:
|
|
160
|
+
additionalContext: parts.join('\n'),
|
|
137
161
|
},
|
|
138
162
|
}));
|
|
139
163
|
}
|
|
140
164
|
|
|
165
|
+
// ─── brace check ──────────────────────────────────────────────────
|
|
166
|
+
|
|
167
|
+
function checkBrace(projectDir, output) {
|
|
168
|
+
const manifest = join(projectDir, 'goals', 'manifest.md');
|
|
169
|
+
if (existsSync(manifest)) return; // BRACE already set up
|
|
170
|
+
|
|
171
|
+
const prefs = state.loadPrefs(projectDir);
|
|
172
|
+
if (prefs.braceDismissed) return; // User said don't ask again
|
|
173
|
+
|
|
174
|
+
output.add('[SESSION GUARD] \u2139\uFE0F CLAUDE.md exists but no GOTCHA/BRACE framework detected.');
|
|
175
|
+
output.add('[SESSION GUARD] BRACE_DISMISS: If the user selects "Don\'t ask again", run: node <path-to-session-guard.cjs> dismiss-brace');
|
|
176
|
+
output.addQuestion(
|
|
177
|
+
'This project has a CLAUDE.md but no GOTCHA/BRACE framework (goals/, tools/, context/). Want to set it up?',
|
|
178
|
+
'single_select',
|
|
179
|
+
[
|
|
180
|
+
'"Set up BRACE" \u2014 run `/brace` to add the GOTCHA framework structure',
|
|
181
|
+
'"Not now" \u2014 skip for this session',
|
|
182
|
+
'"Don\'t ask again" \u2014 dismiss permanently for this project',
|
|
183
|
+
],
|
|
184
|
+
'low',
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// ─── rig check ────────────────────────────────────────────────────
|
|
189
|
+
|
|
190
|
+
const PLATFORM_MARKERS = [
|
|
191
|
+
'package.json', 'pyproject.toml', 'requirements.txt', 'setup.py',
|
|
192
|
+
'go.mod', 'Cargo.toml', 'Gemfile', 'pom.xml', 'build.gradle',
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
const INFRA_MARKERS = [
|
|
196
|
+
'lefthook.yml', '.lefthook.yml', // git hooks
|
|
197
|
+
'.husky', // git hooks (alt)
|
|
198
|
+
'.gitmessage', // commit template
|
|
199
|
+
'.github/pull_request_template.md', // PR template (GitHub)
|
|
200
|
+
'.azuredevops/pull_request_template.md', // PR template (Azure)
|
|
201
|
+
'.github/workflows', // CI (GitHub Actions)
|
|
202
|
+
'azure-pipelines.yml', // CI (Azure DevOps)
|
|
203
|
+
'.gitlab-ci.yml', // CI (GitLab)
|
|
204
|
+
'Jenkinsfile', // CI (Jenkins)
|
|
205
|
+
'.circleci', // CI (CircleCI)
|
|
206
|
+
];
|
|
207
|
+
|
|
208
|
+
function checkRig(projectDir, output) {
|
|
209
|
+
const prefs = state.loadPrefs(projectDir);
|
|
210
|
+
if (prefs.rigDismissed) return;
|
|
211
|
+
|
|
212
|
+
// Need at least one platform
|
|
213
|
+
const hasPlatform = PLATFORM_MARKERS.some(f => existsSync(join(projectDir, f)));
|
|
214
|
+
if (!hasPlatform) return;
|
|
215
|
+
|
|
216
|
+
// If any infra marker exists, rig is (at least partially) set up
|
|
217
|
+
const hasInfra = INFRA_MARKERS.some(f => existsSync(join(projectDir, f)));
|
|
218
|
+
if (hasInfra) return;
|
|
219
|
+
|
|
220
|
+
output.add('[SESSION GUARD] \u2139\uFE0F Project has code but no dev tooling (hooks, CI, PR templates) detected.');
|
|
221
|
+
output.add('[SESSION GUARD] RIG_DISMISS: If the user selects "Don\'t ask again", run: node <path-to-session-guard.cjs> dismiss-rig');
|
|
222
|
+
output.addQuestion(
|
|
223
|
+
'No dev tooling detected (git hooks, CI, PR templates, commit templates). Want to set it up?',
|
|
224
|
+
'single_select',
|
|
225
|
+
[
|
|
226
|
+
'"Set up with /rig" \u2014 configure lefthook, CI workflow, PR template, commit template',
|
|
227
|
+
'"Not now" \u2014 skip for this session',
|
|
228
|
+
'"Don\'t ask again" \u2014 dismiss permanently for this project',
|
|
229
|
+
],
|
|
230
|
+
'low',
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
141
234
|
// ─── helpers ───────────────────────────────────────────────────────────
|
|
142
235
|
|
|
143
236
|
function emit(output) {
|
|
@@ -160,8 +253,22 @@ switch (command) {
|
|
|
160
253
|
case 'remind':
|
|
161
254
|
remind();
|
|
162
255
|
break;
|
|
256
|
+
case 'dismiss-brace': {
|
|
257
|
+
const prefs = state.loadPrefs(PROJECT_DIR);
|
|
258
|
+
prefs.braceDismissed = true;
|
|
259
|
+
state.savePrefs(PROJECT_DIR, prefs);
|
|
260
|
+
console.log(`BRACE prompt dismissed for ${PROJECT_DIR}`);
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case 'dismiss-rig': {
|
|
264
|
+
const prefs = state.loadPrefs(PROJECT_DIR);
|
|
265
|
+
prefs.rigDismissed = true;
|
|
266
|
+
state.savePrefs(PROJECT_DIR, prefs);
|
|
267
|
+
console.log(`Rig prompt dismissed for ${PROJECT_DIR}`);
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
163
270
|
default:
|
|
164
271
|
console.error(`Session Guard v${config.version}`);
|
|
165
|
-
console.error('Usage: node session-guard.js <check|remind>');
|
|
272
|
+
console.error('Usage: node session-guard.js <check|remind|dismiss-brace|dismiss-rig>');
|
|
166
273
|
process.exit(1);
|
|
167
274
|
}
|
package/package.json
CHANGED
package/skills/brace/SKILL.md
CHANGED
|
@@ -23,14 +23,39 @@ CRITICAL: Reproduce the banner EXACTLY character-for-character. The first line o
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Taglines:
|
|
26
|
-
- Bracing the structure...
|
|
27
|
-
- Reinforcing before load!
|
|
28
|
-
- Locking in the framework!
|
|
29
|
-
- Preparing for heavy lifting!
|
|
30
|
-
- Cross-bracing the foundation!
|
|
31
|
-
- Tightening the load path!
|
|
32
|
-
- Structural integrity confirmed!
|
|
33
|
-
- Brace for impact!
|
|
26
|
+
- 🏗️ Bracing the structure...
|
|
27
|
+
- 💪 Reinforcing before load!
|
|
28
|
+
- 🔒 Locking in the framework!
|
|
29
|
+
- 🏋️ Preparing for heavy lifting!
|
|
30
|
+
- 🧱 Cross-bracing the foundation!
|
|
31
|
+
- 🔧 Tightening the load path!
|
|
32
|
+
- ✅ Structural integrity confirmed!
|
|
33
|
+
- 💥 Brace for impact!
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
34
59
|
|
|
35
60
|
---
|
|
36
61
|
|
|
@@ -5,38 +5,42 @@ Present this summary after verification completes.
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
Brace
|
|
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
|
-
|
|
8
|
+
┌─ Brace · Report ───────────────────────────────
|
|
9
|
+
│
|
|
10
|
+
│ ✅ Brace complete
|
|
11
|
+
│
|
|
12
|
+
│ 📂 Project: {project_name}
|
|
13
|
+
│ 📍 Directory: {cwd}
|
|
14
|
+
│
|
|
15
|
+
│ 📝 Structure
|
|
16
|
+
│ {✅|⏭️} goals/ Goals layer
|
|
17
|
+
│ {✅|⏭️} tools/ Tools layer
|
|
18
|
+
│ {✅|⏭️} context/ Context layer
|
|
19
|
+
│ {✅|⏭️} hardprompts/ Hard prompts layer
|
|
20
|
+
│ {✅|⏭️} args/ Args layer
|
|
21
|
+
│ {✅|⏭️} .tmp/ Temp directory
|
|
22
|
+
│
|
|
23
|
+
│ 📄 Files
|
|
24
|
+
│ {✅|⏭️} CLAUDE.md
|
|
25
|
+
│ {✅|⏭️} .gitignore
|
|
26
|
+
│ {✅|⏭️} goals/manifest.md
|
|
27
|
+
│ {✅|⏭️} goals/build_app.md
|
|
28
|
+
│ {✅|⏭️} tools/manifest.md
|
|
29
|
+
│
|
|
30
|
+
│ 🗑️ Removed (only if legacy memory was cleaned up)
|
|
31
|
+
│ {✅} tools/memory/ Legacy memory scripts
|
|
32
|
+
│ {✅} memory/ Legacy memory directory
|
|
33
|
+
│
|
|
34
|
+
│ ⚠️ Notes
|
|
35
|
+
│ {any warnings or skipped items}
|
|
36
|
+
│
|
|
37
|
+
│ ⚡ Next steps
|
|
38
|
+
│ 1. Review CLAUDE.md and customise for your project
|
|
39
|
+
│ 2. Add domain knowledge to context/
|
|
40
|
+
│ 3. Define your first goal in goals/
|
|
41
|
+
│ 4. Start building with the BRACE methodology
|
|
42
|
+
│
|
|
43
|
+
└─────────────────────────────────────────────────
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
Status indicators:
|
|
46
|
+
Status indicators: ✅ created/exists · ⏭️ skipped · ⚠️ merged/upgraded · ❌ failed
|
package/skills/build/SKILL.md
CHANGED
|
@@ -34,6 +34,31 @@ Taglines:
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
37
62
|
Execute a detailed design/plan through the full feature-dev lifecycle with
|
|
38
63
|
maximum context isolation. Every heavy stage runs in a subagent so the primary
|
|
39
64
|
conversation only accumulates structured reports.
|
|
@@ -295,27 +320,33 @@ Invoke the `/ship` skill:
|
|
|
295
320
|
## Final Report
|
|
296
321
|
|
|
297
322
|
```
|
|
298
|
-
Build
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
323
|
+
┌─ Build · Report ───────────────────────────────
|
|
324
|
+
│
|
|
325
|
+
│ ✅ Build complete
|
|
326
|
+
│
|
|
327
|
+
│ 📋 Plan: {first line of plan}
|
|
328
|
+
│ 🏗️ Approach: {approach_summary}
|
|
329
|
+
│
|
|
330
|
+
│ 📝 Changes
|
|
331
|
+
│ Files modified: {count}
|
|
332
|
+
│ Files created: {count}
|
|
333
|
+
│ Tests: {passed}/{total} ✅
|
|
334
|
+
│ Docs updated: {count or "none"}
|
|
335
|
+
│
|
|
336
|
+
│ 🔍 Review
|
|
337
|
+
│ Findings addressed: {count fixed} / {count found}
|
|
338
|
+
│
|
|
339
|
+
│ 📊 Debrief: {count resolved} / {count surfaced}
|
|
340
|
+
│ {list of created goals/tasks}
|
|
341
|
+
│
|
|
342
|
+
│ 🔗 Links
|
|
343
|
+
│ PR: {pr_url}
|
|
344
|
+
│ CI: {merge_commit}
|
|
345
|
+
│
|
|
346
|
+
│ ⚡ Next steps
|
|
347
|
+
│ {debrief items or "none — all clear"}
|
|
348
|
+
│
|
|
349
|
+
└─────────────────────────────────────────────────
|
|
319
350
|
```
|
|
320
351
|
|
|
321
352
|
If any stage failed, report the failure point and what was accomplished.
|
package/skills/distil/SKILL.md
CHANGED
|
@@ -23,14 +23,39 @@ CRITICAL: Reproduce the banner EXACTLY character-for-character. The first line o
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Taglines:
|
|
26
|
-
- Heating up the column...
|
|
27
|
-
- Fractioning the design space!
|
|
28
|
-
- Condensing pure creativity!
|
|
29
|
-
- Separating signal from noise!
|
|
30
|
-
- Extracting the essence!
|
|
31
|
-
- Refining through iteration!
|
|
32
|
-
- Distilling N variations of brilliance!
|
|
33
|
-
- From crude concept to pure design!
|
|
26
|
+
- 🔥 Heating up the column...
|
|
27
|
+
- 🧪 Fractioning the design space!
|
|
28
|
+
- 💎 Condensing pure creativity!
|
|
29
|
+
- 🔬 Separating signal from noise!
|
|
30
|
+
- ⚗️ Extracting the essence!
|
|
31
|
+
- 🔄 Refining through iteration!
|
|
32
|
+
- ✨ Distilling N variations of brilliance!
|
|
33
|
+
- 🎨 From crude concept to pure design!
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
34
59
|
|
|
35
60
|
---
|
|
36
61
|
|
|
@@ -260,12 +285,29 @@ automatically — skip this step.
|
|
|
260
285
|
|
|
261
286
|
## Step 6: Present Designs
|
|
262
287
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
288
|
+
Present the final summary:
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
┌─ Distil · Report ──────────────────────────────
|
|
292
|
+
│
|
|
293
|
+
│ ✅ Distil complete — {N} designs generated
|
|
294
|
+
│
|
|
295
|
+
│ 🌐 Server: http://localhost:{PORT}
|
|
296
|
+
│
|
|
297
|
+
│ 🎨 Designs
|
|
298
|
+
│ /1 {style name} — {key visual traits}
|
|
299
|
+
│ /2 {style name} — {key visual traits}
|
|
300
|
+
│ /3 {style name} — {key visual traits}
|
|
301
|
+
│ {mark new vs existing}
|
|
302
|
+
│
|
|
303
|
+
│ 📊 Total: {total designs} ({new} new + {existing} existing)
|
|
304
|
+
│
|
|
305
|
+
│ ⚡ Next steps
|
|
306
|
+
│ 1. Browse designs at http://localhost:{PORT}/1
|
|
307
|
+
│ 2. Use --favorites 1,3 to iterate on selected designs
|
|
308
|
+
│
|
|
309
|
+
└─────────────────────────────────────────────────
|
|
310
|
+
```
|
|
269
311
|
|
|
270
312
|
## Context Protection Summary
|
|
271
313
|
|
package/skills/dock/SKILL.md
CHANGED
|
@@ -56,6 +56,31 @@ Parse optional flags from the request:
|
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
+
## Output Formatting
|
|
60
|
+
|
|
61
|
+
After the banner, display parsed input:
|
|
62
|
+
```
|
|
63
|
+
┌─ Input ────────────────────────────────────────
|
|
64
|
+
│ {Field}: {value}
|
|
65
|
+
│ Flags: {parsed flags or "none"}
|
|
66
|
+
└────────────────────────────────────────────────
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Pre-flight results:
|
|
70
|
+
```
|
|
71
|
+
── Pre-flight ───────────────────────────────────
|
|
72
|
+
✅ {dep} {version or "found"}
|
|
73
|
+
⚠️ {dep} not found → {fallback detail}
|
|
74
|
+
❌ {dep} missing → stopping
|
|
75
|
+
──────────────────────────────────────────────────
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
79
|
+
|
|
80
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
59
84
|
## Pre-flight
|
|
60
85
|
|
|
61
86
|
Before starting, check dependencies:
|
|
@@ -315,24 +340,35 @@ Present the user with a summary of all generated files before writing.
|
|
|
315
340
|
After all files are generated and verified, present:
|
|
316
341
|
|
|
317
342
|
```
|
|
318
|
-
Dock
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
343
|
+
┌─ Dock · Report ────────────────────────────────
|
|
344
|
+
│
|
|
345
|
+
│ ✅ Dock complete
|
|
346
|
+
│
|
|
347
|
+
│ 🔧 Stack: {language} / {framework}
|
|
348
|
+
│ 📦 Registry: {registry}
|
|
349
|
+
│ 🌍 Stages: {env1} → {env2} → {env3}
|
|
350
|
+
│
|
|
351
|
+
│ 📝 Generated files
|
|
352
|
+
│ • {file} — {brief description}
|
|
353
|
+
│ • {file} — {brief description}
|
|
354
|
+
│ • ...
|
|
355
|
+
│
|
|
356
|
+
│ 📊 Pipeline flow
|
|
357
|
+
│ PR → build + test
|
|
358
|
+
│ Merge → build + test → push → deploy dev → smoke
|
|
359
|
+
│ Tag → retag (no rebuild) → staging → e2e → prod
|
|
360
|
+
│
|
|
361
|
+
│ 🔗 Links
|
|
362
|
+
│ Dockerfile: {path}
|
|
363
|
+
│ Workflow: {path}
|
|
364
|
+
│ Compose: {path}
|
|
365
|
+
│
|
|
366
|
+
│ ⚡ Next steps
|
|
367
|
+
│ 1. Review generated files
|
|
368
|
+
│ 2. Configure secrets: {list}
|
|
369
|
+
│ 3. Push to trigger first pipeline run
|
|
370
|
+
│
|
|
371
|
+
└─────────────────────────────────────────────────
|
|
336
372
|
```
|
|
337
373
|
|
|
338
374
|
---
|
package/skills/keel/SKILL.md
CHANGED
|
@@ -61,6 +61,13 @@ Parse optional flags from the request:
|
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
|
|
64
|
+
## Output Formatting
|
|
65
|
+
|
|
66
|
+
Input display: `┌─ Input │ {fields} └─`. Pre-flight: `── Pre-flight ── ✅/⚠️/❌ ──`.
|
|
67
|
+
Stage headers: `━━ {N} · {Name} ━━━━━━━━━━━━━`. Icons: ✅ done · ❌ fail · ⚠️ warn · ⏳ work · ⏭️ skip.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
64
71
|
## Pre-flight
|
|
65
72
|
|
|
66
73
|
Before starting, check dependencies:
|
|
@@ -446,35 +453,27 @@ Present the user with a summary of all generated files before writing.
|
|
|
446
453
|
After all files are generated and verified, present:
|
|
447
454
|
|
|
448
455
|
```
|
|
449
|
-
Keel
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
/dock
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
Secrets: synced via infra/sync-outputs.sh
|
|
471
|
-
|
|
472
|
-
Next steps:
|
|
473
|
-
1. Run bootstrap script: ./infra/bootstrap.sh
|
|
474
|
-
2. Review generated IaC files
|
|
475
|
-
3. Configure CI/CD secrets: {list}
|
|
476
|
-
4. Push to trigger first plan
|
|
477
|
-
5. After apply succeeds, run /dock to set up deployment pipelines
|
|
456
|
+
┌─ Keel · Report ────────────────────────────────
|
|
457
|
+
│
|
|
458
|
+
│ ✅ Keel complete
|
|
459
|
+
│
|
|
460
|
+
│ ☁️ Provider: {cloud_provider}
|
|
461
|
+
│ 🔧 IaC Tool: {tool}
|
|
462
|
+
│ 🌍 Envs: {env1} → {env2} → {env3}
|
|
463
|
+
│ 💾 State: {state_backend}
|
|
464
|
+
│
|
|
465
|
+
│ 📝 Components: {checklist of selected}
|
|
466
|
+
│
|
|
467
|
+
│ 📊 Pipeline: PR → plan → Merge → apply dev → Tag → apply prod
|
|
468
|
+
│
|
|
469
|
+
│ 🔗 Links
|
|
470
|
+
│ Infra: {infra/ path}
|
|
471
|
+
│ Pipeline: {workflow path}
|
|
472
|
+
│ Bootstrap: ./infra/bootstrap.sh
|
|
473
|
+
│
|
|
474
|
+
│ ⚡ Next: 1. Run bootstrap 2. Configure secrets 3. Push 4. /dock
|
|
475
|
+
│
|
|
476
|
+
└─────────────────────────────────────────────────
|
|
478
477
|
```
|
|
479
478
|
|
|
480
479
|
---
|
|
@@ -492,7 +491,5 @@ If /keel detects it has been run before (existing `infra/` directory):
|
|
|
492
491
|
|
|
493
492
|
## Integration Points
|
|
494
493
|
|
|
495
|
-
- **/dock**: /keel provisions what /dock deploys to. /dock
|
|
496
|
-
|
|
497
|
-
- **/rig**: Detects `infra/` and wires IaC pipeline into CI workflow.
|
|
498
|
-
- **/ship**: Merge triggers IaC apply → /dock deploy chain.
|
|
494
|
+
- **/dock**: /keel provisions what /dock deploys to. /dock consumes outputs (registry URL, compute endpoints).
|
|
495
|
+
- **/rig**: Detects `infra/` and wires IaC pipeline into CI. **/ship**: Merge triggers IaC apply → /dock deploy.
|
package/skills/manifest.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated": "2026-03-09T17:
|
|
2
|
+
"generated": "2026-03-09T17:55:20.156Z",
|
|
3
3
|
"count": 10,
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
6
6
|
"name": "brace",
|
|
7
7
|
"directory": "brace",
|
|
8
8
|
"description": "'Initialize any project directory with the GOTCHA/BRACE framework for agentic AI systems. Creates the 6-layer structure (Goals, Orchestration, Tools, Context, Hard prompts, Args), BRACE build methodology, and a project CLAUDE.md. Recommends claude-mem for persistent memory. Idempotent — safe to run on existing projects. Triggers: \"init gotcha\", \"setup brace\", \"brace\", \"initialize framework\", \"bootstrap gotcha\".'",
|
|
9
|
-
"lines":
|
|
9
|
+
"lines": 303,
|
|
10
10
|
"hasScripts": false,
|
|
11
11
|
"hasReferences": true,
|
|
12
12
|
"hasAssets": true,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"name": "build",
|
|
17
17
|
"directory": "build",
|
|
18
18
|
"description": "Context-isolated feature development pipeline. Takes a detailed design/plan as argument and executes the full feature-dev lifecycle (explore, question, architect, implement, review, ship) inside subagents so the primary conversation stays compact. Use when you have a well-defined plan and want autonomous execution with minimal context window consumption.",
|
|
19
|
-
"lines":
|
|
19
|
+
"lines": 363,
|
|
20
20
|
"hasScripts": false,
|
|
21
21
|
"hasReferences": true,
|
|
22
22
|
"hasAssets": false,
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"name": "distil",
|
|
27
27
|
"directory": "distil",
|
|
28
28
|
"description": "Generate multiple unique web design variations for any website or web application. Accepts site specifications from a file (--spec path) or pasted text block. Creates a Vite + React + TypeScript + Tailwind project with Bun and produces N different creative designs accessible at /1, /2, /3, etc. Use when prototyping or exploring design directions for any web interface.",
|
|
29
|
-
"lines":
|
|
29
|
+
"lines": 332,
|
|
30
30
|
"hasScripts": false,
|
|
31
31
|
"hasReferences": true,
|
|
32
32
|
"hasAssets": true,
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"name": "dock",
|
|
37
37
|
"directory": "dock",
|
|
38
38
|
"description": ">- Generate container-based release pipelines that build once and promote immutable artifacts through environments (dev → staging → prod). Detects your stack, interviews for infrastructure choices, then outputs deterministic CI/CD files (Dockerfile, workflows, deployment manifests) that run without an LLM. Use when setting up deployment pipelines, containerizing an app, creating release workflows, or connecting CI to container-friendly infrastructure (Azure Container Apps, AWS Fargate, Google Cloud Run, Kubernetes, Dokku, Coolify, CapRover, etc.).",
|
|
39
|
-
"lines":
|
|
39
|
+
"lines": 394,
|
|
40
40
|
"hasScripts": false,
|
|
41
41
|
"hasReferences": true,
|
|
42
42
|
"hasAssets": false,
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"name": "keel",
|
|
47
47
|
"directory": "keel",
|
|
48
48
|
"description": ">- Generate Infrastructure as Code (IaC) pipelines that provision the cloud and container infrastructure your app deploys to. Interview-driven: detects your stack and cloud provider, then outputs deterministic IaC files (Terraform, Bicep, Pulumi, or CDK) plus CI/CD pipelines that plan on PR and apply on merge. Use when setting up cloud infrastructure, provisioning container registries, databases, networking, DNS, or any infrastructure that containers deploy onto. Designed to run before /dock — /keel lays the infrastructure, /dock deploys to it.",
|
|
49
|
-
"lines":
|
|
49
|
+
"lines": 496,
|
|
50
50
|
"hasScripts": false,
|
|
51
51
|
"hasReferences": true,
|
|
52
52
|
"hasAssets": false,
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"name": "prime",
|
|
57
57
|
"directory": "prime",
|
|
58
58
|
"description": "\"Load project context before implementing features or making architectural decisions. Invoke proactively at the start of significant work on any project. Scans CLAUDE.md, README, goals/, specs/, docs/, and source structure to build a context summary. Supports optional domain hints to focus on specific areas of the codebase. Use when you need project conventions, architecture understanding, or domain context before coding.\"",
|
|
59
|
-
"lines":
|
|
59
|
+
"lines": 148,
|
|
60
60
|
"hasScripts": false,
|
|
61
61
|
"hasReferences": true,
|
|
62
62
|
"hasAssets": false,
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"name": "rig",
|
|
67
67
|
"directory": "rig",
|
|
68
68
|
"description": "'Idempotently bootstrap any repository with standard development tools, hooks, and workflows. Use when starting work on a new repo, onboarding to an existing project, or ensuring a repo has proper CI/CD setup. Configures: git hooks (lefthook), commit message templates, PR templates, and GitHub Actions for lint/format/type-check/build. Prompts for user confirmation before changes. Triggers: \"bootstrap repo\", \"setup hooks\", \"configure CI\", \"rig\", \"standardize repo\".'",
|
|
69
|
-
"lines":
|
|
69
|
+
"lines": 231,
|
|
70
70
|
"hasScripts": false,
|
|
71
71
|
"hasReferences": true,
|
|
72
72
|
"hasAssets": true,
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"name": "ship",
|
|
77
77
|
"directory": "ship",
|
|
78
78
|
"description": "\"Ship changes through the full PR lifecycle. Use after completing feature work to commit, push, create PR, wait for checks, and merge. Handles the entire workflow: syncs with main, creates feature branch if needed, groups commits logically with semantic messages, creates detailed PR, monitors CI, fixes issues, squash merges, and cleans up. Invoke when work is ready to ship.\"",
|
|
79
|
-
"lines":
|
|
79
|
+
"lines": 262,
|
|
80
80
|
"hasScripts": false,
|
|
81
81
|
"hasReferences": true,
|
|
82
82
|
"hasAssets": false,
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"name": "speccy",
|
|
87
87
|
"directory": "speccy",
|
|
88
88
|
"description": "Deep-dive interview skill for creating comprehensive specifications. Reviews existing code and docs, then interviews the user through multiple rounds of targeted questions covering technical implementation, UI/UX, concerns, and tradeoffs. Produces a structured spec via create-specification. Use when starting a new feature, system, or major change that needs a spec.",
|
|
89
|
-
"lines":
|
|
89
|
+
"lines": 210,
|
|
90
90
|
"hasScripts": false,
|
|
91
91
|
"hasReferences": true,
|
|
92
92
|
"hasAssets": false,
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"name": "sync",
|
|
97
97
|
"directory": "sync",
|
|
98
98
|
"description": "Sync local repository with origin/main. Use before starting new work, after completing a PR, or when needing latest upstream changes. Safely stashes uncommitted changes, fetches and pulls origin/main, restores stash, and cleans up stale local branches (merged or with deleted remotes). Invoke when switching contexts or preparing for new feature work.",
|
|
99
|
-
"lines":
|
|
99
|
+
"lines": 244,
|
|
100
100
|
"hasScripts": false,
|
|
101
101
|
"hasReferences": false,
|
|
102
102
|
"hasAssets": false,
|
package/skills/prime/SKILL.md
CHANGED
|
@@ -34,6 +34,31 @@ Taglines:
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
37
62
|
Load project context to inform agent decisions. Raw file contents stay in a
|
|
38
63
|
subagent — the primary thread only sees a structured PRIME_REPORT.
|
|
39
64
|
|
|
@@ -100,12 +125,22 @@ PRIME_REPORT:
|
|
|
100
125
|
Parse PRIME_REPORT and present a clean summary to the user:
|
|
101
126
|
|
|
102
127
|
```
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
128
|
+
┌─ Prime · Report ───────────────────────────────
|
|
129
|
+
│
|
|
130
|
+
│ ✅ Context loaded
|
|
131
|
+
│
|
|
132
|
+
│ 📚 Core: {count}/{total} files loaded
|
|
133
|
+
│ 🌐 Branch: {branch}
|
|
134
|
+
│
|
|
135
|
+
│ 📝 Domains
|
|
136
|
+
│ {domain}: {2-3 line summary}
|
|
137
|
+
│ {domain}: {2-3 line summary}
|
|
138
|
+
│
|
|
139
|
+
│ ⚠️ Missing: {list or "none"}
|
|
140
|
+
│
|
|
141
|
+
│ 🎯 Ready to assist with: {ready_for}
|
|
142
|
+
│
|
|
143
|
+
└─────────────────────────────────────────────────
|
|
109
144
|
```
|
|
110
145
|
|
|
111
146
|
If CLAUDE.md was missing, warn the user and note that only domain context
|
package/skills/rig/SKILL.md
CHANGED
|
@@ -23,14 +23,39 @@ CRITICAL: Reproduce the banner EXACTLY character-for-character. The first line o
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Taglines:
|
|
26
|
-
- Rigging up the production line...
|
|
27
|
-
- Bolting down the framework!
|
|
28
|
-
- Assembling the scaffolding!
|
|
29
|
-
- Hoisting the infrastructure!
|
|
30
|
-
- Locking in the safety harness!
|
|
31
|
-
- Wiring up the control panel!
|
|
32
|
-
- Setting up the drill floor!
|
|
33
|
-
- From blueprint to build-ready!
|
|
26
|
+
- 🏗️ Rigging up the production line...
|
|
27
|
+
- 🔩 Bolting down the framework!
|
|
28
|
+
- 🪜 Assembling the scaffolding!
|
|
29
|
+
- 🏗️ Hoisting the infrastructure!
|
|
30
|
+
- 🦺 Locking in the safety harness!
|
|
31
|
+
- ⚡ Wiring up the control panel!
|
|
32
|
+
- 🛠️ Setting up the drill floor!
|
|
33
|
+
- 📐 From blueprint to build-ready!
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
34
59
|
|
|
35
60
|
---
|
|
36
61
|
|
|
@@ -3,26 +3,29 @@
|
|
|
3
3
|
Present this summary after all configuration is complete:
|
|
4
4
|
|
|
5
5
|
```
|
|
6
|
-
Rig
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
6
|
+
┌─ Rig · Report ─────────────────────────────────
|
|
7
|
+
│
|
|
8
|
+
│ ✅ Rig complete
|
|
9
|
+
│
|
|
10
|
+
│ 📂 Repository: {repo_name}
|
|
11
|
+
│ 🌐 Branch: {branch}
|
|
12
|
+
│
|
|
13
|
+
│ 📝 Configured
|
|
14
|
+
│ {✅|⏭️} Lefthook installed and configured
|
|
15
|
+
│ {✅|⏭️} Pre-commit hooks: {list}
|
|
16
|
+
│ {✅|⏭️} Pre-push hooks: {list}
|
|
17
|
+
│ {✅|⏭️} Commit template: .gitmessage
|
|
18
|
+
│ {✅|⏭️} PR template: {path}
|
|
19
|
+
│ {✅|⏭️} CI workflow: {path}
|
|
20
|
+
│ {✅|⏭️} Azure Pipelines: {list} (if applicable)
|
|
21
|
+
│
|
|
22
|
+
│ ⚠️ Notes
|
|
23
|
+
│ {any warnings}
|
|
24
|
+
│
|
|
25
|
+
│ ⚡ Next steps
|
|
26
|
+
│ 1. Review generated files and commit them
|
|
27
|
+
│ 2. Push to remote to activate CI
|
|
28
|
+
│ 3. Test hooks: lefthook run pre-commit
|
|
29
|
+
│
|
|
30
|
+
└─────────────────────────────────────────────────
|
|
28
31
|
```
|
package/skills/ship/SKILL.md
CHANGED
|
@@ -34,6 +34,31 @@ Taglines:
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
37
62
|
Ship changes through the complete PR lifecycle. Every stage runs in a subagent
|
|
38
63
|
to isolate context from the primary conversation. Prompts for each stage are
|
|
39
64
|
in `references/stage-prompts.md`.
|
|
@@ -211,16 +236,26 @@ Parse LAND_REPORT.
|
|
|
211
236
|
Compile all stage reports into a summary:
|
|
212
237
|
|
|
213
238
|
```
|
|
214
|
-
Ship
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
239
|
+
┌─ Ship · Report ────────────────────────────────
|
|
240
|
+
│
|
|
241
|
+
│ ✅ Ship complete
|
|
242
|
+
│
|
|
243
|
+
│ 🌿 Branch: {branch}
|
|
244
|
+
│ 🔗 PR: {pr_url}
|
|
245
|
+
│ 🔀 Merged: {merge_commit} ({merge_type})
|
|
246
|
+
│
|
|
247
|
+
│ 📝 Commits
|
|
248
|
+
│ • {commit message 1}
|
|
249
|
+
│ • {commit message 2}
|
|
250
|
+
│
|
|
251
|
+
│ 📊 {count} files changed ({diff_summary})
|
|
252
|
+
│
|
|
253
|
+
└─────────────────────────────────────────────────
|
|
224
254
|
```
|
|
225
255
|
|
|
226
|
-
If any stage failed,
|
|
256
|
+
If any stage failed, add:
|
|
257
|
+
```
|
|
258
|
+
│ ❌ Failed at: {stage name}
|
|
259
|
+
│ {error description}
|
|
260
|
+
│ {suggested resolution}
|
|
261
|
+
```
|
package/skills/speccy/SKILL.md
CHANGED
|
@@ -34,6 +34,31 @@ Taglines:
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
37
62
|
Interview the user through multiple rounds of targeted questions to build
|
|
38
63
|
a comprehensive specification. Then hand off to the `create-specification`
|
|
39
64
|
skill to produce the final structured spec document.
|
|
@@ -159,11 +184,26 @@ Once the interview is complete and decisions are confirmed:
|
|
|
159
184
|
After the spec is created, report to the user:
|
|
160
185
|
|
|
161
186
|
```
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
187
|
+
┌─ Speccy · Report ──────────────────────────────
|
|
188
|
+
│
|
|
189
|
+
│ ✅ Spec complete
|
|
190
|
+
│
|
|
191
|
+
│ 📄 File: {spec file path}
|
|
192
|
+
│ 📋 Sections: {count}
|
|
193
|
+
│ 💬 Rounds: {interview rounds conducted}
|
|
194
|
+
│ ❓ Questions: {total questions asked}
|
|
195
|
+
│
|
|
196
|
+
│ 📝 Key decisions
|
|
197
|
+
│ • {decision 1}
|
|
198
|
+
│ • {decision 2}
|
|
199
|
+
│ • {decision 3}
|
|
200
|
+
│
|
|
201
|
+
│ 🔗 Links
|
|
202
|
+
│ Spec: {spec file path}
|
|
203
|
+
│
|
|
204
|
+
│ ⚡ Next steps
|
|
205
|
+
│ 1. Review the spec: {path}
|
|
206
|
+
│ 2. Run /build {spec path} to implement
|
|
207
|
+
│
|
|
208
|
+
└─────────────────────────────────────────────────
|
|
169
209
|
```
|
package/skills/sync/SKILL.md
CHANGED
|
@@ -34,6 +34,31 @@ Taglines:
|
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
+
## Output Formatting
|
|
38
|
+
|
|
39
|
+
After the banner, display parsed input:
|
|
40
|
+
```
|
|
41
|
+
┌─ Input ────────────────────────────────────────
|
|
42
|
+
│ {Field}: {value}
|
|
43
|
+
│ Flags: {parsed flags or "none"}
|
|
44
|
+
└────────────────────────────────────────────────
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Pre-flight results:
|
|
48
|
+
```
|
|
49
|
+
── Pre-flight ───────────────────────────────────
|
|
50
|
+
✅ {dep} {version or "found"}
|
|
51
|
+
⚠️ {dep} not found → {fallback detail}
|
|
52
|
+
❌ {dep} missing → stopping
|
|
53
|
+
──────────────────────────────────────────────────
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Stage/phase headers: `━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━`
|
|
57
|
+
|
|
58
|
+
Status icons: ✅ done · ❌ failed · ⚠️ degraded · ⏳ working · ⏭️ skipped
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
37
62
|
Synchronize local repository with the remote default branch using a single
|
|
38
63
|
Bash subagent to isolate all git operations from the primary conversation.
|
|
39
64
|
|
|
@@ -199,14 +224,20 @@ SYNC_REPORT:
|
|
|
199
224
|
Parse the subagent's SYNC_REPORT and present a clean summary:
|
|
200
225
|
|
|
201
226
|
```
|
|
202
|
-
Sync
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
227
|
+
┌─ Sync · Report ────────────────────────────────
|
|
228
|
+
│
|
|
229
|
+
│ ✅ Sync complete
|
|
230
|
+
│
|
|
231
|
+
│ 🌿 Main: {commit} — {message}
|
|
232
|
+
│ 🔀 Branch: {current_branch}
|
|
233
|
+
│ 📦 Stash: {restored|none|conflict}
|
|
234
|
+
│ 🧹 Cleaned: {branches or "none"}
|
|
235
|
+
│
|
|
236
|
+
└─────────────────────────────────────────────────
|
|
207
237
|
```
|
|
208
238
|
|
|
209
|
-
If errors occurred
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
239
|
+
If errors occurred:
|
|
240
|
+
```
|
|
241
|
+
│ ❌ {error description}
|
|
242
|
+
│ {suggested resolution}
|
|
243
|
+
```
|