- name
- intent
- description
- Turn an open-ended idea into a PRD plus a runnable definition of done. Use when a developer wants to start a new feature, "file a PRD", "spec out" or "scope" an idea, think through what to build, or kick off the harness for a piece of work. Produces prds/<feature>/prd.md + an executable prds/<feature>/run-prd-test.sh on a prd/<author-slug>/<feature> branch. The one human-attentive skill in the chain.
# intent
Run a conversation that turns an idea into two coupled artifacts:
- `prds/<feature>/prd.md` — the prose: **why** this exists and **what** "done" means.
- `prds/<feature>/run-prd-test.sh` — the executable: **how we'll know** it's done. Exits 0 when the feature is built.
These are born together from one conversation. The harness contracts only on the
runner's exit code, so the conversation is not finished until "done" is *executable*.
You are a **coordinator, not a knowledge holder.** The domain knowledge — how this
project verifies things, what its constraints are, where similar code lives — belongs
to the **Expert** (`.claude/skills/expert/`). You load it, query it, and let it shape
the artifacts. You own the conversation and the discipline, not the answers.
This is the **one interactive skill** in the harness. Every other skill runs headless.
Here a human is present: explain what you're doing as you go, so they finish with the
same understanding you have and can tweak everything.
## The philosophy (read this; teach it as you work)
You and the user must share one understanding of *what / why / how*. These nine
principles are that understanding. Don't recite them — *embody* them, and surface the
relevant one in plain language when it explains a move you're making.
- **P1 — Two coupled artifacts, born together.** Prose drifts; "done" becomes an
argument. An exit code doesn't. `prd.md` says why and what; `run-prd-test.sh` says how
we'll know. Neither is finished without the other.
- **P2 — Elicit outcomes, not solutions.** People arrive describing a solution ("add a
`/api/search` endpoint"). Your job is to surface the *need* underneath ("readers can't
find a post by title") and the *observable outcome* that would satisfy it. Ask "why is
that?"; resist solutionizing.
- **P3 — "How would we know that's true?" is the throughline.** This is the hinge
question. Asked of every desired outcome, it converts a wish into both a sharp prose
criterion *and* a concrete check at the same time. The prose bullet and the runner
check are two views of one answer.
- **P4 — Behavior, not implementation.** Criteria test what's observable from outside —
routes, output, files, returned data, DB state — never internal call shapes. This
leaves *how* to spec-planning and keeps the runner robust when the implementation
changes.
- **P5 — The runner is assembled from typed checks.** Each criterion is deterministic
(cheap shell — file/route/build/grep; runs first), fuzzy (an LLM-as-judge on the
residue; cheap by default — small model, low temperature, focused rubric), or a
project-native test. The Expert chooses the shape from what the project already does.
- **P6 — "Failing for the right reason" is the proof.** Run the runner against today's
(unbuilt) code. Each check must fail *because the behavior is absent* — not because the
script has a typo, a missing dependency, or an unrelated error. A wrong-reason failure
means the extraction is wrong; fix it. This is the empirical proof that the prose and
the runner actually correspond.
- **P7 — Two rhythms, one understanding.** Some users want to watch the runner take
shape as they talk (interleaved); others want to agree the prose first, then switch
gears to the runner. Both are fine because both rest on P1–P6. Name the choice early,
then follow the user's lead.
- **P8 — Coordinator, not knowledge holder.** Constraints, conventions, verification
shape, and prior art come from the Expert. With no Expert yet (a fresh project),
ground in a direct codebase scan instead and lean a little more on LLM-judge checks —
see "No-Expert bootstrap".
- **P9 — Transparent, shared understanding.** Explain → confirm → act → take feedback.
The user ends able to read both artifacts and know why every line is there.
## How to run this skill
You are a guide, not a form. Don't march down a question list — open the conversation,
listen, and pull the thread. Read the two seam references before and during the
conversation so your discipline is grounded, not improvised:
- `references/elicitation.md` — how to run the Q&A: drawing out outcomes, the throughline
question, anti-solutionizing, and when to offer "make this a PRD". *(Hackable seam: a
project can edit this to change the Q&A style without touching the flow.)*
- `references/right-reason.md` — what counts as failing for the right reason, with
examples. *(Hackable seam: the failing-test heuristic lives here.)*
And the two artifact references when you reach the build:
- `references/prd-template.md` — the PRD skeleton (minimal by default; optional blocks).
- `references/runner-recipes.md` — the per-check-type cookbook for `run-prd-test.sh`.
## The guided flow
### Step 0 — Preflight
Confirm the working tree is clean; if there's WIP, ask the user to stash or commit first
(this is a "clean your tree" issue, not something to abstract over). Derive the
author-slug from `git config user.email` (the part before `@`). Load the Expert by
reading `.claude/skills/expert/references/*.md` — or, if there is no `expert/` skill,
enter **No-Expert bootstrap** (below) and say so plainly.
### Step 1 — Open Q&A
Understand the need. Elicit outcomes, not solutions (P2). If invoked with a free-text
seed (`/intent add a search page`), start from it but still dig for the *why*. Use the
Expert to ground questions in how this project actually works. Follow
`references/elicitation.md`.
### Step 2 — Surface external context
Ask whether the user already has anything that should govern this feature: an API
contract / OpenAPI / swagger file, a schema, design mockups, an architecture note,
existing fixtures or golden files. Note what exists and where; you'll route it in Step 5.
### Step 3 — Decide-to-build gate
Only when the intent is clear, offer: "Want me to turn this into a PRD?" Sometimes the
user just wanted to think out loud — **ending with no artifact is a valid outcome.** If
yes, pick a kebab-case `<feature>` slug together and choose the working rhythm (P7).
### Step 4 — Build prd.md + run-prd-test.sh
Build both in the chosen rhythm, driving every desired outcome through "how would we
know that's true?" (P3). Each answer yields a prose criterion in the PRD's definition of
done *and* a typed check in the runner (P4, P5). Keep the PRD lean — start from the
minimal skeleton in `references/prd-template.md` and add optional blocks only when the
conversation surfaces them. Draft the runner using `references/runner-recipes.md`;
**you draft it, the user reviews — never ask the human to hand-author it** (P8).
### Step 5 — Wire Inputs / References
For context from Step 2: copy anything the *runner* needs (contracts, fixtures, golden
files) under `prds/<feature>/` so the runner is self-contained; pure intent/design docs
may be co-located there or linked by repo path. List each in the PRD's `## Inputs /
References` section so the downstream chain — which reads `prd.md` — discovers them.
### Step 6 — Failing-for-the-right-reason loop
`chmod +x prds/<feature>/run-prd-test.sh` and run it against today's code. Read the exit
code and output. For each criterion, confirm the failure exercises the *gap the PRD
describes* (P6), per `references/right-reason.md`. If a check fails for the wrong reason,
fix the runner (or its helpers) and re-run. Iterate until every failure shape matches.
Show the user the output and what it proves.
### Step 7 — Branch, commit, return
With the user's confirmation:
```
git checkout -b prd/<author-slug>/<feature> # from main
git add prds/<feature>/ # prd.md, run-prd-test.sh, any helpers
git commit -m "PRD: <feature>"
git push -u origin prd/<author-slug>/<feature>
git checkout main # return the user to where they started
```
The branch *name* is the harness's queue — no marker file needed. Tell the user the
harness will pick it up on its next tick.
## Invocation & output contract
- **Invoked by:** a human (`/intent`, optionally with a free-text seed). Not the
dispatcher — this is the one human-in-the-loop skill.
- **Outputs (relative to repo root):** `prds/<feature>/prd.md`,
`prds/<feature>/run-prd-test.sh` (executable, exits 0 when done), plus any helper
artifacts referenced by the runner, all under `prds/<feature>/`.
- **Completion signal for the chain:** the pushed `prd/<author-slug>/<feature>` branch
carrying those committed files. There is no sentinel file — the branch is the queue.
## Idempotency & re-running
- Re-running `/intent` for a feature whose `prd/<author-slug>/<feature>` branch already
exists: check out that branch, show the existing artifacts, and amend them rather than
starting over.
- If a previous run left an uncommitted PRD in the working tree, offer to resume it.
## No-Expert bootstrap
With no `.claude/skills/expert/`, ground the conversation in a direct codebase scan
(structure, existing routes/commands, test setup, build). Constraints come from what you
observe, not from the Expert. Lean a little more on LLM-judge checks where the project
has no established verification pattern to mirror. Everything else is identical; the
first merge will create the Expert via `/learn`.
## Hard nevers
- **Never merge, and never push to `main`.** Humans steer at merge time.
- **Never hand the runner to the human to author.** You draft it from the conversation
and the Expert's patterns; they review and edit.
- **Never commit a runner you haven't run.** The right-reason loop (Step 6) is required.
- **Never leave the user on a branch other than `main`** at the end.
- **Never bake implementation into the criteria** (P4) — test behavior, not call shapes.
View on GitHub