create-claude-cabinet 0.19.2 → 0.20.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 +4 -4
- package/lib/cli.js +7 -7
- package/package.json +1 -1
- package/templates/README.md +1 -1
- package/templates/cabinet/skill-best-practices.md +385 -0
- package/templates/scripts/skill-validator.sh +410 -0
- package/templates/skills/cabinet-anthropic-insider/SKILL.md +2 -0
- package/templates/skills/cabinet-anti-confirmation/SKILL.md +2 -0
- package/templates/skills/cabinet-architecture/SKILL.md +2 -0
- package/templates/skills/cabinet-automation/SKILL.md +2 -0
- package/templates/skills/cabinet-boundary-man/SKILL.md +2 -0
- package/templates/skills/cabinet-cc-health/SKILL.md +5 -59
- package/templates/skills/cabinet-cc-health/calibration.md +61 -0
- package/templates/skills/cabinet-data-integrity/SKILL.md +2 -0
- package/templates/skills/cabinet-debugger/SKILL.md +2 -0
- package/templates/skills/cabinet-framework-quality/SKILL.md +2 -0
- package/templates/skills/cabinet-goal-alignment/SKILL.md +2 -0
- package/templates/skills/cabinet-historian/SKILL.md +2 -0
- package/templates/skills/cabinet-information-design/SKILL.md +2 -0
- package/templates/skills/cabinet-interactive-storyteller/SKILL.md +2 -0
- package/templates/skills/cabinet-mantine-quality/SKILL.md +2 -0
- package/templates/skills/cabinet-narrative-architect/SKILL.md +2 -0
- package/templates/skills/cabinet-organized-mind/SKILL.md +2 -0
- package/templates/skills/cabinet-process-therapist/SKILL.md +2 -0
- package/templates/skills/cabinet-qa/SKILL.md +2 -0
- package/templates/skills/cabinet-record-keeper/SKILL.md +2 -0
- package/templates/skills/cabinet-roster-check/SKILL.md +29 -3
- package/templates/skills/cabinet-security/SKILL.md +2 -0
- package/templates/skills/cabinet-speed-freak/SKILL.md +2 -0
- package/templates/skills/cabinet-system-advocate/SKILL.md +2 -0
- package/templates/skills/cabinet-technical-debt/SKILL.md +2 -0
- package/templates/skills/cabinet-ui-experimentalist/SKILL.md +2 -0
- package/templates/skills/cabinet-usability/SKILL.md +2 -0
- package/templates/skills/cabinet-user-advocate/SKILL.md +2 -0
- package/templates/skills/cabinet-vision/SKILL.md +2 -0
- package/templates/skills/cabinet-workflow-cop/SKILL.md +2 -0
- package/templates/skills/cc-upgrade/SKILL.md +14 -127
- package/templates/skills/cc-upgrade/calibration.md +29 -0
- package/templates/skills/cc-upgrade/extending.md +36 -0
- package/templates/skills/cc-upgrade/safeguards.md +74 -0
- package/templates/skills/debrief/SKILL.md +4 -41
- package/templates/skills/debrief/calibration.md +44 -0
- package/templates/skills/seed/phases/build-member.md +20 -1
- package/templates/skills/validate/phases/validators.md +41 -24
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Claude Cabinet
|
|
2
2
|
|
|
3
3
|
A cabinet of expert advisors for your Claude Code project. One command
|
|
4
|
-
gives Claude a memory,
|
|
4
|
+
gives Claude a memory, 31 domain experts, a planning process, and the
|
|
5
5
|
habit of starting sessions informed and ending them properly.
|
|
6
6
|
|
|
7
7
|
Built by a guy who'd rather talk to Claude than write code. Most of it
|
|
@@ -12,7 +12,7 @@ was built by Claude. I just complained until it worked.
|
|
|
12
12
|
Your project gets a cabinet — specialist advisors who each own a domain
|
|
13
13
|
and weigh in when their expertise matters:
|
|
14
14
|
|
|
15
|
-
- **Cabinet members** —
|
|
15
|
+
- **Cabinet members** — 31 domain experts (security, accessibility,
|
|
16
16
|
architecture, QA, etc.) who review your project and surface what
|
|
17
17
|
you'd miss alone
|
|
18
18
|
- **Briefings** — project context members read before weighing in
|
|
@@ -78,7 +78,7 @@ left off.
|
|
|
78
78
|
|
|
79
79
|
### The Cabinet (included in lean)
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
31 expert cabinet members who each own a domain and stay in their lane.
|
|
82
82
|
**Speed-freak** watches performance. **Boundary-man** catches edge cases.
|
|
83
83
|
**Record-keeper** flags when docs drift from code. **Workflow-cop**
|
|
84
84
|
evaluates whether your process actually works. Each member has a
|
|
@@ -176,7 +176,7 @@ source code.
|
|
|
176
176
|
```
|
|
177
177
|
.claude/
|
|
178
178
|
├── skills/ # orient, debrief, plan, execute, audit, etc.
|
|
179
|
-
│ └── cabinet-*/ #
|
|
179
|
+
│ └── cabinet-*/ # 31 cabinet member definitions
|
|
180
180
|
├── cabinet/ # committees, lifecycle, composition patterns
|
|
181
181
|
├── briefing/ # project briefing templates
|
|
182
182
|
├── hooks/ # git guardrails, telemetry
|
package/lib/cli.js
CHANGED
|
@@ -238,17 +238,17 @@ function generateSkillIndex(projectDir) {
|
|
|
238
238
|
const fm = parseFrontmatter(content);
|
|
239
239
|
if (!fm || !fm.name) continue;
|
|
240
240
|
|
|
241
|
-
//
|
|
242
|
-
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
241
|
+
// Keep the full description — both the "what" (first sentence) and the
|
|
242
|
+
// "when" (trigger phrase or "Activated during ..." sentence) matter for
|
|
243
|
+
// routing and display. Just normalize whitespace so block-scalar line
|
|
244
|
+
// breaks render as single spaces in JSON consumers.
|
|
245
|
+
const description = (fm.description || '').replace(/\s+/g, ' ').trim();
|
|
246
246
|
|
|
247
247
|
const isCabinet = dir.name.startsWith('cabinet-');
|
|
248
248
|
const entry = {
|
|
249
249
|
name: fm.name,
|
|
250
250
|
path: `.claude/skills/${dir.name}/SKILL.md`,
|
|
251
|
-
description
|
|
251
|
+
description,
|
|
252
252
|
type: isCabinet ? 'cabinet' : 'workflow',
|
|
253
253
|
};
|
|
254
254
|
|
|
@@ -429,7 +429,7 @@ const MODULES = {
|
|
|
429
429
|
mandatory: false,
|
|
430
430
|
default: true,
|
|
431
431
|
lean: false,
|
|
432
|
-
templates: ['skills/validate'],
|
|
432
|
+
templates: ['skills/validate', 'scripts/skill-validator.sh'],
|
|
433
433
|
},
|
|
434
434
|
'memory': {
|
|
435
435
|
name: 'Semantic Memory (omega)',
|
package/package.json
CHANGED
package/templates/README.md
CHANGED
|
@@ -27,7 +27,7 @@ templates, see [EXTENSIONS.md](EXTENSIONS.md).
|
|
|
27
27
|
| `rules/enforcement-pipeline.md` | Generic enforcement pipeline: capture, classify, promote, encode, monitor. Describes the compliance stack and promotion criteria. |
|
|
28
28
|
| `rules/memory-capture.md` | When and how to capture memories to omega. What to capture, what not to, cadence guidance. |
|
|
29
29
|
|
|
30
|
-
### Skills (22 workflow +
|
|
30
|
+
### Skills (22 workflow + 31 cabinet members)
|
|
31
31
|
|
|
32
32
|
**Workflow Skills:**
|
|
33
33
|
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
# Skill Best Practices
|
|
2
|
+
|
|
3
|
+
The local standard for writing SKILL.md files in a Claude Cabinet project.
|
|
4
|
+
Adapted from Anthropic's official guidance for Claude Cabinet's two-skill-type
|
|
5
|
+
architecture.
|
|
6
|
+
|
|
7
|
+
## Official References
|
|
8
|
+
|
|
9
|
+
- **Anthropic best practices:** https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices
|
|
10
|
+
- **Claude Code skills reference:** https://code.claude.com/docs/en/skills.md
|
|
11
|
+
- **Agent Skills open standard:** https://agentskills.io/specification
|
|
12
|
+
|
|
13
|
+
This doc is the **local standard**. Where CC deviates from official
|
|
14
|
+
guidance, each rule states why. Tooling (`skill-validator.sh`,
|
|
15
|
+
`/validate`, `cabinet-roster-check`) reads this as the normative
|
|
16
|
+
reference — cite specific sections when flagging violations.
|
|
17
|
+
|
|
18
|
+
## The Two Skill Types
|
|
19
|
+
|
|
20
|
+
Claude Cabinet has two distinct kinds of skills. Many rules apply to
|
|
21
|
+
both; some apply to only one. Be clear which type you're writing.
|
|
22
|
+
|
|
23
|
+
**Workflow skills** — user-invocable. The user types `/plan`,
|
|
24
|
+
`/audit`, `/debrief`. Examples: `plan/`, `audit/`, `orient/`,
|
|
25
|
+
`cc-upgrade/`, `menu/`. Directory name is anything that isn't
|
|
26
|
+
`cabinet-*`.
|
|
27
|
+
|
|
28
|
+
**Cabinet members** — not user-invocable. The framework activates
|
|
29
|
+
them programmatically during audits, planning, and execution.
|
|
30
|
+
Examples: `cabinet-security/`, `cabinet-qa/`,
|
|
31
|
+
`cabinet-architecture/`. Directory name starts with `cabinet-`.
|
|
32
|
+
|
|
33
|
+
The `cc-*` skills (`cc-upgrade`, `cc-link`, `cc-publish`, etc.) are
|
|
34
|
+
workflow skills despite the shared prefix — they're user-invocable
|
|
35
|
+
slash commands for CC maintenance.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Rules That Apply to All Skills
|
|
40
|
+
|
|
41
|
+
These hold for every SKILL.md regardless of type.
|
|
42
|
+
|
|
43
|
+
### Body under 500 lines
|
|
44
|
+
|
|
45
|
+
The SKILL.md **body** — content after the closing `---` of
|
|
46
|
+
frontmatter — must be under 500 lines. Warn at 450+.
|
|
47
|
+
|
|
48
|
+
**Why:** Long SKILL.md files lose LLM attention. The skill's contract
|
|
49
|
+
with the model is "read this and act"; at 600+ lines, sections at the
|
|
50
|
+
end get skimmed or dropped. Split into reference files
|
|
51
|
+
(progressive disclosure).
|
|
52
|
+
|
|
53
|
+
**Extracting content:** When a SKILL.md grows, move self-contained
|
|
54
|
+
sections into sibling `.md` files and link to them. See
|
|
55
|
+
`templates/skills/cabinet-qa/` for an example — the SKILL.md links
|
|
56
|
+
to `patterns-project.md` one level deep.
|
|
57
|
+
|
|
58
|
+
### Description: present, useful, under 1024 chars
|
|
59
|
+
|
|
60
|
+
Frontmatter `description` must be:
|
|
61
|
+
- Present and non-empty
|
|
62
|
+
- Third person ("Evaluates whether..." not "I evaluate...")
|
|
63
|
+
- At most 1024 characters
|
|
64
|
+
- No XML tags (no `<tag>` patterns)
|
|
65
|
+
- At least 2 sentences — enough to convey **what** the skill does
|
|
66
|
+
AND **when** to use it
|
|
67
|
+
|
|
68
|
+
**Why:** The description is what the model sees when deciding whether
|
|
69
|
+
to invoke the skill. A description that only says what (but not when)
|
|
70
|
+
leaves the model guessing about trigger conditions. A description with
|
|
71
|
+
only trigger conditions (but no what) leaves the model invoking a
|
|
72
|
+
skill whose capability it can't predict.
|
|
73
|
+
|
|
74
|
+
**Bad:** `description: Session close.`
|
|
75
|
+
**Good:** `description: Inventories work done, closes items, updates state. Use at the end of every working session to capture lessons and prepare the next session.`
|
|
76
|
+
|
|
77
|
+
**Bad:** `description: Runs audits.`
|
|
78
|
+
**Good:** `description: Convenes the full cabinet for a quality review. Each expert examines the project from their domain and reports findings. Use when preparing to ship, after significant changes, or periodically to catch drift.`
|
|
79
|
+
|
|
80
|
+
### Name: short, lowercase, safe
|
|
81
|
+
|
|
82
|
+
Frontmatter `name` must be:
|
|
83
|
+
- Present and non-empty
|
|
84
|
+
- At most 64 characters
|
|
85
|
+
- Lowercase letters, numbers, hyphens only (regex `^[a-z0-9-]+$`)
|
|
86
|
+
- No XML tags
|
|
87
|
+
- Must not start with `anthropic-` or `claude-`, and must not BE
|
|
88
|
+
`anthropic` or `claude` (these prefixes are reserved for official
|
|
89
|
+
Anthropic skills). Mid-name usage is fine when describing a topic —
|
|
90
|
+
`cabinet-anthropic-insider` (an expert on the Anthropic platform) is
|
|
91
|
+
allowed
|
|
92
|
+
|
|
93
|
+
**Why:** Names are used as directory names, file paths, and skill
|
|
94
|
+
identifiers in tooling. Constraining the charset eliminates a whole
|
|
95
|
+
class of shell-escape and filesystem bugs.
|
|
96
|
+
|
|
97
|
+
### One-level-deep reference files
|
|
98
|
+
|
|
99
|
+
SKILL.md may link to reference files (`./advanced.md`,
|
|
100
|
+
`./calibration.md`). Those reference files must **not** link further
|
|
101
|
+
into a third level.
|
|
102
|
+
|
|
103
|
+
**Bad:**
|
|
104
|
+
```
|
|
105
|
+
SKILL.md → advanced.md → implementation-details.md
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Good:**
|
|
109
|
+
```
|
|
110
|
+
SKILL.md → advanced.md
|
|
111
|
+
SKILL.md → implementation-details.md
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Why:** Deep reference chains are effectively hidden from the model
|
|
115
|
+
— by the time it has followed two indirections, the context of why
|
|
116
|
+
it's reading has faded. Keep related content one link away from the
|
|
117
|
+
entry point.
|
|
118
|
+
|
|
119
|
+
Links to files outside the skill's directory (e.g.,
|
|
120
|
+
`templates/cabinet/skill-best-practices.md`, `_briefing.md`) don't
|
|
121
|
+
count — those are shared references available at any depth.
|
|
122
|
+
|
|
123
|
+
### Reference files over 100 lines have a TOC
|
|
124
|
+
|
|
125
|
+
Any `.md` file in the skill's directory longer than 100 lines must
|
|
126
|
+
have a Table of Contents at the top.
|
|
127
|
+
|
|
128
|
+
**Why:** A 200-line reference file is a document. Documents need
|
|
129
|
+
navigation. Readers (both human and model) skim the TOC first.
|
|
130
|
+
|
|
131
|
+
### No time-sensitive information
|
|
132
|
+
|
|
133
|
+
Don't write "as of March 2026" or "the current way is..." Skills live
|
|
134
|
+
for years; dated claims decay. If you need to document deprecated
|
|
135
|
+
behavior, put it in a section explicitly labeled "Old patterns" or
|
|
136
|
+
"Historical" — readers know to discount it.
|
|
137
|
+
|
|
138
|
+
**Why:** Skills get read long after they're written. Time-anchored
|
|
139
|
+
claims become silently wrong.
|
|
140
|
+
|
|
141
|
+
### Consistent terminology
|
|
142
|
+
|
|
143
|
+
If you call it a "cabinet member" in one paragraph, don't call it a
|
|
144
|
+
"cabinet expert" or "advisor" in the next. Pick one term and use it
|
|
145
|
+
throughout.
|
|
146
|
+
|
|
147
|
+
**Why:** Inconsistent terminology inside a single skill makes the
|
|
148
|
+
model uncertain whether two terms refer to the same thing — which
|
|
149
|
+
causes it to hedge in its output ("the cabinet member (or advisor)
|
|
150
|
+
should...").
|
|
151
|
+
|
|
152
|
+
### Forward slashes in paths
|
|
153
|
+
|
|
154
|
+
Use `path/to/file.md`, not `path\to\file.md`. Even in examples that
|
|
155
|
+
will run on Windows.
|
|
156
|
+
|
|
157
|
+
**Why:** Forward slashes work everywhere. Backslashes break on Unix
|
|
158
|
+
and have to be escaped in most string contexts.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Rules for Workflow Skills Only
|
|
163
|
+
|
|
164
|
+
### Imperative verb naming
|
|
165
|
+
|
|
166
|
+
Name a workflow skill after the verb its command invokes: `plan`,
|
|
167
|
+
`audit`, `orient`, `validate`, `debrief`, `seed`.
|
|
168
|
+
|
|
169
|
+
**CC deviation from official guidance.** Official best practices
|
|
170
|
+
recommend gerund naming (`planning`, `auditing`). CC uses imperative
|
|
171
|
+
verbs because slash commands read as actions: `/plan X` is natural
|
|
172
|
+
English; `/planning X` is not. The user is asking the skill to do
|
|
173
|
+
something, so the name should be the verb form of what it does.
|
|
174
|
+
|
|
175
|
+
The gerund convention fits document-processing skills (`excel-reader`,
|
|
176
|
+
`pdf-filler`) — those describe a capability, not a command. Workflow
|
|
177
|
+
skills are commands; they take the imperative form.
|
|
178
|
+
|
|
179
|
+
### "When to use" = user trigger
|
|
180
|
+
|
|
181
|
+
In the description and body, state "when to use" in terms of what the
|
|
182
|
+
user does, sees, or needs:
|
|
183
|
+
|
|
184
|
+
- "Use at the start of every session" ✓
|
|
185
|
+
- "Use after completing a working block" ✓
|
|
186
|
+
- "Use when you can't remember a skill name" ✓
|
|
187
|
+
- "Activated during audit to check authentication" ✗ (that's a cabinet
|
|
188
|
+
member phrasing)
|
|
189
|
+
|
|
190
|
+
**Why:** Workflow skills are invoked by users. The trigger is a user
|
|
191
|
+
action or situation. Cabinet members are activated by the framework,
|
|
192
|
+
so they phrase triggers differently.
|
|
193
|
+
|
|
194
|
+
### argument-hint when accepting arguments
|
|
195
|
+
|
|
196
|
+
If the skill accepts arguments (like `/loop 5m /foo` or `/plan quick`),
|
|
197
|
+
add an `argument-hint` to frontmatter:
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
---
|
|
201
|
+
name: loop
|
|
202
|
+
description: Run a prompt on a recurring interval.
|
|
203
|
+
argument-hint: [interval] <prompt-or-slash-command>
|
|
204
|
+
---
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Why:** `argument-hint` appears in autocomplete UI. Without it, users
|
|
208
|
+
don't know what to type after the slash command.
|
|
209
|
+
|
|
210
|
+
### Good workflow skill examples
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
name: audit
|
|
214
|
+
description: Convenes the full cabinet for a quality review. Each cabinet member examines the project from their domain — security, performance, accessibility, and so on — and reports what they find. Use when preparing to ship, after significant changes, or periodically to catch drift.
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```yaml
|
|
218
|
+
name: orient
|
|
219
|
+
description: Session briefing. Reads project state, syncs data, scans work items, runs health checks, then briefs you so the session starts informed. Use at the start of every session.
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```yaml
|
|
223
|
+
name: debrief
|
|
224
|
+
description: Session close. Inventories what was done, closes work items, updates state, captures lessons, and prepares the briefing for next time. Use at the end of every working session.
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Rules for Cabinet Members Only
|
|
230
|
+
|
|
231
|
+
### cabinet-{domain} naming
|
|
232
|
+
|
|
233
|
+
Cabinet members are named `cabinet-{domain}`: `cabinet-security`,
|
|
234
|
+
`cabinet-qa`, `cabinet-architecture`. The prefix is how tooling
|
|
235
|
+
identifies members vs workflow skills.
|
|
236
|
+
|
|
237
|
+
**Why:** A single grep or directory glob can select all cabinet
|
|
238
|
+
members. Mixed naming (`security-reviewer` vs `cabinet-security`)
|
|
239
|
+
would require enumerating a list.
|
|
240
|
+
|
|
241
|
+
### "When to use" = standing-mandate contexts
|
|
242
|
+
|
|
243
|
+
Cabinet members activate in specific contexts (audit, plan, execute,
|
|
244
|
+
orient, debrief, seed). The description's second sentence should
|
|
245
|
+
state those activation contexts explicitly:
|
|
246
|
+
|
|
247
|
+
- "Activated during audit to check auth, input validation, and secret
|
|
248
|
+
handling." ✓
|
|
249
|
+
- "Activated during audit, plan, and execute." ✓ (if the member
|
|
250
|
+
participates in all three)
|
|
251
|
+
- "Used by developers when they want security review." ✗ (that's a
|
|
252
|
+
workflow skill phrasing)
|
|
253
|
+
|
|
254
|
+
**Why:** The framework reads the description when deciding whether
|
|
255
|
+
to convene a member for a given context. An explicit list of contexts
|
|
256
|
+
is the signal the framework uses.
|
|
257
|
+
|
|
258
|
+
### Second sentence = convening criteria triggers
|
|
259
|
+
|
|
260
|
+
Per the cabinet member template, the second sentence of the description
|
|
261
|
+
states when the member convenes (contexts + any file patterns or
|
|
262
|
+
keywords that trigger non-default activation).
|
|
263
|
+
|
|
264
|
+
**Why:** This gives the framework a single scannable location for
|
|
265
|
+
convening logic without parsing the whole SKILL.md body.
|
|
266
|
+
|
|
267
|
+
### Follow the 7-section structure
|
|
268
|
+
|
|
269
|
+
Cabinet members must have these sections in this order:
|
|
270
|
+
|
|
271
|
+
1. Identity
|
|
272
|
+
2. Convening Criteria
|
|
273
|
+
3. Investigation Protocol (Stage 1: Instrument, Stage 2: Analyze)
|
|
274
|
+
4. Scan Scope
|
|
275
|
+
5. Portfolio Boundaries
|
|
276
|
+
6. Calibration Examples
|
|
277
|
+
7. Historically Problematic Patterns
|
|
278
|
+
|
|
279
|
+
See `templates/cabinet/_cabinet-member-template.md` for the full
|
|
280
|
+
template and `cabinet-security/SKILL.md` for a reference
|
|
281
|
+
implementation.
|
|
282
|
+
|
|
283
|
+
**Why:** Consistent structure lets auditors and tooling reason about
|
|
284
|
+
cabinet members as a class. Missing sections are usually missing
|
|
285
|
+
capability — a member with no Calibration Examples produces
|
|
286
|
+
unpredictable findings.
|
|
287
|
+
|
|
288
|
+
### user-invocable: false
|
|
289
|
+
|
|
290
|
+
Cabinet members must have `user-invocable: false` in frontmatter.
|
|
291
|
+
|
|
292
|
+
**Why:** This hides them from the user-facing slash command menu.
|
|
293
|
+
They're framework-activated only — surfacing them as slash commands
|
|
294
|
+
would be confusing.
|
|
295
|
+
|
|
296
|
+
### Good cabinet member examples
|
|
297
|
+
|
|
298
|
+
```yaml
|
|
299
|
+
name: cabinet-security
|
|
300
|
+
description: Security engineer who evaluates whether the system's data and infrastructure are protected from accidental exposure. Activated during audit, plan, and execute to check authentication, input validation, secret handling, and deployment configuration.
|
|
301
|
+
user-invocable: false
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
```yaml
|
|
305
|
+
name: cabinet-qa
|
|
306
|
+
description: QA engineer who replaces automated tests. Activated during plan to ensure testable acceptance criteria, and during execute to actively test API endpoints, UI interactions, and edge cases.
|
|
307
|
+
user-invocable: false
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## How to Get a Skill Validated
|
|
313
|
+
|
|
314
|
+
### Mechanical checks — skill-validator.sh
|
|
315
|
+
|
|
316
|
+
Run the validator against one or more SKILL.md files:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
bash scripts/skill-validator.sh templates/skills/plan/SKILL.md
|
|
320
|
+
bash scripts/skill-validator.sh templates/skills/*/SKILL.md
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
It checks:
|
|
324
|
+
- Line count (body only, ≤500)
|
|
325
|
+
- Name validity (charset, length, reserved words)
|
|
326
|
+
- Description validity (presence, length, sentence count, no XML)
|
|
327
|
+
- Reference depth (one level)
|
|
328
|
+
- Path slashes (forward only)
|
|
329
|
+
- Skill type rules (workflow vs cabinet)
|
|
330
|
+
|
|
331
|
+
Output includes remediation hints for every failure.
|
|
332
|
+
|
|
333
|
+
### Full validation sweep — /validate
|
|
334
|
+
|
|
335
|
+
The `/validate` skill runs `skill-validator.sh` alongside other
|
|
336
|
+
structural checks (manifest drift, etc.). Use before committing
|
|
337
|
+
large changes.
|
|
338
|
+
|
|
339
|
+
### Judgment-based review — cabinet-roster-check
|
|
340
|
+
|
|
341
|
+
`cabinet-roster-check` activates during `/audit`. It reads this doc
|
|
342
|
+
as the normative reference and evaluates the **judgment-based**
|
|
343
|
+
quality dimensions that a script can't: is the description clear? Is
|
|
344
|
+
the scope right? Does the skill compose well with the rest of the
|
|
345
|
+
cabinet?
|
|
346
|
+
|
|
347
|
+
Mechanical checks enforce correctness; roster-check enforces quality.
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Progressive Disclosure (When SKILL.md Grows Too Long)
|
|
352
|
+
|
|
353
|
+
When a SKILL.md approaches 500 lines, extract sections rather than
|
|
354
|
+
trimming content. Sections that are good candidates:
|
|
355
|
+
|
|
356
|
+
- **Calibration examples** — large, self-contained, rarely change
|
|
357
|
+
- **Historically problematic patterns** — accumulate over time
|
|
358
|
+
- **Detailed checklists** — reference material, not orchestration
|
|
359
|
+
- **Lessons learned** — historical, not operational
|
|
360
|
+
|
|
361
|
+
Extract to `{section-name}.md` in the same directory. Keep a one-line
|
|
362
|
+
summary and a link in SKILL.md. Register the new file in
|
|
363
|
+
`lib/cli.js MODULES` if it ships with the installer.
|
|
364
|
+
|
|
365
|
+
**Don't confuse with phase files.** Phase files (`phases/*.md`) are
|
|
366
|
+
for consuming-project customization, not progressive disclosure.
|
|
367
|
+
Reference files are shipped content; phase files are override points.
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Checklist When Writing a New Skill
|
|
372
|
+
|
|
373
|
+
- [ ] Name is lowercase, hyphenated, ≤64 chars, no reserved words
|
|
374
|
+
- [ ] Description is 2+ sentences, covers what + when, ≤1024 chars
|
|
375
|
+
- [ ] Skill type is obvious from directory name (`cabinet-*` or not)
|
|
376
|
+
- [ ] If workflow: description uses user-trigger language
|
|
377
|
+
- [ ] If cabinet: description names activation contexts; `user-invocable: false`
|
|
378
|
+
- [ ] If cabinet: all 7 required sections present
|
|
379
|
+
- [ ] Body under 500 lines
|
|
380
|
+
- [ ] Reference files one level deep only
|
|
381
|
+
- [ ] Reference files over 100 lines have TOC
|
|
382
|
+
- [ ] Forward slashes in paths
|
|
383
|
+
- [ ] Consistent terminology throughout
|
|
384
|
+
- [ ] No dated claims ("as of X")
|
|
385
|
+
- [ ] Ran `bash scripts/skill-validator.sh {path}` and it exits 0
|