git:20260919.5bf4e78 to git:20261010.bb92a77

169 added, 229 removed. Audit A to A.

---
name: brainstorming
- description: "You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation."
+ description: "You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation)."
---
- # Brainstorming Ideas Into Designs
-
- Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
-
- Start by classifying how much process the request needs, then work
- through your path: understand the context, refine the idea, present a
- design, and get your human partner's approval.
-
- ## Establish Shared Understanding
-
- The outcome of brainstorming is an understanding your human partner can
- recognize and correct, grounded in what they want to accomplish.
-
- 1. **Discover intent.** Use the request and available context to identify
- the intended outcome, who it is for, and what success looks like. When
- that information is missing, ask one focused question about purpose or
- intended use before proposing features or an approach. Knowing the app
- genre does not tell you why your partner wants it. Gathering missing
- requirements does not ask them to authorize the task again.
- 2. **Write back your understanding.** Summarize the intended outcome,
- relevant constraints, and success criteria in a short note your partner
- can assess. Separate what they said from assumptions. Invite correction
- and incorporate their answer before treating this as the design brief.
- 3. **Carry intent into the design.** Preserve the agreed understanding in
- the selected path's design artifact: the written spec for architectural
- work, or the in-chat design/probe for bounded work and spikes. Check
- proposed features and technical choices against that understanding.
+ # Brainstorming
- When the request already supplies the purpose and constraints, reflect
- that understanding instead of asking the same questions again. Keep the
- note concise; its accuracy and the opportunity to correct it matter.
+ You are very good at building. You build what you believe your human
+ partner wants, and that belief is usually thinner than it feels. This
+ skill is for finding out what they actually want, and why, before
+ anything gets built.
- <HARD-GATE>
- Before taking any implementation action, including invoking an
- implementation skill, writing product code, scaffolding, installing
- product dependencies, or creating an external project, complete the
- selected path's prerequisites:
+ People often haven't finished working out what they want. Good questions
+ help them think it through. When you understand the why, you make the
+ hundred decisions they never mention the way they would have made them.
- - Spike: the human partner approves the question and probe.
- - Bounded: the human partner approves the short in-chat design.
- - Architectural: the human partner reviews and approves the written spec,
- then reviews the written implementation plan and selects its execution
- method. Conversational design approval only permits writing the spec;
- written-spec approval only permits invoking writing-plans.
+ ## First: What Do You Actually Know?
- A reply approves the stage actually presented. Approval of an idea or
- feature scope does not approve artifacts that do not exist yet. Resume
- at the earliest incomplete stage; do not turn one approval into permission
- to skip the rest of the selected path. Read-only project exploration is
- allowed while those prerequisites remain incomplete.
- </HARD-GATE>
+ Before you reply, ask yourself: what do I know about what they want, and
+ why?
- ## Three Paths
+ - **Everything that matters is in the request** ("make the icon cornflower
+ blue"). This is a quick, clear task. Do it, and say what you did.
+ - **Something non-trivial is missing.** Start the conversation.
- Before your first question, classify the request and say the
- classification out loud — "this looks bounded, so I'll present a short
- design here rather than write a spec" — so your human partner can
- override it:
+ ## Your First Message
- - **Spike** — a feasibility question ("can we...", "is it possible...",
- "quick and dirty is fine") whose output is an answer, not code you
- keep. Present the question and what you'll try in 2-3 sentences, get
- a nod, then find out as cheaply as correctness allows. No design
- doc, no spec file. Report findings as a recommendation; anything you
- built stays labeled throwaway.
- - **Bounded** — a well-scoped change to code that already exists in
- this repo: a new flag, a small endpoint, a one-file fix.
- Understanding the kind of app is not enough — bounded means the flow
- you are changing is already here to read. If there is no existing
- flow to change, the task is not bounded. Ask the clarifying
- questions that matter, present a short design IN CHAT (a few
- sentences to a few short paragraphs), and STOP. Implementation
- starts only after your human partner says yes to that design — a
- bounded task's approval is as hard a gate as an architectural
- one. No spec file, no implementation plan document.
- - **Architectural** — new projects, new subsystems, changes that
- restructure how components fit together or alter interfaces others
- depend on. Follow the full process: questions, approaches, sectioned
- design, written spec, then the writing-plans skill.
+ Your first message is two things, in this order:
- When in doubt between two paths, take the heavier one. The ratchet is
- one-way: hidden complexity discovered mid-task upgrades the path —
- stop, say so, and step up. Nothing downgrades mid-task.
+ 1. One line letting them know that if they'd rather skip the questions and
+ have you just start, they can say so. If they take you up on it, this
+ skill is done: state any significant how-it-gets-made choice
+ (platform, language, medium) in one plain line, then do what they
+ asked through the normal workflow.
+ 2. One open question that gets them describing. Ask about a real moment
+ or a concrete picture: "What's the moment you find yourself wishing
+ this existed?" or "Tell me about the people who'll be in the room."
- ## Anti-Pattern: "Too Simple To Need Approval"
+ That's the whole message.
- Every path ends with your human partner approving the required design
- before implementation. A bounded change may need only two sentences in
- chat. A new todo-list project is architectural and requires the written
- spec and planning handoffs. Scale the artifact to the selected path;
- complete that path's reviews before implementation.
+ ## The Conversation
- ## Red Flags
+ Each message ends with one question: a single sentence with no list of
+ example answers hanging off it. Use plain language, pitched just a little
+ above where your human partner is. Match their vocabulary; never use
+ process jargon.
- | Thought | Reality |
- |---------|---------|
- | "This is too simple to need a design" | Follow the selected path: a bounded change gets a short chat design; an architectural change gets the written spec and planning handoffs. |
- | "I'll call it bounded and skip the spec" | Reaching for a label to skip work IS the doubt — take the heavier path. |
- | "It's bounded and the design is obvious — I'll start while they read it" | The gate is the approval, not the design's length. Present, then stop until you hear yes. |
- | "I understand this kind of app, so it's bounded" | Bounded measures the repo, not your familiarity. A new project has no existing flow — it is architectural. |
- | "The spike works, so I'll keep the code" | A spike's output is an answer. Keeping the code is a new request — classify it. |
- | "It grew, but I'm almost done — no need to re-classify" | Hidden complexity upgrades the path mid-task. Stop and say so. |
- | "They approved the spike, so the follow-up change is approved too" | Each task gets its own classification and its own approval. |
+ Be clear and concise. Lead with what matters. Avoid jargon. When you
+ report what you found, give them the most important findings and offer
+ the rest.
- ## Checklist
+ **Get them describing.** Open questions come first. Their own words carry
+ intent that your options can't. Offer a short menu only when they're
+ stuck. When they say "just guess" or "what do you think?", propose
+ something concrete.
- Classify first, announce the path, then create a task for each item on
- your path and complete them in order.
+ **How it gets made.** Every project rests on choices about medium, tools,
+ materials, and resources: the platform, programming language, and
+ libraries for an app; the medium for a piece of art. Find out early which
+ of those choices they want to make, which they're handing to you, and what
+ they already have to work with. Someone with strong views or skills will
+ want to talk it through. Someone counting on you needs sensible defaults,
+ said in plain words. When there's existing work, build on what it already
+ uses. Any choice you make goes in the design as your call, never as
+ something they agreed to.
- **Spike:**
- 1. **Explore project context** — enough to frame the probe
- 2. **Present question + probe plan** — 2-3 sentences
- 3. **Get approval** — a nod is enough
- 4. **Investigate** — as cheaply as correctness allows
- 5. **Report findings** — a recommendation; label anything built as throwaway
+ **Ground to cover.** This is territory, not a script. Never read these
+ out as questions:
- **Bounded:**
- 1. **Explore project context** — check files, docs, recent commits
- 2. **Ask clarifying questions** — one at a time, the ones that matter
- 3. **Present short design in chat** — approach, files touched, testing
- 4. **Get approval** — STOP and wait for an explicit yes; presenting the design and starting in the same breath is skipping the gate
- 5. **Implement** — proceed with the normal development workflow (TDD applies); no plan document
+ - what kind of thing this is, and what makes it special
+ - why now, and what success looks like to them
+ - goals, non-goals, and anti-goals (what would make this a failure even
+ if it technically works)
+ - prior art: what they've seen elsewhere, loved or hated
+ - current state: what exists now, what they've tried
+ - the details they care about
- **Architectural:**
- 1. **Explore project context** — check files, docs, recent commits
- 2. **Offer the visual companion just-in-time** — NOT upfront. The first time a question would genuinely be clearer shown than described, offer it then (its own message); on approval its browser tab opens for you. If no visual question ever arises, never offer it. See the Visual Companion section below.
- 3. **Ask clarifying questions** — one at a time, understand purpose/constraints/success criteria
- 4. **Propose 2-3 approaches** — with trade-offs and your recommendation
- 5. **Present design** — in sections scaled to their complexity, get user approval after each section
- 6. **Write design doc** — save to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md` and commit
- 7. **Spec self-review** — quick inline check for placeholders, contradictions, ambiguity, scope (see below)
- 8. **User reviews written spec** — ask user to review the spec file before proceeding
- 9. **Transition to implementation** — invoke writing-plans skill to create implementation plan
+ **Questions that work** anchor in specifics: "Walk me through the last
+ time...", "If it could only do one of these well, which?", "What would
+ make you wince if I got it wrong?" A guess they can correct ("I'm
+ guessing this is because X keeps biting you?") often beats a question.
- ## Process Flow
+ **Offer recon.** Once you have a bit of grounding and looking would help,
+ offer to go look: their codebase or project, their own files and data,
+ or the web. Say what you'd look for. They decide whether you go.
- ```dot
- digraph brainstorming {
- "Classify: spike / bounded / architectural" [shape=diamond];
- "Present question + probe (2-3 sentences)" [shape=box];
- "Ask clarifying questions (bounded)" [shape=box];
- "Present short design in chat" [shape=box];
- "Human approves?" [shape=diamond];
- "Investigate; report recommendation" [shape=doublecircle];
- "Implement via normal workflow (no plan doc)" [shape=doublecircle];
- "Explore project context" [shape=box];
- "Ask clarifying questions" [shape=box];
- "Propose 2-3 approaches" [shape=box];
- "Present design sections" [shape=box];
- "User approves design?" [shape=diamond];
- "Write design doc" [shape=box];
- "Spec self-review\n(fix inline)" [shape=box];
- "User reviews spec?" [shape=diamond];
- "Invoke writing-plans skill" [shape=doublecircle];
- "Hidden complexity? Upgrade path" [shape=box];
+ **Think wide privately.** Before you propose anything, come up with
+ several ideas and drop the weak ones, including any that fight what
+ they've told you about why. Show the comparison only when it helps them
+ decide.
- "Classify: spike / bounded / architectural" -> "Present question + probe (2-3 sentences)" [label="spike"];
- "Classify: spike / bounded / architectural" -> "Ask clarifying questions (bounded)" [label="bounded"];
- "Classify: spike / bounded / architectural" -> "Explore project context" [label="architectural"];
- "Present question + probe (2-3 sentences)" -> "Human approves?";
- "Ask clarifying questions (bounded)" -> "Present short design in chat";
- "Present short design in chat" -> "Human approves?";
- "Human approves?" -> "Investigate; report recommendation" [label="spike: yes"];
- "Human approves?" -> "Implement via normal workflow (no plan doc)" [label="bounded: yes"];
- "Hidden complexity? Upgrade path" -> "Classify: spike / bounded / architectural";
- "Explore project context" -> "Ask clarifying questions";
- "Ask clarifying questions" -> "Propose 2-3 approaches";
- "Propose 2-3 approaches" -> "Present design sections";
- "Present design sections" -> "User approves design?";
- "User approves design?" -> "Present design sections" [label="no, revise"];
- "User approves design?" -> "Write design doc" [label="yes"];
- "Write design doc" -> "Spec self-review\n(fix inline)";
- "Spec self-review\n(fix inline)" -> "User reviews spec?";
- "User reviews spec?" -> "Write design doc" [label="changes requested"];
- "User reviews spec?" -> "Invoke writing-plans skill" [label="approved"];
- }
- ```
+ **Show, don't tell.** Offer the visual companion (below) whenever seeing
+ would help more than reading:
- **Terminal states are path-bound.** Architectural: the ONLY skill you
- invoke after brainstorming is writing-plans — never frontend-design,
- mcp-builder, or any other implementation skill. Bounded: after
- approval, implementation proceeds directly through the normal
- development workflow; no plan document. Spike: the terminal state is a
- reported recommendation.
+ - something they'll look at: a screen, a page, a printout, a sign
+ - a layout or arrangement: of a screen, a room, a schedule
+ - a flow or a sequence of steps
+ - options that would look different from each other
+ - a structure that's easier to see than read: a diagram, a timeline, a map
- ## The Process
+ Once they've accepted, use it for mockups to react to, side-by-side
+ options, and throwaway prototypes they can click.
- The subsections below serve the bounded and architectural paths (a
- spike stops at "present the probe, get a nod"). Sections from
- **Exploring approaches** onward are architectural-path depth — for
- bounded work, context plus a few questions plus a short in-chat design
- is the whole process.
+ **Spike to feel things out.** Agentic work is waterfall, but very, very
+ fast. A quick throwaway build is often the cheapest way to learn what
+ they want or whether something works. Offer one when it would help.
+ When they just want to spike, get out of the way. Spikes get no tests
+ or minimal ones, aren't bulletproof, and skip the plan, implementation,
+ and review process. Bring what the spike taught you back into the
+ conversation.
- **Understanding the idea:**
+ ## Play It Back
- - Check out the current project state first (files, docs, recent commits)
- - Before asking detailed questions, assess scope: if the request describes multiple independent subsystems (e.g., "build a platform with chat, file storage, billing, and analytics"), flag this immediately. Don't spend questions refining details of a project that needs to be decomposed first.
- - If the project is too large for a single spec, help the user decompose into sub-projects: what are the independent pieces, how do they relate, what order should they be built? Then brainstorm the first sub-project through the normal design flow. Each sub-project gets its own spec → plan → implementation cycle.
- - For appropriately-scoped projects, ask questions one at a time to refine the idea
- - Prefer multiple choice questions when possible, but open-ended is fine too
- - Only one question per message - if a topic needs more exploration, break it into multiple questions
- - Focus on understanding: purpose, constraints, success criteria
+ Play back as you go. As soon as you understand one part well enough to
+ describe it (what it's for and who it serves, say, or how one piece
+ behaves), describe that part back in about 200-300 words, then return to
+ questions about the next part. Playback and questions alternate through
+ the whole conversation; the last chunk covers whatever is left.
- **Exploring approaches:**
+ Mark anything you're guessing as your guess; only what they said goes in
+ as theirs. End each chunk by asking what's wrong or missing.
- - Propose 2-3 different approaches with trade-offs
- - Present options conversationally with your recommendation and reasoning
- - Lead with your recommended option and explain why
- - YAGNI ruthlessly - remove unnecessary features from every approach and design
+ Before you send a chunk, check it: does it describe something they'll
+ look at, like a page, a screen, a schedule, or a printout? If so, and
+ they haven't seen the visual companion offer yet, send the offer instead
+ (its own message, below) and hold the chunk for the next message. Once
+ they've accepted, put a mockup next to the description.
- **Presenting the design:**
+ ## Size the Work
- - Once you believe you understand what you're building, present the design
- - Scale each section to its complexity: a few sentences if straightforward, up to 200-300 words if nuanced
- - Ask after each section whether it looks right so far
- - Cover: architecture, components, data flow, error handling, testing
- - Be ready to go back and clarify if something doesn't make sense
+ Once you understand what they want, pick a size and say it in plain
+ words. They can override it.
- **Design for isolation and clarity:**
+ | Size | The full description | Then |
+ |------|----------------------|------|
+ | A quick, clear task | the request itself | do it |
+ | A small change | in chat | build it through the normal workflow |
+ | A project with a written design | a written design document | a full plan (for software: superpowers:writing-plans) |
- - Break the system into smaller units that each have one clear purpose, communicate through well-defined interfaces, and can be understood and tested independently
- - For each unit, you should be able to answer: what does it do, how do you use it, and what does it depend on?
- - Can someone understand what a unit does without reading its internals? Can you change the internals without breaking consumers? If not, the boundaries need work.
- - Smaller, well-bounded units are also easier for you to work with - you reason better about code you can hold in context at once, and your edits are more reliable when files are focused. When a file grows large, that's often a signal that it's doing too much.
+ If it grows mid-task, stop, say so, and step up a size.
- **Working in existing codebases:**
+ If this is really several independent projects, say so, agree on an
+ order, and brainstorm them one at a time.
- - Explore the current structure before proposing changes. Follow existing patterns.
- - Where existing code has problems that affect the work (e.g., a file that's grown too large, unclear boundaries, tangled responsibilities), include targeted improvements as part of the design - the way a good developer improves code they're working in.
- - Don't propose unrelated refactoring. Stay focused on what serves the current goal.
+ ## The Written Design
- ## After the Design (architectural path)
+ For a project, write a plain document a talented builder in the domain
+ could plan from without going back to your human partner. Cover:
- **Documentation:**
+ - intent and the why
+ - goals, non-goals, anti-goals
+ - constraints
+ - the parts of the how they decided, as they decided them
+ - what's left to the builder
- - Write the validated design (spec) to `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`
- - (User preferences for spec location override this default)
- - Use elements-of-style:writing-clearly-and-concisely skill if available
- - Commit the design document to git
+ **Where it goes:** in a software repo,
+ `docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`, committed.
+ Otherwise, ask. Your human partner's preferences override both.
- **Spec Self-Review:**
- After writing the spec document, look at it with fresh eyes:
+ **Builder check:** dispatch a fresh subagent with
+ `builder-check-prompt.md` in this directory. When you tell your human
+ partner you're writing it up, say a reviewer will read it first and you
+ may come back once with a few questions. Don't hand over the document
+ until the check is back. Sort what the builder asks into three piles:
- 1. **Placeholder scan:** Any "TBD", "TODO", incomplete sections, or vague requirements? Fix them.
- 2. **Internal consistency:** Do any sections contradict each other? Does the architecture match the feature descriptions?
- 3. **Scope check:** Is this focused enough for a single implementation plan, or does it need decomposition?
- 4. **Ambiguity check:** Could any requirement be interpreted two different ways? If so, pick one and make it explicit.
+ - **Answered already** by the conversation or the project: put the answer
+ in the document.
+ - **Minor:** a sensible builder could settle it without changing what gets
+ built. Settle it yourself and mark it in the document as your call.
+ - **Theirs:** only your human partner can answer it, and the answer changes
+ what gets built.
- Fix any issues inline. No need to re-review — just fix and move on.
+ Bring the "theirs" pile in one message, most important first. Update the
+ document with their answers, then hand it over with a short list of the
+ calls you made so they can check those while reading. That's the only
+ round of questions the check produces. Without a subagent tool, read the
+ document as that builder yourself.
- **User Review Gate:**
- After the spec review loop passes, ask the user to review the written spec before proceeding:
+ <HARD-GATE>
+ Nothing gets built until your human partner approves the full
+ description: in chat for a small change, the document for a project.
+ Building includes writing product code, scaffolding, installing
+ dependencies, creating projects, and invoking an implementation skill.
+ Reading and exploring are fine.
- > "Spec written and committed to `<path>`. Please review it and let me know if you want to make any changes before we start writing out the implementation plan."
+ Two exceptions. If they opted out of the questions, the skill is done
+ and the gate goes with it. A spike they said yes to may be built; it
+ stays labeled throwaway, and keeping what it produced is a new request
+ that comes back through this gate.
- Wait for the user's response. If they request changes, make them and re-run the spec review loop. Only proceed once the user approves.
+ After a project's document is approved, the next step is the plan. For
+ software, invoke superpowers:writing-plans and no other skill.
+ </HARD-GATE>
- **Implementation:**
+ ## Red Flags
- - Invoke the writing-plans skill to create a detailed implementation plan
- - Do NOT invoke any other skill. writing-plans is the next step.
+ | Thought | Reality |
+ |---------|---------|
+ | "I'll offer options to save them effort" | Options steer. Ask them to describe it first. |
+ | "I'll fill in sensible defaults" | Good. Say them out loud. A default they never heard is one they couldn't reject. |
+ | "I should explain the process first" | Ask your question. The process shows itself. |
+ | "They said 'sounds good' to the idea" | Approval covers what you showed them. A description you haven't written isn't approved. |
+ | "The spike works, I'll keep building on it" | Keeping it is a new request. Back through the gate. |
## Visual Companion
- A browser-based companion for showing mockups, diagrams, and visual options during brainstorming. Available as a tool — not a mode. Accepting the companion means it's available for questions that benefit from visual treatment; it does NOT mean every question goes through the browser.
-
- **Offering the companion (just-in-time):** Do NOT offer it upfront. Wait until a question would genuinely be clearer shown than told — a real mockup / layout / diagram question, not merely a UI *topic*. The first time that happens, offer it then, as its own message:
- > "This next part might be easier if I show you — I can put together mockups, diagrams, and comparisons in a browser tab as we go. It's still new and can be token-intensive. Want me to? I'll open it for you."
+ A browser tab for showing mockups, diagrams, and prototypes. It's a
+ tool, not a mode: accepting it doesn't send every question to the
+ browser.
- **This offer MUST be its own message.** Only the offer — no clarifying question, summary, or other content. Wait for the user's response. If they accept, start the server with `--open` so their browser opens to the first screen automatically. If they decline, continue text-only and don't offer again unless they raise it.
+ **Offer it just-in-time.** Offer it the first time one of the moments
+ above comes up, never upfront. The offer is its own message with nothing
+ else in it:
- **Per-question decision:** Even after the user accepts, decide FOR EACH QUESTION whether to use the browser or the terminal. The test: **would the user understand this better by seeing it than reading it?**
+ > "This might be easier if I show you. Want me to open a browser tab with some mockups?"
- - **Use the browser** for content that IS visual — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
- - **Use the terminal** for content that is text — requirements questions, conceptual choices, tradeoff lists, A/B/C/D text options, scope decisions
+ If they decline, stay in text and don't offer again unless they raise it.
- A question about a UI topic is not automatically a visual question. "What does personality mean in this context?" is a conceptual question — use the terminal. "Which wizard layout works better?" is a visual question — use the browser.
+ **Per question, ask: would they understand this better by seeing it?**
+ Mockups, layouts, diagrams, and side-by-side designs go in the browser.
+ Requirements, scope, tradeoffs, and conceptual choices stay in text. A
+ question about a UI topic isn't automatically a visual question.
- If they agree to the companion, read the detailed guide before proceeding:
- `skills/brainstorming/visual-companion.md`
+ If they accept, read `visual-companion.md` in this directory before
+ starting the server.