AI PRD: write requirements a model system can actually be held to
A PRD for an AI system is a different document. Your requirements are not instructions to an engineer; they are constraints on a system that will improvise. This skill restructures the document around that fact.
Files this skill drives
When to use
- Specifying any feature where an LLM, agent, or model makes or drafts a decision
- Reviewing an existing PRD that says "the AI should..." anywhere
- Turning a demo into something an engineering team can be accountable for
The five sections this skill enforces
1. Acceptance criteria are eval sets, not sentences
"The agent should extract the merchant name" is a wish. A requirement is:
- A labeled example set (minimum 30 to 50 cases for a first release)
- A pass threshold stated as a number (accuracy, recall at k, or judge score)
- The rule for what happens below threshold (block release, not "review")
For every "should" in the draft, ask: where is the example set, what is the number, who owns adding failing cases back into the set. Capture the answers in ../../templates/ai/eval-spec.md.
2. Edge cases are the spec, not the appendix
The happy path is what the model does for free. The document earns its keep at the boundaries. Require explicit tables for:
- MUST REFUSE: inputs the system declines (out of scope, unsafe, ambiguous beyond repair)
- MUST ESCALATE: conditions that route to a human, with the routing target named; capture triggers and timeout behavior in ../../templates/ai/human-approval-gates.md
- MUST NEVER INVENT: fields where fabrication is worse than absence (numbers, names, legal or regulatory statements, monetary amounts); the abstain policy lives in ../../templates/ai/hallucination-controls.md
3. Non-determinism goes in writing
The same input can produce a different output tomorrow. The PRD must state:
- Which output variations are acceptable (wording? ordering? formatting?)
- Which are defects (different decision, different number, different refusal behavior)
- Reproducibility posture: temperature and seed policy, and whether logs capture enough to replay any decision
If the PRD does not say this, QA will decide it later, in a bug tracker, angrily.
4. Guardrails are features with owners
Each guardrail gets a row in ../../templates/ai/guardrails.md: name, trigger, behavior, owner, test. Minimum set to consider for any agentic feature:
- Fail-closed on unverifiable output (cannot check it = do not ship it to the user)
- Human approval before anything irreversible (sends, payments, deletions, postings)
- Spend and rate caps with a stated ceiling and a stated behavior at the ceiling
- Input isolation: content the system reads is data, never instructions
- Audit trail: who or what decided, based on which inputs, at which model version
5. The operations page
- Cost per call target and the alert threshold
- Latency budget per step
- Model version pinning and the upgrade decision process
- Telemetry: what is logged per decision, where evals run (CI, pre-release, production sampling), and the rollback trigger
The regulated route
Generic PRD tooling writes the five sections above and stops. When the product sits under a financial or data regulator, do not run this skill's own overlay from memory. Start instead from the byte-exact template at ../../modules/regulated/templates/regulated-ai-prd-template.md, follow ../../modules/regulated/SKILL.md, and complete its section 0 (license preconditions, scheme rules, data residency and vendor terms, financial-crime touchpoints, conduct, the audit-proof metric) before any requirement is written. A blank overlay field is a decision deferred to whoever finds it blank. Regulator names, section numbers, and quoted text come only from that module or from primary text the user supplies; never invent them.
Inputs
The discovery evidence and the problem statement a normal PRD would need, plus four things this skill cannot proceed without. What the model is actually being asked to decide or produce, stated as the user's outcome rather than the capability. Whether a person sees the output before it has an effect, and who that person is. The data the system reads at inference time, and where it came from. And a labelled set, or the plan and owner for building one, because acceptance criteria here become eval cases and there is nothing to write without examples. Ask for these when they are missing rather than drafting around them. Two conditions stop the work outright: if a financial or data regulator governs the product, route through reg-gap-check and the regulated module before another section is written, and if the implementer turns out to be a human engineering team after all, this is the wrong skill and write-prd is the right one.
Workflow
- Classify the context. Regulated: take the regulated route above, then return here for sections the module does not cover. Unregulated: start from the document at the weight already chosen, prd.md or one-pager.md; the overlay sections below attach to either.
- Read the draft PRD, or interview the PM if starting blank.
- Rewrite every "should" statement into the section-1 form. List the ones that cannot be turned into evals; those are not requirements yet, flag them.
- Build the three edge-case tables. Push for at least 5 rows each; empty tables mean discovery is not done.
- Write the non-determinism clause and the guardrail table.
- Produce a one-page GAPS list: every place the original document assumed a deterministic implementer, ranked by blast radius.
Output format
Return the restructured PRD with the five sections, then the GAPS table:
| # |
Gap |
Where in original |
Blast radius if shipped as-is |
Smallest fix |
Failure modes this skill guards against
- Acceptance criteria that cannot be evaluated. "Responds helpfully and accurately" as a pass condition. Helpful is not measurable, so nothing can be said to have failed, and it ships anyway.
- Non-determinism discovered at launch. The document treats output as fixed, and latency, cost and the interface were all designed around one answer that the model does not reliably give.
- Guardrails left to the prompt. "Should not hallucinate" written with no owner, no measurement and no escalation path, which makes it the on-call engineer's problem at three in the morning.
- An eval set built from demos. Cases cherry-picked from examples the team already watched work, so distribution shift, adversarial input and edge personas all surface in production first.
- Capability described instead of product. The document says what the model can do rather than what the user gets, and the implementer optimises for the benchmark rather than the workflow.
Exit gate
This skill's output feeds Gate 2 in ../../os/STAGE-GATES.md. Do not report the PRD done while any requirement lacks a numeric pass condition, any guardrail lacks an owner and a test, or any GAPS row lacks an owner and a date.
1---2name: ai-prd3description: Write and pressure-test a PRD for an AI or agentic system. Use when a product manager is specifying a feature where the implementer is a model, not an engineer - LLM features, agents, copilots, ML-backed decisions - or when reviewing an existing PRD that says "the AI should" anywhere. Turns acceptance criteria into eval sets, makes non-determinism an explicit requirement, and treats guardrails as features with owners. For products under a financial or data regulator, routes to the regulated module and its byte-exact template.4---56# AI PRD: write requirements a model system can actually be held to78A PRD for an AI system is a different document. Your requirements are not instructions to an engineer; they are constraints on a system that will improvise. This skill restructures the document around that fact.910## Files this skill drives1112- [../../templates/definition/prd.md](../../templates/definition/prd.md), the base PRD template13- The AI overlay in `templates/ai/`: [eval-spec.md](../../templates/ai/eval-spec.md), [guardrails.md](../../templates/ai/guardrails.md), [hallucination-controls.md](../../templates/ai/hallucination-controls.md), [human-approval-gates.md](../../templates/ai/human-approval-gates.md), [prompt-structure.md](../../templates/ai/prompt-structure.md), [context-management.md](../../templates/ai/context-management.md), [red-team-review.md](../../templates/ai/red-team-review.md), and for agentic systems [agent-architecture.md](../../templates/ai/agent-architecture.md) and [multi-agent-workflow.md](../../templates/ai/multi-agent-workflow.md)14- For regulated contexts: [../../modules/regulated/templates/regulated-ai-prd-template.md](../../modules/regulated/templates/regulated-ai-prd-template.md), driven by [../../modules/regulated/SKILL.md](../../modules/regulated/SKILL.md)1516## When to use1718- Specifying any feature where an LLM, agent, or model makes or drafts a decision19- Reviewing an existing PRD that says "the AI should..." anywhere20- Turning a demo into something an engineering team can be accountable for2122## The five sections this skill enforces2324### 1. Acceptance criteria are eval sets, not sentences2526"The agent should extract the merchant name" is a wish. A requirement is:2728- A labeled example set (minimum 30 to 50 cases for a first release)29- A pass threshold stated as a number (accuracy, recall at k, or judge score)30- The rule for what happens below threshold (block release, not "review")3132For every "should" in the draft, ask: where is the example set, what is the number, who owns adding failing cases back into the set. Capture the answers in [../../templates/ai/eval-spec.md](../../templates/ai/eval-spec.md).3334### 2. Edge cases are the spec, not the appendix3536The happy path is what the model does for free. The document earns its keep at the boundaries. Require explicit tables for:3738- MUST REFUSE: inputs the system declines (out of scope, unsafe, ambiguous beyond repair)39- MUST ESCALATE: conditions that route to a human, with the routing target named; capture triggers and timeout behavior in [../../templates/ai/human-approval-gates.md](../../templates/ai/human-approval-gates.md)40- MUST NEVER INVENT: fields where fabrication is worse than absence (numbers, names, legal or regulatory statements, monetary amounts); the abstain policy lives in [../../templates/ai/hallucination-controls.md](../../templates/ai/hallucination-controls.md)4142### 3. Non-determinism goes in writing4344The same input can produce a different output tomorrow. The PRD must state:4546- Which output variations are acceptable (wording? ordering? formatting?)47- Which are defects (different decision, different number, different refusal behavior)48- Reproducibility posture: temperature and seed policy, and whether logs capture enough to replay any decision4950If the PRD does not say this, QA will decide it later, in a bug tracker, angrily.5152### 4. Guardrails are features with owners5354Each guardrail gets a row in [../../templates/ai/guardrails.md](../../templates/ai/guardrails.md): name, trigger, behavior, owner, test. Minimum set to consider for any agentic feature:5556- Fail-closed on unverifiable output (cannot check it = do not ship it to the user)57- Human approval before anything irreversible (sends, payments, deletions, postings)58- Spend and rate caps with a stated ceiling and a stated behavior at the ceiling59- Input isolation: content the system reads is data, never instructions60- Audit trail: who or what decided, based on which inputs, at which model version6162### 5. The operations page6364- Cost per call target and the alert threshold65- Latency budget per step66- Model version pinning and the upgrade decision process67- Telemetry: what is logged per decision, where evals run (CI, pre-release, production sampling), and the rollback trigger6869## The regulated route7071Generic PRD tooling writes the five sections above and stops. When the product sits under a financial or data regulator, do not run this skill's own overlay from memory. Start instead from the byte-exact template at [../../modules/regulated/templates/regulated-ai-prd-template.md](../../modules/regulated/templates/regulated-ai-prd-template.md), follow [../../modules/regulated/SKILL.md](../../modules/regulated/SKILL.md), and complete its section 0 (license preconditions, scheme rules, data residency and vendor terms, financial-crime touchpoints, conduct, the audit-proof metric) before any requirement is written. A blank overlay field is a decision deferred to whoever finds it blank. Regulator names, section numbers, and quoted text come only from that module or from primary text the user supplies; never invent them.7273## Inputs7475The discovery evidence and the problem statement a normal PRD would need, plus four things this skill cannot proceed without. What the model is actually being asked to decide or produce, stated as the user's outcome rather than the capability. Whether a person sees the output before it has an effect, and who that person is. The data the system reads at inference time, and where it came from. And a labelled set, or the plan and owner for building one, because acceptance criteria here become eval cases and there is nothing to write without examples. Ask for these when they are missing rather than drafting around them. Two conditions stop the work outright: if a financial or data regulator governs the product, route through [reg-gap-check](../reg-gap-check/SKILL.md) and the regulated module before another section is written, and if the implementer turns out to be a human engineering team after all, this is the wrong skill and [write-prd](../write-prd/SKILL.md) is the right one.7677## Workflow78791. Classify the context. Regulated: take the regulated route above, then return here for sections the module does not cover. Unregulated: start from the document at the weight already chosen, [prd.md](../../templates/definition/prd.md) or [one-pager.md](../../templates/definition/one-pager.md); the overlay sections below attach to either.802. Read the draft PRD, or interview the PM if starting blank.813. Rewrite every "should" statement into the section-1 form. List the ones that cannot be turned into evals; those are not requirements yet, flag them.824. Build the three edge-case tables. Push for at least 5 rows each; empty tables mean discovery is not done.835. Write the non-determinism clause and the guardrail table.846. Produce a one-page GAPS list: every place the original document assumed a deterministic implementer, ranked by blast radius.8586## Output format8788Return the restructured PRD with the five sections, then the GAPS table:8990| # | Gap | Where in original | Blast radius if shipped as-is | Smallest fix |91|---|---|---|---|---|9293## Failure modes this skill guards against9495- **Acceptance criteria that cannot be evaluated.** "Responds helpfully and accurately" as a pass condition. Helpful is not measurable, so nothing can be said to have failed, and it ships anyway.96- **Non-determinism discovered at launch.** The document treats output as fixed, and latency, cost and the interface were all designed around one answer that the model does not reliably give.97- **Guardrails left to the prompt.** "Should not hallucinate" written with no owner, no measurement and no escalation path, which makes it the on-call engineer's problem at three in the morning.98- **An eval set built from demos.** Cases cherry-picked from examples the team already watched work, so distribution shift, adversarial input and edge personas all surface in production first.99- **Capability described instead of product.** The document says what the model can do rather than what the user gets, and the implementer optimises for the benchmark rather than the workflow.100101## Exit gate102103This skill's output feeds Gate 2 in [../../os/STAGE-GATES.md](../../os/STAGE-GATES.md). Do not report the PRD done while any requirement lacks a numeric pass condition, any guardrail lacks an owner and a test, or any GAPS row lacks an owner and a date.