Skip to content
Agentmart
Submit a tool

edd

Skill bundle for phil:edd command — Expectation-Driven Development front-door.

Skill by pmvanev

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/pmvanev-edd

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Skill bundle for phil:edd command — Expectation-Driven Development front-door. Captures intent as expectations, classifies each, off-ramps to nwave/phil:work when the engine already proves them, and attaches a scaled executed-evidence gate to the qualitative residue, adjudicated by the human, with evidence produced by someone other than the builder.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/edd

What's inside

Skill name
edd
Description
Skill bundle for phil:edd command — Expectation-Driven Development front-door. Captures intent as expectations, classifies each, off-ramps to nwave/phil:work when the engine already proves them, and attaches a scaled executed-evidence gate to the qualitative residue, adjudicated by the human, with evidence produced by someone other than the builder.
License
MIT
Instructions
222 lines in SKILL.md · view on GitHub

Files (19)

  • SKILL.md
  • acceptance.feature
  • expected.md · self-test/01-offramp-all-checkable/
  • manifest.json · self-test/01-offramp-all-checkable/
  • expected.md · self-test/02-classify-bias-to-offramp/
  • manifest.json · self-test/02-classify-bias-to-offramp/
  • existing-wizard-transcript.txt · self-test/03-gate-evidence-exists/
  • expected.md · self-test/03-gate-evidence-exists/
  • manifest.json · self-test/03-gate-evidence-exists/
  • expected.md · self-test/04-gate-commission-new/
  • manifest.json · self-test/04-gate-commission-new/
  • expected.md · self-test/05-reject-narration/
  • manifest.json · self-test/05-reject-narration/
  • narrated-claim.txt · self-test/05-reject-narration/
  • expected.md · self-test/06-blocked-done/
  • manifest.json · self-test/06-blocked-done/
  • expected.md · self-test/07-living-docs-gate-ran-only/
  • manifest.json · self-test/07-living-docs-gate-ran-only/
  • README.md · self-test/

SKILL.md (first lines)

# EDD — Expectation-Driven Development

Run Andrea Laforgia's Expectation-Driven Development protocol over a developer's intent: write the
**expectations**, hand the build to the fitting engine, gather **executed evidence** that each one
holds, and put that evidence to the developer, who decides. The protocol's source:
<https://a4al6a.substack.com/p/expectation-driven-development-a>.

This is the **expectation-driven sibling to `phil:work`**, the general contractor for invisible work
(preserve behaviour and hit a checkable goal). Each step reads the standard it applies, where it
applies it.

> **The full flow.** CAPTURE (intent → expectations, checked for coverage, size and risk) → CLASSIFY
> (which kind of evidence) → OPT-OUT (trust the tests for the checkable ones this run?) → BUILD
> (delegate to one engine, inherit its oracle) → EVIDENCE (executed, producer ≠ builder, for every
> expectation not opted out) → REVIEW (an independent adversary, its findings judged) → ADJUDICATE
> (the developer accepts, rejects, challenges or stops) → STABILIZE (pin each accepted expectation;
> review the code) → FINDINGS (clear each blocking finding) → REPAIR (the advisories, by their owners)
> → DOCUMENT (every run that built).

---

## The two lines to hold

1. **A green suite the builder wrote is not proof.** Every expectation gets executed evidence by
   default, with two exceptions, each the developer's call and each recorded explicitly: they may
   trust the tests for a run's checkable expectations, and they may spot-check by hand an expectation
   no agent can run here, or one the agent has twice failed to run. Leave both calls to the developer.
2. **Someone other than the builder grades the work.** Evidence an agent returns must be **executed**
   (a real run or render captured verbatim, not a description) and produced by an agent that is
   **not** the builder; the **developer** adjudicates. A hand spot-check is the one description
   allowed: the developer's own observation, never an agent's.

---

## Every ask

Every question this skill puts to the developer — CAPTURE's confirmation, OPT-OUT, BUILD's
cannot-meet, EVIDENCE's spot-check, ADJUDICATE, FINDINGS, REPAIR's offer, and DOCUMENT's apply and
fitness asks — follows `${CLAUDE_PLUGIN_ROOT}/skills/shared/decision-request.md`.
Load it before the first ask. On top of that standard:

- **Every ask offers `stop`.** A stop before BUILD starts ends the run and writes nothing; a stop once
  BUILD has started writes the trail as it stands and reports the run not done.
- **Unanswered.** An ambiguous or empty reply is unanswered, and two consecutive unanswered asks end
  the run, reported not done. This overrides the standard's "treat it as a decline", which means
  nothing for most of these asks. OPT-OUT alone treats an ambiguous reply as a no.
- **Caps.** Every "second" cap in this skill — a second red oracle, narrated return, cannot-run, fix
  round, prose fix round, reject or challenge — means the second and every one after it.
- **Free text is the developer's.** Every free-text answer is recorded labelled `you wrote` — a
  reject's reason, a challenge's scenario, a waiver's or a drop's reason, a reworded expectation, a
  spot-check's observation. An answer that needs words — a challenge's scenario, a reject's or a
  waiver's reason — comes through the ask's "Other" field or one follow-up ask; an empty follow-up is
  unanswered.
- **The developer's words stay theirs.** Quote a `you wrote` line word for word in the context block;
  in the counted ask, describe it in plain terms, so a path or identifier in it never trips the ask's
  rules.

---

## Parse the argument

| Pattern | Action |
|---|---|
| `"<intent>"` | Run CAPTURE on the intent, then the flow below. |
| No argument | Ask for an intent. No-argument **resume** of an in-flight loop does not exist. |

Derive a kebab-case `<slug>` from the intent for the trail path `docs/edd/<slug>/`. Create it only when
DOCUMENT writes the trail, once BUILD has started.

---

## CAPTURE — intent → expectations

Restate the intent as a list of discrete **expectations**, each a single statement of something the
developer expects to be true when the work is done. Surface qualitative ones explicitly (tone,
clarity, ergonomics, "helpful", "feels X").

Before showing the list, check it the way the article asks:

- **Coverage.** Name each of these categories that no expectation covers, and suggest one for each
  gap:
  - the **happy path**;
  - **past edge cases** — the bugs this area has had before. Ask the developer, or search the
    history (`git log`, the issue tracker, tests that pin old bugs); never invent a past bug;
  - **non-functional requirements** the intent implies — performance, error handling, security, limits;
  - behaviour that **must not happen** — breaking existing behaviour, losing or leaking data, acting
    unasked. An expectation that existing behaviour stays unchanged covers this category.
- **Size.** One expectation is one behaviour the developer could explain to a colleague in a single
  breath. Propose splitting any that takes more than one breath — its parts will classify and route
  differently — and expanding any too thin to test.
- **Risk.** Order the list by risk, worst first, ranked by what a miss would cost: how many users it
  hits, and how hard it is to undo. Evidence and adjudication follow this order, so the developer's
  attention goes where a miss would cost most.

Label every line with its provenance:

- `you wrote` — the developer's words, kept exactly as written; never edit one to fit a standard;
- `composed` — a restatement, suggestion or split this skill wrote;
- `you edited` — a composed line the developer then changed; their edit stands as written.

When splitting a `you wrote` line, keep the original `you wrote` line in the record beside the
halves: the halves are `composed` and live, the original records what the developer said. Read
`${CLAUDE_PLUGIN_ROOT}/rules/writing.md` before composing, and write every composed line to it —
active voice, no needless words, one behaviour per line.

Ask the developer to confirm the list, with the list itself in the context block so the counted ask
stays under its ceiling. The developer may confirm, edit, accept or decline each suggestion, or stop.
Proceed only once the list is confirmed.

---

## CLASSIFY — which kind of evidence

Classification decides what each expectation's evidence must show.

- **checkable** — the target engine's native oracle can produce a pass/fail result at reasonable
  cost:
  - **nwave** (user-facing behaviour) → an acceptance test can assert it (deterministic observable
    output: stdout, response, exit code, state).

From pmvanev/phil-claude-plugin, MIT.

More from pmvanev/phil-claude-plugin

Signals

Stars
0
Forks
0
Open issues
10
Last commit (this folder)
Oct 13, 2026 (16 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from pmvanev

Cite this page

edd skill. Agent Mart. https://agentmart.dev/skills/pmvanev-edd (last updated 2026-10-24)