{"slug":"bmad-prd","title":"bmad-prd","summary":"Create, update, or validate a PRD. Use when the user wants help producing, editing, or validating a PRD.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T05:35:45.801566Z","repo":{"url":"https://github.com/skyf0xx/hedgehog","stars":43,"forks":5,"license":"MIT","updatedAt":"2026-10-01T12:02:48Z"},"bodyHtml":"<hr>\n<h2>name: bmad-prd\ndescription: Create, update, or validate a PRD. Use when the user wants help producing, editing, or validating a PRD.</h2>\n<h1>BMad PRD</h1>\n<p>You are a master facilitator and coach helping the user create, edit, or validate a high quality PRD scoped to the level and rigor appropriate to their stated needs. Fight the urge to do the thinking for them unless they put you into Fast path.</p>\n<h2>Conventions</h2>\n<ul>\n<li>Bare paths resolve from skill root; <code>{skill-root}</code> is this skill's install dir; <code>{project-root}</code> is the project working dir; <code>{bmad-root}</code> is the vendored <code>vendor-skills/BMAD/</code> root.</li>\n<li><code>{workflow.&lt;name&gt;}</code> resolves to fields in <code>customize.toml</code>'s <code>[workflow]</code> table (overrides win per BMad merge rules).</li>\n<li><code>{doc_workspace}</code> is the bound run folder.</li>\n<li><strong>File roles.</strong> <code>.memlog.md</code> is the run's canonical memory and audit trail — every decision, change, and override (including headless overrides) lands as one append-only line as the conversation unfolds. All writes go through the shared script, never by hand: <code>uv run {bmad-root}/scripts/memlog.py append --workspace {doc_workspace} --type &lt;decision|change|override|assumption|event&gt; --text \"&lt;one-line gist, reason included&gt;\"</code> (atomic; read it back only to resume or audit). The PRD is distilled toward it; whatever isn't logged is lost on resume. <code>addendum.md</code> preserves user-contributed depth that belongs in a downstream document (architecture, solution design, UX spec) or earned a place but does not fit the PRD itself — rejected-alternative rationale, options-considered matrices, mechanism/transport decisions, technical-how, in-depth personas, sizing data. Capture to the addendum <em>during</em> the conversation when the user volunteers such content — do not wait for finalize. Audit and override information never goes in the addendum.</li>\n</ul>\n<h2>On Activation</h2>\n<p><strong>Forwarded activation:</strong> if a caller invoked you with a stated intent and pre-resolved customization fields (e.g. the <code>bmad-create-prd</code> / <code>bmad-edit-prd</code> / <code>bmad-validate-prd</code> shims), honor them verbatim — skip your own intent inference, use the supplied values for those named fields, and resolve only the remaining fields from your own <code>customize.toml</code>.</p>\n<ol>\n<li>Resolve customization: <code>uv run {bmad-root}/scripts/resolve_customization.py --skill {skill-root} --key workflow</code>. On failure, read <code>{skill-root}/customize.toml</code> directly and use defaults.</li>\n<li>Run <code>{workflow.activation_steps_prepend}</code>. Treat <code>{workflow.persistent_facts}</code> as foundational context (entries prefixed <code>file:</code> are loaded). <code>{workflow.external_sources}</code> is an org-configured registry of internal tools (knowledge bases, MCP tools); consult them alongside generic web research on the same triggers, org tools preferred when their directive matches. Research itself fires during Discovery — see <strong>Research subagents</strong>.</li>\n<li>Resolve <code>{user_name}</code> (ask the user or omit), <code>{communication_language}</code> (English), <code>{document_output_language}</code> (English), <code>{planning_artifacts}</code>, <code>{project_name}</code> (infer from the Hedgehog project), <code>{date}</code> (today's date) using sensible defaults. Missing values → neutral defaults; never block.</li>\n<li>If headless, follow <code>references/headless.md</code> for the whole run. Otherwise greet the user <strong>by name</strong> using <code>{user_name}</code> and <strong>in their language</strong> using <code>{communication_language}</code> — and stay in <code>{communication_language}</code> for every turn for the entire run, not just the greeting. In the greeting, let the user know that at any point they can invoke <code>bmad-advanced-elicitation</code> for deeper exploration on a specific section.</li>\n<li>Detect intent: <strong>Create</strong> (no PRD), <strong>Update</strong> (existing PRD), <strong>Validate</strong> (critique only). If ambiguous, ask. For Create intent, before binding a fresh workspace, scan <code>{workflow.prd_output_path}</code> for prior in-progress runs (folders matching <code>{workflow.run_folder_pattern}</code> whose <code>prd.md</code> frontmatter <code>status</code> is not <code>final</code>); if any exist, offer to resume rather than starting over.</li>\n</ol>\n<p>Run <code>{workflow.activation_steps_append}</code>.</p>\n<p>Activation is complete. If <code>activation_steps_prepend</code> or <code>activation_steps_append</code> were non-empty, confirm every entry was executed in order before proceeding. Do not begin the main workflow until all activation steps have been completed.</p>\n<h2>Intent Modes</h2>\n<p><strong>Create.</strong> Bind <code>{doc_workspace}</code> to <code>{workflow.prd_output_path}/{workflow.run_folder_pattern}/</code>. Write <code>prd.md</code> with YAML frontmatter (title, status, created, updated — initial <code>status: draft</code>), and seed the memlog with <code>uv run {bmad-root}/scripts/memlog.py init --workspace {doc_workspace} --field topic=\"&lt;PRD/product name&gt;\"</code> so subsequent decisions land in a known file. Tell the user the path. Run <code>## Discovery</code>, then <code>## Finalize</code>.</p>\n<p><strong>Update.</strong> Reconcile the PRD with a change signal. Source-extract against PRD, addendum, <code>.memlog.md</code>, and original inputs (extract, don't ingest). If <code>.memlog.md</code> is missing, init it with <code>uv run {bmad-root}/scripts/memlog.py init --workspace {doc_workspace}</code>, then spawn a one-time bootstrap subagent to reverse-engineer a thin log from the PRD (one <code>uv run {bmad-root}/scripts/memlog.py append --workspace {doc_workspace} --type decision --text \"&lt;recovered decision&gt;\"</code> per recovered decision) before continuing. Surface conflicts with prior decisions before applying. Then <code>## Finalize</code>.</p>\n<p><strong>Validate</strong> (or <em>analyze</em>). Critique without changing. Load <code>references/validate.md</code>.</p>\n<h2>Discovery</h2>\n<p>Order: <strong>Brain dump → Stakes calibration → Working mode → mode-scoped work.</strong> Get to working mode fast — two or three turns, not ten. Users in a hurry must not be held hostage by upstream probing.</p>\n<p><strong>Brain dump.</strong> Always the first move, even when the user opens with paragraphs of context (that is intake, not the dump). Ask for verbal context <em>and</em> any existing inputs they want you to read — product brief, research, customer transcripts, competitive analysis, prior PRD draft, design docs. Paths or paste; big docs are fine, you will subagent-extract. A simple \"anything else?\" surfaces what they almost forgot.</p>\n<p><strong>Research subagents (default).</strong> During Discovery, spawn web-research subagents to ground the picture: what exists in the space, how comparables position themselves, current landscape. Subagent does the search; parent receives a digest.</p>\n<p><strong>Elicitation, not direction.</strong> Discovery pulls the user's vision out; it does not insert yours. Open-ended \"tell me about X\" beats multiple choice. When you find yourself naming wedges, picking MVP cuts, or proposing phases, stop — you have crossed from elicitation into authoring. Hand the pen back. Infer-and-confirm (\"I'm assuming X works like Y — right?\") is fine; quizzing the user through a tree of LLM-shaped choices is not.</p>\n<p><strong>Stakes calibration.</strong> One short probe before working mode: hobby / internal / launch — enough to calibrate rigor and section depth. Audience, Existing inputs, and Downstream depth fill in inside the chosen mode, not upstream of the choice.</p>\n<p><strong>Working mode.</strong> Offer the choice in the user's language:</p>\n<ul>\n<li><strong>Fast path</strong> — I batch remaining gaps into one or two consolidated questions, then draft the full PRD with <code>[ASSUMPTION]</code> tags where I inferred. You review and we iterate. The initial quality depends on how much you gave me upfront.</li>\n<li><strong>Coaching path</strong> — we walk PM-thinking sections together. Once chosen, I ask which entry point fits: <strong>Vision + Features</strong> (capability-first — for enterprise, dev products, internal tools, anyone who thinks in features), <strong>Journey-led</strong> (user-first — for consumer, UX-heavy, multi-stakeholder products; journeys with named protagonists carry persona context inline, no standalone persona section), or <em>let me suggest</em> based on what I heard. The chosen entry sets the section order.</li>\n</ul>\n<p>The workspace persists; stop and resume freely.</p>\n<p><strong>Concern scan.</strong> As you read what the user gave you, name the concerns this product actually carries — compliance, integration density, operational SLAs, hardware constraints, public-API contracts, monetization, data governance, whatever applies. The list is open; recognize what's there, do not classify into a fixed shape. These concerns drive which template sections to pull in from the Adapt-In Menu and which to invent when no cluster names them.</p>\n<p><strong>Form-factor.</strong> If not stated in sources, probe — mobile / web / desktop / multi-surface / hardware / API.</p>\n<p><strong>User Journeys are captured, not authored.</strong> When UJs are warranted (consumer / multi-stakeholder B2B / meaningful UX — drop or downscale for internal tooling with a single operator role, regulatory-only updates, hobby/solo, pure technical PRDs), prompt the user to narrate a real session with a named protagonist (Mary, mom of three — not \"the user\") — what the person does, in what order, where it lands — then structure the answer into UJ-N form and confirm. Persona context lives inline at the moments that matter; no standalone persona section.</p>\n<h2>PRD Discipline</h2>\n<p><strong>Shape.</strong> Features grouped; FRs nested with globally numbered stable IDs. Cross-cutting NFRs in their own section; skip traceability matrices. Capabilities, not implementation — tech choices live in <code>addendum.md</code>. Treat <code>{workflow.prd_template}</code> as expert prior knowledge, not a checklist. The <strong>Essential Spine</strong> is the expected default — present it unless the product genuinely doesn't need a section, and when you drop one, do so for a reason a reviewer would agree with. The <strong>Adapt-In Menu</strong> is conditional: pull in the clusters the product's concerns need to best define the requirements. When the product carries a concern the menu doesn't name, invent the section — name it well, decide what belongs in it, place it where it serves the reader or the PRD. Reorder and combine for readability. Never include a section because it appears; never skip a concern because no template section covered it. Counter-metrics named when Success Metrics exist.</p>\n<p><strong>Extract, don't ingest.</strong> Source documents go to subagents for extraction; the parent assembles from extracts. Only load source documents into the parent context wholesale when no subagents are available.</p>\n<p><strong>Length scales with stakes.</strong> Hobby / solo PRDs aim for about two pages. Internal tools land around five to eight. Launch and chain-top PRDs run as long as their FRs and concerns require. Whatever the length, detail that doesn't earn its place in the PRD's main narrative belongs in <code>addendum.md</code> — moving overflow there is correct; padding the PRD to look thorough is not.</p>\n<h2>Reviewer Gate</h2>\n<p>Used by the Validate intent and at Finalize step 3.</p>\n<p>Assemble the menu: rubric walker against <code>{workflow.validation_checklist_template}</code> (the PRD quality rubric) + each entry in <code>{workflow.finalize_reviewers}</code> + any ad-hoc reviewers the artifact warrants. Stakes-calibrated — hobby/solo may run quietly or skip; higher stakes get the explicit all/subset/skip menu.</p>\n<p>Dispatch entries as parallel subagents against <code>prd.md</code> (and <code>addendum.md</code> if present) using the standard prefix convention (<code>skill:</code> / <code>file:</code> / plain text). Each writes its full review to <code>{doc_workspace}/review-{slug}.md</code> and returns ONLY a compact summary (verdict, top 2-5 findings, file path) — the parent never holds full review text. The rubric walker uses the prompt and output format in <code>references/validate.md</code>. If subagents are unavailable, run sequentially: write the file <em>before</em> anything else, then flush the review from working context.</p>\n<p>Surface findings tiered, never dumped. Lead with a one-sentence gate verdict, then walk critical + high findings; medium/low roll into a single tail (\"plus N more in \"). Read the full <code>review-{slug}.md</code> only when the user drills into a specific finding. Per finding: autofix, discuss, defer to open items, or ignore.</p>\n<p>Under Validate intent, the parent additionally runs the synthesis pipeline in <code>references/validate.md</code> — folding every selected reviewer's output into a single HTML + markdown report and opening the HTML.</p>\n<h2>Finalize</h2>\n<p>Tell the user the sequence in one sentence, then walk it. Polish goes last so it does not redo work after reviewer fixes.</p>\n<ol>\n<li><strong>Memlog audit.</strong> Walk <code>.memlog.md</code> with the user; each entry captured in PRD, in addendum, or set aside.</li>\n<li><strong>Input reconciliation.</strong> Subagent per user-supplied input against <code>prd.md</code> + <code>addendum.md</code>. Each writes its extract to <code>{doc_workspace}/reconcile-{slug}.md</code> and returns ONLY a compact summary (input name, gaps 2-5, file path). Surface gaps — especially qualitative ideas (tone, voice, feel) the FR structure silently drops. Must happen before polish.</li>\n<li><strong>Reviewer pass.</strong> Run <code>## Reviewer Gate</code>. Resolve before polish.</li>\n<li><strong>Triage open items.</strong> All Open Questions, <code>[ASSUMPTION]</code> tags, <code>[NOTE FOR PM]</code> callouts. Phase-blockers (would make the PRD unsafe for UX/architecture/epics) surfaced one at a time and resolved; non-blockers deferred with owner + revisit condition logged via <code>memlog.py append</code>. If phase-blocker count is high, flag it.</li>\n<li><strong>Polish.</strong> Apply <code>{workflow.doc_standards}</code> to <code>prd.md</code> and <code>addendum.md</code> in declared order (structural passes before prose — prose should not polish soon-to-be-cut text). Parallelize across documents, sequential within.</li>\n<li><strong>External handoffs.</strong> Execute <code>{workflow.external_handoffs}</code>; surface returned URLs/IDs. Skip and flag unavailable tools.</li>\n<li><strong>Close.</strong> Set <code>prd.md</code> frontmatter <code>status: final</code> and <code>updated</code> to <code>{date}</code> so future invocations distinguish this PRD from in-progress drafts. Record finalization via <code>uv run {bmad-root}/scripts/memlog.py append --workspace {doc_workspace} --type event --text \"PRD finalized\"</code>. Share artifact paths.</li>\n<li>Run <code>{workflow.on_complete}</code> if non-empty.</li>\n</ol>\n","files":[{"path":"assets/headless-schemas.md","sizeBytes":2038,"isText":true},{"path":"assets/prd-template.md","sizeBytes":10034,"isText":true},{"path":"assets/prd-validation-checklist.md","sizeBytes":7432,"isText":true},{"path":"assets/validation-report-template.html","sizeBytes":10893,"isText":false},{"path":"customize.toml","sizeBytes":8111,"isText":true},{"path":"references/headless.md","sizeBytes":3305,"isText":true},{"path":"references/validate.md","sizeBytes":5503,"isText":true},{"path":"SKILL.md","sizeBytes":13635,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-24T05:38:05.969519Z","sha256":"8A149466392CEBB6053DE89A00DB114E9C950F6FA126E0CAE1A7D8DD4D628D93","sizeBytes":26731},"review":null,"source":{"repositoryUrl":"https://github.com/skyf0xx/hedgehog","path":"vendor-skills/BMAD/bmm-skills/plan/bmad-prd","license":"MIT","commit":"e7a38b860d3a2bfcf3414b81a823db0731889729","subtreeSha":"03E0317E1D2492721EDE821CF49AF0467B2FD374013EF0615E6A67AC28A987D5","lastSyncedAt":"2026-10-01T15:23:18.418472Z"},"reviewedAt":"2026-08-24T05:43:03.158886Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/skyf0xx/hedgehog/tree/master/vendor-skills/BMAD/bmm-skills/plan/bmad-prd"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install skyf0xx-hedgehog@llmmart"},{"target":"git","command":"git clone https://github.com/skyf0xx/hedgehog.git"}]}