From wf
Stage 1 of the wf workflow. Turn an idea into an approved design through Socratic dialogue. Produces .wf/brainstorm/<feature_id>.md and optional self-contained HTML mockups. Slash-only — does not auto-commit and does not auto-invoke downstream skills.
How this skill is triggered — by the user, by Claude, or both
Slash command
/wf:brainstormThe 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. This is stage 1 of 4 in the wf workflow.
Help turn ideas into fully formed designs and specs through natural collaborative dialogue. This is stage 1 of 4 in the wf workflow.
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.Before doing anything else:
.wf/STATE.md if it exists.STATE.md exists and its phase is not brainstorm or done and not absent, refuse to proceed. Tell the user the current phase and suggest the matching /wf:* command..wf/STATE.md does not exist or its phase is done, treat this as a new feature: confirm a one-line task description with the user, then create .wf/, append .wf/ to the project's .gitignore (only if not already present), and initialize a fresh STATE.md.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:
/wf:plan, not here..wf/brainstorm/<feature_id>.md. Do NOT commit to git.phase: planning in STATE.md and tell the user to run /wf:plan when ready. Do NOT auto-invoke any other skill.---
feature_id: <YYYYMMDDTHHMMSS>-<kebab-slug>
phase: brainstorm
created_at: <ISO 8601 with timezone, e.g. 2026-04-28T14:32:00+08:00>
review_round: 0
---
## Current Task
<one-liner>
## Phase Log
- <ISO 8601 timestamp> brainstorm started
The feature_id is created_at collapsed (drop punctuation) plus a kebab-case slug, e.g. 20260428T143200-house-hunting.
digraph brainstorming {
"Validate phase & init STATE.md" [shape=box];
"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 product approaches" [shape=box];
"Present design sections" [shape=box];
"User approves design?" [shape=diamond];
"Write design doc to .wf/brainstorm/" [shape=box];
"Spec self-review (fix inline)" [shape=box];
"User reviews spec?" [shape=diamond];
"Set STATE phase=planning, suggest /wf:plan" [shape=doublecircle];
"Validate phase & init STATE.md" -> "Explore project context";
"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 product approaches";
"Propose 2-3 product 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 to .wf/brainstorm/" [label="yes"];
"Write design doc to .wf/brainstorm/" -> "Spec self-review (fix inline)";
"Spec self-review (fix inline)" -> "User reviews spec?";
"User reviews spec?" -> "Write design doc to .wf/brainstorm/" [label="changes requested"];
"User reviews spec?" -> "Set STATE phase=planning, suggest /wf:plan" [label="approved"];
}
The terminal state is handing control to the user with phase: planning set in STATE.md. Do NOT auto-invoke /wf:plan or any other skill — the user runs the next command when they're ready.
Understanding the idea:
Exploring approaches:
/wf:plan.Presenting the design:
/wf:plan.Design for isolation and clarity:
Working in existing codebases:
Documentation:
Write the validated design to .wf/brainstorm/<feature_id>.md. Do NOT commit it to git — .wf/ is gitignored by default.
Spec Self-Review: After writing the spec document, 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, ask the user to review the written spec before proceeding:
"Spec written to
.wf/brainstorm/<feature_id>.md. Please review it and let me know if you want any changes before we move to the planning stage."
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.
Handoff:
Once the user approves:
.wf/STATE.md: set phase: planning and append a phase-log entry with the current ISO 8601 timestamp./wf:plan when they're ready.Do NOT invoke any other skill. The user controls when planning begins.
For visual questions during brainstorm — mockups, wireframes, layout comparisons, architecture diagrams — write a self-contained HTML file and open it directly in the user's browser. No server, no event loop, no helper scripts.
Per-question decision:
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 HTML.
Offering the companion (its own message, no other content):
"Some of what we're working on might be easier to explain if I show it to you in a browser. I can put together mockups, layout comparisons, and diagrams as we go, written as self-contained HTML files I'll open for you. Want me to use this when it helps?"
Wait for the user's response. If they decline, proceed with text-only brainstorming.
HTML constraints:
.wf/brainstorm/<feature_id>-visual-<n>.html (where <n> increments per visual)Auto-open after writing:
After writing the HTML file, run open <absolute-path> via the Bash tool. Do NOT ask the user to open it manually. Then send a chat message like:
"Opened
.wf/brainstorm/<file>.htmlin your browser. Reply here with which option you prefer or any changes you want."
The user replies in natural language; there is no event-loop or click-to-select machinery.
CLAUDE.md or domain glossary exists, prefer its terms over generic onesGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub anthoooooooony/wf --plugin wf