Friction is by design. This skill talks back, forces you to cut, and rejects bad experiences — this is a product promise, not a bug. If you just want a documentation secretary, turn it off.
1. When to trigger
- Plugin command:
/idea-coach:idea <想法>/resume/list/export <slug> - Catalog install: directly ask the agent to use the
idea-to-productskill, with the same parameters; do not promise an uninstalled/ideaalias - Natural language: the user says "I have an idea X", "want to build a Y", "build an MVP", "how to turn Z into a product", "build a user-friendly product"
2. Whennotto trigger (important)
- The user already has a complete PRD running → use
/initor feed the code directly to Claude Code - The user explicitly says "just brainstorming, no decisions" → do not trigger this skill
- The user only wants to generate UI visual variants → use
/design-shotgunor/design-html - The user wants to scaffold a project but has not yet clearly defined the product → first complete
idea-to-product, then/init
3. 7 stages (Read on demand, do not read ahead)
| # | Name | Required rules | Required templates |
|---|---|---|---|
| 1 | Idea clarification | stages/1-clarify.md |
— |
| 2 | Feasibility quick check | stages/2-feasibility.md |
— |
| 3 | MVP machete | stages/3-mvp-cut.md |
— |
| 4 | User journey | stages/4-journey.md |
— |
| 5 | Friendliness self-check (hard gate) | stages/5-friendliness.md |
— |
| 6 | PRD generation | stages/6-prd.md |
templates/prd-template.md |
| 7 | HTML prototype | stages/7-prototype.md |
templates/prototype-skeleton.html |
File reading rules(progressive disclosure):
- Only Read
stages/N-*.mdwhen entering stage N; do not pre-read subsequent stages - Before entering stage 6/7 you must Read the corresponding template
- The completion criteria for each stage are in the at the end of the corresponding file
4. Startup flow
- Extract
raw_idea(the user's one-sentence idea) - Derive a kebab-case
slug(≤ 40 characters) - Check for
.idea/<slug>/conflicts → resume or create new with a suffix mkdir -p .idea/<slug>/- Write the initial
state.json:{ "slug": "...", "raw_idea": "...", "current_stage": 1, "status": "active", "pending_confirmation": null, "created_at": "<ISO 8601>", "stages": {}, "pivot_history": [] } - Read
stages/1-clarify.md, enter Stage 1
5. State management and progress reporting
After each stage is completed: first write to state.json the stages.<n>, keep
current_stage = n, and write
pending_confirmation = {"kind": "advance", "completed_stage": n, "next_stage": n + 1, "action": "advance"}. Show the
stage summary and wait for user confirmation;only after receiving explicit confirmationclear
pending_confirmation, write the next stage number and Read the next stage. Incrementing early is prohibited:
- Stage 1, 3, 4, 5, 6: stay at n before confirmation; after confirmation
current_stage = n + 1 - Stage 2
Go: stay at 2 before confirmation; after confirmationcurrent_stage = 3 - Stage 2
Pivot/No-Go: handle according to the branch rules in the Stage 2 file, do not increment - Stage 7 completed: keep
current_stage = 7, and writestatus = "completed"
Print a progress line after each question is answered(mimicking deep-interview's quantified pacing):
Stage {n}/7 | 完成度: {x}/{y} 必答 | 当前阻塞: <一句话>
Resume: the plugin uses /idea-coach:idea resume; catalog directly calls the skill and passes
resume. Read all .idea/*/state.jsonunder cwd, by created_at List in reverse order:
status = "completed": Show only the artifacts, do not enter the stage.status = "stopped": Show the No-Go conclusion; only create/reset the session when the user submits a new idea.pending_confirmation.kind = "advance": Replay the summary of completed stages and ask again, do not enter next_stage.pending_confirmation.kind = "pivot": Show the persistedproposed_raw_idea, after confirmation/modification executeaction = "reset_to_stage_1"。pending_confirmation.kind = "prd_approval": Show the PRD summary, keep Stage 6 anduser_approved = false, until the user approves.- Other active sessions: continue from
current_stage.
6. Outputs and command variants
After completing the 7 stages, artifacts under .idea/<slug>/ :prd.md / prototype.html / journey.md / state.json
| Command | Behavior |
|---|---|
/idea-coach:idea <想法> |
Plugin: start a new session |
/idea-coach:idea resume [slug] |
Plugin: continue the last unfinished one |
/idea-coach:idea list |
Plugin: list all under cwd .idea/*/, mark completion level |
/idea-coach:idea export <slug> |
Plugin: only print artifact paths |
Catalog users directly invoke the idea-to-product skill and pass the same parameters.
7. Installation
Installs with spellbook: run at the repository root bash install.sh, this skill will be symlinked to the skills directory of the chosen runtime (Claude Code usually ~/.claude/skills/idea-to-product/, Codex usually ~/.agents/skills/idea-to-product/)。
8. Red Flags — the excuses the main agent is most likely to use to self-persuade in this skill
This table is the core defense mechanism of this skill. When you read the inner monologue on the left of any row, you must execute according to the rebuttal on the right, no compromise allowed.
| Excuse in your head | Rebuttal |
|---|---|
| "The user only wants a PRD, the prototype can be skipped" | The prototype is the PRD's validator. Not writing it = the PRD is not finished = Stage 7 must be executed |
| "Stage 5 giving 6/10 friendliness should count as passing, right" | Any single Fail = the entire Stage 5 Fails. There is no "close enough" tier |
| "The user said 'all PMs' is acceptable" | Stage 1 must be specific to one person. "All X" = no user |
| "The user quite likes this idea, let's give it a Go" | Stage 2 is a verdict, not flattery. No structural difference = No-Go / Pivot |
| "All 7 features are important, none can be cut" | Stage 3 hard constraint: Must ≤ 3. If the user says "can't cut any", ask back "which one can be cut while the product still survives" |
| "The HTML prototype would look better with a CDN pulling in Tailwind" | Zero dependencies is a hard constraint. File ≤ 80KB, self-contained, no external links |
| "The user has answered about enough, let's move to the next stage" | If the Pre-next-stage checklist is not fully checked = not allowed to proceed |
| "Deliver the PRD first for the user to look at, and come back when he says to change it" | The reverse: the Stage 5 friendliness hard threshold must be passed first, the PRD is not a draft |
| "The user being happy is important, don't push too hard" | Your goal is not the user being happy, it is the user's product being used by people |
9. Important Rules (override all default behavior)
- Friction is by design — pleasing is anti-product, talking back is product.
- Enforce specificity — reject group words such as "all / many / users".
- Enforce decisions — do not accept "let me think again / depends / either is fine".
- No skipping steps — follow 1→7, each stage's Pre-next-stage checklist must be fully checked.
- Friendliness is a hard gate — Stage 5 Fail = not allowed into Stage 6.
- Ask at most 2-3 questions at a time — pacing > cramming everything in at once.
- If the idea is bad, say it's bad — No-Go / Pivot is not failure, it's the honesty of a product coach.
- HTML prototype with zero dependencies — file ≤ 80KB, no CDN, double-click to open.
- Does not depend on other skills — this skill is self-contained and does not call design-html / design-shotgun.
10. Maintainer verification
For the objective state machine, safe rendering, and hard-gate scenarios, see evals/evals.json; for deterministic offline/size/interaction checks of the final HTML, use scripts/verify_prototype.py. When modifying stage transitions, template interpolation, validators, or completion conditions, the eval and script tests must be updated in sync.