edd
Skill bundle for phil:edd command — Expectation-Driven Development front-door.
Skill by pmvanev
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.
About
Reviews
Write a reviewNo 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
- 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-wave-summary
pmvanev
Use when asked what finished work decided, rather than where it stands or what you were doing — "what did DISCUSS decide", "what did that stage settle"…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9 - 0.565score
red-team-prose
pmvanev
Skill bundle for phil:red-team-prose command — reviews a doc, README, or release note for AI-generated tells, Elements of Style clarity, and fitness for its…
SkillAFreshness: AClaude Code +9 - 0.565score
adversarial-review
pmvanev
Skill bundle for phil:adversarial-review command — a general-purpose independent adversarial critic.
SkillAFreshness: AClaude Code +9 - 0.561score
ai-eos
pmvanev
Skill bundle for phil:ai-eos command — detects the stylistic tells that mark technical prose as AI-generated, with a density verdict and ranked findings.
SkillAFreshness: AClaude Code +9 - 0.561score
redesign-tests
pmvanev
Skill bundle for phil:redesign-tests command — human-approved, behaviour-changing test redesign loop with a coverage-equivalence claim per rewrite
SkillAFreshness: AClaude Code +9 - 0.561score
refactor-loop
pmvanev
Skill bundle for phil:refactor-loop command — gated closed-loop refactoring with a separate proposer and correctness critic, hard test gates, and a DAG ledger
SkillAFreshness: AClaude Code +9
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
- Repository
- github.com/pmvanev/phil-claude-plugin
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from pmvanev
- 0.570score
issue-board
pmvanev
Use when driving a GitLab or GitHub issue tracker or board from the command line with `glab` or `gh` — moving a card between board columns, reordering a…
SkillAFreshness: AClaude Code +9 - 0.570score
board-snapshot
pmvanev
Use when asked where an issue board stands right now rather than what is wrong with it — "summarise my board", "what's on the board", "where does the board…
SkillAFreshness: AClaude Code +9 - 0.570score
board-setup
pmvanev
Use when recording a repo's issue-board constants in its `CLAUDE.md` — the forge and repo, the project and Status field ids, every option id, the enabled…
SkillAFreshness: AClaude Code +9 - 0.570score
nwave-slice-status
pmvanev
Use when the user asks where an nWave feature stands — "how many steps are in this slice", "which ones are done", "which one are we on", "what's next", "is…
SkillAFreshness: AClaude Code +9 - 0.566score
groom-issues
pmvanev
Skill bundle for the phil:groom-issues, phil:groom-fix, phil:groom-set and phil:groom-ask commands — reads a whole issue board in one list call per forge —…
SkillAFreshness: AClaude Code +9 - 0.566score
nwave-issue-board
pmvanev
Use for any GitLab or GitHub board or tracker work in an nWave repo — one holding `.nwave/` or `docs/feature/` — including putting a feature on the tracker as…
SkillAFreshness: AClaude Code +9
Cite this page
edd skill. Agent Mart. https://agentmart.dev/skills/pmvanev-edd (last updated 2026-10-24)