Done
Close the current repository task completely while preserving unrelated work.
Invoke for /done, bare done in an active task, or an explicit request to
land, publish, or verify task changes. Do not treat ordinary completion
language such as “I am done reviewing” as publication authority.
Authority envelope
A bare done authorizes full closeout: shape, validate, integrate, publish,
prove, and clean up. A narrower request authorizes only its named stages. Honor
explicit PR, local-only, no-push, squash, merge, rebase, or fast-forward terms.
Never promote “commit and push,” “publish this branch,” or “verify landing” into
full cleanup.
Repository review rules and protected branches override the direct path.
Otherwise Default to direct landing on the actual default branch/bookmark.
Discover the destination and remote from live state; never assume main or
origin merely from convention.
Completion invariant
Report Done only when:
- Explicit task revisions are reviewable and repository-declared gates plus
focused behavioral checks pass.
- Exact ancestry, per-revision patch equivalence, or aggregate task-range
patch equivalence proves the task landed on the actual default destination.
- A writable authoritative remote equals the proved local default tip.
- The recorded task workspace and owned branches are safely cleaned up.
Done locally is terminal only when no remote exists by design or the request
explicitly required local-only closeout. A clean feature workspace, successful
push, merged PR label, or passing build alone is never completion proof.
Workflow
Record active_directory=$(pwd -P) before changing directories. Establish
the explicit task boundary from a receipt, recorded revisions, or a direct
user statement. Subjects and ancestry position are not task provenance.
Capture read-only evidence before mutations:
python3 "${HOME}/.agents/skills/done/scripts/closeout.py" snapshot \
--repo "$PWD" --active-directory "$active_directory" \
${receipt:+--receipt "$receipt"} >"$snapshot"
If no receipt exists, establish provenance and use hey agent-adopt before
the first closeout mutation.
Shape only task work. Leave unrelated dirt unstaged. Run repository gates
plus focused tests. Allow one unambiguous task-caused repair cycle; otherwise
record Blocked.
Run jj root --ignore-working-copy. Read jj closeout
when it succeeds; otherwise read Git closeout. Never
initialize jj during closeout.
If direct publication is forbidden or review is required, read the
GitHub PR path. GitHub is the explicit hosted
provider; unsupported providers require authenticated discoverable tooling
or a precise blocker.
After landing proof, read receipt, cleanup, and reporting.
Finite outcomes
Done: remote landing and cleanup proved; receipt terminal.
Done locally: local-only-by-design landing and cleanup proved; receipt terminal.
Landed; cleanup deferred: remote landing proved, but safe cleanup did not.
PR ready; merge pending: required PR exists but gates remain after bounded waiting.
Local only: publication was expected but unavailable or unauthorized.
Blocked: scope, validation, conflict, identity, policy, or proof is unresolved.
Partial outcomes remain open. On the next invocation, re-read live local and
authoritative state, accept recorded evidence only when it still matches, and
resume at the first unmet stage. A false terminal claim records false_done.
1---2name: done3description: Close an explicit repository task by shaping, landing, publishing, proving, and cleaning it up; also handles narrower commit, publish, and landing-verification requests without exceeding their authority.4---56# Done78Close the current repository task completely while preserving unrelated work.9Invoke for `/done`, bare `done` in an active task, or an explicit request to10land, publish, or verify task changes. Do not treat ordinary completion11language such as “I am done reviewing” as publication authority.1213## Authority envelope1415A bare `done` authorizes full closeout: shape, validate, integrate, publish,16prove, and clean up. A narrower request authorizes only its named stages. Honor17explicit PR, local-only, no-push, squash, merge, rebase, or fast-forward terms.18Never promote “commit and push,” “publish this branch,” or “verify landing” into19full cleanup.2021Repository review rules and protected branches override the direct path.22Otherwise **Default to direct landing** on the actual default branch/bookmark.23Discover the destination and remote from live state; never assume `main` or24`origin` merely from convention.2526## Completion invariant2728Report `Done` only when:29301. Explicit task revisions are reviewable and repository-declared gates plus31 focused behavioral checks pass.322. Exact ancestry, per-revision patch equivalence, or aggregate task-range33 patch equivalence proves the task landed on the actual default destination.343. A writable authoritative remote equals the proved local default tip.354. The recorded task workspace and owned branches are safely cleaned up.3637`Done locally` is terminal only when no remote exists by design or the request38explicitly required local-only closeout. A clean feature workspace, successful39push, merged PR label, or passing build alone is never completion proof.4041## Workflow42431. Record `active_directory=$(pwd -P)` before changing directories. Establish44 the explicit task boundary from a receipt, recorded revisions, or a direct45 user statement. Subjects and ancestry position are not task provenance.462. Capture read-only evidence before mutations:4748 ```bash49 python3 "${HOME}/.agents/skills/done/scripts/closeout.py" snapshot \50 --repo "$PWD" --active-directory "$active_directory" \51 ${receipt:+--receipt "$receipt"} >"$snapshot"52 ```5354 If no receipt exists, establish provenance and use `hey agent-adopt` before55 the first closeout mutation.56573. Shape only task work. Leave unrelated dirt unstaged. Run repository gates58 plus focused tests. Allow one unambiguous task-caused repair cycle; otherwise59 record `Blocked`.604. Run `jj root --ignore-working-copy`. Read [jj closeout](./references/jj.md)61 when it succeeds; otherwise read [Git closeout](./references/git.md). Never62 initialize jj during closeout.635. If direct publication is forbidden or review is required, read the64 [GitHub PR path](./references/github-pr.md). GitHub is the explicit hosted65 provider; unsupported providers require authenticated discoverable tooling66 or a precise blocker.676. After landing proof, read [receipt, cleanup, and reporting](./references/cleanup.md).6869## Finite outcomes7071- `Done`: remote landing and cleanup proved; receipt terminal.72- `Done locally`: local-only-by-design landing and cleanup proved; receipt terminal.73- `Landed; cleanup deferred`: remote landing proved, but safe cleanup did not.74- `PR ready; merge pending`: required PR exists but gates remain after bounded waiting.75- `Local only`: publication was expected but unavailable or unauthorized.76- `Blocked`: scope, validation, conflict, identity, policy, or proof is unresolved.7778Partial outcomes remain open. On the next invocation, re-read live local and79authoritative state, accept recorded evidence only when it still matches, and80resume at the first unmet stage. A false terminal claim records `false_done`.