@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.
- package/dist/cli.cjs +298 -55
- package/dist/cli.js +298 -55
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- 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.
|