Handoff: resumable session snapshot
Write one artifact that lets a cold session — the same person tomorrow, a fresh agent, or a colleague — resume this work without replaying the conversation. Chat is ephemeral; this file is the persistence layer for a single hand-off point.
handoff writes exactly one surface: .outline/handoffs/<slug>-<ts>.md. It does not commit, does
not delegate, and does not open a PR.
When to apply / NOT
Apply:
- Context is running low and the task is unfinished.
- End of a work block, or pausing mid-task.
- Switching agents (Claude → agy/codex/grok) and the next one needs the state, not the transcript.
Do NOT:
- Delegate a task to another AI —
antigravity,codex, andgrokown that. - Package a branch for review —
commit-push-prandpr-reviewown that.
Write procedure
-
Resolve the workspace and self-ignore it (mirrors
subagent-driven'ssd-workspace):root=$(git rev-parse --show-toplevel 2>/dev/null || pwd) # cwd fallback outside a repo mkdir -p "$root/.outline/handoffs" printf '*\n' > "$root/.outline/handoffs/.gitignore" # `*` also ignores the .gitignore itselfThe handoff stays local and gitignored — it never enters
git statusor a commit. To hand off to a colleague on another machine, copy the file out (paste it, or attach it to a PR/issue). -
Name it.
slug= kebab-case of the task title;ts=$(date +%Y%m%d-%H%M%S)(seconds included so two runs in the same minute can't collide). Write$root/.outline/handoffs/<slug>-<ts>.md. Runs leave a trail of timestamped files rather than overwriting one. Stale snapshots are yours to prune. -
Fill the format below. Omit any section that is empty — an empty heading is noise. Echo the absolute path of the written file to chat (relative paths are not clickable in most terminals). If arguments were passed, tailor
## Goaland## Nextto that focus. Redact secrets, API keys, and PII because the handoff may be copied off-machine. Reference specs, plans, ADRs, commits, and diffs by path or URL; never paste their content.
To resume
The recency-discovery command for finding the active handoff lives in references/resume.md — read it when resuming (a session that only needs to write a new handoff never reaches it).
Format
Purpose-built for cold resume. Terse field: value header, then only the sections that carry
signal:
# Handoff: <one-line task title>
branch: <name @ short-sha> (<clean | dirty: N files>)
## Goal
<1-2 lines: what we're achieving and why>
## Done
- <completed step + evidence: commit sha / passing check>
## In flight
- <the half-built thing: file:line, what's written, what's still missing>
## Next
1. <the single next concrete action>
## Key files
- path:line — why it matters
## Decisions & constraints
- <decision + the why, so the next session does not relitigate it>
## Blockers / open questions
- <what is stuck; what needs a human or an answer>
## Suggested skills
- `<skill-name>`: <why it should run next>
## Verify
<exact command(s) to confirm state; last known result>
Edge cases
- No git repo —
$rootfalls back to cwd;branch:reads(no repo). - Detached HEAD / dirty tree — that is the state worth capturing; record it in
branch:. - Nothing in flight — omit the section. A thin handoff (Goal + Next) is still a valid handoff.