Produce a Product Requirements Document (PRD) for a product feature. Use when the user asks to write a PRD, or to formalize a feature's scope, goals, user value and success metrics. Not for internal technical or architecture change proposals.
60
75%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./plugins/flowai-engineering/skills/write-prd/SKILL.mdCRITICAL: MUST save the final PRD to a file (e.g.,
documents/prd-<slug>.md). Do NOT only output in chat — always persist to disk. The file is written AFTER the round of clarifying questions in Section 2 step 2 has been answered, never in the reply that asks them.
When generating or refining a Product Requirements Document (PRD), follow these guidelines to ensure clarity, completeness, and alignment. This rule is designed to apply "Prompt Engineering" principles—clarity, constraints, and structure—to documentation.
This format binds on EVERY question you put to the user, in every turn: the first round of clarifying questions, a later round, and a single follow-up question — for example one that surfaces a conflict between two of the user's constraints. A question you ask because a project rule told you to stop and ask is still a question to the user and still follows this format.
1., 2., …), not a heading, a bold-only line, or a paragraph. A single question is still 1. …. Bold text after the number is fine (1. **Which statuses trigger a push?**); the number inside the bold (**1. Title**) is not a list item.**Essence:** line under it says what would be done, to what, and what the reader gets. A short reply option with no analysis of its own (Apply / Skip / Edit) has no Essence line, and its title says it alone. Inside an option, name things in words, never by a report's ids. Every line of the option — title, Essence, Pros, Cons, Risks, Best for — is read without the report, and ids slip in most often in Pros, Cons and Risks. Write what the thing is instead of its label: "the checkout errand on the shop site", not E4; "the search box ignoring the first keystroke", not N3. A label in parentheses after a general phrase — "the two most expensive errands (E4, E3)" — is still a bare label: name each item. A number taken from a report keeps what it measures in the same sentence: a percentage names the whole it is a share of ("page text takes about 40% of the cost", not "a 40% share"), and a sum says whose cost it is. Any phrase that stands for a group is a pointer: a count ("the four slow pages", "the same three errands"), a category ("the anomalies", "the issues found"), a rank or superlative ("the costliest runs"), "these", "as above", "the current round" — and so is a partial list, a count followed by a few examples or a "such as". Replace it with every member of the group, named in words, in that option — even when the list is long, even when the report above already lists them; if the whole set does not fit, drop the group from the option. Test: with the report deleted, could the reader name every member from this option alone? A word coined in this session gets a short explanation in the option. An explanation elsewhere in the reply does not count — not in the report above the question, not in another option. Before sending, read each option alone, line by line, and list every label (letters plus digits such as E4 or N3), number, group phrase (a count, a category, a superlative, "the same", "these") and coined term in it; replace each with words or remove it.AskUserQuestion and the like) already offers a free-text answer of its own, so such an option adds a line and no choice. An option that names a concrete alternative is a real option, even when its title starts with "Other".agent's choice — on a multi-select where the user delegates with agent's choice (or its language equivalent), pick the subset yourself, justify the pick in one line, and proceed without re-asking for confirmation.**Essence:** line, then **Pros:**, **Cons:**, **Risks:** and **Best for:**, each on its own labelled line.When asked to write a PRD:
(proposed, awaiting approval). Follow the Question Format section above
(FR-UNIVERSAL.QA-FORMAT).
Recommended: <value>, because <reason> —
so the user can accept it in one word. A value with no reason gives the
user nothing to judge it by. The user still decides the number; you only
make the decision cheap.(proposed, awaiting approval), and Open Questions
lists it for approval with that value. A number you notice only while
drafting is handled the same way: your recommended value, marked as a
proposal, listed in Open Questions — never a blank, a "TBD", or a question
without a value.documents/prd-<slug>.md
or a path specified by the user). Do NOT only output the PRD in chat — always
save it to disk using the file write tool (Write, write_to_file, etc.).Target Audience: [Persona Name] - [Short Description]
| ID | User Story | Acceptance Criteria | Priority |
|---|---|---|---|
| US-1 | As a [User], I want to [Action] so that [Benefit] | 1. Criterion A 2. Criterion B | P0 |
Out of Scope:
(proposed, awaiting approval) target, with its proposed value.Ambiguity vs. Specificity
Implementation vs. Intent
Error Handling
Use Mermaid diagrams where possible to illustrate flows:
graph TD
A[User Starts] --> B{Logged In?}
B -- Yes --> C[Dashboard]
B -- No --> D[Login Page]korchasa/flowai-plugins
240d92b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.