To prd
Synthesize the grilled intent + design substrate into a product-altitude prd.md — NO interview, just synthesis of what you already discussed. Reach for this the moment intent.md is pinned and the ADRs are written and you need the dual-audience product spec the whole pipeline reads. STAY at product altitude: reference ADRs by id, use CONTEXT.md terms verbatim, and NEVER paste a file path, signature, or schema into the PRD.From its SKILL.md
npx -y skills add celestialdust/achilles-skills --skill to-prdAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.9 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
Purpose
Stage: Spec (human-led). Every downstream stage reads prd.md: acceptance-criteria turns its user stories
into Given/When/Then, frontend-design builds against it, plan-breakdown decomposes its decisions into
slices, and pull-request anchors its summary back to it. So the PRD must be one document, two audiences — the
product reader (Problem · Solution · User Stories) and the dev reader (Implementation · Testing · Out of
Scope) — written at a single altitude: what and interface, never how and implementation.
It exists because the thinking is already done. By the time you reach here, interview-me/idea-refine
have pinned intent.md and spec-grilling has written the ADRs + CONTEXT.md. The PRD does not re-decide
anything; it synthesizes the decided into the shape the chain consumes. That is why it does not
interview — interviewing here means the upstream stages were skipped.
When to use / when to skip
Use when intent is grilled, the design substrate (ADRs/CONTEXT.md) exists, and you need the product
spec the rest of the pipeline reads. Typically the last authored artifact of Spec before acceptance-criteria.
Skip / don't when:
- intent is not yet pinned and the design is not yet grilled → run
interview-me/spec-grillingfirst. This skill synthesizes; it has nothing to synthesize from raw idea + no ADRs. - you feel the urge to ask the user a clarifying question → that is the signal an upstream stage was skipped, not a signal to interview here. Escape hatch: stop, name the missing input, send the user back to the upstream skill.
- the change is a pure refactor with no product-observable behavior → there is no PRD to write.
User-invoked: a human opens this during the human-led Spec stage. (No disable-model-invocation key —
the house format is two-key; this section carries the triggering nuance instead.)
Inputs
Refuse-to-run unless these are resolvable:
- REQUIRED —
docs/features/<slug>/intent.md(the WHAT, frominterview-me/idea-refine): sections Outcome · User · Why · Success · Constraints · Out-of-scope. If absent and no grilled intent exists in the conversation, STOP — there is nothing to synthesize and this skill does not interview. - REQUIRED substrate —
CONTEXT.md(repo-root glossary; its## Glossarysection): you will use its terms verbatim. - REQUIRED substrate —
docs/adr/ADR-<NNN>-*.md(fromspec-grilling): the mechanism rationale you will reference by id, never restate. (If the feature legitimately needed no ADRs, that is fine — but any product decision whose why is technical must point at an ADR that exists.)
If STATE.md / CONTEXT.md / docs/adr/ / docs/features/ do not exist, the repo was never set up →
run project-setup first.
Process
-
Read, don't re-derive. Read
intent.md, skim the relevantdocs/adr/*, and loadCONTEXT.md's## Glossarysection. Explore the repo only enough to ground the product framing (current behavior the user lives with). Do not open the codebase to harvest file paths or signatures — those never enter the PRD. -
Sketch the testing seams — at product altitude. Name the behavioral boundaries at which the feature will be proven (the public HTTP surface, a module's public interface, a CLI command's contract). Prefer existing seams to new ones; use the highest seam possible — the fewer seams, the better (ideal: one). Express them as interfaces/behaviors, never as file paths or function signatures. Check with the user that these seams match their expectations (Spec is human-led).
-
Write
prd.mdfrom the template below, save it todocs/features/<slug>/prd.md, and update STATE.md (see Outputs). Do not publish to any external issue tracker — the local STATE.md board is the tracker, and thegatecolumn carries the hand-off that mp'sready-for-agentlabel used to.
PRD template
Use exactly these six stable section headers (downstream consumers depend on the names), ## Further Notes optional at the end.
## Problem
The problem the user is facing, from the user's perspective. Use CONTEXT.md terms verbatim.
## Solution
The solution to the problem, from the user's perspective.
## User Stories
A LONG, numbered list of user stories, each in the format:
1. As an <actor>, I want a <feature>, so that <benefit>
Example:
1. As a mobile bank customer, I want to see the balance on my accounts, so that I can make better
informed decisions about my spending.
This list must be extensive and cover every aspect of the feature.
## Implementation Decisions
The product-altitude decisions that were made — the WHAT and the interface, not the HOW:
- Which modules/capabilities will be built or modified (by name, not path)
- The product-observable behavior of those modules
- Technical clarifications from the developer (at decision altitude)
- Schema *intent* and API *contract* described in prose
- Specific user-facing interactions
State product decisions plainly ("email is the reset channel"; "tokens expire in 1 hour"). For the
*reasoning* behind a decision, REFERENCE the ADR by id ("see ADR-007"), never restate it. If a decision
is encoded by a committed prototype, reference the prototype ("as committed in the frontend-design
prototype") — do not inline its code.
HARD BOUNDARY: this section — and the whole PRD — must NOT contain file paths, function/type
signatures, schemas-as-code, or driver/library internals. Those live in ADRs, the prototype, and later in
plan.md. The PRD is the narrow, stable interface; the design is the deep hidden body.
## Testing Decisions
- What makes a good test here: only test external/observable behavior, never implementation details.
- Which modules/behaviors will be tested (the seams from Process step 2).
- Prior art: similar kinds of tests already in the codebase (by description, not path).
## Out of Scope
What is explicitly NOT being built in this PRD.
## Further Notes (optional)
Anything else worth recording at product altitude.
Rationalizations
Stop signals disguised as good reasons:
- "Let me just ask the user one quick question." → No. If you need to ask, an upstream stage was skipped.
Synthesize from
intent.md+ ADRs, or send the user back upstream. This skill never interviews. - "Pasting the handler signature / the file path will help the dev." → No. That's structurally
illegal in
prd.md; it goes stale and turns the narrow interface into a shallow module. Reference the ADR/prototype instead. - "Let me re-explain why we chose email, the ADR is terse." → No. Restating ADR rationale duplicates a piece of knowledge that can diverge (DRY-of-knowledge). Link it: "see ADR-007".
- "CONTEXT.md calls it a 'reset token' but 'recovery code' reads nicer." → No. Use the glossary term verbatim; divergent vocabulary is how the chain drifts.
- "The user-story list is long enough." → mp's strength is an exhaustive list. Thin coverage here means
acceptance-criteriacannot enumerate scenarios. Keep going.
Red flags
Stop and fix before saving if any are true:
- The PRD contains a
/path segment, afunction/def/type signature, a code-fenced schema, or a library-internal name. → Strip it; reference the ADR/prototype. - A
see ADR-NNNpoints at a file that does not exist indocs/adr/. - You asked the user a clarifying question to write a decision (vs. to confirm a seam).
- A domain term in the PRD does not appear verbatim in
CONTEXT.md. - You wrote design rationale (the why behind a mechanism) into the PRD instead of linking the ADR.
Verification (ending criteria)
Done when ALL hold:
docs/features/<slug>/prd.mdexists with all six stable headers present, in order.- grep gate is clean:
grep -nE '(\b[a-zA-Z0-9_]+/[a-zA-Z0-9_]+|\.ts\b|\.py\b|\.tsx\b|function |def |=> |: [A-Z][a-zA-Z]+<)' docs/features/<slug>/prd.mdreturns nothing (no paths/signatures/types). - Every
ADR-<NNN>referenced resolves to a file indocs/adr/. - Every domain term used appears verbatim in
CONTEXT.md. - The User Stories list is extensive and every entry is in
As an <actor>, I want <feature>, so that <benefit>form. - No clarifying question was asked to make a decision (synthesis-only).
- The Spec gate stays
you— to-prd does not sign the PRD; the human signs it at the Spec gate. (spec-reviewre-runs the grep gate + ADR-link check before the human reviews.)
Outputs & handoff contract
- Emits:
docs/features/<slug>/prd.mdwith stable sections## Problem·## Solution·## User Stories·## Implementation Decisions·## Testing Decisions·## Out of Scope. Change a section's shape → update its consumer in the same commit (acceptance-criteria,plan-breakdown,pull-request). - Structural invariant:
prd.mdcontains no file paths, signatures, schemas-as-code, or driver/library internals; mechanism rationale is referenced by ADR id; CONTEXT.md terms used verbatim. ADRs + CONTEXT.md are referenced substrate, not chain links (no extra resume hop). - STATE.md update: add
prd.mdto the feature'sorigin:line; feature state staysspec; gate staysyou(the human owns the Spec sign-off). No slice rows yet (slices are born in Plan). - Downstream consumers:
acceptance-criteria(user stories → Given/When/Then, behavioral-only) ·frontend-design(UI features) ·plan-breakdown(Implementation + Testing Decisions → slices) ·pull-request(anchors the PR summary to prd + ADRs).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.