cw-handoff
A handoff is read by an agent with none of your context and every incentive to
believe you. That makes an optimistic handoff worse than no handoff: it converts
your guesses into the next session's premises. Write it so the reader can
re-derive the state instead of trusting the prose.
Stage 6 of the loop, and the one that makes the loop a loop: the next session
starts at cw-orient with what you leave here.
When to use
- Ending a session with work in flight.
- Asked for "a prompt for another agent", branch takeover instructions, a
continuation note, or a summary of current state for async work.
- Handing a lane to a different model, a fleet worker, or a remote session.
Workflow
Write it as a prompt the next agent can paste directly. Not a report
about the work — instructions for continuing it.
Open with the refresh block, not with your summary. The first thing the
reader should do is verify you:
cd <repo path>
git status --short --branch && git branch --show-current
git log --oneline --decorate -20
git worktree list
./scripts/release/check-versions.sh
Tell them to trust that output over anything below it.
Include, in this order:
- Repository path and expected branch or worktree.
- The authority line: what they may and may not do without asking. Default to
local-only — no push, merge, tag, publish, GitHub Release, or destructive
cleanup without explicit approval.
- Durable files to read, ordered by importance: the scoped
AGENTS.md for
the area, then the specific docs (docs/CACHE.md,
docs/MOTION_CONTRACT.md, docs/ARCHITECTURE.md, crates/tui/AGENTS.md)
the task actually touches.
- Commits already landed, with SHAs.
- Dirty worktree caveats, naming uncommitted files explicitly, and whose
they are. This is the single most useful line in most handoffs.
- The next slices, in priority order, each bounded the way
cw-slice bounds one.
- The verification gate for those slices — the smallest correct one from
cw-gates, plus any known-flaky names.
- Open decisions that genuinely belong to Hunter.
Separate three states, and never blur them: done and verified (with the
command output that proves it), suspected (a hypothesis, labeled), and
blocked (with what unblocks it). If you did not run it, it is not done.
Say what the branch is for. Local-only, pushed for backup, or intended to
stay unpushed — the next agent cannot tell from git alone, and guessing
wrong is how work gets force-pushed away.
Record missing external receipts. If the task was local-only, say which
evidence you could not gather (CI state, registry state, review threads)
rather than inferring it. A named gap is useful; a confident guess is not.
Red flags / don't
- Don't imply publication happened unless you verified registry, tag, or release
state live.
- Don't hand off a narrative. Prefer concrete paths, commands, and SHAs.
- Don't summarize away the dirt. Unnamed uncommitted files get destroyed.
- Don't hand the next agent decisions you could have made. Reserve Hunter-facing
choices for product direction, irreversible actions, and visual judgments that
need eyes.
- Don't copy a previous handoff's state forward. Re-derive it; that is what
step 2 is for.
- Don't include secrets, tokens, or provider credentials in a handoff file.
Output
A single paste-ready block containing: refresh commands, authority line, files
to read, landed SHAs, named dirty files, prioritized next slices, the
verification gate, and the open decisions — with done / suspected / blocked
visibly separated.
1---2name: cw-handoff3description: Use when writing a Codewhale takeover prompt, continuation note, or end-of-session summary for another agent or a later session: a paste-ready handoff grounded in live state, with done/suspected/blocked kept separate.4---5
6# cw-handoff
7
8A handoff is read by an agent with none of your context and every incentive to
9believe you. That makes an optimistic handoff worse than no handoff: it converts
10your guesses into the next session's premises. Write it so the reader can
11re-derive the state instead of trusting the prose.
12
13Stage 6 of the loop, and the one that makes the loop a loop: the next session
14starts at [cw-orient](../cw-orient/SKILL.md) with what you leave here.
15
16## When to use
17
18- Ending a session with work in flight.
19- Asked for "a prompt for another agent", branch takeover instructions, a
20 continuation note, or a summary of current state for async work.
21- Handing a lane to a different model, a fleet worker, or a remote session.
22
23## Workflow
24
251. **Write it as a prompt the next agent can paste directly.** Not a report
26 about the work — instructions for continuing it.
27
282. **Open with the refresh block, not with your summary.** The first thing the
29 reader should do is verify you:
30 ```bash
31 cd <repo path>
32 git status --short --branch && git branch --show-current
33 git log --oneline --decorate -20
34 git worktree list
35 ./scripts/release/check-versions.sh
36 ```
37 Tell them to trust that output over anything below it.
38
393. **Include, in this order:**
40 - Repository path and expected branch or worktree.
41 - The authority line: what they may and may not do without asking. Default to
42 local-only — no push, merge, tag, publish, GitHub Release, or destructive
43 cleanup without explicit approval.
44 - Durable files to read, ordered by importance: the scoped `AGENTS.md` for
45 the area, then the specific docs (`docs/CACHE.md`,
46 `docs/MOTION_CONTRACT.md`, `docs/ARCHITECTURE.md`, `crates/tui/AGENTS.md`)
47 the task actually touches.
48 - Commits already landed, with SHAs.
49 - **Dirty worktree caveats, naming uncommitted files explicitly**, and whose
50 they are. This is the single most useful line in most handoffs.
51 - The next slices, in priority order, each bounded the way
52 [cw-slice](../cw-slice/SKILL.md) bounds one.
53 - The verification gate for those slices — the smallest correct one from
54 [cw-gates](../cw-gates/SKILL.md), plus any known-flaky names.
55 - Open decisions that genuinely belong to Hunter.
56
574. **Separate three states, and never blur them:** *done and verified* (with the
58 command output that proves it), *suspected* (a hypothesis, labeled), and
59 *blocked* (with what unblocks it). If you did not run it, it is not done.
60
615. **Say what the branch is for.** Local-only, pushed for backup, or intended to
62 stay unpushed — the next agent cannot tell from `git` alone, and guessing
63 wrong is how work gets force-pushed away.
64
656. **Record missing external receipts.** If the task was local-only, say which
66 evidence you could not gather (CI state, registry state, review threads)
67 rather than inferring it. A named gap is useful; a confident guess is not.
68
69## Red flags / don't
70
71- Don't imply publication happened unless you verified registry, tag, or release
72 state live.
73- Don't hand off a narrative. Prefer concrete paths, commands, and SHAs.
74- Don't summarize away the dirt. Unnamed uncommitted files get destroyed.
75- Don't hand the next agent decisions you could have made. Reserve Hunter-facing
76 choices for product direction, irreversible actions, and visual judgments that
77 need eyes.
78- Don't copy a previous handoff's state forward. Re-derive it; that is what
79 step 2 is for.
80- Don't include secrets, tokens, or provider credentials in a handoff file.
81
82## Output
83
84A single paste-ready block containing: refresh commands, authority line, files
85to read, landed SHAs, named dirty files, prioritized next slices, the
86verification gate, and the open decisions — with done / suspected / blocked
87visibly separated.