forge-1-prd
Uses a structured interview process to generate a detailed feature PRD. Focuses on defining what the feature must achieve.
Install
mkdir -p .claude/skills/forge-1-prd && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11103" && unzip -o skill.zip -d .claude/skills/forge-1-prd && rm skill.zipInstalls to .claude/skills/forge-1-prd
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Create a requirements PRD for a feature through structured interview. Use when user runs /feature-forge:forge-1-prd or explicitly asks to start the forge pipeline for a new feature. Do NOT trigger for general requirements discussions, project scoping outside forge, or PRD questions unrelated to the forge pipeline.Key capabilities
- →Conduct structured requirements interview
- →Validate feature names and branches
- →Draft requirements-only PRD
- →Execute stage exit protocol
How it works
It uses a structured interview process to capture feature requirements and validates branch configurations before drafting the PRD.
Inputs & outputs
When to use forge-1-prd
- →Start a new feature development
- →Capture requirements for a planned feature
- →Define success criteria for feature scope
About this skill
forge-1-prd — Requirements Interviewer
Create a thorough, requirements-only PRD through relentless structured interviewing. The PRD captures WHAT the feature must do, not HOW it will be built.
Prerequisites
Read and follow references/shared-conventions.md for feature name validation, configuration reading, and force mode handling before proceeding.
--force-standalone (forge-1-prd only). A distinct flag from --force: it bypasses only the Mint Guard in Step 1 (letting you intentionally fork a name that is a known epic member into a detached standalone feature). It does not imply --force — prerequisite checks and the Stage-Entry Guard still run. Use it only when you genuinely mean to create a standalone feature that shares a name with an epic member on another branch.
Step 1: Read Configuration and Check State
Branch Setup (if using git)
Invoke the Branch Setup block in references/shared-conventions.md with {label} = {feature} and {scope} = feature. It self-gates (skips when not a git repo, when branchPerFeature is false, or for an epic member that inherits the epic's branch), detects whether you're on the default branch, and strongly recommends — still optionally — creating {branchPrefix}{feature} when you are. Do this before directory resolution.
Set the working directory by invoking the Feature Directory Resolution block in references/shared-conventions.md, which yields {resolvedFeatureDir}. Note one PRD-specific caveat: at PRD time a brand-new standalone feature may have NO directory yet, so resolution is expected to fail for a never-started standalone feature — as not-found (exit 1) when {specsDir}/ already exists (other features present), or as specs dir not found (exit 2) when {specsDir}/ itself does not exist yet (the very first feature, or a branch that never had a specs tree). In both of those "about to create a brand-new standalone" cases forge-1 creates {specsDir}/{feature}/ as today. (The other exit-2 errors — unsafe-name, a path-containment escape — are genuine STOPs, never a mint.) For an epic member the directory already exists (created empty by forge-0-epic with an epic back-pointer), so resolution succeeds and yields the nested path.
Mint Guard: refuse to fork a known epic member into a detached standalone (Issue #125)
Run this sub-step whenever forge-1 is about to mint a brand-new flat standalone {specsDir}/{feature}/ — that is, when Feature Directory Resolution returned either not-found (exit 1) or specs dir not found (the exit-2 missing-specs-dir flavor, e.g. a clean default branch that has never had a specs tree). The exit-2 case is the cleanest split-brain trigger: on a branch that predates the epic, {specsDir}/ may not exist at all, yet cross-branch discovery still sees the member on the epic branch. It prevents the split-brain-epic failure where a member of an epic (whose manifest lives on a different, unmerged branch) is silently forged as a disjoint standalone feature carrying no epic back-pointer. Skip it entirely when resolution succeeded (an epic member's directory already exists — resolution yields the nested path, so this never fires), on the other exit-2 errors (unsafe-name / path-containment — those STOP, they never mint), and when --force-standalone was passed (see below).
- Run cross-branch discovery for this exact name (branch-agnostic — it scans all refs regardless of current HEAD):
R="$(bash -c 'for d in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME"/.claude/skills/feature-forge "$HOME"/.claude/plugins/cache//feature-forge/ "$HOME"/.claude/plugins/*/feature-forge "$HOME"/.agents/skills/feature-forge ./.agents/skills/feature-forge; do [ -x "$d/scripts/forge-root.sh" ] && exec "$d/scripts/forge-root.sh"; done')" [ -n "$R" ] || { echo "feature-forge: cannot locate plugin root" >&2; exit 1; } python3 "$R/scripts/forge-session.py" discover-feature "{feature}" --specs-dir "{specsDir}" --json
2. **If any candidate has `isEpicMember: true` → HARD STOP.** This is not the soft switch/fetch/treat-as-new menu from the Feature Directory Resolution block — do **not** create any directory and do **not** fall through to the interview. Emit verbatim (filling `{epic}` and `{stateBranch}` from that candidate's `epic` and `stateBranch`):
> `{feature}` is a member of epic `{epic}` (recorded on branch `{stateBranch}`). You appear to be on a branch that does not contain that epic. Switch to `{stateBranch}` and run `/feature-forge:forge-1-prd {feature}` there, or pass `--force-standalone` to intentionally fork a detached standalone feature.
3. **If candidates exist but none are epic members** → keep today's soft behavior: this is the ordinary cross-branch-discovery case already handled by the Feature Directory Resolution block's **Candidates found** menu (switch / fetch+switch / treat-as-new / stop). Defer to it.
4. **If nothing was found** (no candidates) → proceed to mint the flat standalone feature as today.
5. **If `--force-standalone` was passed** → skip this guard entirely, log a one-line warning ("Forking `{feature}` as a detached standalone despite epic membership on `{stateBranch}`"), and proceed to create the flat feature. `--force-standalone` is distinct from `--force` and does **not** imply it (see the Force Mode note below).
After resolution, invoke the **Stage-Entry Guard** block in `references/shared-conventions.md` with `{stage}` = `forge-1-prd`. It classifies re-entry (fresh / interrupted / re-authoring), runs the resume-vs-restart gate and the "create a new version?" warning as applicable, and applies the entry stamp on the authoring paths. For a brand-new standalone feature there is no state file yet, so the guard's **fresh** arm applies with nothing to prompt; the entry stamp lands when the state file is first created in Step 6.
## Step 2: Examine Existing Context
Before starting the interview, invoke the **Epic Context Injection** block in `references/shared-conventions.md`. This block self-gates: it skips entirely if the feature has no `epic` back-pointer, so standalone behavior is unchanged. If this feature is an epic member, the injected charter's `exposes`/`consumes` are requirement inputs — every contract obligation must appear as a REQ in the PRD.
1. **Check the project structure**: Read the project's build configuration and dependency manifests to understand what modules/packages exist. Look for `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `pom.xml`, workspace configs, or equivalent.
2. **Check existing specs**: Look at `{specsDir}/` for other features' PRDs to understand conventions and the overall system
3. **Check existing docs**: Look at the docs directory for architecture documentation
4. **Note integration surfaces**: Identify which existing packages might be relevant to this feature
This context helps you ask informed questions and spot gaps the user might not think of.
## Step 3: Conduct the Interview
Interview the user relentlessly. Your goal is to extract complete, unambiguous requirements.
Read `references/prd-template.md` for the interview structure and question categories. Cover every category. Don't rush — missing a requirement now costs 10x to fix later.
### CRITICAL GUARDRAIL: No Technology Decisions
The PRD is EXCLUSIVELY about requirements. You MUST enforce this boundary:
**When the user says something like:**
- "I want to use Zod for validation" → Capture as: "Runtime schema validation with type inference is required." Note their Zod preference as a constraint but not a requirement.
- "We'll store it in Drizzle/PostgreSQL" → Capture as: "Persistent storage required for X data with Y query patterns."
- "I want a React component that..." → Capture as: "A user interface is required that allows users to..."
- "We should use WebSockets for..." → Capture as: "Real-time updates are required when X changes, with latency under Y."
- "I want a REST API" → Capture as: "An HTTP-accessible interface is required for X operations"
- "We need a microservice for X" → Capture as: "X must be independently deployable and scalable"
- "Use a queue for Y" → Capture as: "Y must be processed asynchronously with guaranteed delivery"
**When YOU start drifting into technology:**
If you catch yourself writing about specific libraries, API designs, database schemas, or implementation patterns — STOP. Ask yourself: "Is this a requirement or an implementation choice?" Rewrite it as the underlying requirement.
**The one exception:** When a technology choice IS the requirement (e.g., "must integrate with the existing @repo/auth package" or "must work with our Hono backend"). These are constraints, and they belong in the Constraints section of the PRD, clearly labeled as such.
A technology constraint is valid when it stems from organizational mandate, existing infrastructure, or team expertise — not from preference. Ask "Why must it be X specifically?" If the answer is "because we already run X in production," that's a legitimate constraint. If the answer is "because it's fast," capture the performance requirement instead.
### Interview Approach
**Turn structure:** Output your analysis or context as regular text, then use `AskUserQuestion` for the actual questions. NEVER put questions in your text output — they MUST go through `AskUserQuestion`.
**Pacing:** Cover one topic area at a time, asking 2-3 related questions per `AskUserQuestion` call. After receiving answers, probe deeper on anything incomplete before moving to the next topic. Signal progress in your text before the next question batch.
**Question strategies** (use these as content for `AskUserQuestion`, not as inline prose). The PRD stays at the requirements level (the *what*, not the *how* — that's forge-2-tech), so most questions are open elicitation. But whenever you offer the user a *choice* (scope boundary, MVP cut, a non-functional target), apply the **Decision
---
*Content truncated.*
When not to use it
- →For general requirements discussions
- →For project scoping outside the forge pipeline
Prerequisites
Limitations
- →Refuses to fork known epic members into detached standalones without force flags
- →Requires strict adherence to shared conventions
How it compares
It enforces a strict requirements-only focus, preventing technical implementation details from polluting the PRD.
Compared to similar skills
forge-1-prd side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| forge-1-prd (this skill) | 0 | 1mo | No flags | Intermediate |
| team-ba | 0 | 1mo | No flags | Advanced |
| conductor-setup | 0 | 5mo | No flags | Beginner |
| skill-development | 17 | 8mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
team-ba
DangQuangSE
>
conductor-setup
netbarros
Initialize project with Conductor artifacts (product definition,
skill-development
anthropics
This skill should be used when the user wants to "create a skill", "add a skill to plugin", "write a new skill", "improve skill description", "organize skill content", or needs guidance on skill structure, progressive disclosure, or skill development best practices for Claude Code plugins.
skill-writer
pytorch
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
microsoft-skill-creator
MicrosoftDocs
Create agent skills for Microsoft technologies using Learn MCP tools. Use when users want to create a skill that teaches agents about any Microsoft technology, library, framework, or service (Azure, .NET, M365, VS Code, Bicep, etc.). Investigates topics deeply, then generates a hybrid skill storing essential knowledge locally while enabling dynamic deeper investigation.
cartographer
kingbootoshi
Maps and documents codebases of any size by orchestrating parallel subagents. Creates docs/CODEBASE_MAP.md with architecture, file purposes, dependencies, and navigation guides. Updates CLAUDE.md with a summary. Use when user says "map this codebase", "cartographer", "/cartographer", "create codebase map", "document the architecture", "understand this codebase", or when onboarding to a new project. Automatically detects if map exists and updates only changed sections.