implement
Skill2 starsChanged 45 days agoMITView on GitHub
Implements a reviewed, committed spec test first. Checks the spec, makes a git worktree and branch, hands the work items to an implementer subagent in its own headless session there, then has the sandboxed implement-verifier re-run every Done when, and leaves the evidence in the spec's record on the branch. Runs when the user types /implement.
- Commits and pushes
191 other projects use a version of this.
Adopted by
Most recently taken up by
- revisit-studies/studytheir own version, first seen Nov 9, 2026
- dz114879/skillstheir own version, first seen Nov 8, 2026
- Dimon94/dveritytheir own version, first seen Nov 8, 2026
- Dimon94/skillstheir own version, first seen Nov 8, 2026
- The-Vibe-Company/quivrtheir own version, first seen Nov 8, 2026
- miklschmidt/archboardtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use setup-ts-deep-modules, ask-matt and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
liufeng1976Skillsetup-ts-deep-modules
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.
Also in 43 projects that use this
GoogleSkillask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Also in 91 projects that use this
RoentekSkillloop-me
Grill me about specs for the workflows I want to build, within this workspace.
Also in 50 projects that use this
AWSSkillto-questionnaire
Turn a decision you can't fully answer into a questionnaire for someone else to fill in.
Also in 88 projects that use this
ryotaroh180105Skillclaude-handoff
Hand the current conversation off to a fresh background agent that picks up the work immediately.
Also in 42 projects that use this
GoogleSkillto-spec
Turn the current conversation into a spec and publish it to the project issue tracker — no interview, just synthesis of what you've already discussed.
Also in 168 projects that use this
- +3 more from google
Other versions191 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 191
- mattpocock/skills★ 309ksame name
- QuivrHQ/quivr★ 40ksame name
- The-Vibe-Company/quivr★ 40ksame name
- foambubble/foam★ 17ksame name
- formbricks/formbricks★ 13ksame name
- ArcReel/ArcReel★ 6.3ksame name
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- fallow-rs/fallow★ 5.3ksame name
- withcoral/coral★ 4.9ksame name
- bestofjs/bestofjs★ 3.1ksame name
181 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- cold-reviewSkill
- ideaSkill
- researchSkill
- specSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 2 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 171 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 34
Read files with the Read tool and find them with Glob.
- Distinctive: line 36
If a call this skill needs is refused anyway, stop and tell the user which call was refused and why.
- Very specific: line 77
Add Resume on its own line on resume, and Unattended if the user said no one will answer questions.
- Very specific: line 89
Any other: stop; run.err and run.json in the run dir say why.
- Very specific: line 97
Run ${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/run-verify.sh <scratch V1> with run_in_background: true, and end your turn.
- Distinctive: line 101
2, 3 or any other: stop and tell the user, as step 4 does.
- Very specific: line 103
CANNOT-RUN rows: If any, write a follow-up listing each (its Done when and the verifier's reason) to <run dir>/followup.md, and resume the …
“Common” is measured: kept by at least 6 in 10 of the 171 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Implement a reviewed spec
Request: $ARGUMENTS
You frame, relay and verify; you don't write the code. The work items are done by the implementer, a headless session of its own that has seen none of this conversation, working in a git worktree on its own branch. Its steps are in ${CLAUDE_PLUGIN_ROOT}/hooks/agents/implementer.md, and the verifier's in ${CLAUDE_PLUGIN_ROOT}/skills/implement/verifier.md: don't restate either in a brief. Never commit on the user's branch, push, or open a pull request.
Progress. Copy this checklist into your reply at the end of every turn that ends while a run is going, ticked to date, and once more in the final report. When a run returns, carry on from the first unticked line.
- [ ] Frame: names, new or resume
- [ ] Gate passed
- [ ] Worktree ready, first commit made
- [ ] Implementer launched; questions relayed; Implementer: done
- [ ] Verifier V1 (and V2 if needed); CANNOT-RUN rows run by the implementer
- [ ] Evidence committed; worktree clean
- [ ] ReportTool calls. allowed-tools pre-approves only the command shapes this file gives, so use them exactly:
- In every Bash call, write paths under the home directory with
~(~/code/…,~/.cache/…), not expanded. The exception is this plugin's own files:${CLAUDE_PLUGIN_ROOT}is already expanded to an absolute path where this file gives it, so write that path exactly as you see it. - Run one command per Bash call: a script directly, not through
python3orbash, by the full path this file gives, never through a shell variable or after acd, and never joined to another with;,&&,||or a pipe. Anything else isn't pre-approved, so it asks the user. - Read git through
${CLAUDE_PLUGIN_ROOT}/hooks/git-read.py -C <dir> …(rev-parse,log,show,branch --list,worktree list). The only git commands that change anything aregit -C <dir> -c core.fsmonitor=false -c core.hooksPath=/dev/null worktree add …,add,commitandrevert. Keep both-cflags on everygit -Ccommand,statusandrevertincluded, though no step gives arevert: they stop a file watcher (core.fsmonitor) or a hook planted in the repo's git config from running in this session, asgit-read.pydoes for reads. - Read files with the Read tool and find them with Glob; make them with Write or Edit, never
ls,cpor a redirect. - In
~/code, edit only the spec's status line and its record, and only in the worktree:allowed-toolspre-approves edits under a worktree'sdocs/specs/and nowhere else there, so a spec kept outsidedocs/specs/asks the user for each edit. - If a call this skill needs is refused anyway, stop and tell the user which call was refused and why. Don't work around it with another command.
1. Frame
<spec>: the path given; stop if there is none.<repo>:git-read.py -C <spec's dir> rev-parse --show-toplevel, which must be under~/code(else stop:/implementworks only on repos there).<repo dir>: its directory name.<basename>: the spec's filename without.md.<record>:<spec dir>/records/<basename>-record.md.<spikes>:<spec dir>/spikes/<basename>-results.md(it may not exist). Paths below are from the repo root unless they start with~.<safe repo>: what${CLAUDE_PLUGIN_ROOT}/hooks/run-name.py <repo dir>prints, and<safe basename>: what${CLAUDE_PLUGIN_ROOT}/hooks/run-name.py <basename>prints, each name in single quotes. A name that holds only letters, digits,.,_and-, starting with a letter or digit, comes back as it is; any other, such asDesign Notesorcafé, comes back as a safe name that git and the launchers accept, the same each time. Every name below is built from these two; the spec's, record's and spike results' own paths keep the real<basename>.<worktree>:<repo>/../<safe repo>-worktrees/<safe basename>, written with~.<branch>:implement/<safe basename>.<run name>:<safe repo>--<safe basename>.<run dir>:~/.cache/implement-runs/<run name>/implementer.<baseline>:~/.cache/implement-runs/<run name>/scratch/baseline.txt, in the one dir outside the worktree the implementer may write.<scratch V<n>>:~/.cache/implement-verify/<safe repo>/<safe basename>/V<n>.- New or resume.
git-read.py -C <repo> branch --list <branch>: empty means a new run; a branch means resume (step 3's Resume).
2. Gate
In order, from the repo's checkout, stopping at the first failure with what to do:
git -C <repo> -c core.fsmonitor=false -c core.hooksPath=/dev/null status --porcelain -- <spec> <record> <spikes>prints nothing, so all three are committed at HEAD. Else: "commit them, then run/implement <spec>again". Name any other uncommitted files in the checkout in one line and leave them alone: the worktree starts from HEAD.- The spec's frontmatter says
status: reviewed. ${CLAUDE_PLUGIN_ROOT}/skills/spec/scripts/check-spec.py <spec> --repo <repo>printsRESULT: PASS.${CLAUDE_PLUGIN_ROOT}/skills/spec/scripts/check-spec.py <spec> --repo <repo> --drift-at HEADprints noDRIFT:line. Else: "run/spec finish <spec>, which re-reads those ranges and moves read-at, then commit it". Keep any file its drift WARN names, for step 3.${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/run-implementer.sh --check <run dir>exits 0, with the<run dir>step 4 will launch with. It runs the launcher's refusals that don't need the worktree (the Claude Code version, the run dir's name,IMPLEMENT_MAX_USD,IMPLEMENT_CALL_MAX_USDandIMPLEMENT_INTERRUPT_WAIT, the spent cap, the macOS temp dir and the user's sandbox settings), writes nothing and launches nothing. Else: stop, and give the script's message as it printed it, so nothing is made or spent first.${CLAUDE_PLUGIN_ROOT}/skills/cold-review/scripts/review-state.py --plan <spec>, by thestate:it prints last. It counts only changes to the Decision, Design and Work items since the saved review (or its delta review), with citations' line numbers set aside, so a status change, a movedread-ator a re-cite doesn't count. Carry on forfull(no saved review, which check 3 allows),unchanged,doneanddelta(check 3 already stops a reviewed spec with unreviewed lines). Onunlogged, stop: "the spec's plan changed after its review and the change isn't logged: run/cold-review <spec>, which drafts theNot reviewed:lines for you to confirm". Onno-base, where git has no history to compare with, as in a shallow clone, stop: "the gate can't see the spec's history: rungit fetch --unshallow, then/implement <spec>again".
On resume, run the Gate in the worktree instead, where check 1 names only <spec> <spikes>: the implementer leaves lines in the record uncommitted (an evidence line for its next commit, the rest for step 6's), so a dirty record is expected there. The status must be in-progress and drift is checked with --drift-at <the Started at commit> (from the record's ## Evidence on the branch), so the branch's own commits never count as drift.
3. Worktree
- New:
git -C <repo> -c core.fsmonitor=false -c core.hooksPath=/dev/null worktree add <worktree> -b <branch>. Then, in the worktree only: set the spec'sstatus: in-progress, and add a## Evidencesection to the record, between## Spikesand## Implementationas${CLAUDE_PLUGIN_ROOT}/skills/spec/record-template.mdorders them (after the last section before them if those are missing), starting with- Started at <short HEAD it branched from>and, if step 2 kept any,- Drift WARN, no DRIFT line: <files>.git -C <worktree> -c core.fsmonitor=false -c core.hooksPath=/dev/null add <spec> <record>, thengit -C <worktree> -c core.fsmonitor=false -c core.hooksPath=/dev/null commit -m '<area>: <spec title> is in progress', the area as the repo's convention asks (itsCLAUDE.mdor recentgit log), following this session's attribution rules. - Resume: reuse
<worktree>, or, if the directory is gone,git -C <repo> -c core.fsmonitor=false -c core.hooksPath=/dev/null worktree add <worktree> <branch>(no-b). Run the Gate there (step 2).
4. The implementer
Brief. With Write, write
<run dir>/brief.md:Spec: <absolute path of the spec in the worktree> Record: <absolute path of the record in the worktree> Worktree: <absolute worktree path> Baseline: <absolute path of baseline.txt> Today's date: <YYYY-MM-DD>Add
Resumeon its own line on resume, andUnattendedif the user said no one will answer questions.- Launch
${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/run-implementer.sh <worktree> <run dir>withrun_in_background: true. Tell the user in one line that the implementer is running, and end your turn. When it returns, go by its exit code; for 0 and 3, read
<run dir>/reply.md:- 0, and the last line says:
Implementer: done: go to step 5.Implementer: question: <text>: put it to the user with AskUserQuestion, recommended answer first. Write the answer to<run dir>/followup.mdand run the same command with--resumeadded, in the background. Unattended, don't ask: stop and report the question.Implementer: stopped: <reason>: stop and report the reason; don't verify.
- 3: the reply doesn't end with an
Implementer:line. Send one follow-up asking it to reply again, in full, ending with that line. If that exits 3 too, stop and tell the user. - 2: the run never started, or its cap is spent. Stop and give the script's message.
- 4: the run changed the repo's shared git config or hooks, a worktree's git pointers or the ledger, or left a submodule config that names a program. Branch tracking the user's own git writes (
git push -u,git branch --set-upstream-to,-d,-m) and a worktree they add or remove in another checkout, in the shape git gives it, don't give 4. Stop at once: run no git command in the repo or the worktree,git-read.pyincluded, read nothing the run wrote, and tell the user each path the script's message names, so they can check it before anything runs git there. - 5: the run found no Claude account to use. Stop, send no follow-up (the session has no account to answer it), and give the user the script's account guidance as it printed it.
- 6: the call was interrupted (the task was stopped, or the session closed) and wrote no reply. Read nothing,
reply.mdincluded: stop, and tell the user the call was interrupted, what the script's message says it was charged, and that/implement <spec>carries on from the last committed work item. - Any other: stop;
run.errandrun.jsonin the run dir say why.
On any exit, keep each
run-implementer: moved during the run: <ref> <old> -> <new>line the script printed, for the report.- 0, and the last line says:
5. Verify
${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/prepare-verify.sh <scratch V1> <worktree> <Started at> <the branch's HEAD>.- With Read and Write, copy the worktree's spec to
<scratch V1>/spec.mdand its record to<scratch V1>/record.md, and write<scratch V1>/brief.md:Spec: spec.md, a copy of <spec, from the repo root>,Record: record.md, a copy of <record, from the repo root>,Work items: <every Wn under the spec's ## Work items>,Today's date: <YYYY-MM-DD>. The two paths let the verifier tell the spec's status edit and the record's evidence in the diffs, which it expects. List every work item, with a commit or not: the verifier fails one with no commit of its own, so a skipped work item can't pass unchecked. Nothing about how the work went: this brief comes from a session that didn't write the code. - Run
${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/run-verify.sh <scratch V1>withrun_in_background: true, and end your turn. When it returns, go by its exit code before you read anything:- 0: read
<scratch V1>/reply.md. - 4: the run left a link, or something else that isn't a plain file, where its output goes, which the Read tool would follow out of the scratch directory; or it changed an input the verifier reads (the spec, the record, a diff), so its verdict may rest on something you didn't write. Read none of its files,
run.jsonincluded, so its cost is unknown. Under the record's## Evidencein the worktree, add- Verifier V1 (<head commit>): refused: <the script's message>, use nothing from its reply, go on to step 6 (Evidence and report), and say in the report that the implementation wasn't verified. - 5: the run found no Claude account to use. Stop, and give the user the script's account guidance as it printed it.
- 2, 3 or any other: stop and tell the user, as step 4 does.
- 0: read
- Copy its reply, the table, the
Other commits:line and the closing lines, under the record's## Evidencein the worktree, headed- Verifier V1 (<head commit>):. - CANNOT-RUN rows. If any, write a follow-up listing each (its Done when and the verifier's reason) to
<run dir>/followup.md, and resume the implementer. It runs them in the worktree and addsimplementer-run:lines, apart from the table. Implementation holds: no. If a row failed or doesn't match the spec, or theOther commits:line names a weakened test, send the implementer a follow-up naming each, resume it, then verify once more in<scratch V2>, steps 1 to 5 again. For a work item with no commit, the follow-up says: "W<n>has no commit ending (W<n>). Do it now as your step 2 does, in a commit of its own, not as a fix after verification", since only a(W<n>)commit gives the next verifier that item's own diff. If the only cause is a work item whose every row is CANNOT-RUN, send no follow-up and run no V2: there is nothing to fix, and a second verifier couldn't run those checks either. There is no third round: if V2 also saysno, say so in the report.
6. Evidence and report
git -C <worktree> -c core.fsmonitor=false -c core.hooksPath=/dev/null add <record>, thengit -C <worktree> -c core.fsmonitor=false -c core.hooksPath=/dev/null commit -m '<area>: implementation evidence': the branch's last commit. The verifier ran on the commit before it, which changes only the record.git -C <worktree> -c core.fsmonitor=false -c core.hooksPath=/dev/null status --porcelainmust then print nothing; if it doesn't, name what's left.- Report, one short line each: each work item, its commit and Done when result, and, for one no verifier row passed, that only the implementer checked it (
implementer-run:) or no one did; the clean-up commits and any revert; the verifier'sVerifiedandImplementation holdslines, per round, or that a round was refused and why; any departure or question and its answer; eachmoved during the run:line, for the user to confirm they made that change themselves (their own commit or fetch) and not the implementer; the cost of every run, from${CLAUDE_PLUGIN_ROOT}/skills/implement/scripts/ledger.py report <run name>, whose lines you copy: each implementer call's cost and where it comes from, each verifier run's, the implementer total that counts against the cap, and the total of all runs of this spec, earlier ones included. Don't add up the ledger's lines yourself. Then: "run/spec done <absolute path of the spec in the worktree>here, in this session". Don't push, merge or remove the worktree.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

