diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-06 06:17:08 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-06 06:17:08 -0500 |
| commit | aa6924591127970d3241ab6b1a50f4bab457da27 (patch) | |
| tree | 7e97590f711a173c8e7adfdff99e8d8298e64605 /brainstorm | |
| parent | ce66de633129abc94df03ab5da91ba2ca2e93330 (diff) | |
| download | rulesets-aa6924591127970d3241ab6b1a50f4bab457da27.tar.gz rulesets-aa6924591127970d3241ab6b1a50f4bab457da27.zip | |
refactor(skills): convert 16 user-invoked skills to commands
I converted 16 user-invoked skills to commands. Skills cost ~150-300 tokens each per session for descriptions the model uses to auto-route. Commands cost nothing until you type the slash. These 16 are workflows I always trigger deliberately. The auto-routing wasn't earning its keep. This reclaims ~4-5k tokens per session.
Nine skills stayed where auto-routing genuinely helps: debug, root-cause-trace, five-whys, add-tests, frontend-design, humanizer, playwright-js, playwright-py, and pairwise-tests. Pairwise-tests stays a skill because its helper files don't fit a single-file command shape.
For arch-decide, I preserved the upstream MIT LICENSE alongside the command at .claude/commands/arch-decide.LICENSE so attribution stays intact.
Diffstat (limited to 'brainstorm')
| -rw-r--r-- | brainstorm/SKILL.md | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/brainstorm/SKILL.md b/brainstorm/SKILL.md deleted file mode 100644 index b47523f..0000000 --- a/brainstorm/SKILL.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -name: brainstorm -description: Refine a vague idea into a validated design through structured one-question-at-a-time dialogue, diverse option exploration (three conventional + three tail samples), and chunked validation (200-300 words at a time). Produces `docs/design/<topic>.md` as the output artifact. Use when shaping a new feature, service, or workflow before implementation begins — or when a "we should probably…" idea needs to become concrete enough to build. Do NOT use for mechanical well-defined work (renames, reformats, dependency bumps), for system-level architecture choices (use arch-design), for recording a single decision that has already been made (use arch-decide), or for debugging an existing error (use root-cause-trace or debug). Synthesized from the Agentic-Context-Engineering / SDD brainstorm pattern — probabilistic diversity sampling originated there. ---- - -# Brainstorm - -Turn a rough idea into a design document concrete enough to implement. One question at a time, diverse options considered honestly, design validated in chunks. - -## When to Use - -- Shaping a new feature, component, service, or workflow before code exists -- Translating "we should probably …" into something buildable -- Converting a noticed-but-unshaped problem into a design -- Exploring whether an idea is worth building before committing to it - -## When NOT to Use - -- Mechanical, well-defined work (rename, reformat, upgrade a dependency, apply a migration) -- System-level architecture (use `arch-design`) -- Recording a specific decision already made (use `arch-decide`) -- Debugging an existing error (use `root-cause-trace` or `debug`) -- Writing code whose shape is already clear to you - -## Workflow - -Three phases. Each converges a little more. Each is validated before moving to the next. - -### Phase 1 — Understand the Idea - -Dialogue, not interrogation. Before the first question, read the project context: the relevant directory, recent commits, any existing docs, the language and stack. Ground your questions in what's already there. - -**Rules:** - -- **One question per message.** Never batch. Respondents answer the easiest question and skip the rest when you batch. -- **Prefer multiple choice.** Easier to answer, faster to skim, surfaces the option space for free. -- **Open-ended when the option space is too large to enumerate.** Then refine with follow-ups. -- **Focus the first questions on purpose, not mechanism.** Mechanism comes in phase 2. - -**Topics to cover (not a script — skip what's already clear):** - -- What problem does this solve? -- Who is the user or caller? -- What's the smallest version that would be useful? -- What's explicitly out of scope? -- What are the success criteria (measurable if possible)? -- What constraints apply — team size, timeline, existing code, stack? - -**Stop when** you can state the idea back in one sentence and the user confirms. Don't keep asking for the sake of thoroughness. - -### Phase 2 — Explore Approaches - -Before committing to a direction, generate **six candidate approaches**. Force diversity. - -**Composition:** - -- **Three conventional approaches** — the paths a reasonable engineer with relevant experience would consider. Each has a high prior probability of being right (roughly ≥80%). -- **Three tail samples** — approaches from genuinely different regions of the solution space. Each individually unlikely (roughly ≤10%), but together they expand what's been considered. These are the ones that surprise. - -Why tail samples matter: most teams converge on the first conventional option. The tail samples either reveal a better solution you hadn't considered, or they clarify *why* the conventional option is the right one. Either way, the recommendation that follows is stronger. - -**For each candidate, state:** - -- One-paragraph summary -- Honest pros -- Honest cons (no selling; if you can't name real cons, you haven't thought hard enough) - -**End with:** - -- Your recommendation -- Why — explicit mapping to the constraints and success criteria from phase 1 -- What's being traded away -- What becomes an open decision for `arch-decide` later - -### Phase 3 — Present the Design - -Once a direction is chosen, describe it in **200-300 word chunks**. After each chunk, ask "does this look right so far?" Never dump a wall of design prose — the user skims walls. - -**Typical sections, one chunk each:** - -1. **Architecture** — components, boundaries, key interfaces -2. **Data flow** — what moves through where, in what shape -3. **Persistence** — what's stored, where, for how long, with what durability -4. **Error handling** — expected failures, responses, user-facing behavior -5. **Testing approach** — what correctness means here, how it gets verified -6. **Observability** — what gets logged, measured, traced - -Skip sections that don't apply. Add domain-specific ones (auth flow, concurrency model, migration plan, rollout strategy) where relevant. - -**Be willing to back up.** If a chunk surfaces a question that invalidates an earlier chunk, revise. Committing to a wrong direction to avoid rework is the expensive path. - -## Output - -Write the validated design to `docs/design/<topic>.md`. Use this skeleton (omit sections that don't apply): - -```markdown -# Design: <topic> - -**Date:** <YYYY-MM-DD> -**Status:** Draft | Accepted | Implemented - -## Problem - -One paragraph. What, who, why now. - -## Non-Goals - -Bullet list of what this explicitly does not address. Prevents scope creep. - -## Approaches Considered - -### Recommended: <name> - -Summary, pros, cons. - -### Rejected: <name> - -Why not. Brief. - -(Include 2-3 rejected options — showing alternatives were weighed is itself valuable.) - -## Design - -### Architecture - -### Data Flow - -### Persistence - -### Error Handling - -### Testing - -### Observability - -## Open Questions - -Items that need decisions before or during implementation. - -- [ ] Question — likely candidate for an ADR via `arch-decide` -- [ ] Question — … - -## Next Steps - -- Open questions → `arch-decide` -- If this implies system-level structural change → `arch-design` -- Implementation → <agreed next action> -``` - -If `docs/design/` doesn't exist, create it. If a design with the same topic name exists, ask before overwriting. - -## Hand-Off - -After the design is written and agreed: - -- **Each open question** → run `arch-decide` to record as an ADR -- **System-level implications** → run `arch-design` to update the architecture brief -- **Implementation** → whatever the project's implementation path is (`start-work`, `add-tests`, or direct work) - -Link the design doc from wherever it's being implemented (PR description, ticket, commit). - -## Review Checklist - -Before declaring the design accepted: - -- [ ] Problem stated in one paragraph that a newcomer could understand -- [ ] Non-goals listed (at least 1-2) -- [ ] At least 6 approaches considered, with 3 genuinely in the tail -- [ ] Recommendation names what it's trading away -- [ ] Each design chunk was individually validated -- [ ] Open questions listed; each has a clear path forward -- [ ] User has confirmed the design reflects their intent - -## Anti-Patterns - -- **Asking three questions in one message.** The user answers the easiest. Ask one. -- **Leading questions.** "Don't you think Postgres is right here?" isn't exploration. -- **Skipping tail samples.** If all six options are minor variations on the conventional answer, diversity wasn't actually attempted. -- **Dumping the whole design at once.** Eight hundred words without validation checkpoints means the user skims and misses the thing they'd want to push back on. -- **Hiding trade-offs.** Every approach has real cons. State them or the evaluation is theatre. -- **"We'll figure it out in implementation."** If a design question is ducked here, it becomes a larger, costlier problem during coding. Resolve now or explicitly defer with an ADR. -- **Over-specifying.** The design should be detailed enough to implement, not so detailed it's already the implementation. If you're writing function bodies in the design, stop. - -## Key Principles - -- **One question at a time.** Non-negotiable. -- **Multiple choice beats open-ended** when the option space is small enough to enumerate. -- **Six approaches, three in the tail.** Discipline around diversity. -- **Validate in chunks.** 200-300 words, then check. -- **YAGNI ruthlessly.** Remove anything not justified by the problem statement. -- **Back up when needed.** Revising early beats committing to wrong. - -## Content scope - -Output this skill produces that gets committed or shared with the team must follow the *Content scope for public artifacts* rule in [`commits.md`](../claude-rules/commits.md): no local paths, no private repo names, no personal tooling references. |
