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.
Files changed (44) hide show
  1. package/README.md +4 -4
  2. package/lib/cli.js +7 -7
  3. package/package.json +1 -1
  4. package/templates/README.md +1 -1
  5. package/templates/cabinet/skill-best-practices.md +385 -0
  6. package/templates/scripts/skill-validator.sh +410 -0
  7. package/templates/skills/cabinet-anthropic-insider/SKILL.md +2 -0
  8. package/templates/skills/cabinet-anti-confirmation/SKILL.md +2 -0
  9. package/templates/skills/cabinet-architecture/SKILL.md +2 -0
  10. package/templates/skills/cabinet-automation/SKILL.md +2 -0
  11. package/templates/skills/cabinet-boundary-man/SKILL.md +2 -0
  12. package/templates/skills/cabinet-cc-health/SKILL.md +5 -59
  13. package/templates/skills/cabinet-cc-health/calibration.md +61 -0
  14. package/templates/skills/cabinet-data-integrity/SKILL.md +2 -0
  15. package/templates/skills/cabinet-debugger/SKILL.md +2 -0
  16. package/templates/skills/cabinet-framework-quality/SKILL.md +2 -0
  17. package/templates/skills/cabinet-goal-alignment/SKILL.md +2 -0
  18. package/templates/skills/cabinet-historian/SKILL.md +2 -0
  19. package/templates/skills/cabinet-information-design/SKILL.md +2 -0
  20. package/templates/skills/cabinet-interactive-storyteller/SKILL.md +2 -0
  21. package/templates/skills/cabinet-mantine-quality/SKILL.md +2 -0
  22. package/templates/skills/cabinet-narrative-architect/SKILL.md +2 -0
  23. package/templates/skills/cabinet-organized-mind/SKILL.md +2 -0
  24. package/templates/skills/cabinet-process-therapist/SKILL.md +2 -0
  25. package/templates/skills/cabinet-qa/SKILL.md +2 -0
  26. package/templates/skills/cabinet-record-keeper/SKILL.md +2 -0
  27. package/templates/skills/cabinet-roster-check/SKILL.md +29 -3
  28. package/templates/skills/cabinet-security/SKILL.md +2 -0
  29. package/templates/skills/cabinet-speed-freak/SKILL.md +2 -0
  30. package/templates/skills/cabinet-system-advocate/SKILL.md +2 -0
  31. package/templates/skills/cabinet-technical-debt/SKILL.md +2 -0
  32. package/templates/skills/cabinet-ui-experimentalist/SKILL.md +2 -0
  33. package/templates/skills/cabinet-usability/SKILL.md +2 -0
  34. package/templates/skills/cabinet-user-advocate/SKILL.md +2 -0
  35. package/templates/skills/cabinet-vision/SKILL.md +2 -0
  36. package/templates/skills/cabinet-workflow-cop/SKILL.md +2 -0
  37. package/templates/skills/cc-upgrade/SKILL.md +14 -127
  38. package/templates/skills/cc-upgrade/calibration.md +29 -0
  39. package/templates/skills/cc-upgrade/extending.md +36 -0
  40. package/templates/skills/cc-upgrade/safeguards.md +74 -0
  41. package/templates/skills/debrief/SKILL.md +4 -41
  42. package/templates/skills/debrief/calibration.md +44 -0
  43. package/templates/skills/seed/phases/build-member.md +20 -1
  44. 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, 30 domain experts, a planning process, and the
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** — 30 domain experts (security, accessibility,
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
- 30 expert cabinet members who each own a domain and stay in their lane.
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-*/ # 30 cabinet member definitions
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
- // Extract first sentence of description (before "Use when:")
242
- let shortDesc = (fm.description || '').replace(/\s*Use when:.*$/is, '').trim();
243
- // Collapse to first sentence
244
- const sentenceEnd = shortDesc.match(/\.\s/);
245
- if (sentenceEnd) shortDesc = shortDesc.slice(0, sentenceEnd.index + 1);
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: shortDesc,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-claude-cabinet",
3
- "version": "0.19.2",
3
+ "version": "0.20.0",
4
4
  "description": "Claude Cabinet — opinionated process scaffolding for Claude Code projects",
5
5
  "bin": {
6
6
  "create-claude-cabinet": "bin/create-claude-cabinet.js"
@@ -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 cabinet members)
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