From prd-drafter
The PRD template and section structure used by the prd-drafter agent. Defines the canonical sections, when each one is required vs optional, and how to phrase open questions for AI-readable downstream consumption. Loaded by every drafter/updater/validator agent in this plugin.
How this skill is triggered — by the user, by Claude, or both
Slash command
/prd-drafter:prd-templateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The PRD (Product Requirements Document) is the source of truth for what we want to implement and why. Its job is to:
The PRD (Product Requirements Document) is the source of truth for what we want to implement and why. Its job is to:
A PRD is not a marketing document, a project plan, or a design spec. It is a contract between Product and Engineering about what is being built.
These appear in every PRD, regardless of feature type:
As an X, I want to Y, so that Z**Question:** ... / **Answer:** ... pairs, with TBC for unresolvedInclude these only when relevant. The drafter should make the judgement call based on the feature, not include them by default:
| Section | Include when |
|---|---|
| Success Metrics | The feature has a measurable outcome (adoption, conversion, error rate, time-to-X). Skip for one-off internal tools where success = "it works". |
| User Impact / Audience | The feature is user-facing and the audience is not the obvious default (e.g. "admins only", "tenant owners", "external API consumers"). |
| Feature Flag Strategy | The feature is user-visible AND has rollout risk (large user impact, irreversible data changes, multi-tenant blast radius). Skip for purely backend changes invisible to users, internal-only tools, or trivially reversible changes. |
| Dependencies | The feature relies on other features, services, tables, vendors, or external APIs not already in scope. |
| Data Model Changes | The feature requires new tables, new columns, schema migrations, or significant changes to existing data shapes. |
| Permissions & Access Control | The feature touches who can see or do what — especially relevant for multi-tenant or role-based products. |
| Migration / Backfill | Existing data needs to be migrated, backfilled, or transformed for the feature to work. |
| Telemetry & Observability | New metrics, logs, alarms, or dashboards are needed beyond standard request logging. |
| Stakeholders | More than two people need to weigh in (e.g. cross-team feature, customer-driven request, ops involvement). |
| Design References | A Figma file, prototype, or mock-up exists. Link to it; do not paste images into the PRD. |
| Risks & Mitigations | The feature has real-world risks beyond "it might have bugs" — e.g. data loss, customer escalation, compliance, regression in a sensitive area. |
If a conditional section does not apply, omit it entirely rather than writing "N/A". A PRD with eight tight sections beats one with fifteen padded sections.
Most conditional sections are self-explanatory from the trigger column. A few have specific formatting requirements:
When this section is included, it must open with the following note, verbatim, before any table or column names appear:
## Data Model Changes
> **Note:** Any table names, column names, types, or schema shapes referenced below are illustrative — used here so the PRD can describe the change concretely. They are **not prescriptive**. Engineering should name tables and columns following the project's existing data conventions and is free to deviate from anything in this document without it being treated as a scope change. If the *shape* of the data needs to change, that's a PRD update; if only the *names* change, that's an engineering decision.
Then describe the change in whatever form is clearest — bullet list, prose, or a sketch table. Examples:
- A new table to store delivered notification events, keyed by tenant + user + timestamp
- Columns to capture: who acknowledged, when, and the ack channel (email, in-app, SMS)
- A foreign key from this table back to the existing users table
or, if a sketch table is clearer:
| Table (illustrative) | Columns (illustrative) | Notes |
|---|---|---|
| `notification_events` | `id, tenant_id, user_id, raised_at, severity` | one row per event |
| `notification_acks` | `id, event_id, user_id, acked_at, channel` | new — captures acknowledgements |
The note must always be present when the section is included, even if the section is short. Engineers should be able to read the section and know the shape is locked but the names are theirs.
The Open Questions section is the single most important part of the PRD. It is where:
Every open question must be a **Question:** / **Answer:** pair. This format is optimised for AI readability — when this PRD is loaded as implementation context, the engineer (or coding agent) can parse it cleanly.
**Question:** When a user cancels mid-billing-cycle, do we pro-rate or end-of-period?
**Answer:** End-of-period. Stripe handles this automatically; pro-rating adds complexity for no customer-perceived benefit at this price point.
**Question:** What happens to in-flight uploads when a user deletes their account?
**Answer:** TBC
**Question:** Should admins be able to override the rate limit per-tenant?
**Answer:** TBC — pending decision from the platform lead, see Slack thread linked in header.
The drafter should actively look for open questions throughout the conversation. Good sources:
When the user answers an open question in the conversation, the drafter should:
**Answer:** line from TBC to the resolved answerDo not delete answered questions. They become the decision log.
Every PRD starts with this header, immediately after the title. Fields are populated based on prd-conventions (which reads .prdrc.json for the configured headerLinkFields and whether the repo uses projects):
# [Feature Name] PRD
**Status:** Draft | In Review | Approved | Shipped
**Author:** [Name]
**Date:** [YYYY-MM-DD]
**Version:** [Major.Minor]
If the repo's .prdrc.json defines projects, also add:
**Project:** [project slug from config]
Then add a row for each configured headerLinkFields value (default: Figma, Linear epic):
**Figma:** [link or N/A]
**Linear epic:** [link or N/A]
Status ladders cleanly along the configured statusLifecycle (default: Draft → In Review → Approved → Shipped). When status moves to Shipped, the file moves to the shipped folder (if statusFolders is set) — see prd-conventions.
> **PRD — Source of Truth for Implementation**
>
> The purpose of this document is to make it clear what feature we want to implement and to surface unknowns, challenge ideas, discuss approaches and assumptions so that we can use this as a source of truth for implementation.
# [Feature Name] PRD
**Status:** Draft
**Author:** [Name]
**Date:** [YYYY-MM-DD]
**Version:** 0.1
[Optional: **Project:** ...]
[Optional: header link fields per .prdrc.json]
## Problem Statement
[What problem, who experiences it, why now.]
## Goal
[What success looks like once shipped.]
## User Stories
1. As a [role], I want to [action], so that [outcome].
## Proposed Solution
[High-level description.]
[... conditional sections as relevant ...]
## Edge Cases
- [Case 1]
- [Case 2]
## Out of Scope
- [Thing 1]
- [Thing 2]
## Open Questions
**Question:** [...]
**Answer:** TBC
**Question:** [...]
**Answer:** [Resolved answer, with reasoning]
---
*PRD drafted using the `prd-drafter` plugin. Last updated [DATE].*
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub bradyhazell/brady-plugins --plugin prd-drafter