close-out
Skill2 starsChanged 7 days agoMITView on GitHub
Close out the scope chain on a shipped slug: reconcile the canonical spec with what shipped, archive the spent plan and blueprint, and record one ship line. The terminus after /execute meets done-criteria. Use on /close-out <slug> or when the user asks to reconcile or wrap up a shipped slug. Mode A — never auto-fires; all writes behind propose-confirm.
3 other projects use a version of this.
Adopted by
Most recently taken up by
- life-itself/skillstheir own version, first seen Nov 1, 2026
- shady2k/skillstheir own version, first seen Oct 11, 2026
- fabian-von-tiedemann/research-harness-templatetheir own version, first seen Sep 16, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- shady2k/skills★ 6same name
- life-itself/skills★ 2same name
- fabian-von-tiedemann/research-harness-template★ 1same name
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 repository47 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- autonomizeSkill
- blueprintSkill
- brainstormSkill
- captureSkill
- checkpointSkill
- coordinateSkill
- cycleSkill
- deliverSkill
- design-proposalSkill
- discoverSkill
- dispatchSkill
- draft-planSkill
- envisionSkill
- executeSkill
- extract-conventionsSkill
- glossarySkill
- humanizeSkill
- human-viewSkill
- improve-promptSkill
- memory-auditSkill
- new-agentSkill
- new-agents-mdSkill
- new-hookSkill
- new-mcpSkill
- orchestrateSkill
- pr-authorSkill
- prepSkill
- pre-pushSkill
- pr-triageSkill
- recapSkill
- retrospect-coreSkill
- reviewSkill
- rulesSkill
- shortcutsSkill
- specSkill
- systematic-debuggingSkill
- test-driven-developmentSkill
- update-changelogSkill
- update-codemapSkill
- using-git-worktreesSkill
- visualise-codemapSkill
- visualSkill
- work-stateSkill
- wrapSkill
- write-testsSkill
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 3 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
- Distinctive: line 31
Done-criteria met ≠ merged: If the work is verified locally but not yet merged/released, say so and let the user decide whether to close …
- Very specific: line 33
If the slug has no spec (a --task-mode build with no .claude/specs/<slug>/), there is nothing to reconcile *into* — skip reconcile, run …
- Very specific: line 57
Write a new spec version v<M+1>.md, status: active, supersedes: v<M>.md, whose body says *how the system behaves now* — intent reconciled …
- Very specific: line 59
Update .claude/specs/INDEX.md (regenerated from frontmatter, per the spec contract).
- Very specific: line 68
Name where it lives: If the reconciled body names no code paths, add a ## Where it lives list: the shipped files, taken from the plan …
- Very specific: line 98
If update-changelog is unavailable, fall back to a single manual note in BACKLOG.md "Recently shipped" (or the pointer there) + the …
- Distinctive: line 111
Do not commit (the user's call).
“Common” is measured: kept by at least 6 in 10 of the 3 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
close-out
The scope chain's terminus. The forward chain (envision → spec → draft-plan → blueprint → execute) authors versioned artefacts up to running the plan; it has no close. /close-out <slug> is that close — it runs after /execute confirms done-criteria met and does three things, in order:
- Reconcile — make the slug's canonical spec say how it behaves now, not what we planned, preserving the original intent via the version chain.
- Retire — move the spent working artefacts (plan, blueprint, superseded spec versions) to a dated archive folder. The reconciled spec stays live; the working set becomes audit history.
- Record — emit one ship line to the canonical
CHANGELOG.md(viaupdate-changelog), not a hand-copy into three ledgers.
It collapses the "what's true now / what shipped" scatter across spec / ledgers / git into one reconcile-and-record act — leverage, not ceremony.
Where it sits. The spec's done-criteria open the boundary ("what done means"); /close-out closes it ("done, here's the now-current spec, the working artefacts are retired"). /checkpoint --scope corpus detects intent-vs-shipped drift after the fact; /close-out acts to close that drift at ship time — they compose: checkpoint catches what drifted post-ship or what close-out missed.
When to run
- User types
/close-out <slug>(explicit trigger; slug required). - User says "close out
<slug>", "reconcile what shipped for<slug>", "wrap up the<slug>work", "retire the<slug>plan now it's shipped". - The execute-side invitation:
/executeoffers/close-outwhen a plan completes with all done-criteria met (execute is the doorway; the user invokes; this skill does the work). The offer is never an auto-run. - Otherwise never auto-fires. Mode A. It moves files and edits the canonical spec — both reversible-with-effort but not cheap to undo — so every write passes a propose-confirm gate (§ below). No hook, no session-end trigger.
Precondition — the change is actually shipped
Close-out reconciles shipped reality into the spec. Before doing anything, confirm the slug's work is genuinely done, not merely plan-complete:
- A plan exists at
.claude/plans/<slug>/whose status isactive(or the work plainly shipped under this slug). - The done-criteria are met — check the spec's
done_criteriaagainst the working tree / the user's confirmation. If/executejust reported done-criteria met, that is the signal; otherwise ask: "Confirm<slug>shipped and its done-criteria are met? Close-out reconciles shipped reality into the spec — a premature close-out enshrines an unfinished change. (y/N)" - Done-criteria met ≠ merged. If the work is verified locally but not yet merged/released, say so and let the user decide whether to close out now or after merge. Default: close out on the user's confirmation, not on a guess.
If the slug has no spec (a --task-mode build with no .claude/specs/<slug>/), there is nothing to reconcile into — skip reconcile, run retire + record only, and tell the user reconcile was skipped (no spec).
Procedure
1. Resolve the slug and its artefacts
Locate, under $CLAUDE_PROJECT_DIR/.claude/ (cwd fallback if the env var is unset):
- Spec:
.claude/specs/<slug>/— read INDEX.md for the active version (v<M>.md). This is the reconcile target. - Plan:
.claude/plans/<slug>/— active + superseded versions. Retire target. - Blueprint / design doc:
.claude/docs/<slug>/— active + superseded versions (the blueprint tree, per/blueprint). Retire target. - Superseded spec versions: any
v<K>.mdin the spec folder withstatus: superseded. Retire target (the active reconciled spec stays).
State the resolved set before proposing anything: "Found for <slug>: spec v<M> (active), plan v<N>, blueprint v<P>, 2 superseded spec versions." If the slug resolves to nothing, stop: "No <slug> artefacts under .claude/. Nothing to close out."
2. Reconcile — make the spec current (propose-confirm)
The spec is intent at spec-time (done-criteria frozen). The shipped change routinely diverges from what was specced. Reconcile closes that gap without losing the intent record.
- Diff spec-vs-shipped. Reuse the intent-vs-shipped lens from
retrospect-core(the engine the corpus checkpoint shares): read the active spec's intent + done-criteria, read what actually shipped (the working tree for the slug's surface, the plan's outcomes), and surface the divergences — behavior that shipped differently than specced, criteria met by a different mechanism, scope that grew or shrank, decisions made during the build the spec never anticipated. - If there is no material divergence (shipped == intent): say so and skip the spec write — there is nothing to reconcile. Note it ("Spec v
<M>already matches shipped reality — no reconcile needed.") and go to retire. - If there is divergence: reconcile via the spec evolve mechanism (do not hand-roll a parallel write — invoke
spec's evolve flow, or follow its versioning contract exactly):- Write a new spec version
v<M+1>.md,status: active,supersedes: v<M>.md, whose body says how the system behaves now — intent reconciled with shipped reality. The frontmatterdescriptionnotes this is the as-shipped reconciliation. - Mark
v<M>.mdstatus: superseded,superseded_by: v<M+1>.md. The intent version stays readable — this is load-bearing: reconcile appends a new version, it does not overwrite the intent spec. The supersedes chain preserves "what we meant to build" (v<M>) beside "what we shipped" (v<M+1>), which is exactly the record/checkpoint's intent-vs-shipped audit needs. A completion event added on top of versioning, versioning untouched. - Update
.claude/specs/INDEX.md(regenerated from frontmatter, per the spec contract).
- Write a new spec version
Propose before writing. Show the user the proposed reconciled-spec body (or, for a large spec, the section-level diff: which sections change and how) + which version it becomes, then ask accept / edit / reject:
- accept → write
v<M+1>.md, supersedev<M>.md, update INDEX. - edit → the user revises in prose; re-propose; loop.
- reject → write no spec; tell the user reconcile was declined, and ask whether to still retire + record (the retire/record halves are independent of the reconcile write).
Nothing is written to the spec tree until accept. This is the same propose-confirm-commit gate
spec/draft-plan/captureuse.- accept → write
- Name where it lives. If the reconciled body names no code paths, add a
## Where it liveslist: the shipped files, taken from the plan steps' Files lines. A later drift check reads these instead of searching. Part of the same proposal, not a second gate.
3. Retire — move spent artefacts to a dated archive folder (preview, then move)
The reconciled spec stays live. Everything the change consumed becomes audit history.
- Archive destination:
.claude/archive/<YYYY-MM-DD>-<slug>/(one folder per closed-out change, not per artefact). Resolve today's date. - What moves (the spent working set — not the reconciled active spec):
- The active plan version + its superseded predecessors →
archive/<date>-<slug>/plans/. - The active blueprint version + predecessors →
archive/<date>-<slug>/docs/. - Superseded spec versions (
v<K>.md,status: superseded, including the just-superseded intentv<M>.md) →archive/<date>-<slug>/specs/. The active reconciledv<M+1>.mdstays in.claude/specs/<slug>/. - The archive's
README.mdis not written here — it cites the changelog line, which § 4 composes. See § 4's last step.
- The active plan version + its superseded predecessors →
- Preview, then move. List every source→dest move and ask accept / skip-retire / cancel:
- accept → perform the moves (mechanical — this is scripted, not narrated; use
git mvwhen the artefacts are tracked so history follows, plain move otherwise). - skip-retire → leave artefacts in place (e.g. the user wants to keep the plan hot a while longer); proceed to record.
- cancel → stop; nothing moved.
- accept → perform the moves (mechanical — this is scripted, not narrated; use
- Update the moved trees' INDEX. After a move, the source INDEX (
plans/INDEX.md,docs/INDEX.md) no longer has rows for the closed-out slug — regenerate it from the remaining on-disk frontmatter (drop the archived rows). The specs INDEX keeps the slug (it now points at the reconciled active version). Do not create an INDEX inside the archive folder — the README is the archive's index.
Retire is mechanical and reversible by a counter-move — but it edits on-disk state, so it stays behind the preview gate. Never move without showing the move list.
4. Record — one ship line to the canonical changelog
The change shipped; record it once. Invoke update-changelog with the unit (the slug + what shipped) — it composes a ship line (✓) behind its own accept/edit/reject gate and prepends it to CHANGELOG.md per the changelog contract. close-out is the doorway, update-changelog is the writer — the close-out→changelog seam (update-changelog § "Relationship to other organs").
- Pass a terse unit description in changelog voice: "
<slug>—<one-line of what shipped>". update-changelogalso offers (its § 5) to retire the slug'sBACKLOG.mdrow — accept it here; closing out a slug is exactly when its forward-queue row should close.- Then write the archive README (last, so the changelog line exists to cite): a one-line
archive/<date>-<slug>/README.mdcarrying the slug, the close-out date, the active spec version the change reconciled into, and the recorded changelog line. The archive folder is self-describing; the README is its index. Skip it when § 3 was cancelled (nothing was archived). - If
update-changelogis unavailable, fall back to a single manual note inBACKLOG.md"Recently shipped" (or the pointer there) + the project's ship-narrative record (a build-progress memory or equivalent), if it keeps one — but the point is one write, not three.
5. Close
Report what happened, in one block:
Closed out
<slug>:
- Reconciled → spec v<M+1> (as shipped); intent v
<M>superseded, still readable. ← or "no reconcile needed — spec already current"- Retired plan v
<N>, blueprint v<P>,<K>superseded spec versions →.claude/archive/<date>-<slug>/. ← or "retire skipped"- Logged a ship line to
CHANGELOG.md.The scope chain for
<slug>is closed./checkpoint --scope corpusstill audits the whole later if you want the wider fit-pass.
Do not commit (the user's call). Do not touch the project's ship-narrative record (a build-progress memory or equivalent), if it keeps one, or the CLAUDE.md coverage map — those stay their own narrative records (changelog-contract § 6).
More in reference.md: What /close-out does NOT do, relationship to other organs.
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.

