implement-spec
Skill2 starsChanged 9 days agoMITView on GitHub
Implement the result of /to-spec and /to-tickets in code.
107 other projects use a version of this, 68 of them edited.
Adopted by
Most recently taken up by
- maxatwork/skillstheir own version, first seen Nov 8, 2026
- rodeyseijkens/skillsedited, first seen Nov 8, 2026
- ivanrvpereira/.agentsedited, first seen Nov 8, 2026
- 5thlayer/skillworksedited, first seen Nov 8, 2026
- dfirmin/compassedited, first seen Nov 8, 2026
- zhikedan/mattpocock-skills-dshedited, first seen Nov 8, 2026
Used with
Projects with it also use implement-spec-with-codex, close-spec 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.
dzhngSkillimplement-spec-with-codex
Run [implement-spec](../implement-spec/SKILL.md) with Codex doing the implementation passes while you orchestrate, integrate, and review. Use when the user asks to implement a spec with Codex, or to run implement-spec with Codex as the implementer.
Also in 4 projects that use this
dzhngSkillclose-spec
When a spec under specs/<feature>/ is done shipping (a write-spec build, or any planned task that produced a spec), archive it to specs/done/ and rewrite it from a build-plan into a durable rationale — the why, the principles, the invariants — pointing back to the real code for the how. Use when implementation has landed and the plan no longer matches what shipped, or the user says a feature/spec is finished. Pairs with [write-spec](../write-spec/SKILL.md) (the plan this closes) and [review](../review/SKILL.md) (run before closing).
Also in 4 projects that use this
wolverin0Skillaudit-decisions
Standardize remediation decisions, baseline-policy entries, and legal-review banners for accepted, deferred, or policy-blocked audit findings.
Also in 4 projects that use this
saffron-healthSkillget-pr-reviews
Get nicely formatted output of the last review comments on a PR. Used internally by other skills.
Also in 3 projects that use this
saffron-healthSkillpush-everything
Stage ALL changes in the repository (not just session changes), commit, and push. Use when you need to commit all pending changes.
Also in 3 projects that use this
transitive-bullshitSkillcompare-screenshots
Compare screenshots against the intended design, distinguishing approved references from historical baselines. Use for iterative implementation matching, before/after visual review, objective image telemetry, or checking a lone capture for flat, empty, or badly framed content.
Also in 4 projects that use this
- +5 more from dzhng
Other versions107 projects use a version of this.
Word for word · 0
None found.
Edited · 68
- mattpocock/skills★ 309k36% same
- formbricks/formbricks★ 13k37% same
- ArcReel/ArcReel★ 6.3k37% same
- withcoral/coral★ 4.9k37% same
- aws/graph-explorer★ 49037% same
- biersoeckli/QuickStack★ 36537% same
- itsmylife44/cliproxyapi-dashboard★ 28337% same
- tt-a1i/matt-skills-with-to-goal★ 19237% same
- willdady/platypus★ 13037% same
- Tresnanda/kybern★ 8341% same
58 more not listed
Wrote their own version · 39
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- dzhng/jevgrep★ 3.2ksame name
- dzhng/skills★ 1.5ksame name
- a16z/jolt★ 1.1ksame name
- cashew-labs/libretto★ 898same name
- saffron-health/libretto★ 883same name
- devcxl/mattpocock-skills-zh★ 522same name
- panaversity/ksor★ 225same name
- jellydn/my-ai-tools★ 127same name
- dzhng/yap★ 112same name
29 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 repository30 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- code-commentsSkill
- dev-stackSkill
- diagnosing-bugsSkill
- domain-modelingSkill
- prose-styleSkill
- prototypeSkill
- prSkill
- review-changesSkill
- setup-pre-commitSkill
- tddSkill
- ui-designSkill
- worktreesSkill
- check-sdlcSkill
- deslopSkill
- grill-with-docsSkill
- handoffSkill
- implementSkill
- improve-codebase-architectureSkill
- refresh-specSkill
- retroSkill
- setup-sdlcSkill
- to-specSkill
- to-ticketsSkill
- triageSkill
- update-designSkill
- codebase-designSkill
- grillingSkill
- run-reportSkill
- writing-for-agentsSkill
The file
We split this skill into the rules it gives an agent
3 rules. 1 is common, 1 is distinctive, and 1 is very specific to this project.
1
Common
Most of the 100 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
If your agent can't run subagents in separate git worktrees, stop here: tell the user this skill needs both, and suggest running implement …
- Common: line 20
Implementer subagents: should be run in the background where possible for maximum concurrency.
- Distinctive: line 53
After a stop, as step 6 says, skip steps 7 to 9 and close the run at steps 11 and 12.
“Common” is measured: kept by at least 6 in 10 of the 100 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
If your agent can't run subagents in separate git worktrees, stop here: tell the user this skill needs both, and suggest running implement on one ticket at a time instead.
You have been provided a spec. This spec should have tickets associated with it, describing how to implement the spec.
The issue tracker should have been provided to you. If not, tell the user to run /setup-sdlc.
The goal is the entire spec implemented as a Stack: one pull request per ticket, chained first to last, each pushed and opened as soon as its own gate passes. The user merges them; you never do.
The tickets are not a list of steps. They are a task graph with blocking relationships between them, and the spec's Implementation flow orders them into Groups. Tickets in a Group are built in parallel from the same base, then chained in ticket order.
Communication to and from subagents should be sparse. Communicate primarily through context pointers: to the spec, tickets, research notes, and previous commits. Don't duplicate information already available via pointers.
Implementer subagents should be run in the background where possible for maximum concurrency.
Steps
- Load the
worktreesskill and resolve the worktree for this work before writing anything. The Spec's Feature branch link leads to its Feature worktree, the root of the Stack. Hold its lock until the last step. The feature slug is the feature branch's Slug (worktree.sh slug <feature branch>); it prefixes every branch below, so two features' branches never share a Slug. - Read the spec, its Implementation flow and the tickets to understand the task graph. If commits have landed in their area since they were written, suggest running
refresh-specon the spec first. If the spec has no Implementation flow, tell the user to runto-ticketson it and stop. Each ticket'sStacks on:line names the branch its pull request targets. The first one targets the feature branch, or the default branch when the feature branch holds no grilling docs and so has no pull request of its own. - (optional) Use an exploration subagent to conduct any exploration required by the tickets - relevant codebase files or external documentation. Ensure the exploration subagent can save files - it should save its markdown notes in a directory outside the repo, accessible by all future subagents. This lets implementer subagents focus on implementation rather than exploration.
Once, before Group 1, push the feature branch, so
implementfinds it onorigin, and open pull request 0 when it holds grilling docs, meaning commits beyond the default branch. Load theprskill to open it against the default branch as its "Opening the PR" section says, as complete work, with the stack table and no closing line. With no such commits there is no pull request 0, and the first Ticket's pull request targets the default branch.Then work through the Groups in flow order. A Group's base is the feature branch for the first Group and the last ticket branch of the previous Group after that. Build the Group:
- Use implementer subagents to implement each of its tickets in parallel, each in its own Implementer worktree on branch
<feature-slug>-t<ticket>, based on the Group's base. Create it with theworktreesskill's Create rules (worktree.sh create <feature-slug>-t<ticket> <base>) and hand the subagent its path, or use your agent's own subagent worktree isolation when it places worktrees under the Main checkout's.claude/worktrees/. - Each implementer subagent takes its own lock on its worktree with its own description, as the
worktreesskill's Resolve step 4 says; confirms its worktree is on<feature-slug>-t<ticket>and based on the Group's base before starting, and runsgit checkout -B <feature-slug>-t<ticket> <base>if not (an isolation worktree starts on a branch named after its folder); loads thetddskill to build the ticket, and thecode-commentsskill for every comment it writes, plus theui-designskill when the ticket builds UI, following the spec's UI Design section; and commits and releases its lock before reporting done. - With a stack slot, after its full test suite passes, the implementer loads the
dev-stackskill to verify the ticket at its worktree's Dev URL, then runsscripts/dev-stack destroybefore reporting done, naming in its report the real-provider items the skill's Report step handed back; without one, it starts no stack, even where a loaded skill such asui-designasks for one, verifies through its tests and names the missing slot in its report.
When the repo has a Dev stack contract (an executable
scripts/dev-stack), hand out stack slots with the subagents. The free slots are the cap indocs/agents/dev-stack.md(default 4) minus the stacksportless listshows running, counted the way thedev-stackskill's Cap step counts them, minus one held back for the stack at the tip. Give one slot to each implementer whose ticket is reachable over HTTP or UI, while free slots remain, and take it back when that implementer reports done. The rest get none. Without a contract, implementers get no slots and no stack instructions.- Use implementer subagents to implement each of its tickets in parallel, each in its own Implementer worktree on branch
- Chain the Group once every implementer has reported done. In ticket order, a merger subagent merges each branch's predecessor into it: a Group's first ticket needs no merge, since its branch is built on the base, and every later ticket's predecessor is the ticket before it in the Group. The merger works in its own worktree on branch
<feature-slug>-m<ticket>, created from the ticket branch and locked the same way. It merges the predecessor there, resolves any conflicts (shared files such as changelogs and lockfiles included), runs the full suite and typechecking again, then fast-forwards the ticket branch to it (git -C <ticket worktree> merge --ff-only <feature-slug>-m<ticket>) and releases its lock. When the ticket's branch is already pushed, push the forward-merged branch with an ordinary push after the suite passes. Run mergers one at a time, so each branch contains the one before it when its merger starts. - Gate each pull request of the Group on its own diff against its predecessor's branch:
- Load the
review-changesskill and run it with the ticket as the spec. - Fix blocking findings in that ticket's branch, in an implementer subagent on branch
<feature-slug>-t<ticket>-fix<round>created from it, then fast-forward the ticket's own branch to the fix branch before merging forward through the later branches of the Group with the merger step, rerunning the suite and typechecking on each. Push with ordinary pushes only, never a force-push. Review again; repeat while the verdict is blocking and each round fixes something. - When the ticket's suite and typechecking are green, its last verdict is
passand no decision waits on the user, push its branch and load theprskill to open the pull request as its "Opening the PR" section says: as complete work, against the predecessor's branch, with the stack table, closing only this ticket. Do this as soon as its own gate passes, without waiting for the rest of the Group, but never before its base branch is onorigin: the pull requests of a Group open in ticket order, so a ticket whose gate passes early waits until its predecessor's pull request is open. When the predecessor fails its gate, the pull requests of the tickets after it do not open, and the stop rule below applies. Rerun CI when a forward merge changes a branch that is already pushed. After each pull request opens, run theprskill again on the ones already open, so theirpendingcells hold real links, and once more when the Stack is complete, including after the top pull request of step 9 opens. - A Group is done only when every pull request in it is open, green and reviewed. Then start the next Group at the Group build in step 4 (pull request 0 happens once, before Group 1). A Group that cannot finish clean after the retry rounds stops the run: later Groups do not start, open pull requests stay, nothing further is pushed, and the Run report names the stopping point and the failing check.
- Load the
- Once all Groups are done, review the Stack as a whole. Load the
review-changesskill and run it on the Stack's tip with the spec as the spec, one run for the whole Stack. Fix all issues it raises in a single implementer subagent on branch<feature-slug>-review, based on the tip, then review again; repeat while the verdict is blocking and each round fixes something. Earlier pull requests stay as reviewed: fixes never go back into them. - When the repo has a Dev stack contract, run e2e once, on the Stack's tip, never per pull request or per Group. Once the review fixes are merged, load the
dev-stackskill in the worktree of the tip's branch (<feature-slug>-reviewwhen step 7 committed fixes, otherwise the last ticket's), bring up its stack, and run the doc's e2e command in full withE2E_BASE_URL=<Dev URL>(or the skill's next strongest check when the repo has no e2e suite). Fix failures the way step 7 fixes review findings, then run it again. Leave that stack running, and keep the real-provider items the skill's Report step hands back for the Run report. - When steps 7 and 8 changed the code, gate
<feature-slug>-reviewlike every other pull request: suite and typechecking green,review-changesverdictpasson its diff against the tip's branch with the spec as the spec. Then push it and open it through theprskill as the extra top pull request, against the tip's branch, closing the spec as well as its own fixes. When<feature-slug>-reviewcannot pass its gate after the retry rounds, push nothing from it, stop, and report it in the Run report as the stopping point. When they changed nothing, there is no top pull request and the last ticket's pull request is the tip: run theprskill on it again to add the spec to its closing lines, so the spec still closes when the Stack is merged. When the issue tracker doesn't live on the code host (a local tracker), or theprskill's host check opened no PR, resolve each ticket and the spec the way the issue tracker closes work. - After a stop, as step 6 says, skip steps 7 to 9 and close the run at steps 11 and 12.
- Finish every implementer and merger worktree through the
worktreesskill's Finish rules: pushed branches finish withworktree.sh finish <path>, with--pr-openwhere the script cannot see the branch onorigin. A merger branch<feature-slug>-m<ticket>is never pushed: once its work is merged into the ticket branch, finish it with--merged-into <ticket branch>. A fix branch<feature-slug>-t<ticket>-fix<round>was fast-forwarded into its ticket branch and never pushed: finish it with--merged-into <ticket branch>. A<feature-slug>-reviewworktree whose branch holds no commits beyond the last ticket's branch, and so is not the tip, finishes with--merged-into <tip branch>. A ticket branch that was never pushed after a stop is kept, and the Run report names its path and branch. Leave the worktree holding the Stack's tip alone: its Dev stack stays running and the Run report names the worktree. In a repo with a contract, the script destroys each one's Dev stack before it removes the worktree. Note any worktree it leaves, and why, for the Run report. - Release this session's worktree lock, as the
worktreesskill's Release section says. Then load therun-reportskill and end with the Run report in its Stack form: the pull requests in merge order (pull request 0 first when the Stack has one), or "Stack stopped at Group<n>" after a stop. Its worktree is the one holding the Stack's tip, and when step 8 ran, it carries that stack'sdev-stacklines. Its "Before merging" section collects the real-provider items from every implementer and from step 8 once across Tickets, so a provider several Tickets touched gets one item.
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.

