@thebassclef/lite 1.0.4 → 1.1.1

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 (275) hide show
  1. package/dist/cli.cjs +298 -55
  2. package/dist/cli.js +298 -55
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.claude/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +12 -5
@@ -0,0 +1,481 @@
1
+ ---
2
+ tier: lite
3
+ name: luminary
4
+ description: "Browse and preview luminary files. Filter by discipline (ux, visual, architecture, product), by claiming agent (designer, architect), or preview a specific luminary by slug. Catalog analog to /skills."
5
+ problem: "Design lenses live in files no one reads. Adopters pick generic patterns because they don't know the catalog."
6
+ value: "A browser for the luminary catalog. Filter by discipline. Preview by slug before you pin one to a goal."
7
+ inputs: [Optional discipline filter — ux or visual or architecture or product]
8
+ outputs: [Ranked list of luminaries with signatures, Preview body when queried by slug]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # /luminary — Luminary Catalog
14
+
15
+ Interactive browser for `.claude/luminaries/*.md` files. Use to preview
16
+ what a luminary teaches before choosing them as a primary-luminary for an
17
+ iteration goal or prototype variant.
18
+
19
+ ## Usage
20
+
21
+ ```
22
+ /luminary → list all, grouped by primary_domain
23
+ /luminary ux → list UX-domain luminaries with signatures
24
+ /luminary visual → list Visual-domain luminaries
25
+ /luminary architecture → list Architecture-domain luminaries
26
+ /luminary product → list Product-domain luminaries
27
+ /luminary engineering → list Engineering-domain luminaries
28
+ /luminary shaping → list Shaping-domain luminaries
29
+ /luminary orchestration → list Orchestration-domain luminaries
30
+
31
+ /luminary designer → list luminaries claimed by designer agent
32
+ /luminary architect → list luminaries claimed by architect agent
33
+ /luminary builder → ... etc for any agent
34
+
35
+ /luminary prater → preview full file for sophia-prater
36
+ /luminary sophia-prater → same (slug match)
37
+ /luminary cockburn → preview alistair-cockburn
38
+ /luminary norman --signature → just the signature (one-line quote)
39
+ /luminary norman --methods → just the core methods section
40
+
41
+ /luminary --full → list only full-depth luminaries
42
+ /luminary --stub → list only stub-depth luminaries
43
+ ```
44
+
45
+ ## Procedure
46
+
47
+ ### 1. Parse argument
48
+
49
+ The argument after `/luminary` is the filter. Match in this order:
50
+
51
+ 1. **Domain keyword** — `ux`, `visual`, `architecture`, `product`,
52
+ `engineering`, `shaping`, `orchestration` → filter by frontmatter
53
+ `primary_domain` field.
54
+
55
+ 2. **Agent keyword** — `designer`, `architect`, `builder`, `shaper`,
56
+ `product-manager` (or `pm`), `creative-director` (or `cd`),
57
+ `reviewer`, `deployer`, `closer`, `orchestrator` → filter by
58
+ frontmatter `claimed_by` list.
59
+
60
+ 3. **Depth flag** — `--full` or `--stub` → filter by `depth` frontmatter.
61
+
62
+ 4. **Fuzzy slug match** — any other string → find the luminary file(s)
63
+ whose slug contains the string. "prater" matches `sophia-prater.md`.
64
+ If multiple match, list them.
65
+
66
+ 5. **No argument** — list all, grouped by domain.
67
+
68
+ ### 2. Read luminary files
69
+
70
+ ```bash
71
+ ls .claude/luminaries/*.md | grep -v TEMPLATE
72
+ ```
73
+
74
+ For each file, read the frontmatter (first `---` block) to extract:
75
+ - `name`, `slug`, `claimed_by`, `primary_domain`, `depth`
76
+
77
+ ### 3. Render based on mode
78
+
79
+ **List mode** (no slug match):
80
+
81
+ Group matching luminaries by `primary_domain`. For each:
82
+
83
+ ```
84
+ ## UX
85
+ - **Sophia Prater** (prater) — "Objects first, then actions. Never the reverse."
86
+ claimed by: designer · depth: full
87
+ - **Don Norman** (don-norman) — "Good design makes the right action obvious..."
88
+ claimed by: designer · depth: full
89
+
90
+ ## Architecture
91
+ - **Alistair Cockburn** (alistair-cockburn) — "Build the walking skeleton first..."
92
+ claimed by: architect, builder, shaper · depth: stub
93
+ - ...
94
+ ```
95
+
96
+ Show signature line (first non-blank paragraph after `## Signature`), plus
97
+ claimed_by and depth metadata. Keep each entry to 2 lines.
98
+
99
+ **Preview mode** (slug matched):
100
+
101
+ If exactly one luminary matched, read the full file and render it. No
102
+ modifications — pass through the content as-is.
103
+
104
+ With `--signature`: only the `## Signature` section.
105
+ With `--methods`: only the `## Core methods` section.
106
+
107
+ If multiple luminaries match the fuzzy slug, list them and ask the user
108
+ which one.
109
+
110
+ ### 4. Footer
111
+
112
+ Always end with a count:
113
+
114
+ ```
115
+ Found N luminaries (M full, K stub). Total catalog: X luminaries.
116
+ ```
117
+
118
+ ## Recommending a luminary (artifact-driven)
119
+
120
+ When invoked with a canvas/spec/iteration-goal path, or with a descriptive prompt, `/luminary` defaults to **signal scoring** — match operator language to luminary text by keyword + Garrett-plane + primary-domain coverage.
121
+
122
+ Usage:
123
+
124
+ ```
125
+ /luminary recommend → auto-detect mode from iteration goal
126
+ /luminary recommend <path> → specific artifact path
127
+ /luminary recommend --variants → force first-pass mode (flare)
128
+ /luminary recommend --primary → force refinement mode (converge)
129
+ /luminary for [description] → descriptive prompt mode
130
+ ```
131
+
132
+ ### Default path: `/pick-luminaries` (LLM pick)
133
+
134
+ When invoked with an artifact path or descriptive prompt, `/luminary` defaults to `/pick-luminaries` — a single LLM call against the configured model provider that picks N luminaries whose lens fits the intent. Signal scoring (keyword + Garrett-plane + primary-domain coverage) is the fallback when the picker refuses (no API key, network failure) or when operator opts in via `--use-signal-scoring`.
135
+
136
+ Bassclef-private adopters who load their own `/extract-intent` skill via `additionalDirectories` get richer signal (embedding shortlist + LLM judge) and `/luminary` prefers those grounded matches over either bassclef-core path.
137
+
138
+ ### Mode: flare vs converge
139
+
140
+ First-pass exploration (new surface, Inception/Elaboration) needs to
141
+ **flare** — surface multiple divergent candidates for prototype variants.
142
+ Refinement work (existing surface, Construction, ux-migration) needs to
143
+ **converge** — pick a single primary.
144
+
145
+ | Mode | Default when | Output |
146
+ |------|-------------|--------|
147
+ | `--variants` (flare) | iteration goal phase = Inception or Elaboration; scope mentions prototype, new-surface, or first-pass | 5 candidates ranked by signal match AND divergence; operator/orchestrator picks 3–4 to prototype; optional hybrid if candidates span different Garrett planes |
148
+ | `--primary` (converge) | iteration goal phase = Construction; scope is refinement, ux-migration, or existing-surface work | 1 primary + 1–2 complementary; write to iteration goal's primary_luminary field |
149
+
150
+ Auto-detect from iteration goal phase + scope keywords. Override with
151
+ explicit flag.
152
+
153
+ ### Divergence scoring (variants mode only)
154
+
155
+ In `--variants` mode, raw signal match isn't enough — top-5-by-match may
156
+ all be the same luminary archetype. A sprint with three mental-model-
157
+ adjacent UX thinkers produces three shades of the same variant.
158
+
159
+ Divergence algorithm:
160
+
161
+ 1. Filter luminaries that pass the signal match threshold (medium+ match)
162
+ 2. Group by **Garrett plane** (strategy / scope / structure / skeleton /
163
+ surface) and **primary_domain**
164
+ 3. Pick candidates to maximize cross-group representation:
165
+ - Candidate 1: highest signal match
166
+ - Candidate 2: highest signal match from a DIFFERENT group than Candidate 1
167
+ - Candidate 3: highest signal match from a DIFFERENT group than both
168
+ - Candidates 4–5: continue, or highest remaining if groups are exhausted
169
+ 4. Report the group diversity achieved (e.g., "5 candidates spanning 4
170
+ planes")
171
+
172
+ ### Step 1: Extract signals from the artifact
173
+
174
+ Read the provided artifact (or current iteration goal). Extract the
175
+ following signal set:
176
+
177
+ | Signal | Where to find it | Example values |
178
+ |--------|------------------|----------------|
179
+ | **primary_user** | canvas personas, spec actors, iteration goal persona field | operator, novice, power-user, consumer, regulated-professional, designer, executive |
180
+ | **data_density** | spec entity inventory, `/ia-model` output | single-entity / multi-entity-flat / multi-entity-relational / pure-data-viz |
181
+ | **domain_complexity** | spec domain description, canvas thesis | simple-CRUD / domain-specific-jargon / regulated / compliance-heavy |
182
+ | **primary_risk** | iteration goal "risk being retired" field | findability / affordance / schema-mirror / information-overload / brand-sterility / goal-incoherence / legacy-migration |
183
+ | **phase_of_work** | iteration goal phase | exploration (variants, prototype sprint) / refinement (polish, production) |
184
+ | **brand_voice** | creative brief, canvas, brand questionnaire | expressive / restrained / playful / institutional / premium |
185
+ | **cross_cutting** | `/decompose` NFR check output | observability-critical / testability-critical / extensibility-forward / cacheability-critical / security-critical |
186
+ | **problem_statement** *(bassclef#476 LR6)* | operator's plain-English description of the design problem; modality (brownfield vs greenfield) detected from verbs in the statement | "users can't find content that exists" (brownfield) / "designing a multi-section app where findability matters from day one" (greenfield) |
187
+
188
+ Not all signals will be present; extract what exists and note what's
189
+ missing. Missing signals reduce recommendation confidence.
190
+
191
+ ### Step 1b: Detect modality + read problem-pattern catalog (bassclef#476)
192
+
193
+ When a `problem_statement` signal is present, detect the operator's
194
+ modality:
195
+
196
+ | Modality | Triggers |
197
+ |----------|----------|
198
+ | **brownfield** | "existing UI", "current product", "today's app", "users keep doing", "form is producing", "page reads as", any present-continuous symptom statement |
199
+ | **greenfield** | "designing", "planning", "building", "0→1", "from scratch", "starting a new", "fresh", any prospective opportunity statement |
200
+ | **ambiguous** | Neither pattern set fires confidently — match against both, weighted equally |
201
+
202
+ Read the problem-pattern catalog at `standards/luminary-problem-patterns.md`
203
+ (auto-generated from luminary frontmatter). For each populated luminary,
204
+ match the operator's `problem_statement` against:
205
+
206
+ - `solves_problems_brownfield:` array if modality = brownfield
207
+ - `solves_problems_greenfield:` array if modality = greenfield
208
+ - Both arrays if modality = ambiguous
209
+
210
+ Weight problem-statement matches:
211
+ - Exact phrase or 3+ keyword overlap → **strong** (equivalent to primary_user match)
212
+ - 2-keyword overlap → **medium**
213
+ - 1-keyword overlap → **weak**
214
+
215
+ `anti_patterns:` array always subtracts when matched, regardless of modality.
216
+
217
+ **Backfill graceful degradation:** Luminaries without `solves_problems_*` frontmatter
218
+ (57 remaining as of LR6 — see `docs/luminary-problem-pattern-backfill.md`)
219
+ fall back to the existing 7-signal extraction in Step 1. They remain
220
+ in the catalog and rankable; problem-statement signal just doesn't apply
221
+ to them yet.
222
+
223
+ ### Step 2: Match against luminary "When to channel" sections
224
+
225
+ For each luminary file, read the `## When to channel this luminary`
226
+ section. This is the luminary's **signal declaration**. Count overlap
227
+ between extracted signals and the luminary's declared applicability.
228
+
229
+ Weight the match:
230
+ - Exact keyword match on primary_user or data_density → **strong**
231
+ - Match on primary_risk → **strong**
232
+ - Match on domain_complexity or cross_cutting → **medium**
233
+ - Phase match → **weak**
234
+ - Brand_voice alignment → **medium**
235
+
236
+ ### Step 3: Identify explicit non-recommendations
237
+
238
+ For each luminary file, also read the "Do NOT channel [luminary] as
239
+ primary for:" clauses. If the current signal set matches a
240
+ non-recommendation clause, flag as **anti-match** regardless of
241
+ positive signal overlap.
242
+
243
+ ### Step 4: Rank and render
244
+
245
+ **Primary** (1, occasionally 2): strongest signal match, no anti-matches.
246
+ **Complementary** (1-2): useful for specific concerns the primary doesn't
247
+ address, often at a different plane (Prater at structure + Norman at
248
+ interaction; Tufte at data + Lupton at typography).
249
+ **Not recommended here** (1-3): anti-matches with reasoning. As
250
+ valuable as the positive recommendation — teaches operators how
251
+ signals map.
252
+
253
+ Render:
254
+
255
+ ```markdown
256
+ ## Luminary recommendations for [artifact name]
257
+
258
+ **Signals extracted:**
259
+ - primary_user: operator
260
+ - data_density: multi-entity-relational
261
+ - primary_risk: schema-mirror UI
262
+ - phase_of_work: exploration
263
+ - (domain_complexity: not extracted — spec lacks domain description)
264
+
265
+ **Primary:**
266
+ - **Sophia Prater** — 4 signals match: multi-entity-relational data
267
+ (strong), operator user type (strong), schema-mirror risk (strong),
268
+ exploration phase (weak). OOUX is the direct countermeasure to the
269
+ named risk.
270
+
271
+ **Complementary:**
272
+ - **Don Norman** — channel at the interaction layer inside Prater's
273
+ structure. Addresses affordance concerns Prater doesn't cover.
274
+
275
+ **Not recommended here:**
276
+ - **Jony Ive** — exploration phase makes precision premature. Channel
277
+ in refinement phase after structure settles.
278
+ - **Stefan Sagmeister/Walsh** — expressive brand voice doesn't fit
279
+ operator tool brand signal.
280
+
281
+ **Confidence**: medium (5 of 7 signals extracted; domain_complexity
282
+ and brand_voice missing from spec).
283
+ ```
284
+
285
+ ### Stub-depth escalation (MUST)
286
+
287
+ When a recommendation selects a stub-depth luminary as primary or
288
+ variant candidate, escalate strongly in the output. Stub files have
289
+ signature + methods + sources only; they lack when-to-channel, stack
290
+ translation, anti-patterns, and worked examples that make the
291
+ luminary operationally useful to agents.
292
+
293
+ **Escalation text** (include in output verbatim when any selected
294
+ luminary has `depth: stub`):
295
+
296
+ ```
297
+ ⚠ STUB DEPTH SELECTED — upgrade STRONGLY recommended
298
+
299
+ [Luminary name] is at stub depth. The agent has signature + 2-4
300
+ methods + sources to work from. This is thin for an iteration that
301
+ treats the luminary as primary or dominant variant.
302
+
303
+ Risk: downstream skills (/decompose Phase 3 lens, /riff-prototypes (formerly /prototype-variants)
304
+ variants, /frontend-design) will produce generic output indistinguishable
305
+ from other luminaries in the same domain.
306
+
307
+ Resolution path:
308
+ 1. Invoke /luminary [slug] --upgrade-plan → draft proposed upgrade
309
+ 2. Apply the upgrade (full-depth schema: when-to-channel, stack
310
+ translation, anti-patterns, worked example, related luminaries)
311
+ 3. Commit the upgrade BEFORE proceeding with iteration
312
+ 4. Cross-repo upgrades: /promote --type luminary (see Promote skill)
313
+
314
+ Explicit deferral (stated, not silent): "Accept stub depth for this
315
+ iteration — luminary is supporting context only, not dominant." This
316
+ is acceptable ONLY when the luminary is a complementary, not primary
317
+ or variant choice.
318
+ ```
319
+
320
+ This is a BLOCKED: escalation per `.claude/rules/blocked-items.md`.
321
+ Silence is not deferral. Agent must resolve or explicitly defer with
322
+ stated rationale.
323
+
324
+ ### Step 5: Write recommendation to iteration goal (converge mode only)
325
+
326
+ In `--primary` mode: if invoked from an iteration goal and operator
327
+ confirms, update the goal's `primary_luminary` field with the recommendation.
328
+
329
+ In `--variants` mode: the goal's `primary_luminary` stays "none — all
330
+ luminaries equal" (or unset). The variants feed `/riff-prototypes`,
331
+ and a single primary is selected *after* the prototype sprint picks a
332
+ direction.
333
+
334
+ ### Selection behavior by parent session mode
335
+
336
+ Parent `/autonomous start` mode determines whether operator is
337
+ prompted at variant selection:
338
+
339
+ | Parent mode | Behavior |
340
+ |-------------|----------|
341
+ | operator-gated (any flags) | Operator prompted: "Here are 5 candidates ranked by divergence. Pick 3–4 pure + optional hybrid." |
342
+ | orchestrator-gated (no gate-ux) | Orchestrator auto-selects top 3 by divergence; adds hybrid if cross-plane 4th is available. Decision written to danger-mode summary. |
343
+ | orchestrator-gated + gate-ux | Operator prompted (gate-ux pulls UX back to operator gate) |
344
+
345
+ **Auto-select logic (orchestrator-gated without gate-ux):**
346
+
347
+ 1. Run variants mode as normal (extract signals, rank 5 candidates)
348
+ 2. Auto-select top 3 by divergence score (cross-plane, cross-domain spread)
349
+ 3. Check hybrid: if 4th-ranked candidate is on a different Garrett
350
+ plane than all top 3, propose as hybrid. Otherwise skip.
351
+ 4. Write selections + rationale to danger-mode summary:
352
+ ```
353
+ ## UX auto-pick decision
354
+ - Selected: Prater (structure), Norman (skeleton), Tufte (surface)
355
+ - Rationale: cross-plane divergence (3 planes), signal match high
356
+ - Hybrid: Prater+Tufte (structure+surface, different planes allowed)
357
+ - Rejected candidates: Cooper (same plane as Prater), Lupton (same plane as Tufte)
358
+ - Confidence: high (6 of 7 signals extracted)
359
+ ```
360
+ 5. Pass selections to `/riff-prototypes` without operator pause
361
+
362
+ ### Hybrid variants (variants mode only)
363
+
364
+ After selecting 3–5 pure-luminary candidates, the orchestrator (or
365
+ operator) may propose **one optional hybrid variant** that stacks two
366
+ candidates. Hybrids produce something emergent that neither pure
367
+ variant captures.
368
+
369
+ **Hybrid rule — cross-plane only**:
370
+
371
+ | Hybrid pair | Garrett planes | Allowed? |
372
+ |---|---|---|
373
+ | Prater (structure) + Norman (skeleton/interaction) | different | ✅ Yes |
374
+ | Prater (structure) + Tufte (surface/data) | different | ✅ Yes |
375
+ | Norman (skeleton) + Lupton (surface/typography) | different | ✅ Yes |
376
+ | Prater (structure) + Cooper (structure) | **same** | ❌ No — contradiction |
377
+ | Rams (surface/restraint) + Walsh (surface/expressive) | **same** | ❌ No — contradiction |
378
+ | Tidwell (patterns/skeleton) + Saffer (microinteractions/skeleton) | **same** | ❌ No — overlap without divergence |
379
+
380
+ Same-plane hybrids produce incoherent variants (which structure wins?
381
+ which surface language wins?). Cross-plane hybrids stack naturally —
382
+ Prater tells you what to structure, Norman tells you how each
383
+ interaction behaves, Tufte tells you how data is rendered.
384
+
385
+ **Ceiling**: Max 5 variants shipped to `/riff-prototypes` (4 pure +
386
+ 1 hybrid, OR 5 pure). Beyond 5, cognitive load and budget outweigh
387
+ exploration benefit.
388
+
389
+ ### Output shape (variants mode)
390
+
391
+ ```markdown
392
+ ## Luminary variants for [artifact name]
393
+
394
+ **Mode**: flare (first-pass exploration)
395
+ **Signals extracted**: [list]
396
+
397
+ **5 candidates** (ranked by signal match + divergence):
398
+
399
+ 1. **Sophia Prater** — structure plane, ux domain. Primary risk match:
400
+ schema-mirror UI.
401
+ 2. **Don Norman** — skeleton plane, ux domain. Primary risk match:
402
+ affordance unclear.
403
+ 3. **Edward Tufte** — surface plane, visual domain. Primary risk match:
404
+ information density without signal.
405
+ 4. **Alan Cooper** — structure plane (alt), ux domain. Counter-proposal
406
+ to Prater: goals-first vs objects-first.
407
+ 5. **Ellen Lupton** — surface plane (alt), visual domain. Counter-proposal
408
+ to Tufte: typographic hierarchy over data density.
409
+
410
+ **Group diversity**: 5 candidates spanning 3 planes, 2 domains.
411
+
412
+ **Recommended for prototype**: candidates 1, 2, 3 (different planes,
413
+ complementary). Candidates 4 and 5 are counter-proposals — consider
414
+ if operator wants to test a specific framing against 1 or 3.
415
+
416
+ **Optional hybrid**: Prater + Tufte (structure plane + surface plane,
417
+ different-plane rule satisfied) — structure the domain via OOUX, then
418
+ render dense data surfaces per Tufte. Emergent property: dense
419
+ information tables where columns follow object model, cells use
420
+ sparklines, rows are navigable via relationships.
421
+
422
+ **Confidence**: high (6 of 7 signals extracted).
423
+ ```
424
+
425
+ ## Standalone usage (no artifact)
426
+
427
+ ## Rules
428
+
429
+ - **Read-only.** This skill never modifies luminary files.
430
+ - **Don't invent content.** If a luminary file doesn't have a section
431
+ (e.g., stub has no `## Worked example`), say so; don't fabricate.
432
+ - **Point at source.** When a user asks a question about a luminary's
433
+ work, quote from their file and cite the path: `.claude/luminaries/[slug].md`.
434
+ - **Template is excluded.** `TEMPLATE.md` is not a luminary; filter it out.
435
+
436
+ ## Relationship to other skills
437
+
438
+ | Skill | Relationship |
439
+ |-------|-------------|
440
+ | `/skills` | Catalog for skills; this is the analog for luminaries |
441
+ | `/riff-prototypes` | Uses luminaries as variant directions; `/luminary` helps choose |
442
+ | `/autonomous` | Iteration bet creation asks for primary luminary; `/luminary` helps decide |
443
+ | `/canvas` | Canvas may cite a primary luminary; `/luminary` clarifies what they bring |
444
+
445
+ ## Example session
446
+
447
+ ```
448
+ > /luminary ux
449
+
450
+ ## UX
451
+ - **Sophia Prater** (sophia-prater) — "Objects first, then actions..."
452
+ claimed by: designer · depth: full
453
+ - **Don Norman** (don-norman) — "Good design makes the right action obvious..."
454
+ claimed by: designer · depth: full
455
+ - **Alan Cooper** (alan-cooper) — "Personas are precision tools..."
456
+ claimed by: designer · depth: full
457
+ - **Jesse James Garrett** (jesse-james-garrett) — "Every user experience has five planes..."
458
+ claimed by: designer · depth: full
459
+ - **Peter Morville** (peter-morville) — "If users can't find it, it doesn't exist..."
460
+ claimed by: designer · depth: full
461
+ - **Jenifer Tidwell** (jenifer-tidwell) — "Patterns are proven solutions..."
462
+ claimed by: designer · depth: full
463
+ - **Aarron Walter** (aarron-walter) — "Functional, reliable, usable — then pleasurable..."
464
+ claimed by: designer, creative-director · depth: full
465
+ - **Indi Young** (indi-young) — "Understand the person behind the task..."
466
+ claimed by: designer, product-manager · depth: stub
467
+ - **Bill Buxton** (bill-buxton) — "Get the design right, and the right design..."
468
+ claimed by: designer · depth: stub
469
+ - **Kim Goodwin** (kim-goodwin) — "Personas are research artifacts..."
470
+ claimed by: designer · depth: stub
471
+ - **Dan Saffer** (dan-saffer) — "The details are the product..."
472
+ claimed by: designer · depth: stub
473
+ - **Erika Hall** (erika-hall) — "Just enough research..."
474
+ claimed by: designer, product-manager · depth: stub
475
+
476
+ Found 12 luminaries in UX (7 full, 5 stub).
477
+ ```
478
+
479
+ ## Output discipline
480
+
481
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,177 @@
1
+ ---
2
+ tier: lite
3
+ name: ogilvy-writing-audit
4
+ description: "Audit prose against Ogilvy's 10 writing rules plus Roman-Raphaelson principles. Produces severity-tagged violations with fixes. Diagnoses; /kiss words fixes. Fires on 'audit this memo', 'review my writing', 'check this draft'."
5
+ problem: "Prose ships with jargon and long sentences and hedge words. Readers stop reading."
6
+ value: "Ogilvy's ten rules applied to your prose. Severity-tagged findings that /kiss can fix."
7
+ inputs: [A file path or PR body or paragraph text]
8
+ outputs: [Severity-tagged violation list, Rewrite suggestions per finding]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ composes_with: [kiss]
12
+ ---
13
+
14
+ # /ogilvy-writing-audit — Ogilvy writing audit
15
+
16
+ <!-- FKGL-EXEMPT: technical reference frame + Ogilvy source attribution -->
17
+ Audit prose against David Ogilvy's 10 rules (1982 memo) and Roman + Raphaelson's *Writing That Works* (1981). Full rules at `standards/ogilvy-writing-rules.md`. Luminary anchor at `.claude/luminaries/david-ogilvy.md`.
18
+
19
+ This skill produces a diagnostic audit. It flags violations with severity tags and suggests fixes. It does not rewrite the prose. Rewriting swaps one voice for another. The value is showing the writer where they fail which rules.
20
+ <!-- /FKGL-EXEMPT -->
21
+
22
+ ## How to run the audit
23
+
24
+ ### Step 1 — Get the prose
25
+
26
+ Ask the operator to paste prose to audit. Do not audit a topic. Audit actual text.
27
+
28
+ If the sample is short (under 30 words), ask if the operator wants the audit as-is or wants to send a longer draft. Short samples cannot cover every rule.
29
+
30
+ ### Step 2 — Read the full reference
31
+
32
+ Read `standards/ogilvy-writing-rules.md` before you audit. It has the 10 rules with tests and violation patterns. Do not audit from memory. The specific patterns matter for accurate feedback.
33
+
34
+ ### Step 3 — Do the audit
35
+
36
+ <!-- FKGL-EXEMPT: audit procedure reference -->
37
+ Work through every applicable rule in order. For each rule:
38
+
39
+ - **Pass** — note briefly and move on
40
+ - **Flag a violation** — quote the offending text, tag severity, propose a specific fix
41
+
42
+ Severity tags per `standards/ogilvy-writing-rules.md` § Severity guidance:
43
+
44
+ - 🔴 **Critical** — the violation actively undermines the message. The reader will be confused or fail to act.
45
+ - 🟡 **Moderate** — the violation weakens the writing. A sharp reader will notice.
46
+ - 🟢 **Minor** — a small stumble. The message works without fixing.
47
+
48
+ When in doubt, ask: would the intended reader still take the intended action? If no, it is Critical.
49
+ <!-- /FKGL-EXEMPT -->
50
+
51
+ ### Step 4 — Format the output
52
+
53
+ Use this exact structure:
54
+
55
+ <!-- FKGL-EXEMPT: literal template shape -->
56
+ ```markdown
57
+ # Ogilvy writing audit
58
+
59
+ **Overall read.** [1 or 2 sentences. Does the prose work? What is the single biggest issue?]
60
+
61
+ ---
62
+
63
+ ## 🔴 Critical violations
64
+
65
+ | Rule | Quote | Why it fails | Suggested fix |
66
+ |---|---|---|---|
67
+ | [Rule name from ogilvy-writing-rules.md] | "[exact quote]" | [1 sentence] | [concrete rewrite] |
68
+
69
+ [one row per violation, or write "None" if none]
70
+
71
+ ---
72
+
73
+ ## 🟡 Moderate violations
74
+
75
+ | Rule | Quote | Why it fails | Suggested fix |
76
+ |---|---|---|---|
77
+ | ... | ... | ... | ... |
78
+
79
+ [or "None"]
80
+
81
+ ---
82
+
83
+ ## 🟢 Minor violations
84
+
85
+ | Rule | Quote | Why it fails | Suggested fix |
86
+ |---|---|---|---|
87
+ | ... | ... | ... | ... |
88
+
89
+ [or "None"]
90
+
91
+ ---
92
+
93
+ ## What is working
94
+
95
+ [2 to 4 bullets on what the writer does well. Skip if nothing stands out.]
96
+
97
+ ---
98
+
99
+ ## Rules I cannot audit from text alone
100
+
101
+ - **Rule 1 (Ogilvy)** — Have you read *Writing That Works*? Ogilvy said three times.
102
+ - **Rule 6 (Ogilvy)** — Did you check your quotations?
103
+ - **Rule 7 (Ogilvy)** — Did you sleep on it? Read it aloud the next morning.
104
+ - **Rule 8 (Ogilvy)** — If this matters, did you get a colleague to read it?
105
+ - **Rule 10 (Ogilvy)** — Is writing the right medium at all?
106
+ ```
107
+ <!-- /FKGL-EXEMPT -->
108
+
109
+ If a severity bucket has zero violations, write "None" instead of the table.
110
+
111
+ Keep quotes short. For long passages, quote just the problem phrase.
112
+
113
+ If the prose is excellent, say so. Do not invent violations to fill the template.
114
+
115
+ ## Pairs with /kiss words
116
+
117
+ The audit diagnoses. `/kiss words` fixes what a wordlist covers.
118
+
119
+ After the audit flags jargon (Rule 3) or long sentences (Rule 2), invoke `/kiss words`. It swaps words per `standards/bassclef-internal-jargon.md`. The audit finds. Kiss fixes.
120
+
121
+ Some violations kiss cannot fix. Buried asks (Rule 6). Missing context on facts (Rule 10). Euphemisms burying bad news (Rule 9). The operator rewrites those by hand using the suggested fix column.
122
+
123
+ ## Rules
124
+
125
+ - Be specific, not vague. Quote the exact text. Propose a concrete fix.
126
+ - Do not moralize. You audit craft, not character. Say "this euphemism buries the bad news; say it straight." Do not say "this shows disrespect for the reader."
127
+ - Do not pad. Ogilvy's whole point is brevity. An audit that violates its own rules embarrasses itself. Keep it tight.
128
+ - Do not invent violations. If the writing is clean, say so.
129
+ - Match the writer's register. Casual email gets casual audit. Legal brief gets formal audit.
130
+ - One piece at a time. Audit each draft separately.
131
+
132
+ ## Edge cases
133
+
134
+ <!-- FKGL-EXEMPT: reference case reference -->
135
+ - **"Audit this but I cannot change X"** — honor it. Skip that part.
136
+ - **Creative writing or fiction** — Ogilvy's rules are for business writing. Tell the operator this skill is not the fit. Offer to audit the pitch or query letter around it.
137
+ - **Very long pieces (past 2000 words)** — audit the first ~1500 words. Note patterns in the rest.
138
+ - **The operator asks for a rewrite** — offer the audit first. Then rewrite based on it.
139
+ <!-- /FKGL-EXEMPT -->
140
+
141
+ ## Pairs with other skills
142
+
143
+ <!-- FKGL-EXEMPT: pairing reference table -->
144
+ | Skill | Relationship |
145
+ |---|---|
146
+ | `/kiss words` | Audit diagnoses; kiss fixes. Run audit first, then kiss for wordlist substitution |
147
+ | `/kiss scope` | Different concern — scope compresses what to ship; audit checks how you wrote it |
148
+ | `/journal` | Journal entries are prime audit targets — board-level audience |
149
+ | `/session-log` | Session logs go through audit before commit |
150
+ | `/pr-body` | PR body Summary is audit-worthy — reviewers need the ask fast |
151
+ <!-- /FKGL-EXEMPT -->
152
+
153
+ ## Distinct from
154
+
155
+ - `/kiss words` — kiss substitutes; this skill diagnoses. Both fire in sequence.
156
+ - `/kiss scope` — scope compresses; this skill audits prose craft.
157
+ - `/feynman` — feynman writes new explanations; this skill audits what exists.
158
+
159
+ ## Refs
160
+
161
+ - Ticket #934 — this skill's filing
162
+ - Standard `standards/ogilvy-writing-rules.md`
163
+ - Rule `.claude/rules/writing-craft-discipline.md`
164
+ - Luminary `.claude/luminaries/david-ogilvy.md`
165
+ - Sister `.claude/skills/kiss/SKILL.md`
166
+ - Ogilvy — "How to Write" memo (1982; public circulation)
167
+ - Roman + Raphaelson — *Writing That Works* (Harper and Row, 1981)
168
+
169
+ ## Sources read
170
+
171
+ <!-- FKGL-EXEMPT: source attribution -->
172
+ Ogilvy's 1982 "How to Write" memo — public circulation. Roman + Raphaelson's *Writing That Works* (1981) — published book. No wording lifted from any third-party skill or audit tool. Bassclef's own restatement of the public rules.
173
+ <!-- /FKGL-EXEMPT -->
174
+
175
+ ## Output discipline
176
+
177
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.