Brainstorming: From Idea to Design
Help users transform ideas into complete designs and specification documents through natural collaborative dialogue.
First understand the current project context, then ask questions one by one to refine the idea. Once you understand what needs to be built, present the design solution and obtain user approval.
<HARD-GATE>
Do not write any code, set up any project scaffolding, or perform any implementation actions before presenting the design solution and obtaining user approval. This rule applies no matter how simple the project seems.
</HARD-GATE>
Anti-pattern: "This is too simple to need design"
Once this skill is triggered, follow the design process even if the project seems simple (a todo list, a single-function tool). "Simple" projects are precisely the ones most likely to waste effort due to untested assumptions. The design can be short (just a few sentences for truly simple projects), but it must be presented and approved.
Checklist
Must create tasks for each of the following and complete them in order:
- Explore Project Context — Check files, documents, recent commits
- Offer Visual Companion Timely — Do not offer it at the start. When a problem is clearer to "see" than to "say", propose it at that moment (in a separate message); open a browser tab for them after the user agrees. If visualization is not needed throughout the process, don't mention it. See the "Visual Companion" section below for details.
- Ask Clarifying Questions — Ask one at a time, understand the purpose/constraints/success criteria
- Propose 2-3 Solutions — Include trade-off analysis and your recommendation
- Present Design — Display by complexity sections, obtain user approval after each section
- Write Design Document — Save to
docs/specs/YYYY-MM-DD-<topic>-design.md
and commit
- Self-Review Specification — Quickly check for placeholders, contradictions, ambiguities, scope (see below)
- User Reviews Specification — Ask the user to review the specification document before proceeding
- Transition to Implementation — Create an implementation plan and start working
Flowchart
Explore Project Context → Ask Clarifying Questions → Propose 2-3 Solutions → Present Design by Sections
↓
User Approves Design? —[No, Modify]→ Return to Present Design
↓ Yes
Write Design Document → Self-Review Specification (Fix on the Spot) → User Reviews Specification?
↓ ↓ Need Modification → Return to Write Design Document
↓ ↓ Approved
└──────────────────────────────────── Start Implementation
The final state is starting implementation. After the user approves the specification, create a step-by-step implementation plan and start coding.
Process Details
Understanding the Idea:
- First understand the current project status (files, documents, recent commits)
- Assess the scope before diving into questions: If the requirements describe multiple independent subsystems (e.g., "Build a platform with chat, file storage, billing, and analytics"), point this out immediately. Don't spend time refining a project that needs to be split first
- If the project is too large for a single specification, help the user break it into sub-projects: What are the independent parts, how do they relate, and in what order should they be built? Then follow the normal design process for the first sub-project. Each sub-project has its own specification → plan → implementation cycle
- For projects with appropriate scope, ask questions one by one to refine the idea
- Use multiple-choice questions as much as possible; open-ended questions are also acceptable
- Ask only one question per message — if a topic needs more discussion, split it into multiple questions
- Focus on: purpose, constraints, success criteria
Exploring Solutions:
- Propose 2-3 different solutions along with their trade-offs
- Present the options in a conversational manner, along with your recommendation and reasoning
- Start with your recommended solution and explain why
Presenting the Design:
- Once you think you understand what needs to be built, present the design
- The level of detail for each section matches its complexity: a few sentences for simple parts, up to 200-300 words for complex ones
- Ask the user if each section is correct after presenting it
- Cover: architecture, components, data flow, error handling, testing
- Be prepared to go back and clarify if something is unclear
Design for Isolation and Clarity:
- Split the system into smaller units, each with a clear responsibility, communicating through well-defined interfaces, which can be understood and tested independently
- For each unit, you should be able to answer: What does it do, how to use it, what does it depend on?
- Can someone understand the function of a unit without looking at its internal implementation? Can the internal implementation be modified without breaking the users? If not, the boundaries need to be redefined
- Smaller, clearly bounded units are also easier to handle — reasoning is more accurate and editing is more reliable for code that can be fully contained in context. When files become large, it usually means they are doing too much
Working in an Existing Codebase:
- Understand the existing structure before proposing changes. Follow existing patterns
- If issues in the existing code affect the current work (e.g., overly large files, unclear boundaries, tangled responsibilities), include targeted improvements in the design — just like a good developer would improve the code they touch while working
- Do not propose unrelated refactoring. Focus on the current goal
After Design
Documentation:
- Write the validated design (specification) into
docs/specs/YYYY-MM-DD-<topic>-design.md
- (User preferences for specification storage location take precedence over this default path)
- Write clearly and concisely — short sentences, active voice, specific details are better than vague generalizations
- Commit the design document to git
Self-Review Specification:
After writing the specification document, review it from a fresh perspective:
- Placeholder Scan: Are there "TBD", "TODO", incomplete sections, or vague requirements? Fix them.
- Internal Consistency: Are there contradictions between sections? Does the architecture match the functional description?
- Scope Check: Is this focused enough to support an implementation plan? Or does it need to be split?
- Ambiguity Check: Is there any requirement that could be interpreted in two ways? If so, choose one and write it clearly.
Fix issues on the spot. No need for re-review — proceed after fixing. For complex specifications, you can dispatch a subagent to conduct an independent review by referring to
spec-document-reviewer-prompt.md
(in this skill directory).
User Review Gate:
After passing the self-review, ask the user to review:
"The specification has been written and committed to
. Please review it and let me know if you have any modification suggestions. If everything is okay, we will start implementation."
Wait for the user's reply. If modifications are requested, revise and perform self-review again. Only proceed after user approval.
Implementation:
- After approval, create a detailed step-by-step implementation plan
- Split the work into small, verifiable increments
- Start implementation according to the plan
Core Principles
- Ask only one question at a time — Do not bombard the user with multiple questions
- Prioritize multiple-choice questions — Easier to answer than open-ended questions
- Strictly follow YAGNI — Remove unnecessary features from the design
- Explore alternatives — Always propose 2-3 solutions before deciding
- Progressive validation — Present the design and obtain approval before proceeding
- Stay flexible — Go back to clarify if something is wrong
Visual Companion
A browser-based companion tool for displaying mockups, diagrams, and visualization options during brainstorming. It is a tool, not a pattern. Accepting the companion means it can be used for problems that require visualization, not that every problem is handled through the browser.
Offer Just-in-Time: Do not offer it at the start. Wait until a problem is truly clearer to "see" than to "say" — a genuine mockup/layout/diagram problem, not just a topic involving UI. When this happens for the first time, send a separate message to propose:
"The next part might be clearer to see than to explain — I can show you mockups, diagrams, and comparisons in a browser tab. This feature is relatively new and will consume more tokens. Would you like me to enable it?"
This proposal must be a separate message. Do not attach any clarifying questions, summaries, or other content. Wait for the user's reply. If accepted, start the server with
to let the browser open automatically. If rejected, continue in plain text mode and do not offer it again unless the user initiates it.
Per-Question Decision: Even if the user accepts the companion, decide for each question whether to use the browser or terminal. The criterion: Will the user understand it better by seeing it than by reading it?
- Use Browser for content that is inherently visual — mockups, wireframes, layout comparisons, architecture diagrams, side-by-side visual designs
- Use Terminal for content that is inherently textual — requirement questions, concept choices, trade-off lists, textual options A/B/C/D, scope decisions
Questions about UI topics do not automatically equal visual questions. "What does 'personalization' mean in this context?" is a conceptual question — use terminal. "Which of these two wizard layouts is better?" is a visual question — use browser.
If the user agrees to use the companion, read the detailed guide before proceeding:
(in this skill directory)