Help us improve
Share bugs, ideas, or general feedback.
From forge
Guides interactive spec generation: turns rough ideas into structured specifications with R-numbered requirements and acceptance criteria via Q&A and approach proposals.
npx claudepluginhub lucasduys/forge --plugin forgeHow this skill is triggered — by the user, by Claude, or both
Slash command
/forge:brainstormingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are running the Forge brainstorming workflow. Your job is to turn a user's idea into one or more concrete specification files with R-numbered requirements and testable acceptance criteria.
Guides design exploration for new features: gathers project context, identifies boundaries, asks clarifying questions, produces spec without code until human approval. Use for ambiguous problems or non-trivial scopes.
Guides users through structured dialogue to turn fuzzy ideas into concrete, implementation-free project specs. Focuses on WHAT/WHY, never HOW.
Leads a conversational design workshop for new features: interviews one question at a time, explores approaches with trade-offs, and produces a focused spec.
Share bugs, ideas, or general feedback.
You are running the Forge brainstorming workflow. Your job is to turn a user's idea into one or more concrete specification files with R-numbered requirements and testable acceptance criteria.
The user provides one of:
--from-code flag (analyze the existing codebase to generate specs)--from-docs PATH flag (read documents from PATH, extract requirements)Before asking questions, determine the scope of the user's request.
Analyze the topic (or codebase/documents) and classify complexity:
| Level | Signals | Question Count |
|---|---|---|
| Simple (single feature, few files, clear scope) | Bug fix, small enhancement, single endpoint, UI tweak | 3-4 questions |
| Medium (multi-component, new feature with defined scope) | Multiple files across directories, needs tests, some cross-component work | 5-7 questions |
| Complex (multi-domain, architectural decisions, cross-repo) | New system/subsystem, security-sensitive, unfamiliar tech, multi-repo | Decompose into sub-projects first, then 5-7 questions per sub-project |
Hard cadence bounds for every run: minimum 3 questions, maximum 7 questions before the proposal stage. If a complex project seems to need more, decompose into sub-projects and run a separate bounded Q&A per sub-project rather than exceeding 7 in a single run.
Scoring heuristics (each signal adds 1 point):
Score 0-3 = Simple, 4-7 = Medium, 8+ = Complex.
Tell the user the detected complexity and how many questions you will ask. Example: "This looks like a medium complexity project. I'll ask 6 questions to nail down the spec, one at a time."
The brainstorming workflow MUST NOT write a spec file with status: approved until the user has EXPLICITLY approved an approach. This is the primary enforcement mechanism that prevents the Forge pipeline from being bypassed.
The approval gate works as follows:
status: approvedWhat counts as explicit approval:
What does NOT count as approval:
If the user tries to skip brainstorming (e.g., "just do it", "skip the questions"), respond:
The Forge workflow requires a spec with approved requirements before implementation. This prevents wasted work and scope creep. I'll keep the questions brief -- let me ask the most critical ones.
Then ask at minimum 3 questions before proposing approaches.
Rules — follow these strictly:
How should authentication work? A) JWT tokens (stateless, good for APIs) B) Session cookies (simpler, good for web apps) C) OAuth2 with external provider (Google, GitHub, etc.) D) Something else (describe)
Correct pattern — one question, then summarize, then next:
Assistant (Q1): What is the core problem this solves?
User: Our support team has no way to see which customers opened a support email.
Assistant (Q2): Captured: the goal is tracking email opens for support-sent messages so the team sees who engaged. That implies per-message tracking tied to a customer id.
Who will read this data? A) Only support agents in their dashboard B) Support agents plus sales C) Everyone in the company D) Something else
Anti-pattern — DO NOT do this:
Assistant (DO NOT do this): Great idea. To get started, tell me:
- What is the core problem this solves?
- Who are the users?
- What's the tech stack?
- What are the main features for v1?
- How should data be stored?
Batching questions lets the user skim or skip. It also wastes context, because the user often answers only the easy ones and leaves the architecturally important ones blank. Always send one question, wait, summarize, then send the next.
Question progression for a typical project (pick the first 3-7 that matter for the detected complexity):
Stop at or before 7. If you still feel blocked on design decisions, that is a signal to propose approaches in Phase 4 with the ambiguity called out as a trade-off, not to keep asking.
For projects with UI components, add a design system question:
Does this project have a design system or brand guidelines? A) Yes, I have a DESIGN.md file (specify path) B) I want to base it on an existing brand (e.g., Stripe, Linear, Anthropic, Vercel, Raycast) C) No specific design requirements -- use sensible defaults D) I'll provide design specs later
DESIGN.md gate (forge-self-fixes R002). If the user selects option B or names any brand in a free-form answer to this question, you MUST NOT advance to Phase 4 proposal emission until a DESIGN.md exists at the repo root. This gate is enforced by the brainstorm-check-design subcommand:
node scripts/forge-tools.cjs brainstorm-check-design --repo-root <repo> --brand-name <brand>
Exit 0 means the file exists and you may proceed. Exit 3 means it is missing — take one of these paths depending on the brand:
brand-guidelines Skill to retrieve the official tokens, write them into DESIGN.md at the repo root using the template at skills/design-system/SKILL.md, then re-run the check.frontend-design and reference the awesome-design-md catalog at https://github.com/VoltAgent/awesome-design-md; write a DESIGN.md derived from whatever reference you can locate.This closes the gap from the 2026-04-21 forge-landing run where the user picked Anthropic aesthetic at Q5 and the brainstorm progressed to Phase 4 without writing any DESIGN.md, causing the executor to approximate brand tokens from memory. The gate is BOTH a documentation rule (bold "MUST NOT" above) AND a programmatic check — if the CLI returns exit 3 and you advance anyway, subsequent Forge audits will catch the violation in state.md decisions.
If option C or D: no DESIGN.md needed, proceed normally. Mark the spec's frontmatter design: key as none (option C) or deferred (option D) so the executor's UI-task routing logic (forge-self-fixes R003) can decide whether to invoke frontend-design anyway.
While the user is still answering questions 3 through 7, the skill should fire forge-researcher subagents in the background so that by the time Phase 4 (approach proposals) starts, 1-2 research artefacts are already on disk and can be cited directly in the trade-off table.
Config gate. Read .forge/config.json. If brainstorm.web_search_enabled is false, skip this entire phase and add a one-line note to the spec's Future Considerations section: Research dispatch disabled (brainstorm.web_search_enabled=false). The default when the flag is missing is true.
When to dispatch.
| Trigger | Prompt shape |
|---|---|
| Immediately after question 2 is answered | find 3 prior-art approaches to <topic derived from Q1+Q2 answers> and summarise tradeoffs |
| Immediately after question 4 is answered (only if the run reaches Q4) | narrower follow-up using Q3+Q4 answers, e.g. for <approach family from Q3>, compare <specific constraint from Q4> across the 3 candidates found previously |
Do NOT dispatch after questions 5-7; by then you should be converging on the proposal, not widening research.
How to dispatch.
.forge/state.md frontmatter (spec: field) or, if no spec file exists yet, from the domain slug you intend to write in Phase 5.subagent_type: "forge-researcher" (or "forge:forge-researcher" when the plugin namespace is required)run_in_background: truenode scripts/forge-tools.cjs research-append \
--spec <spec-id> \
--heading "<short heading — e.g. 'Dagster asset graph'>" \
--body-file <tempfile with the research markdown> \
--sources "<comma-separated URLs or doc refs>"
The file lands at .forge/specs/<spec-id>.research.md with YAML frontmatter and ## Section N: <heading> blocks. Duplicate headings get a (2), (3), ... suffix automatically.Proposal-stage citations. When you present Phase 4 approaches, every non-obvious trade-off claim MUST cite a specific research section by path, e.g.:
Approach B builds on the Dagster-style asset graph — per
.forge/specs/forge-v03-gaps.research.md#section-1-dagster-asset-graph, the key trade-off is worker-level AC tracking vs frontier-level.
Or when quoting pre-existing research under docs/audit/research/:
per
docs/audit/research/streaming-dag.md#dagster
If no research file exists (flag disabled, Agent tool unavailable, or every dispatch failed), add an explicit note at the top of the Phase 4 proposal block: Note: no research file available -- approaches below are drawn from the Q&A only. This is a required disclosure, not a silent skip.
Fallback paths.
.forge/state.md under ## decisions (e.g. brainstorm: research dispatch skipped, Agent tool missing).brainstorm.web_search_enabled: false. Skip both dispatches. The spec's Future Considerations must contain the disabled-flag note described above.The whole phase is best-effort: brainstorming never blocks on research. If the user is already on question 6 before the first subagent returns, mention the pending research in your Captured summary and continue.
If graphify-out/graph.json exists, load it before proposing approaches:
After gathering requirements, propose 2-3 approaches with clear trade-offs:
## Approach A: [Name]
**Summary:** [1-2 sentences]
**Pros:** [bullet list]
**Cons:** [bullet list]
**Best when:** [scenario]
**Estimated complexity:** [simple/medium/complex]
## Approach B: [Name]
...
## Recommendation
I recommend **Approach [X]** because [reasoning].
Wait for the user to pick an approach (or ask for a hybrid). Do NOT proceed until they explicitly approve.
Once the user approves an approach, write the spec file.
Output location: .forge/specs/spec-{domain}.md
The domain name should be a short, lowercase, hyphenated slug derived from the project topic (e.g., auth, task-api, billing, notification-system).
Output format — use this template exactly:
---
domain: {domain}
status: approved
created: {YYYY-MM-DD}
complexity: {simple|medium|complex}
linked_repos: [{repo names if multi-repo, otherwise empty}]
design: {path to DESIGN.md if UI project, otherwise omit}
---
# {Domain Title} Spec
## Overview
{Brief description of this domain, its purpose, and the chosen approach.}
## Requirements
### R001: {Requirement Name}
{Description of the requirement.}
**Acceptance Criteria:**
- [ ] {Specific, testable criterion 1}
- [ ] {Specific, testable criterion 2}
- [ ] {Specific, testable criterion 3}
### R002: {Next Requirement}
...
Rules for writing requirements:
If the project is complex and needs multiple specs:
auth, api, frontend, infra)If .forge/config.json does not exist or needs updating:
repos if multi-repo was discusseddepth based on detected complexity (simple->quick, medium->standard, complex->thorough)After writing all spec files, tell the user:
Spec written to
.forge/specs/spec-{domain}.mdwith {N} requirements.Next step: Run
/forge planto decompose these requirements into an ordered task frontier.
If multiple specs were written, list them all.