claude-dev-env 1.93.0 → 1.94.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 (220) hide show
  1. package/_shared/pr-loop/CLAUDE.md +1 -0
  2. package/_shared/pr-loop/audit-contract.md +1 -1
  3. package/_shared/pr-loop/gh-payloads.md +3 -3
  4. package/_shared/pr-loop/post-audit-thread-contract.md +51 -0
  5. package/_shared/pr-loop/scripts/README.md +2 -2
  6. package/_shared/pr-loop/scripts/code_rules_gate.py +127 -13
  7. package/_shared/pr-loop/scripts/fix_hookspath.py +47 -12
  8. package/_shared/pr-loop/scripts/pr_loop_shared_constants/code_rules_gate_constants.py +4 -0
  9. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +146 -69
  10. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +497 -374
  11. package/_shared/pr-loop/state-schema.md +3 -22
  12. package/bin/CLAUDE.md +1 -1
  13. package/bin/install.mjs +2 -7
  14. package/bin/install.test.mjs +10 -4
  15. package/hooks/blocking/CLAUDE.md +2 -0
  16. package/hooks/blocking/pii_commit_command.py +398 -0
  17. package/hooks/blocking/pii_payload_scan.py +133 -0
  18. package/hooks/blocking/pii_prevention_blocker.py +151 -449
  19. package/hooks/blocking/pii_scanner.py +26 -1
  20. package/hooks/blocking/test_code_rules_enforcer_dead_config_field.py +2 -2
  21. package/hooks/blocking/test_pii_prevention_blocker.py +299 -0
  22. package/hooks/blocking/test_pii_scanner.py +27 -2
  23. package/hooks/blocking/test_verdict_directory_write_blocker.py +42 -7
  24. package/hooks/hooks_constants/CLAUDE.md +2 -2
  25. package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -2
  26. package/hooks/hooks_constants/local_identity.py +65 -15
  27. package/hooks/hooks_constants/pii_prevention_constants.py +20 -8
  28. package/hooks/hooks_constants/pr_description_enforcer_constants.py +1 -1
  29. package/hooks/hooks_constants/test_local_identity.py +68 -0
  30. package/package.json +1 -1
  31. package/scripts/CLAUDE.md +10 -1
  32. package/scripts/Get-SessionAccount.ps1 +210 -0
  33. package/scripts/tests/CLAUDE.md +15 -1
  34. package/scripts/tests/Get-SessionAccount.Tests.ps1 +350 -0
  35. package/skills/CLAUDE.md +3 -25
  36. package/skills/anthropic-plan/SKILL.md +1 -13
  37. package/skills/autoconverge/CLAUDE.md +5 -2
  38. package/skills/autoconverge/SKILL.md +112 -387
  39. package/skills/autoconverge/reference/CLAUDE.md +4 -1
  40. package/skills/autoconverge/reference/closing-report.md +9 -2
  41. package/skills/autoconverge/reference/convergence.md +26 -22
  42. package/skills/autoconverge/reference/headless-safety.md +44 -0
  43. package/skills/autoconverge/reference/multi-pr.md +88 -0
  44. package/skills/autoconverge/reference/self-closing-loop.md +84 -0
  45. package/skills/autoconverge/reference/stop-conditions.md +21 -13
  46. package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +87 -27
  47. package/skills/autoconverge/workflow/converge.contract.test.mjs +40 -10
  48. package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +179 -47
  49. package/skills/autoconverge/workflow/converge.fix-progress.test.mjs +1 -1
  50. package/skills/autoconverge/workflow/converge.mjs +284 -94
  51. package/skills/bugteam/CLAUDE.md +1 -1
  52. package/skills/bugteam/CONSTRAINTS.md +3 -3
  53. package/skills/bugteam/PROMPTS.md +8 -19
  54. package/skills/bugteam/SKILL.md +13 -14
  55. package/skills/bugteam/reference/CLAUDE.md +1 -1
  56. package/skills/bugteam/reference/audit-and-teammates.md +2 -2
  57. package/skills/bugteam/reference/copilot-gap-analysis.md +2 -0
  58. package/skills/bugteam/reference/github-pr-reviews.md +56 -38
  59. package/skills/bugteam/reference/team-setup.md +11 -11
  60. package/skills/bugteam/scripts/CLAUDE.md +6 -6
  61. package/skills/bugteam/scripts/README.md +20 -8
  62. package/skills/bugteam/scripts/bugteam_code_rules_gate.py +13 -1463
  63. package/skills/bugteam/scripts/bugteam_fix_hookspath.py +23 -358
  64. package/skills/bugteam/scripts/bugteam_preflight.py +13 -315
  65. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +2 -3
  66. package/skills/bugteam/scripts/test_bugteam_code_rules_gate.py +34 -1053
  67. package/skills/bugteam/scripts/test_bugteam_fix_hookspath.py +30 -347
  68. package/skills/bugteam/scripts/test_bugteam_preflight.py +30 -305
  69. package/skills/copilot-finding-triage/SKILL.md +80 -28
  70. package/skills/copilot-finding-triage/reference/tier-rubric.md +70 -11
  71. package/skills/copilot-finding-triage/templates/notification.md +8 -3
  72. package/skills/everything-search/SKILL.md +1 -2
  73. package/skills/grokify/SKILL.md +58 -0
  74. package/skills/grokify/templates/handoff-template.md +92 -0
  75. package/skills/orchestrator/SKILL.md +12 -8
  76. package/skills/orchestrator-refresh/SKILL.md +3 -3
  77. package/skills/pr-converge/SKILL.md +132 -233
  78. package/skills/pr-converge/reference/convergence-gates.md +102 -66
  79. package/skills/pr-converge/reference/examples.md +37 -25
  80. package/skills/pr-converge/reference/fix-protocol.md +7 -7
  81. package/skills/pr-converge/reference/multi-pr-orchestration.md +10 -4
  82. package/skills/pr-converge/reference/per-tick.md +64 -41
  83. package/skills/pr-converge/reference/state-schema.md +27 -2
  84. package/skills/pr-converge/scripts/CLAUDE.md +8 -0
  85. package/skills/pr-converge/scripts/README.md +4 -3
  86. package/skills/pr-converge/scripts/_pr_converge_path_setup.py +23 -0
  87. package/skills/pr-converge/scripts/check_convergence.py +189 -645
  88. package/skills/pr-converge/scripts/check_convergence_gates.py +235 -0
  89. package/skills/pr-converge/scripts/check_convergence_thread_gates.py +219 -0
  90. package/skills/pr-converge/scripts/conftest.py +8 -0
  91. package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +1 -0
  92. package/skills/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +36 -0
  93. package/skills/pr-converge/scripts/test__pr_converge_path_setup.py +26 -0
  94. package/skills/pr-converge/scripts/test_check_convergence.py +73 -228
  95. package/skills/pr-converge/scripts/test_check_convergence_contract.py +321 -0
  96. package/skills/pr-converge/scripts/test_check_convergence_gates.py +68 -0
  97. package/skills/pr-converge/scripts/test_check_convergence_thread_gates.py +75 -0
  98. package/skills/privacy-hygiene/SKILL.md +8 -7
  99. package/skills/reviewer-gates/SKILL.md +26 -8
  100. package/skills/session-log/SKILL.md +11 -12
  101. package/skills/session-tidy/SKILL.md +40 -30
  102. package/skills/skill-builder/CLAUDE.md +13 -10
  103. package/skills/skill-builder/SKILL.md +31 -31
  104. package/skills/skill-builder/references/CLAUDE.md +10 -6
  105. package/skills/skill-builder/references/delegation-map.md +13 -4
  106. package/skills/skill-builder/references/description-field.md +113 -0
  107. package/skills/skill-builder/references/self-audit-checklist.md +21 -4
  108. package/skills/skill-builder/references/skill-modularity.md +113 -0
  109. package/skills/skill-builder/references/skill-types.md +4 -0
  110. package/skills/skill-builder/templates/CLAUDE.md +4 -4
  111. package/skills/skill-builder/templates/gap-analysis.md +25 -1
  112. package/skills/skill-builder/workflows/CLAUDE.md +6 -4
  113. package/skills/skill-builder/workflows/improve-skill.md +17 -16
  114. package/skills/skill-builder/workflows/new-skill.md +34 -10
  115. package/skills/skill-builder/workflows/polish-skill.md +59 -43
  116. package/skills/usage-pause/SKILL.md +10 -14
  117. package/skills/bdd-protocol/CLAUDE.md +0 -26
  118. package/skills/bdd-protocol/SKILL.md +0 -30
  119. package/skills/bdd-protocol/references/CLAUDE.md +0 -10
  120. package/skills/bdd-protocol/references/anti-patterns.md +0 -26
  121. package/skills/bdd-protocol/references/example-mapping.md +0 -23
  122. package/skills/bg-agent/CLAUDE.md +0 -17
  123. package/skills/bg-agent/SKILL.md +0 -69
  124. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_code_rules_gate_constants.py +0 -55
  125. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_fix_hookspath_constants.py +0 -26
  126. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_preflight_constants.py +0 -35
  127. package/skills/caveman/CLAUDE.md +0 -15
  128. package/skills/caveman/SKILL.md +0 -38
  129. package/skills/code/CLAUDE.md +0 -17
  130. package/skills/code/SKILL.md +0 -178
  131. package/skills/deep-research/CLAUDE.md +0 -17
  132. package/skills/deep-research/SKILL.md +0 -80
  133. package/skills/findbugs/CLAUDE.md +0 -20
  134. package/skills/findbugs/SKILL.md +0 -241
  135. package/skills/fixbugs/CLAUDE.md +0 -19
  136. package/skills/fixbugs/SKILL.md +0 -142
  137. package/skills/gh-paginate/CLAUDE.md +0 -18
  138. package/skills/gh-paginate/SKILL.md +0 -84
  139. package/skills/gotcha/CLAUDE.md +0 -33
  140. package/skills/gotcha/SKILL.md +0 -73
  141. package/skills/implement/CLAUDE.md +0 -27
  142. package/skills/implement/SKILL.md +0 -66
  143. package/skills/implement/scripts/CLAUDE.md +0 -22
  144. package/skills/implement/scripts/append_note.py +0 -133
  145. package/skills/implement/scripts/implement_scripts_constants/CLAUDE.md +0 -22
  146. package/skills/implement/scripts/implement_scripts_constants/__init__.py +0 -0
  147. package/skills/implement/scripts/implement_scripts_constants/notes_constants.py +0 -12
  148. package/skills/implement/scripts/test_append_note.py +0 -191
  149. package/skills/log-audit/CLAUDE.md +0 -20
  150. package/skills/log-audit/SKILL.md +0 -66
  151. package/skills/log-audit/reference/CLAUDE.md +0 -9
  152. package/skills/log-audit/reference/charter.md +0 -52
  153. package/skills/log-audit/scripts/CLAUDE.md +0 -27
  154. package/skills/log-audit/scripts/cluster_recurrences.py +0 -261
  155. package/skills/log-audit/scripts/collect_log_window.py +0 -199
  156. package/skills/log-audit/scripts/log_audit_constants/CLAUDE.md +0 -12
  157. package/skills/log-audit/scripts/log_audit_constants/__init__.py +0 -0
  158. package/skills/log-audit/scripts/log_audit_constants/cluster_recurrences_constants.py +0 -23
  159. package/skills/log-audit/scripts/log_audit_constants/collect_log_window_constants.py +0 -24
  160. package/skills/log-audit/scripts/log_audit_constants/mine_copilot_findings_constants.py +0 -49
  161. package/skills/log-audit/scripts/mine_copilot_findings.py +0 -302
  162. package/skills/log-audit/scripts/test_cluster_recurrences.py +0 -160
  163. package/skills/log-audit/scripts/test_collect_log_window.py +0 -111
  164. package/skills/log-audit/scripts/test_mine_copilot_findings.py +0 -126
  165. package/skills/logifix/CLAUDE.md +0 -36
  166. package/skills/logifix/SKILL.md +0 -69
  167. package/skills/logifix/scripts/CLAUDE.md +0 -16
  168. package/skills/logifix/scripts/logifix.ps1 +0 -205
  169. package/skills/monitor-open-prs/CLAUDE.md +0 -34
  170. package/skills/monitor-open-prs/SKILL.md +0 -88
  171. package/skills/monitor-open-prs/scripts/CLAUDE.md +0 -17
  172. package/skills/monitor-open-prs/scripts/discover_open_prs.py +0 -69
  173. package/skills/monitor-open-prs/scripts/test_discover_open_prs.py +0 -149
  174. package/skills/monitor-open-prs/test_skill_contract.py +0 -27
  175. package/skills/post-audit-findings/SKILL.md +0 -80
  176. package/skills/pr-consistency-audit/CLAUDE.md +0 -34
  177. package/skills/pr-consistency-audit/SKILL.md +0 -116
  178. package/skills/pr-consistency-audit/reference/CLAUDE.md +0 -16
  179. package/skills/pr-consistency-audit/reference/detection-rules.md +0 -96
  180. package/skills/pr-consistency-audit/reference/illustrations.md +0 -78
  181. package/skills/pr-fix-protocol/SKILL.md +0 -65
  182. package/skills/pr-review-responder/CLAUDE.md +0 -35
  183. package/skills/pr-review-responder/EXAMPLES.md +0 -590
  184. package/skills/pr-review-responder/PRINCIPLES.md +0 -533
  185. package/skills/pr-review-responder/README.md +0 -168
  186. package/skills/pr-review-responder/SKILL.md +0 -203
  187. package/skills/pr-review-responder/TESTING.md +0 -350
  188. package/skills/pr-scope-resolve/SKILL.md +0 -45
  189. package/skills/pre-compact/CLAUDE.md +0 -24
  190. package/skills/pre-compact/SKILL.md +0 -134
  191. package/skills/qbug/CLAUDE.md +0 -40
  192. package/skills/qbug/SKILL.md +0 -387
  193. package/skills/qbug/test_qbug_skill_audit_schema.py +0 -152
  194. package/skills/qbug/test_qbug_skill_post_fix_audit.py +0 -103
  195. package/skills/refine/CLAUDE.md +0 -44
  196. package/skills/refine/SKILL.md +0 -262
  197. package/skills/refine/templates/CLAUDE.md +0 -17
  198. package/skills/refine/templates/implementation-notes-template.html +0 -56
  199. package/skills/refine/templates/plan-template.md +0 -60
  200. package/skills/research-mode/CLAUDE.md +0 -35
  201. package/skills/research-mode/SKILL.md +0 -53
  202. package/skills/structure-prompt/CLAUDE.md +0 -42
  203. package/skills/structure-prompt/SKILL.md +0 -44
  204. package/skills/structure-prompt/reference/CLAUDE.md +0 -28
  205. package/skills/structure-prompt/reference/adversarial-tuning.md +0 -62
  206. package/skills/structure-prompt/reference/block-classification.md +0 -27
  207. package/skills/structure-prompt/reference/canonical-case.md +0 -48
  208. package/skills/structure-prompt/reference/citation-depth.md +0 -70
  209. package/skills/structure-prompt/reference/cleanup.md +0 -33
  210. package/skills/structure-prompt/reference/constraints.md +0 -33
  211. package/skills/structure-prompt/reference/directives.md +0 -37
  212. package/skills/structure-prompt/reference/examples.md +0 -72
  213. package/skills/structure-prompt/reference/instantiation.md +0 -51
  214. package/skills/structure-prompt/reference/output-contract.md +0 -72
  215. package/skills/structure-prompt/reference/per-category.md +0 -23
  216. package/skills/structure-prompt/reference/persona.md +0 -38
  217. package/skills/structure-prompt/reference/research.md +0 -33
  218. package/skills/structure-prompt/reference/structure.md +0 -28
  219. package/skills/verified-build/CLAUDE.md +0 -33
  220. package/skills/verified-build/SKILL.md +0 -33
@@ -8,7 +8,7 @@ disable-model-invocation: true
8
8
 
9
9
  ## Overview
10
10
 
11
- Audit and consolidate session logs in the Obsidian vault (`sessions/[Project]/`) by enforcing the format contract, categorizing uncategorized files into project subfolders, resolving orphaned next-steps, updating stale statuses, and generating project rollup summaries.
11
+ Audit and consolidate session logs in the Obsidian vault (`sessions/[Project]/`) by enforcing the tidy audit rules, categorizing uncategorized files into project subfolders, resolving orphaned next-steps, updating stale statuses, and generating project rollup summaries.
12
12
 
13
13
  **Announce at start:** "Running session log consolidation."
14
14
 
@@ -16,16 +16,23 @@ Audit and consolidate session logs in the Obsidian vault (`sessions/[Project]/`)
16
16
 
17
17
  ## The Format Contract
18
18
 
19
- Source: `journal:session-log` skill definition. Read that skill's SKILL.md if you need to verify the authoritative format.
19
+ **Write-side HTML contract:** `/session-log` owns how new session reports are written — vault path, HTML frontmatter comment block, Artifact publish, and body design. Read `journal:session-log` SKILL.md for that contract. The markdown field shapes below describe files tidy may read; they are not the write path for new session reports.
20
20
 
21
- **Directory structure:** `sessions/[Project]/[N]. [Title].md`
22
- - Each project gets its own subfolder under `sessions/`
23
- - Session files are named `[N]. [Title].md` where Title is a 2-5 word summary of the primary outcome (e.g., `3. Amazon Auth Migration.md`)
24
- - Summary files are named `Summary.md` in the same project folder
21
+ **What tidy audits:** Project folders under `sessions/` may hold `.html` session reports and `.md` session files. Audit every session file present. The rules in this skill are the single home for tidy audit criteria.
22
+
23
+ **Directory structure:** `sessions/[Project]/`
24
+ - Session files match `[N]. [Title].html` or `[N]. [Title].md`, where Title is a 2-5 word summary of the primary outcome (e.g., `3. Amazon Auth Migration.html`)
25
+ - Summary files are `Summary.html` or `Summary.md` in the same project folder
25
26
  - No parenthetical suffixes like `(Wrap-Up)`
26
- - Files missing a title (e.g., `Session 1.md` or `1.md`) should be flagged for renaming -- read the content to derive a title
27
+ - Files missing a title (e.g., `Session 1.md` or `1.html`) should be flagged for renaming read the content to derive a title
28
+
29
+ **Shared metadata fields (required on every session file):**
30
+ `type`, `project`, `session`, `date`, `status`, `blocked`, `tags`
31
+
32
+ **HTML session reports** — when tidy reads a `.html` session file, metadata sits in an HTML comment block at the start of the file content. The write-side comment shape lives in session-log SKILL.md. HTML reports also carry `session_id` and `vault_context_retrieved`.
33
+
34
+ **Markdown session files** — when tidy reads a `.md` session file, metadata sits in YAML frontmatter:
27
35
 
28
- **Required frontmatter fields:**
29
36
  ```yaml
30
37
  ---
31
38
  type: session-report
@@ -38,40 +45,41 @@ tags: ["session", "[project-tag]"]
38
45
  ---
39
46
  ```
40
47
 
41
- **Content structure:**
48
+ **Content structure for markdown session files:**
42
49
  - Section headers (`###`) use one emoji + outcome-oriented title
43
50
  - Valid emojis: ✅ (done), 🚫 (blocked), ⚠️ (note), 🔧 (in-progress), 📋 (queued)
44
51
  - Explanatory paragraphs under each header, not just bullets
45
52
  - Tables for 3+ rows of structured data
46
53
  - No play-by-play or process narration
47
54
 
55
+ **Content structure for HTML session reports:** Body shape is session-specific (session-log designs per session). Tidy does not enforce a fixed HTML section template. Audit naming, metadata completeness, type, status coherence, orphaned next-steps text in the body, and categorization.
56
+
48
57
  ## The Process
49
58
 
50
59
  ### Phase 0: Preflight
51
60
 
52
- Determine which storage backend is available. Try in this order and use the first that succeeds:
61
+ Determine which storage backend is available. First success wins:
53
62
 
54
- 1. **Headless vault** -- run `ob --version` via Bash to verify the obsidian-headless CLI is installed. Then check `OBSIDIAN_VAULT_PATH` environment variable or `~/.claude/vault/` for a vault directory. If the CLI exists and a vault directory resolves, set `backend = "headless"`.
63
+ 1. **Headless vault** same check as Backend Detection in `journal:session-log` SKILL.md: Bash `ob --version`, then `OBSIDIAN_VAULT_PATH` or `~/.claude/vault/`. When the CLI check succeeds and a vault directory resolves, set `backend = "headless"`.
55
64
 
56
- 2. **Obsidian MCP** -- call `mcp__obsidian__list_directory` with `path="sessions"`. If it succeeds, set `backend = "obsidian"`.
65
+ 2. **Obsidian MCP** call `mcp__obsidian__list_directory` with `path="sessions"`. If it succeeds, set `backend = "obsidian"`.
57
66
 
58
- 3. **Local vault** -- use `~/.claude/vault/` as a local vault directory. Create it via `mkdir -p ~/.claude/vault/sessions` if it does not exist. Set `backend = "local"`.
67
+ 3. **Local vault** same fallback as session-log Backend Detection: `~/.claude/vault/`. Create `~/.claude/vault/sessions` via `mkdir -p` if missing. Set `backend = "local"`.
59
68
 
60
- **Headless and local capability notes:** When running without Obsidian MCP, the following operations use alternative methods:
61
- - **Move/rename:** `mv` via Bash
62
- - **Frontmatter update:** Read + modify YAML + Write
63
- - **Search:** Bash `ls` + Grep
69
+ **Capability notes by backend:**
70
+ - **obsidian:** list, read, move, frontmatter update, and write via MCP tools (`list_directory`, `read_note`, `move_note`, `update_frontmatter`, `write_note`). For `.html` files, metadata edits use Read + Edit of the HTML comment block when MCP frontmatter tools do not apply.
71
+ - **headless / local:** Move/rename via `mv` (Bash). Metadata update via Read + Edit/Write. Search via Bash `ls` + Grep.
64
72
 
65
73
  ### Phase 1: Audit
66
74
 
67
- List project subdirectories in `sessions/` via `mcp__obsidian__list_directory`. For each project folder, read its files via `mcp__obsidian__read_note`. Also check for any files sitting directly in `sessions/` (uncategorized). For each file, check:
75
+ List project subdirectories in `sessions/` (MCP `list_directory` when backend is obsidian; Bash `ls` when headless or local). For each project folder, read its files. Also check for any files sitting directly in `sessions/` (uncategorized). Audit both `.html` and `.md` session files. For each file, check:
68
76
 
69
- 1. **Naming convention?** Must match `[N]. [Title].md` where N is the session number and Title is a 2-5 word outcome summary. Flag bracket prefixes, date-only names, parenthetical suffixes, or legacy `Session [N].md` patterns missing a title.
70
- 2. **Frontmatter complete?** All required fields present: `type`, `project`, `session`, `date`, `status`, `blocked`, `tags`.
77
+ 1. **Naming convention?** Must match `[N]. [Title].html` or `[N]. [Title].md` where N is the session number and Title is a 2-5 word outcome summary. Flag bracket prefixes, date-only names, parenthetical suffixes, or patterns missing a title such as `Session 1.md` or `1.html`.
78
+ 2. **Frontmatter complete?** All shared required fields present: `type`, `project`, `session`, `date`, `status`, `blocked`, `tags`. For `.html` session reports, also require `session_id` and `vault_context_retrieved`.
71
79
  3. **Type correct?** Must be `session-report`. Flag other types.
72
- 4. **Status coherent?** `status: "completed"` with `blocked: true` is contradictory. `status: "in-progress"` or `status: "blocked"` on sessions older than 7 days is likely stale.
80
+ 4. **Status coherent?** `status: completed` with `blocked: true` is contradictory. `status: in-progress` or `status: blocked` on sessions older than 7 days is likely stale.
73
81
  5. **Orphaned next-steps?** Scan content for sections containing "Next", "Queued", "Session N+1", "TODO", or clipboard emoji sections. Cross-reference against subsequent sessions for the same project to determine if the items were addressed.
74
- 6. **Categorized?** Files sitting directly in `sessions/` (not in a project subfolder) are uncategorized. Infer the project name from the filename pattern (e.g., `BudgetBridge Session 3.md` belongs in `sessions/BudgetBridge/`) or from the frontmatter `project` field. Flag for move into the correct subfolder.
82
+ 6. **Categorized?** Files sitting directly in `sessions/` (not in a project subfolder) are uncategorized. Infer the project name from the filename pattern (e.g., `BudgetBridge Session 3.md` belongs in `sessions/BudgetBridge/`) or from the frontmatter `project` field. Flag for a move into the correct subfolder.
75
83
 
76
84
  ### Phase 2: Propose Changes
77
85
 
@@ -83,8 +91,8 @@ Present a structured report:
83
91
  - **Resolved:** found evidence in a later session
84
92
  - **Orphaned:** no later session addresses it
85
93
  - **Unknown:** later sessions exist but don't clearly address or skip the item
86
- **Uncategorized files** -- files in `sessions/` root that should be moved into a project subfolder
87
- **Rollup candidates** -- projects with 3+ sessions that have no rollup/summary session
94
+ **Uncategorized files** -- files in `sessions/` root that should live in a project subfolder
95
+ **Rollup candidates** -- projects with 3+ sessions that have no `Summary.html` or `Summary.md`
88
96
  **Proposed actions** -- numbered list of specific changes
89
97
 
90
98
  Do NOT execute any changes yet. Wait for user approval.
@@ -93,14 +101,16 @@ Do NOT execute any changes yet. Wait for user approval.
93
101
 
94
102
  After user approves (all or selected items):
95
103
 
96
- 1. **Rename** non-conforming files via `mcp__obsidian__move_note`.
97
- 2. **Fix frontmatter** via `mcp__obsidian__update_frontmatter` -- set correct type, add missing fields.
104
+ 1. **Rename** non-conforming files via `mcp__obsidian__move_note` (obsidian) or `mv` (headless/local). Keep the file's extension (`.html` or `.md`).
105
+ 2. **Fix frontmatter:**
106
+ - `.md` files: `mcp__obsidian__update_frontmatter` when backend is obsidian; Read + Edit/Write of YAML frontmatter when headless or local. Set correct type; add missing shared fields.
107
+ - `.html` files: Read + Edit of the HTML comment block fields (shape in session-log SKILL.md). Set correct type; add missing shared fields plus `session_id` and `vault_context_retrieved` when absent.
98
108
  3. **Update stale statuses** -- change old in-progress/blocked to completed (or ask user for correct status).
99
109
  4. **Clean orphaned next-steps** -- for confirmed orphaned items, either:
100
110
  - Remove the section if all items are orphaned and the session is old
101
111
  - Add a strikethrough or "(not pursued)" annotation if some items remain relevant
102
112
  - Leave unchanged if user declines
103
- 5. **Generate project rollups** -- for each qualifying project, write a summary note via `mcp__obsidian__write_note`:
113
+ 5. **Generate project rollups** -- for each qualifying project, write a summary note via `mcp__obsidian__write_note` (obsidian) or Write (headless/local):
104
114
  - **Path:** `sessions/[Project]/Summary.md`
105
115
  - **Frontmatter:** `{"type": "project-summary", "project": "[name]", "sessions": [count], "date_range": "[first] to [last]", "tags": ["summary", "[project-tag]"]}`
106
116
  - **Content:** Use this template:
@@ -123,14 +133,14 @@ After user approves (all or selected items):
123
133
  ### Carried Forward
124
134
  - [ ] [unresolved item from latest session]
125
135
  ```
126
- 6. **Categorize uncategorized files** -- move files from `sessions/` root into the correct project subfolder via `mcp__obsidian__move_note`. When moving, rename to match the `[N]. [Title].md` convention (e.g., `sessions/BudgetBridge Session 3.md` becomes `sessions/BudgetBridge/3. [Title derived from content].md`).
136
+ 6. **Categorize uncategorized files** -- move files from `sessions/` root into the correct project subfolder via `mcp__obsidian__move_note` or `mv`. When moving, rename to match the `[N]. [Title].html` or `[N]. [Title].md` convention for that file's extension (e.g., `sessions/BudgetBridge Session 3.md` becomes `sessions/BudgetBridge/3. [Title derived from content].md`).
127
137
 
128
138
  ### Phase 4: Verify
129
139
 
130
140
  After execution, re-read the vault and confirm:
131
141
  - Every session file lives in a project subfolder under `sessions/[Project]/`
132
- - Every file has valid frontmatter with all required fields
133
- - Every filename matches the naming convention (`[N]. [Title].md` or `Summary.md`)
142
+ - Every file has valid frontmatter with all required fields for its shape
143
+ - Every filename matches the naming convention (`[N]. [Title].html`, `[N]. [Title].md`, `Summary.html`, or `Summary.md`)
134
144
  - No contradictory status/blocked combos
135
145
  - All orphaned next-steps resolved or annotated
136
146
  - Rollup summaries exist for qualifying projects
@@ -1,27 +1,29 @@
1
1
  # skill-builder
2
2
 
3
- Orchestrates the complete skill-building lifecycle: classify the skill type, scaffold folders, write via `skill-writer`, self-audit against a 38-point checklist, and refine from real usage observations.
3
+ Orchestrates the skill-building lifecycle: classify type, scaffold folders, write via `skill-writer`, enforce modularity (sub-skills / composition), write description as a trigger catalog, self-audit, and refine from real usage.
4
4
 
5
- **Trigger:** "build a skill", "new skill workflow", "improve this skill", "optimize skill description", "skill development lifecycle".
5
+ **Trigger:** build a skill, new skill workflow, improve this skill, optimize skill description, skill development lifecycle, skill modularity, description trigger catalog.
6
6
 
7
7
  ## Purpose
8
8
 
9
- The expert that enforces craft standards. For quick one-off SKILL.md edits, use `/skill-writer` directly. This skill classifies, scaffolds, gathers context, delegates writing, and self-audits the result.
9
+ Enforces craft standards for new and existing skills. For quick one-off SKILL.md edits, use `/skill-writer` directly. This skill classifies, scaffolds, gathers context (including composition plan and description triggers), delegates writing, and self-audits.
10
10
 
11
11
  ## Key files
12
12
 
13
13
  | File | Purpose |
14
14
  |---|---|
15
- | `SKILL.md` | Hub — routing, 9-type taxonomy table, core principles, file index |
15
+ | `SKILL.md` | Hub — routing, principles, file index |
16
16
  | `references/skill-types.md` | 9-type taxonomy with folder structures per type |
17
17
  | `references/progressive-disclosure.md` | Hub pattern, folder conventions, hard rules |
18
- | `references/self-audit-checklist.md` | 38-point mandatory post-build audit |
18
+ | `references/skill-modularity.md` | Cross-skill modularity, sub-skills, composition plan |
19
+ | `references/description-field.md` | Description as trigger catalog (not story prose) |
20
+ | `references/self-audit-checklist.md` | Mandatory post-build audit |
19
21
  | `references/delegation-map.md` | Subagent handoff patterns and transcript guidance |
20
22
  | `references/thariq-x-post-skills.json` | Source reference — lessons from building Claude Code skills |
21
23
  | `workflows/new-skill.md` | Full lifecycle for new skills (6 steps) |
22
24
  | `workflows/improve-skill.md` | Observation-first flow for existing skills (6 steps) |
23
- | `workflows/polish-skill.md` | Description audit and final validation (5 steps) |
24
- | `templates/gap-analysis.md` | Template for documenting skill gaps |
25
+ | `workflows/polish-skill.md` | Description trigger-catalog audit and final validation (5 steps) |
26
+ | `templates/gap-analysis.md` | Gaps, composition plan, description triggers |
25
27
 
26
28
  ## Subdirectories
27
29
 
@@ -40,6 +42,7 @@ The expert that enforces craft standards. For quick one-off SKILL.md edits, use
40
42
 
41
43
  ## Conventions
42
44
 
43
- - Every build ends with the 38-point self-audit at `references/self-audit-checklist.md`; fix failures before delivery.
44
- - `skill-builder` orchestrates; `skill-writer` authors. The handoff packet must include type, gap analysis, degree-of-freedom assessment, and constraints.
45
- - The Claude A / Claude B pattern: Claude A (this session) designs; Claude B (subagents) tests by running the built skill on real tasks.
45
+ - Every build ends with the self-audit at `references/self-audit-checklist.md`; fix failures before delivery.
46
+ - Modularity items and description trigger-catalog items are mandatory on every delivery.
47
+ - `skill-builder` orchestrates; `skill-writer` authors. Handoff packet must include type, gap analysis, composition plan, description trigger catalog, degree-of-freedom assessment, and constraints.
48
+ - Claude A / Claude B: Claude A (this session) designs; Claude B (subagents) tests the built skill on real tasks.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: skill-builder
3
3
  description: >-
4
- Runs the skill-building lifecycle: type classification, scaffolding, writing
5
- through skill-writer, self-audit against a checklist, and refinement from real
6
- usage. Triggers: 'build a skill', 'new skill workflow', 'improve this skill',
7
- 'optimize skill description', 'skill development lifecycle'.
4
+ Skill lifecycle: classify, scaffold, write via skill-writer, self-audit, compose
5
+ sub-skills, polish description triggers. Triggers: build a skill, new skill
6
+ workflow, improve this skill, optimize skill description, skill development
7
+ lifecycle, skill modularity, skill composition, description trigger catalog.
8
8
  ---
9
9
 
10
10
  # Skill Builder
@@ -19,6 +19,10 @@ Highest-signal content. Append a bullet each time a skill build fails in a new w
19
19
 
20
20
  > "The highest-signal content in any skill is the Gotchas section. These sections should be built up from common failure points that Claude runs into when using your skill."
21
21
 
22
+ - Story-form `description` burns always-on context and weakens selection — rewrite to capability stem + `Triggers:` list (`description-field.md`).
23
+ - Multi-capability packages fail modularity audit — split or thin orchestrator + named sub-skills (`skill-modularity.md`).
24
+ - Skipping the composition plan before Write reintroduces silent reimplementation of peer skills.
25
+
22
26
  ## When this skill applies
23
27
 
24
28
  Trigger for requests to **build**, **improve**, or **polish** a skill. This skill orchestrates the process — it classifies, scaffolds, gathers context, delegates writing to `/skill-writer`, and self-audits the result.
@@ -60,23 +64,11 @@ The feedback loop: observe Claude B’s behavior, bring insights back, refine th
60
64
 
61
65
  > "After cataloging all of our skills, we noticed they cluster into a few recurring categories."
62
66
 
63
- Classify the skill into one of 9 types. The type determines folder structure. See `${CLAUDE_SKILL_DIR}/references/skill-types.md` for full details.
64
-
65
- | # | Type | Key folders |
66
- |---|---|---|
67
- | 1 | Library & API Reference | reference/, examples/ |
68
- | 2 | Product Verification | scripts/, reference/ |
69
- | 3 | Data Fetching & Analysis | reference/, scripts/ |
70
- | 4 | Business Process & Team Automation | templates/, scripts/ |
71
- | 5 | Code Scaffolding & Templates | templates/, scripts/ |
72
- | 6 | Code Quality & Review | reference/, scripts/ |
73
- | 7 | CI/CD & Deployment | workflows/, scripts/ |
74
- | 8 | Runbooks | reference/, templates/ |
75
- | 9 | Infrastructure Operations | reference/, scripts/ |
67
+ Classify into one of 9 types type sets folder structure. Taxonomy and layouts: [`references/skill-types.md`](references/skill-types.md).
76
68
 
77
69
  ## Principles
78
70
 
79
- These are non-negotiable. Every skill must satisfy them. The self-audit checklist enforces them.
71
+ These are non-negotiable. Every skill must satisfy them. Enforce via [`references/self-audit-checklist.md`](references/self-audit-checklist.md).
80
72
 
81
73
  ### Concision and defaults
82
74
 
@@ -96,25 +88,27 @@ High freedom (text guidance) for open fields. Low freedom (exact scripts, no par
96
88
 
97
89
  ### Progressive disclosure
98
90
 
99
- > "Keep SKILL.md body under 500 lines."
91
+ Hub pattern, line caps, one-level references, TOC and path rules: [`references/progressive-disclosure.md`](references/progressive-disclosure.md).
92
+
93
+ ### Modularity and composition
100
94
 
101
- SKILL.md is a hub. Detail lives in reference/, scripts execute without being read into context. References one level deep. Files over 100 lines get a TOC. Forward slashes only.
95
+ One skill = one capability. Multi-step work invokes **sub-skills** (peer skills) by name. Prefer compose over reimplement. Full rules: [`references/skill-modularity.md`](references/skill-modularity.md).
102
96
 
103
- See `${CLAUDE_SKILL_DIR}/references/progressive-disclosure.md` for the full specification.
97
+ > "You can just reference other skills by name, and the model will invoke them if they are installed."
104
98
 
105
- ### Description field
99
+ New-skill Gather records a composition plan before write. Self-audit modularity items are mandatory.
106
100
 
107
- > "Always write in third person. The description is critical for skill selection: Claude uses it to choose the right Skill from potentially 100+ available Skills."
101
+ ### Description field (trigger catalog)
108
102
 
109
- Include what the skill does AND specific trigger phrases. Max 1024 chars.
103
+ The frontmatter `description` is **selection metadata** pre-loaded for every skill. Write a **trigger catalog**, not a story: short capability stem + concrete trigger phrases. No narrative, benefits language, or process dump.
104
+
105
+ Full rules: [`references/description-field.md`](references/description-field.md). Polish workflow Step 1 is the dedicated rewrite pass.
110
106
 
111
107
  > "The description field is not a summary — it’s a description of when to trigger."
112
108
 
113
109
  ### Gotchas
114
110
 
115
- > "Build a Gotchas Section the highest-signal content in any skill."
116
-
117
- Mandatory section. Built from real failure observations. Updated over time as new failure modes surface.
111
+ Mandatory highest-signal section (see Gotchas above). Capture real failure modes; self-audit requires the section present and actionable.
118
112
 
119
113
  ### Templates and examples
120
114
 
@@ -148,6 +142,8 @@ Multi-step processes get `[ ]` checklists. Quality-critical operations get feedb
148
142
 
149
143
  > No Windows paths. Don’t offer too many options — provide a default with escape hatch. Avoid time-sensitive claims. Use consistent terminology. No deeply nested references.
150
144
 
145
+ Also: story-form descriptions; monolith multi-capability skills; silent reimplementation of peer skills; nested folders used as fake sub-skills.
146
+
151
147
  ## Self-audit
152
148
 
153
149
  After every build, improvement, or polish pass, run the mandatory checklist at `${CLAUDE_SKILL_DIR}/references/self-audit-checklist.md`. Every item must pass before delivery. Fix failures, then re-audit.
@@ -157,9 +153,11 @@ After every build, improvement, or polish pass, run the mandatory checklist at `
157
153
  skill-builder orchestrates; skill-writer authors. The handoff packet from Step 4 must include:
158
154
 
159
155
  - Skill type and folder structure
160
- - Gap analysis or observation findings
156
+ - Gap analysis or observation findings (composition plan + description triggers)
161
157
  - Degree of freedom assessment
162
158
  - Initial gotchas
159
+ - Composition plan: related skills, sub-skills to invoke, split decisions
160
+ - Description trigger catalog: capability stem + trigger phrases (not prose)
163
161
  - Any constraints
164
162
 
165
163
  See `${CLAUDE_SKILL_DIR}/references/delegation-map.md` for exact patterns.
@@ -171,12 +169,14 @@ See `${CLAUDE_SKILL_DIR}/references/delegation-map.md` for exact patterns.
171
169
  | `SKILL.md` | This hub — principles, process, routing, file index |
172
170
  | `references/skill-types.md` | 9-type taxonomy with folder structures per type |
173
171
  | `references/progressive-disclosure.md` | Folder conventions, hub pattern, hard rules |
174
- | `references/self-audit-checklist.md` | 38-point mandatory post-build audit |
172
+ | `references/skill-modularity.md` | Cross-skill modularity, sub-skills, composition plan |
173
+ | `references/description-field.md` | Description as trigger catalog (not story prose) |
174
+ | `references/self-audit-checklist.md` | Mandatory post-build audit (core, modularity, description) |
175
175
  | `references/delegation-map.md` | Subagent handoff patterns and transcript guidance |
176
176
  | `workflows/new-skill.md` | Full lifecycle for new skills (6 steps) |
177
177
  | `workflows/improve-skill.md` | Observation-first flow for existing skills (6 steps) |
178
- | `workflows/polish-skill.md` | Description audit and final validation (5 steps) |
179
- | `templates/gap-analysis.md` | Template for documenting skill gaps |
178
+ | `workflows/polish-skill.md` | Description trigger-catalog audit and final validation (5 steps) |
179
+ | `templates/gap-analysis.md` | Gaps, composition plan, description triggers |
180
180
 
181
181
  ## Folder map
182
182
 
@@ -6,14 +6,18 @@ Best-practice specifications and the mandatory self-audit checklist for the `/sk
6
6
 
7
7
  | File | Purpose |
8
8
  |---|---|
9
- | `self-audit-checklist.md` | 38-point checklist run after every build, improvement, or polish pass. Every item must pass before delivery. |
10
- | `skill-types.md` | 9-type skill taxonomy with folder structures per type (Library & API Reference, Product Verification, Data Fetching, Business Process, Code Scaffolding, Code Quality, CI/CD, Runbooks, Infrastructure). |
11
- | `progressive-disclosure.md` | Hub pattern, folder conventions, and hard rules: SKILL.md under 500 lines, detail in reference/, scripts execute without context load, references one level deep. |
12
- | `delegation-map.md` | Subagent handoff patterns and transcript guidance for the skill-builder → skill-writer handoff. |
9
+ | `self-audit-checklist.md` | Checklist after every build, improvement, or polish pass. Every item must pass before delivery. |
10
+ | `skill-types.md` | 9-type skill taxonomy with folder structures per type. |
11
+ | `progressive-disclosure.md` | Hub pattern, folder conventions, hard rules: SKILL.md under 500 lines, one-level references. |
12
+ | `skill-modularity.md` | Cross-skill modularity: one capability, sub-skills by name, composition plan, anti-monolith. |
13
+ | `description-field.md` | Frontmatter description as trigger catalog (capability stem + Triggers). No story prose. |
14
+ | `delegation-map.md` | Subagent handoff patterns and transcript guidance for skill-builder → skill-writer. |
13
15
  | `thariq-x-post-skills.json` | Source reference data from Anthropic lessons on building Claude Code skills. |
14
16
 
15
17
  ## Conventions
16
18
 
17
- - These files are loaded on demand by `SKILL.md` routing — not all are loaded on every run.
18
- - `self-audit-checklist.md` is always loaded at the end of a build cycle.
19
+ - These files load on demand from `SKILL.md` routing — not all on every run.
20
+ - `self-audit-checklist.md` always loads at the end of a build cycle.
21
+ - Load `skill-modularity.md` during Gather and when scope/overlap is diagnosed.
22
+ - Load `description-field.md` during Gather, polish Step 1, and any activation diagnosis.
19
23
  - `thariq-x-post-skills.json` is source reference data, not executable content.
@@ -13,17 +13,23 @@ Create a skill with these parameters:
13
13
 
14
14
  **Skill type:** [one of 9 types from skill-types.md]
15
15
  **Folder structure:** [directories to create: reference/, scripts/, etc.]
16
- **What it does:** [one-sentence capability description]
16
+ **What it does:** [one-sentence capability — single job]
17
17
  **Domain context:** [what Claude needs to know that it doesn't already]
18
18
  **Initial gotchas:** [failure patterns to document from the start]
19
19
  **Degree of freedom:** [high | medium | low — with reasoning]
20
20
  **Constraints:** [non-negotiables]
21
+ **Composition plan:** [related skills; sub-skills with when/produces/missing; leaf vs orchestrator]
22
+ **Description (exact frontmatter string):** [capability stem. Triggers: phrase, phrase, ...]
23
+ — Trigger catalog only per description-field.md. No story prose.
21
24
 
22
25
  Produce:
23
26
  1. SKILL.md with hub layout (principle, gotchas, when-applies, process, file index, folder map)
24
- 2. Companion files as needed (reference docs, workflow steps, templates)
25
- 3. Every file under 500 lines; TOC on files over 100 lines
26
- 4. File index listing every file and its purpose
27
+ 2. Frontmatter description set to the exact trigger-catalog string above
28
+ 3. Sub-skills table in body when composition plan lists peer skills
29
+ 4. Companion files as needed (reference docs, workflow steps, templates)
30
+ 5. Every file under 500 lines; TOC on files over 100 lines
31
+ 6. File index listing every file and its purpose
32
+ 7. No reimplementation of steps owned by named sub-skills
27
33
  ```
28
34
 
29
35
  ### Refine skill handoff
@@ -36,8 +42,11 @@ Refine this existing skill:
36
42
  **What to change:** [specific instructions to add/remove/modify]
37
43
  **New gotchas to add:** [failure patterns discovered]
38
44
  **What to preserve:** [working content — do not touch]
45
+ **Description rewrite (if activation issue):** [exact new trigger-catalog string]
46
+ **Composition change (if modularity issue):** [sub-skills to add/invoke or split plan]
39
47
 
40
48
  Constraint: Only change what the observations demand. Do not reorganize working content.
49
+ Description must remain a trigger catalog (description-field.md), never story prose.
41
50
  ```
42
51
 
43
52
  ## Spawning a test subagent
@@ -0,0 +1,113 @@
1
+ # Description field (trigger catalog)
2
+
3
+ Source: [Anthropic — Skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) (Writing effective descriptions; metadata pre-load), [Claude Code Skills](https://docs.anthropic.com/en/docs/claude-code/skills), Thariq lessons (`thariq-x-post-skills.json`).
4
+
5
+ ## Role
6
+
7
+ At session start, **only** each skill’s `name` and `description` load into context. The body loads after selection.
8
+
9
+ The description is **selection metadata**, not a summary of the skill and not process documentation. It answers: *should Claude load this skill for this user turn?*
10
+
11
+ > "The description field is not a summary — it’s a description of when to trigger."
12
+
13
+ > "The description is critical for skill selection: Claude uses it to choose the right Skill from potentially 100+ available Skills."
14
+
15
+ ## Hard limits
16
+
17
+ | Rule | Value |
18
+ |---|---|
19
+ | Voice | Third person only (no I/you) |
20
+ | Max length | 1024 characters |
21
+ | XML | Forbidden |
22
+ | Empty | Forbidden |
23
+
24
+ ## Required shape: trigger catalog
25
+
26
+ Two parts, dense, no story prose:
27
+
28
+ 1. **Capability stem** (what) — 5–20 words of capability tokens. Fragments or semicolon-separated verbs. No motivation, no audience address, no “helps you”.
29
+ 2. **Triggers** (when) — concrete phrases, slash-commands, file types, and domain nouns the user or model might emit. Prefer a labeled `Triggers:` segment.
30
+
31
+ ### Canonical template
32
+
33
+ ```yaml
34
+ description: >-
35
+ <capability tokens>. Triggers: <phrase>, <phrase>, <slash>, <filetype>, <near-miss exclusion if needed>.
36
+ ```
37
+
38
+ ### Good
39
+
40
+ ```yaml
41
+ description: >-
42
+ Extract PDF text/tables; fill forms; merge docs. Triggers: PDF, .pdf, forms, document extraction, fill this form, merge PDFs.
43
+ ```
44
+
45
+ ```yaml
46
+ description: >-
47
+ Skill lifecycle: classify, scaffold, write via skill-writer, self-audit, compose sub-skills, polish description triggers. Triggers: build a skill, new skill workflow, improve this skill, optimize skill description, skill development lifecycle, skill modularity.
48
+ ```
49
+
50
+ ```yaml
51
+ description: >-
52
+ Generate commit messages from git diffs. Triggers: commit message, write a commit, staged changes, git commit help.
53
+ ```
54
+
55
+ ### Bad (story / waste)
56
+
57
+ ```yaml
58
+ # Narrative — burns always-on tokens, weak for matching
59
+ description: >-
60
+ This skill helps you work with PDF files by guiding Claude through a careful
61
+ process of extraction and form filling so you get reliable results every time.
62
+ ```
63
+
64
+ ```yaml
65
+ # Vague — no match surface
66
+ description: Helps with documents
67
+ ```
68
+
69
+ ```yaml
70
+ # Implementation dump — body material, not metadata
71
+ description: >-
72
+ Uses pdfplumber and a five-step validate loop. See scripts/ for helpers.
73
+ ```
74
+
75
+ ```yaml
76
+ # First/second person
77
+ description: I can help you process Excel files
78
+ description: You can use this to process Excel files
79
+ ```
80
+
81
+ ## Authoring steps
82
+
83
+ 1. List **capability tokens** (what the skill owns in one breath).
84
+ 2. List **10+ user phrasings** that should select this skill (formal, casual, slash, file-type).
85
+ 3. List **near-misses** that must *not* select it (sibling skills). Fold only the shortest distinguishing tokens into Triggers if needed.
86
+ 4. Assemble stem + `Triggers:` list. Strip adjectives, benefits, and process narrative.
87
+ 5. Count characters (≤1024). Prefer under ~400 when possible — every skill’s description is always loaded.
88
+ 6. Run the checklist below.
89
+
90
+ ## Description checklist
91
+
92
+ ```
93
+ - [ ] Third person; no I/you
94
+ - [ ] Capability stem present (what), ≤20 words of tokens
95
+ - [ ] Triggers: segment (or equivalent dense when-list) with concrete phrases
96
+ - [ ] No story prose, benefits language, or implementation steps
97
+ - [ ] No XML; length ≤1024
98
+ - [ ] Distinguishable from sibling skills in the same domain
99
+ - [ ] Body holds process detail — not the description
100
+ ```
101
+
102
+ ## Where process lives
103
+
104
+ | Content | Location |
105
+ |---|---|
106
+ | When to select the skill | `description` frontmatter |
107
+ | How to run the skill | SKILL.md body + companions |
108
+ | Refusal / boundary narrative | When-this-applies section in body |
109
+ | Sub-skill invocation | Body Sub-skills table (`skill-modularity.md`) |
110
+
111
+ ## Polish workflow
112
+
113
+ `workflows/polish-skill.md` Step 1 is the dedicated description pass: rewrite any story description into a trigger catalog and re-check discovery against phrase lists.
@@ -12,8 +12,12 @@ Source synthesis: [Anthropic best practices](https://platform.claude.com/docs/en
12
12
  > "Match the level of specificity to the task's fragility and variability."
13
13
  - [ ] **Naming convention** — Name uses gerund form (verb-ing) unless it's a well-known acronym or proper name. Lowercase, numbers, hyphens only. Max 64 chars. No reserved words.
14
14
  > "Use consistent naming patterns to make Skills easier to reference."
15
- - [ ] **Description field** — Third person. Includes what AND when. Specific trigger phrases. Max 1024 chars. No XML tags.
15
+ - [ ] **Description is a trigger catalog** — Capability stem (what tokens) + concrete Triggers list (when). Third person. Max 1024 chars. No XML. Spec: `description-field.md`.
16
16
  > "The description is critical for skill selection: Claude uses it to choose the right Skill from potentially 100+ available Skills."
17
+ - [ ] **Description is not a story** — No narrative prose, benefits language ("helps you"), first/second person, or process/implementation dump in frontmatter.
18
+ > "The description field is not a summary — it's a description of when to trigger."
19
+ - [ ] **Description match surface** — Includes specific phrases, slash forms, and file types a user would say; distinguishable from sibling skills.
20
+ > "Be specific and include key terms."
17
21
  - [ ] **SKILL.md body under 500 lines**
18
22
  > "Keep SKILL.md body under 500 lines for optimal performance."
19
23
  - [ ] **One level deep** — All reference files link directly from SKILL.md. No nested references.
@@ -78,10 +82,23 @@ Source synthesis: [Anthropic best practices](https://platform.claude.com/docs/en
78
82
  - [ ] **Persistent data uses `${CLAUDE_PLUGIN_DATA}`** — Not stored in skill directory itself.
79
83
  > "Data stored in the skill directory may be deleted when you upgrade the skill."
80
84
 
81
- ## Composition and measurement (if applicable)
85
+ ## Modularity and composition
82
86
 
83
- - [ ] **Skill dependencies documented** Skills this one composes with are named.
87
+ Mandatory for every skill. Spec: `skill-modularity.md`. Progressive disclosure (file split) does not satisfy these items.
88
+
89
+ - [ ] **Single capability boundary** — One clear job in one sentence. Unrelated jobs are separate skills or an orchestrator that only routes to named sub-skills.
90
+ > "The best skills fit cleanly into one; the more confusing ones straddle several."
91
+ - [ ] **Compose before reimplement** — Steps an existing skill already owns are invoked by name, not pasted into this package. Local reimplementation has a one-line why in the gap analysis or gotchas.
84
92
  > "You can just reference other skills by name, and the model will invoke them if they are installed."
93
+ - [ ] **Sub-skills table (when composing)** — Each invoked skill lists when to call it, what it produces, and missing-install behavior. N/A only when the skill is a pure leaf (invokes no peers).
94
+ > "You may want to have skills that depend on each other."
95
+ - [ ] **Sibling boundary clear** — Description and when-this-applies distinguish this skill from related skills in the same domain. No silent overlap.
96
+ > "The description field is not a summary — it's a description of when to trigger."
97
+ - [ ] **No monolith packing** — Multi-capability content is not stuffed under one description. Either split packages or thin orchestrator + peer sub-skills (not nested fake skills under `workflows/`).
98
+ > skill-modularity.md — anti-patterns: monolith, silent reimplementation, folder nesting as composition.
99
+
100
+ ## Hooks (if applicable)
101
+
85
102
  - [ ] **Hooks declared** — If skill registers hooks, their purpose and scope is stated.
86
103
  > "Skills can include hooks that are only activated when the skill is called."
87
104
 
@@ -89,4 +106,4 @@ Source synthesis: [Anthropic best practices](https://platform.claude.com/docs/en
89
106
 
90
107
  ## Usage
91
108
 
92
- Copy this checklist into your response after building. Check off each item. Any item that fails → fix before delivering. Any item marked "if applicable" that doesn't apply → mark N/A with a one-line reason.
109
+ Copy this checklist into your response after building. Check off each item. Any item that fails → fix before delivering. Any item marked "if applicable" that doesn't apply → mark N/A with a one-line reason. Sub-skills table may be N/A for pure leaf skills; single capability boundary and no-monolith never are.