The receiver knows nothing. Not your conversation, not your decisions, not your file layout. A handoff that assumes shared memory silently loses work — we watched a receiving tool merge a pull request into a dead branch because the handoff skipped one re-review rule, and the work vanished for days before anyone noticed.
A handoff must contain
- Status snapshot — what is done, and how it was verified (test counts, CI links). Not "mostly finished".
- Rules of the road — the 5–8 constraints that actually bind (what never to touch, what needs approval, what "tests may not be weakened" means here). Not your whole culture doc.
- Environment recipe — exact commands to reach a working state, copy-pasteable.
- Task list with per-task exit conditions — each task states its own observable "done".
- Overall exit — when the whole handoff is complete, in checkable terms.
- Not-yours list — parked items and escalation paths, so the receiver doesn't "helpfully" wander into them.
- File map — where the five things they'll look for actually live.
Write facts, not vibes. Every claim verifiable, every exit observable.
Success criteria
The stranger test: someone with zero context could execute the handoff end to end. If any step requires "ask the previous session", the handoff failed.