From superpowers
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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/superpowers:brainstormingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
Help turn ideas into fully formed designs and specs through natural collaborative dialogue.
Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you're building, present the design and get user approval.
Do NOT invoke any implementation skill, write any code, scaffold any project, or take any implementation action until you have presented a design and the user has approved it. This applies to EVERY project regardless of perceived simplicity.Every project goes through this process. A todo list, a single-function utility, a config change — all of them. "Simple" projects are where unexamined assumptions cause the most wasted work. The design can be short (a few sentences for truly simple projects), but you MUST present it and get approval.
You MUST create a task for each of these items and complete them in order:
digraph brainstorming {
"Explore project context" [shape=box];
"Visual questions ahead?" [shape=diamond];
"Offer Visual Companion\n(own message, no other content)" [shape=box];
"Ask clarifying questions" [shape=box];
"Propose 2-3 approaches" [shape=box];
"Present design sections" [shape=box];
"User approves design?" [shape=diamond];
"Spec self-review\n(fix inline)" [shape=box];
"Persist spec\n(issue or local Markdown)" [shape=box];
"User reviews persisted spec?" [shape=diamond];
"Offer implementation choice" [shape=diamond];
"Direct implementation" [shape=doublecircle];
"Invoke writing-plans skill" [shape=doublecircle];
"Explore project context" -> "Visual questions ahead?";
"Visual questions ahead?" -> "Offer Visual Companion\n(own message, no other content)" [label="yes"];
"Visual questions ahead?" -> "Ask clarifying questions" [label="no"];
"Offer Visual Companion\n(own message, no other content)" -> "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?" -> "Spec self-review\n(fix inline)" [label="yes"];
"Spec self-review\n(fix inline)" -> "Persist spec\n(issue or local Markdown)";
"Persist spec\n(issue or local Markdown)" -> "User reviews persisted spec?";
"User reviews persisted spec?" -> "Spec self-review\n(fix inline)" [label="changes requested"];
"User reviews persisted spec?" -> "Offer implementation choice" [label="approved"];
"Offer implementation choice" -> "Direct implementation" [label="direct"];
"Offer implementation choice" -> "Invoke writing-plans skill" [label="plan"];
}
The terminal state is choosing the implementation path. After the persisted SPEC is approved, ask whether to start direct implementation or write an implementation plan. Do not invoke implementation skills before the user chooses direct implementation or asks for a plan.
Understanding the idea:
Exploring approaches:
Presenting the design:
Design for isolation and clarity:
Working in existing codebases:
Spec Persistence:
First, write the validated design (SPEC) using the existing design-doc format. Use elements-of-style:writing-clearly-and-concisely skill if available. Then run Spec Self-Review before writing the SPEC anywhere.
Choose the persistence destination:
GitHub issue creation:
GitHub issue updates:
The issue body is always the current SPEC. Comments are only a compact change log; they must not replace the body or duplicate the entire SPEC.
GitHub tooling:
GitHub result reporting:
https://github.com/<owner>/<repo>/issues/<number>). Do not report only #123 in these summaries.#123 reference is fine for intermediate progress, reasoning, and compact cross-references.Local Markdown spec flow:
docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md
Spec Self-Review: Before persisting the SPEC to a GitHub issue or local Markdown, look at it with fresh eyes:
Fix any issues inline. No need to re-review — just fix and move on.
User Review Gate: After the spec review loop passes and the SPEC has been persisted, ask the user to review the persisted spec before proceeding. Include the implementation-path recommendation and numbered choices in the same message:
"Spec persisted to
<issue-url-or-path>. Please review it.My recommendation: , because .
Choose:
- Proceed with the current SPEC and use the recommended path:
- Proceed with the current SPEC and use the other path:
- Request SPEC changes before proceeding
Please reply with 1, 2, or 3."
If the SPEC was persisted to a GitHub issue, <issue-url-or-path> must be the full GitHub issue URL, not a short #123 reference.
Wait for the user's response. If they choose 1 or 2, treat the current SPEC as accepted for implementation and proceed down that path. If they choose 3 or request changes in prose, make the changes and re-run the spec review loop. Only proceed once the user chooses to proceed.
Implementation:
When the user is deciding how to proceed from the current SPEC, offer two paths:
Before asking the user to choose, state your recommended implementation path and a brief task-specific reason.
Base the recommendation on task size, risk, file count, ambiguity, expected duration, and PR sensitivity.
Recommend Direct implementation for small, low-risk, clearly scoped changes.
Recommend Write implementation plan for large, high-risk, multi-file, ambiguous, long-running, or PR-sensitive work.
Always present the recommendation as a 1/2/3 numbered choice, not a free-form question.
Ask the user to reply with 1, 2, or 3.
The other path is whichever implementation path you did not recommend. Use this prompt shape:
"Spec persisted to
<issue-url-or-path>. Please review it.My recommendation: , because .
Choose:
- Proceed with the current SPEC and use the recommended path:
- Proceed with the current SPEC and use the other path:
- Request SPEC changes before proceeding
Please reply with 1, 2, or 3."
If the user chooses direct implementation, do not create a plan file.
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: When you anticipate that upcoming questions will involve visual content (mockups, layouts, diagrams), offer it once for consent:
"Some of what we're working on might be easier to explain if I can show it to you in a web browser. I can put together mockups, diagrams, comparisons, and other visuals as we go. This feature is still new and can be token-intensive. Want to try it? (Requires opening a local URL)"
This offer MUST be its own message. Do not combine it with clarifying questions, context summaries, or any other content. The message should contain ONLY the offer above and nothing else. Wait for the user's response before continuing. If they decline, proceed with text-only brainstorming.
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?
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.
If they agree to the companion, read the detailed guide before proceeding:
skills/brainstorming/visual-companion.md
npx claudepluginhub membphis/superpowersCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.