Product Requirement Document Authoring
Use this capability whenever you draft or review a product requirement document, feature spec, plan document, or issue description — the parts that describe what is needed and how completion is verified, not how it is built. It is general-purpose and self-contained: any requirement, spec, RFC, or plan benefits from it, regardless of the codebase, stack, or delivery workflow it feeds.
This skill owns one canonical document structure, in this order. Required sections appear in every document; conditional sections are included when their trigger applies and omitted only with a one-line stated reason, never dropped silently.
- Summary (required) — one standalone paragraph.
- Todo (required) — a static, actionable list of the deliverables or change surfaces.
- Background (required) — with an Assumptions subsection.
- Goals and Non-goals (required) — one section, standardly a flat list whose opening verbs distinguish intended outcomes from deliberate exclusions.
- Functional requirements (conditional) — with UI design (conditional) and System design (conditional, carrying Alternatives considered when a plausible competing approach exists) nested under it.
- Non-functional requirements (conditional).
- Acceptance criteria (required).
- Verification strategy (required).
- Open questions (required, may be "None").
This skill deliberately does not own everything a spec touches. It owns the document structure, problem framing, scope boundaries, requirement and criteria craft, and the spec-level framing of the UI design and System design sections — how to describe what a change must do and how it is verified. It does not own the implementation mechanics behind those descriptions:
- UI component structure, styling, and markup. The spec states hierarchy, states, accessibility, and responsive intent; how the interface is built stays with your project's own UI and component conventions.
- Data-flow implementation, routing, and a module's placement in the file tree. The spec states the system-design decision — including which module or service owns a piece of shared state — while how it is wired, and where it physically sits, stays with your project's own architecture and structure conventions.
- Test-writing mechanics (naming, structure, fixtures, locators). The spec names the coverage and verification steps that make it checkable; how the tests are written stays with your project's own testing conventions.
Keeping those mechanics out is what lets this document stay stable when the implementation approach changes, and keeps review focused on outcomes.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
Beneficiary Framing
See beneficiary-framing.md for:
- why naming an implementation detail subordinates a document to the work it is supposed to judge
- worked examples distinguishing a path or identifier that is itself an acceptance criterion from one that merely reflects today's implementation
- worked examples distinguishing an illustrative System design snippet from a naming violation
- why an observable outcome raises abstraction without lowering concreteness
Guidelines:
- MUST read beneficiary-framing.md before invoking the acceptance-criterion exception or the System design illustrative-snippet exception below, since neither boundary is self-evident from the rule statement alone.
What follows is the rule itself, not a further reading obligation: this skill's whole scope is drafting or reviewing a specification's sections, so the rule binds every one of them rather than some narrower situation, and stands here directly instead of behind a pointer an agent might not yet have opened.
A specification describes the change its beneficiary observes, not the file, function, line, component, internal algorithm, or other implementation vehicle that produces it — a module- or service-level ownership statement, the kind System design's own guidance calls for, is not such a vehicle. The beneficiary is whoever the change is for: the end user for an application feature, the developer for a development-environment improvement.
Guidelines:
- MUST describe every section of a specification as the change its beneficiary observes, naming who the beneficiary is for the change at hand.
- MUST NOT name a file name, line number, function name, component, internal algorithm, or other implementation vehicle in a specification.
- MUST treat two cases as exceptions to that prohibition, not violations of it: a path or identifier that is itself an acceptance criterion — a rule that must live in a particular file, an exported name that is part of the contract — and an illustrative code snippet or diagram in a System design section that shows the shape of a mechanism (a cache-key, a signature, a transition table) rather than pre-writing the implementation.
- MUST NOT invoke either exception for a path, identifier, or snippet that merely reflects where the beneficiary-observable outcome happens to be implemented today, rather than being the acceptance criterion or the illustration itself.
- MUST NOT invoke this rule to justify a vaguer requirement; a section that becomes less checkable after removing an implementation detail has removed the wrong thing, not achieved the rule's purpose.
Summary, Todo, and Background Framing
See problem-and-scope.md for:
- writing the standalone one-paragraph Summary
- listing the deliverables or change surfaces in a static Todo without duplicating requirements, acceptance criteria, or verification
- framing Background as concise bullets, with diagrams when they clarify the circumstances
- stating assumptions under Background and keeping them distinct from open questions
- combining goals and explicit non-goals in one flat, verb-led list
- writing the trailing Open questions section, including known risks with mitigation
- right-sizing the document to the size and reversibility of the change
- replacing vague quality adjectives with concrete, checkable statements
Functional Requirements Craft
See functional-requirements.md for:
- writing user-perspective requirements as "what should be", not "what to do"
- ordering guide-level explanation before reference-level detail
- covering the primary flow and the relevant empty, error, and edge states
- deciding when the section applies and how to omit it with a stated reason
UI Design Section Framing
See ui-design-framing.md for:
- when a spec needs a UI design section at all (view-affected changes only) and at what fidelity
- describing hierarchy and layout intent in spec terms, not implementation
- enumerating interaction states (default, disabled, loading, error, empty)
- stating accessibility intent as testable, WCAG-referencing criteria
- stating responsive behavior intent and copy/microcopy constraints
- using the section as a durable design record that links out to any wireframes or mockups produced
System Design Section Framing
See system-design-framing.md for:
- when a spec needs a System design section — boundary-crossing or hard-to-reverse changes, and intricate minor-scoped mechanics
- describing data flow and module boundaries at spec level, with diagrams and clarifying code snippets
- recording alternatives considered and why they were rejected
- stating non-functional requirements as measurable targets
Acceptance Criteria Craft
See acceptance-criteria.md for:
- writing criteria a reviewer can verify independently, without reading implementation code
- preferring concrete, checkable phrasing over adjectives
- covering the happy path, edge/error/empty states, and explicit non-effects
- phrasing an unaffected criterion as the property that must survive, not a mechanical proxy standing in for it
- right-sizing the checklist and tracing every criterion back to the rest of the spec
Verification Strategy Craft
See verification-strategy.md for:
- writing the ordered verification steps that show the work is done
- steps-to-reproduce for bug work, before and after the fix
- naming the verification gates your project's changed surface requires
- naming the test coverage to add or update
Plan Document Template
See template.md for:
- a self-contained, annotated Markdown skeleton of the full document structure
- what belongs in each slot, each conditional section's omit-rule, and the right-sizing note
1---2name: product-requirement-document-authoring3description: Writing, refining, or reviewing a PRD, feature spec, plan document, RFC, design doc, or issue description — the canonical tool-agnostic section structure such a document takes, and the craft behind each section. Includes the plan-writing or issue-drafting step of any delivery workflow. Triggers on "write a PRD", "draft a spec", "refine this issue", "structure this plan", "write acceptance criteria", "how do I verify this is done", "is this requirement testable". Not for writing the code, only the document that specifies it; UI markup, module placement, and test mechanics stay with the project's own conventions.4---56# Product Requirement Document Authoring78Use this capability whenever you draft or review a product requirement document, feature spec, plan document, or issue description — the parts that describe **what** is needed and **how completion is verified**, not how it is built. It is general-purpose and self-contained: any requirement, spec, RFC, or plan benefits from it, regardless of the codebase, stack, or delivery workflow it feeds.910This skill owns one canonical document structure, in this order. **Required** sections appear in every document; **conditional** sections are included when their trigger applies and omitted only with a one-line stated reason, never dropped silently.11121. **Summary** _(required)_ — one standalone paragraph.132. **Todo** _(required)_ — a static, actionable list of the deliverables or change surfaces.143. **Background** _(required)_ — with an **Assumptions** subsection.154. **Goals and Non-goals** _(required)_ — one section, standardly a flat list whose opening verbs distinguish intended outcomes from deliberate exclusions.165. **Functional requirements** _(conditional)_ — with **UI design** _(conditional)_ and **System design** _(conditional, carrying **Alternatives considered** when a plausible competing approach exists)_ nested under it.176. **Non-functional requirements** _(conditional)_.187. **Acceptance criteria** _(required)_.198. **Verification strategy** _(required)_.209. **Open questions** _(required, may be "None")_.2122This skill deliberately does not own everything a spec touches. It owns the document structure, problem framing, scope boundaries, requirement and criteria craft, and the spec-level framing of the UI design and System design sections — how to _describe_ what a change must do and how it is verified. It does not own the implementation mechanics behind those descriptions:2324- **UI component structure, styling, and markup.** The spec states hierarchy, states, accessibility, and responsive intent; how the interface is built stays with your project's own UI and component conventions.25- **Data-flow implementation, routing, and a module's placement in the file tree.** The spec states the system-design decision — including which module or service owns a piece of shared state — while how it is wired, and where it physically sits, stays with your project's own architecture and structure conventions.26- **Test-writing mechanics (naming, structure, fixtures, locators).** The spec _names_ the coverage and verification steps that make it checkable; how the tests are written stays with your project's own testing conventions.2728Keeping those mechanics out is what lets this document stay stable when the implementation approach changes, and keeps review focused on outcomes.2930The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119.html).3132## Beneficiary Framing3334See [beneficiary-framing.md](./references/beneficiary-framing.md) for:3536- why naming an implementation detail subordinates a document to the work it is supposed to judge37- worked examples distinguishing a path or identifier that is itself an acceptance criterion from one that merely reflects today's implementation38- worked examples distinguishing an illustrative System design snippet from a naming violation39- why an observable outcome raises abstraction without lowering concreteness4041**Guidelines:**4243- MUST read [beneficiary-framing.md](./references/beneficiary-framing.md) before invoking the acceptance-criterion exception or the System design illustrative-snippet exception below, since neither boundary is self-evident from the rule statement alone.4445What follows is the rule itself, not a further reading obligation: this skill's whole scope is drafting or reviewing a specification's sections, so the rule binds every one of them rather than some narrower situation, and stands here directly instead of behind a pointer an agent might not yet have opened.4647A specification describes the change its **beneficiary** observes, not the file, function, line, component, internal algorithm, or other implementation vehicle that produces it — a module- or service-level ownership statement, the kind System design's own guidance calls for, is not such a vehicle. The beneficiary is whoever the change is for: the end user for an application feature, the developer for a development-environment improvement.4849**Guidelines:**5051- MUST describe every section of a specification as the change its beneficiary observes, naming who the beneficiary is for the change at hand.52- MUST NOT name a file name, line number, function name, component, internal algorithm, or other implementation vehicle in a specification.53- MUST treat two cases as exceptions to that prohibition, not violations of it: a path or identifier that is itself an acceptance criterion — a rule that must live in a particular file, an exported name that is part of the contract — and an illustrative code snippet or diagram in a System design section that shows the shape of a mechanism (a cache-key, a signature, a transition table) rather than pre-writing the implementation.54- MUST NOT invoke either exception for a path, identifier, or snippet that merely reflects where the beneficiary-observable outcome happens to be implemented today, rather than being the acceptance criterion or the illustration itself.55- MUST NOT invoke this rule to justify a vaguer requirement; a section that becomes less checkable after removing an implementation detail has removed the wrong thing, not achieved the rule's purpose.5657## Summary, Todo, and Background Framing5859See [problem-and-scope.md](./references/problem-and-scope.md) for:6061- writing the standalone one-paragraph Summary62- listing the deliverables or change surfaces in a static Todo without duplicating requirements, acceptance criteria, or verification63- framing Background as concise bullets, with diagrams when they clarify the circumstances64- stating assumptions under Background and keeping them distinct from open questions65- combining goals and explicit non-goals in one flat, verb-led list66- writing the trailing Open questions section, including known risks with mitigation67- right-sizing the document to the size and reversibility of the change68- replacing vague quality adjectives with concrete, checkable statements6970## Functional Requirements Craft7172See [functional-requirements.md](./references/functional-requirements.md) for:7374- writing user-perspective requirements as "what should be", not "what to do"75- ordering guide-level explanation before reference-level detail76- covering the primary flow and the relevant empty, error, and edge states77- deciding when the section applies and how to omit it with a stated reason7879## UI Design Section Framing8081See [ui-design-framing.md](./references/ui-design-framing.md) for:8283- when a spec needs a UI design section at all (view-affected changes only) and at what fidelity84- describing hierarchy and layout intent in spec terms, not implementation85- enumerating interaction states (default, disabled, loading, error, empty)86- stating accessibility intent as testable, WCAG-referencing criteria87- stating responsive behavior intent and copy/microcopy constraints88- using the section as a durable design record that links out to any wireframes or mockups produced8990## System Design Section Framing9192See [system-design-framing.md](./references/system-design-framing.md) for:9394- when a spec needs a System design section — boundary-crossing or hard-to-reverse changes, and intricate minor-scoped mechanics95- describing data flow and module boundaries at spec level, with diagrams and clarifying code snippets96- recording alternatives considered and why they were rejected97- stating non-functional requirements as measurable targets9899## Acceptance Criteria Craft100101See [acceptance-criteria.md](./references/acceptance-criteria.md) for:102103- writing criteria a reviewer can verify independently, without reading implementation code104- preferring concrete, checkable phrasing over adjectives105- covering the happy path, edge/error/empty states, and explicit non-effects106- phrasing an unaffected criterion as the property that must survive, not a mechanical proxy standing in for it107- right-sizing the checklist and tracing every criterion back to the rest of the spec108109## Verification Strategy Craft110111See [verification-strategy.md](./references/verification-strategy.md) for:112113- writing the ordered verification steps that show the work is done114- steps-to-reproduce for bug work, before and after the fix115- naming the verification gates your project's changed surface requires116- naming the test coverage to add or update117118## Plan Document Template119120See [template.md](./references/template.md) for:121122- a self-contained, annotated Markdown skeleton of the full document structure123- what belongs in each slot, each conditional section's omit-rule, and the right-sizing note