About implement
implement is a skill for carrying an approved PRD or clearly scoped task through implementation, fixing, and independent verification. It guides coding agents with a readiness check, a live checklist, and evidence-based completion.
Key features
- 01Readiness checks before editing
- 02Checklist-driven task tracking
- 03Implementation in dependency order
- 04Inline acceptance-criteria verification
- 05Independent final verification
Use cases
- 01Implementing an approved PRD
- 02Completing a clearly scoped code task
- 03Tracking evidence for acceptance criteria
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ yansfil/ vibe-engineering --skill implementAfter installing, type/implementin Claude Code to confirm it loaded.
Details
From the project READMEimplement
Use this skill to implement an approved PRD or a clearly scoped task end to end.
This is the execution counterpart to prd.
implement owns the loop that drives a task to done, including fixing. It does
not reimplement verification: it delegates judgment to verify as the gate of
its loop (see Final Verification). verify stays the single source of truth for
how to judge done, and can still be run standalone for an independent audit on
any diff.
Inputs
When the task came from prd, read the artifacts under .dev/<topic-slug>/:
prd.md- the contract: scope, non-goals, requirements, acceptance criteria, tasks, and the verification plan. The acceptance criteria are the rubric the verifier checks against.checklist.md- the task checklist. Adopt it as the live checklist instead of regenerating one.context-notes.md- project grounding. Read it to avoid re-exploring whatprdalready established.
If those artifacts do not exist (the user handed a scoped task, linked spec, or request directly), fall back to that single source document and build the checklist from it.
Readiness Check
Before editing code:
- Read the inputs above (the
.dev/<slug>/artifacts, or the single source document on the fallback path). - Identify scope, non-goals, requirements, acceptance criteria, and verification.
- Check
git status --short. - Read the actual files likely to be touched.
- Stop and ask if required pre-work, credentials, product decisions, destructive data changes, or structural approval are missing.
Live Checklist
Adopt checklist.md as the working checklist when it exists. Otherwise create
one from the source document.
Track:
- requirements
- acceptance criteria
- implementation tasks
- verification commands
- browser or runtime QA scenarios
- human checks
Do not mark a task complete until its acceptance criteria have evidence or a concrete blocker.
Seed A Structured Task List
When checklist.md exists and has 3 or more tasks, seed a structured task list
from it with TaskCreate instead of a flat TodoWrite. This keeps requirement
traceability, ordering, and evidence attached to each task through the loop.
For each T<n> task in checklist.md:
TaskCreateone task. Carry the checklist tags intometadata:metadata.req- the(req: ...)ids.metadata.ac- the(ac: ...)ids it is responsible for.metadata.checklistId- theT<n>id, soafter:can be resolved.
- After all tasks exist, wire ordering: for each
(after: T1)tag, setaddBlockedByon the dependent task pointing at the prerequisite's task id. - Leave acceptance criteria and human checks in the markdown checklist; the task list tracks the buildable work, the verifier judges the criteria.
Fall back to TodoWrite when there is no checklist.md, the task count is
small, or the work is a single straightforward change. Do not seed a structured
task list for trivial tasks - the ceremony is not worth it.
Implementation Loop
Work tasks in dependency order. When using the structured task list, pick the
next task whose blockedBy is empty (lowest checklistId first); never start a
task that is still blocked.
For each task:
- Mark it
in_progress(TaskUpdate) before editing, so progress is visible. - Re-read the relevant files.
- Make the smallest change that satisfies the mapped requirement (
metadata.req). - Avoid unrelated refactors.
- Preserve user-owned worktree changes.
- Run the smallest useful check after meaningful edits.
- Verify the mapped acceptance criteria (
metadata.ac) inline, at the level the criterion actually needs - do not defer all verification to the final pass:- Machine-checkable criteria (SQL query,
curl, build, unit test, generated output) -> run the check now and capture the real output. - Runtime/browser criteria -> exercise the flow now if you can (the same
playwright-clithe verifier would use); if a real prerequisite blocks it (e.g. an OAuth login you cannot automate), record it as a concrete blocker rather than assuming it passes.
- Machine-checkable criteria (SQL query,
- Record evidence as you go - store it on the task (
metadata.evidence: command run, file:line, observed result) so the final verifier can build on it instead of starting from zero. - Mark
completedonly when the mapped acceptance criteria (metadata.ac) have real evidence or a concrete blocker. Reading the code and assuming it works is not evidence. A partial or unproven change keeps the taskin_progress.
If a new task is needed, add it (TaskCreate) only when it maps to an approved
requirement or is pure verification/release hygiene; tag its metadata.req. Ask
before adding new product scope or materially changing the approved structure.
Final Verification
Finish the implementation first. Then, once, delegate the completion verdict to an independent verifier instead of judging it yourself.
The same context that wrote the change is the worst judge of it. So when the build is done, spawn a fresh verifier that did not write the code and let it judge against the acceptance criteria.
- Spawn one independent verifier subagent with the
Tasktool. Give it:- the acceptance criteria from
prd.md(or the task) as the rubric - every criterion, not a subset, - both the PRD's
Verification - AgentandVerification - Humansections as the available methods. The verifier has the same tooling you do, includingplaywright-cli, so a criterion filed underVerification - Humanis not automatically out of scope: if a browser/API/DB step can be driven without a human, the verifier runs it. - the changed scope (
git status --short/ the diff) and relevant files, - the evidence you collected while building.
Instruct it to follow the
verifyskill: judge each acceptance criterion with the right verification level and report in theverifyoutput format - an overall verdict plus a per-criterion result (checked / failed / not checked) with evidence. A criterion it can only confirm by reading code - never by running it - must be reported asBlocked(names the missing prerequisite, e.g. "needs an authenticated session"), not silently passed. The verifier is report-only - it does not modify code.
- the acceptance criteria from
- Read the verdict.
verifyreturnsPass | Partial | Fail | Blockedplus the per-criterion detail. APassis only valid if every criterion has real evidence; treat aPassthat leaves runtime/browser criteria unchecked asPartialand push the verifier to actually run them.- Pass (all criteria met with evidence) -> done.
- Partial or Fail -> fix the concrete gap (file, line, failing case) the verifier named, then run the verifier once more to confirm. Stop after that second pass; if it still fails, report the remaining gap rather than looping.
- Blocked -> stop and report the blocker that needs a human or a decision. Surface it as a remaining item; do not bury it under a Pass.
Do not claim completion on a verdict you produced yourself, on skipped verification, or on a weaker target than the criteria asked for. Report the concrete gap.
Final Report
## Status
Done | Partially Done | Blocked
## Changed
- ...
## Acceptance Criteria
- AC1: Met | Not Met | Blocked - evidence
## Verification
- Command or scenario:
- Result:
## Human Check
- ...
## Risks
- ...