---
name: create-harness-spec
description: Create a hedera-harness recipe — PRD, recipe file, validators, and optional stages — by grilling an idea into a runnable feature spec. Use when the user wants to turn a Hedera feature idea into harness inputs.
---
# Create Harness Spec
Grill a Hedera feature idea into a complete **recipe** for
[hedera-harness](https://github.com/hedera-dev/hedera-harness).
Load the shared vocabulary first: read
[`../harness-spec-anatomy/SKILL.md`](../harness-spec-anatomy/SKILL.md) and its
[GLOSSARY.md](../harness-spec-anatomy/GLOSSARY.md). Use those terms exactly.
Targets **hedera-harness schemaVersion 3**.
These skills are for authoring. Recipes do not list skills — product plugins
from `hedera-skills` are discovered per run and the generator picks. Keep the
run **blind**: the PRD carries journeys and outcomes; numbered assertions live
in the **evaluate checklist**.
Works in **Claude Code** (marketplace plugin) and Cursor / other agents that
load SKILL.md. Prefer `/grilling` when that skill is installed; otherwise use
the inline protocol — Claude Code typically takes the inline path.
## Step 1: Locate the target
A recipe lives at `.harness/` inside a scaffolded app. There is no other layout.
| Situation | What to do |
|-----------|------------|
| Cwd is a scaffolded app (Scaffold HBAR or `hedera-harness init`) | Author into its `.harness/` |
| Cwd is an app without `.harness/` | `hedera-harness init` adopts the harness in place |
| No app yet | `hedera-harness init
` (optionally `--template `) |
| Cwd already has `.harness/spec.yaml` | Check `schemaVersion`. If absent, `1`, or `2`, rewrite to v3 (or regenerate with `init` and reapply edits). `hedera-harness migrate` is gone. |
Never treat a v1/v2 recipe as loadable. `contract:` → `eval:`, drop `skills:`,
set `schemaVersion: 3`.
Paths in the **recipe file** are relative to the project root.
## Step 2: Grill
Follow [references/grilling.md](references/grilling.md). Prefer `/grilling` if
available; otherwise use the inline protocol there.
Do **not** write files until the user confirms shared understanding.
## Step 3: Emit the recipe
Prefer copying the shipped skeleton — it is always current:
```bash
cp -r "$(npm root -g)/hedera-harness/skeletons/project-harness/." .harness/
```
Then:
1. Write `.harness/prd.md` (or one file per **increment** under
`.harness/prds/`) from the grill. Product-facing only — keep the run **blind**.
2. Fill `.harness/spec.yaml`. Required: `schemaVersion: 3`, `name`,
`description`, and `baseline` with a command literally named `install`.
**Leave every default commented out.** A four-key recipe is complete.
Omit `agent:` unless the user wants Cursor (default is Claude).
3. Write `.harness/validators/static.json` and `.harness/validators/yarn.json`
against the feature deliverables. Do not assert on `template.json` —
create-scaffold-hbar removes it when scaffolding.
4. Do **not** add a `skills:` list. Mention relevant Hedera services in the PRD
so the generator can pick product skills.
5. Add SMOKE / EVALUATE / CHAIN only if the user opted in during the grill —
see `harness-spec-anatomy` → [references/stage-strategy.md](../harness-spec-anatomy/references/stage-strategy.md).
If `prd:` is a list and EVALUATE is on, write a matching `eval:` list.
6. Install the SMOKE host package if you just enabled it — at the **project
root**, not only inside a workspace. Doctor imports `playwright` from next
to `hedera-harness`, and Yarn `nmHoistingLimits: workspaces` hides
`packages/nextjs` installs.
- SMOKE → `yarn add -D playwright` (or npm/pnpm equivalent)
Skip the add if the root `package.json` already lists it. Do this as part
of emit, not as a follow-up after `doctor` fails.
CHAIN does **not** need a project install: `@hiero-ledger/sdk` ships with
`hedera-harness`. Only the operator env vars are host-provided.
Reconstruct bodies by hand only when the skeleton is unavailable:
`harness-spec-anatomy` → [references/spec-files.md](../harness-spec-anatomy/references/spec-files.md).
## Step 4: Completion criterion
Two checks, in order:
```bash
# 1. Does the recipe load? (authoritative — schema, defaults, baseline, network)
hedera-harness doctor .harness/spec.yaml --recipe-only
# 2. Is it coherent across files? (traceability, stage pairing, blind rule)
bash /harness-spec-anatomy/scripts/check-spec.sh
```
`check-spec.sh` runs `doctor` itself, so running it alone is enough when the
harness CLI is installed. If it reports that the schema was **not** validated,
that is a partial result — install or upgrade the harness and rerun.
**Done when `check-spec.sh` exits clean.**
Then hand off:
```bash
# Prefer /review-harness-spec next, then:
hedera-harness run .harness/spec.yaml --max-attempts 3
# or: yarn harness:run
```
Point at the harness README for install, agent auth, and stage host
prerequisites. `hedera-harness doctor` (without `--recipe-only`) checks those.
Do not expand CLI teaching beyond these next commands.
## Additional resources
- [references/grilling.md](references/grilling.md)
- Companion: `/review-harness-spec`
- Vocabulary: `/harness-spec-anatomy`
- Upstream: [docs/authoring-a-recipe.md](https://github.com/hedera-dev/hedera-harness/blob/dev/docs/authoring-a-recipe.md)