| name | brainstorming |
| description | Socratic ideation gate before any project work begins. Use when the user has a fuzzy idea, vague project intent, or asks "what should I build", "I'm thinking about X", "I want to make a Y" without a clear spec. Runs BEFORE /new-project, /init-project, or any code. Refuses to plan or code until the design has been refined through dialogue and written to .planning/specs/. Triggers on phrases like "brainstorm", "idea", "what about", "I'm thinking", "design", "should I", "help me figure out", "let's discuss". |
Brainstorming
The pre-planning gate. Before draht's GSD cycle runs, before code is scaffolded, before /new-project or /init-project, the idea has to be converged on. This skill enforces design-first discipline through dialogue.
Hear the Problem Beneath the Ask
The user's words describe an artifact; the design must serve a need. They are rarely the same thing.
- Separate the stated artifact ("a dashboard") from the underlying need — what decision, pain, or moment does it serve?
- When the user names a solution, ask what it solves before refining it. Solutions stay candidates until the need is confirmed.
- State the need back in one sentence ("so the real problem is X — right?") and get an explicit yes before proposing any approach.
Example: "I want an admin dashboard" → questioning reveals they check one number, once a week → a scheduled email beats the dashboard by a month of build time. Prevents: a polished spec for the wrong artifact.
The Hard Gate
Do NOT invoke any planning skill, write any code, scaffold any project, or take any implementation action until you have:
- Asked clarifying questions one at a time
- Proposed 2–3 approaches with trade-offs
- Presented a structured design and the user has approved it
- Written the design to
.planning/specs/YYYY-MM-DD-<slug>-design.md
If the user pushes to skip ("just build it"), surface the trade-off: "I can scaffold something now, but skipping brainstorming usually means we throw out the first version. Are you sure?" If yes, proceed but make the assumption explicit in the spec.
The Process
1. Explore Context
Before asking anything, read what's already on disk:
git log --oneline -30 — what has the user been working on recently?
ls -la — what's in the project root?
.planning/ if it exists — is there an active project?
README.md, package.json, any *.md in root — what does this codebase claim to do?
If an existing codebase is in play (extending a real project), run draht-tools map-codebase + draht-tools graph-hotspots first to ground ideation in the real structure — so brainstormed ideas don't contradict existing architecture.
Use this to ground questions in reality instead of asking things the user has already told you.
2. Ask Clarifying Questions — ONE at a time
Most failed projects come from rushing past ambiguity. Ask one focused question per message, not a long list. Wait for the answer, then ask the next.
Question categories (sequence from foundational → detailed):
- Goal — who is this for? what changes for them when it ships?
- Constraints — deadline? budget? team size? language/stack preferences?
- Scope — what's in v1? what's explicitly NOT in v1?
- Success criteria — how do we know it works? what's the demoable outcome?
- Domain — what are the key nouns and verbs in this space? any existing glossary?
- Risks — what's the scariest part of this? what would make it fail?
If the project is obviously oversized for one cycle (e.g., "I want to build a social network"), flag it explicitly and propose decomposition into a v1 / v2 / out-of-scope split.
3. Propose 2–3 Approaches With Trade-offs
Once you have enough context, propose multiple approaches:
- Approach A: the simplest path. What it sacrifices.
- Approach B: the most flexible. What it costs.
- (Optional) Approach C: the most ambitious. Why it's tempting and why it might be too much.
For each: list trade-offs in plain language (time, complexity, future flexibility, lock-in). Let the user pick — don't pre-pick for them.
4. Present the Design in Sections, Each With an Approval Gate
Once an approach is chosen, present the design section by section, not all at once:
- Goal & non-goals
- User stories / observable truths
- Domain model (bounded contexts, key nouns)
- Architecture sketch (components, data flow)
- v1 scope (what ships) vs v2/out-of-scope (what doesn't)
- Open questions / risks
After each section, ask: "Does this match what you want, or should we adjust?" Only move to the next section once the current one is approved.
5. Write the Spec to .planning/specs/
Once all sections are approved:
.planning/specs/YYYY-MM-DD-<topic-slug>-design.md
The file should include:
- Header with date and approver
- All approved sections
- Open questions section (the things you flagged but didn't resolve)
- Next step: which draht command picks this up (
/new-project or /init-project)
6. Self-Review the Written Spec
Before handing off, attack the spec as if you were paid to kill it:
- Contradictions between sections (the goal says X, the architecture implies not-X)
- Gaps (a user story with no architectural support)
- Premature commitments (specific tech choices made before they were needed)
- Domain language drift (different names for the same thing)
- The strongest case the whole design is wrong — wrong scope, wrong user, or already solved by a simpler existing tool. Write that case and why the design survives it into the spec's Open Questions.
Report any findings to the user and update before proceeding. A spec that was never attacked has never been tested.
7. Hand Off
Direct the user to the next command:
- Greenfield with no codebase →
/new-project
- Existing codebase →
/init-project
The spec file becomes input to those commands.
Anti-Patterns — STOP
- Asking multiple questions in one message — splits the user's attention, lowers answer quality
- Pre-deciding before they've answered — "I'll just assume you mean X" is a failure mode
- Skipping the alternatives — proposing only one approach hides the trade-space
- Writing the spec before approval — the spec records decisions, not proposals. Get the decision first.
- Brainstorming code — this skill is for the design, not the implementation. Resist the urge to start writing.
Rationalization Table
| Excuse | Reality |
|---|
| "It's a simple project, no need to brainstorm" | Simple projects also have ambiguous scope. The skill is fast for simple ones. |
| "User said 'just build it'" | They'll be unhappier when the wrong thing gets built. Surface the trade-off. |
| "I already know what they want" | Verify by stating it back and getting confirmation. |
| "Let's iterate after a first draft" | A first draft in code is more expensive to throw away than a first draft on paper. |
Output
Brainstorming ends with a written spec file in .planning/specs/. That file is the artifact. If no file is written, the skill did not complete.