Handoff
Outline-Driven Development for Claude Code - 46 agents, 25+ skills, diagram-first methodology, AST-based editing, atomic commits.
npx -y skills add OutlineDriven/odin-claude-plugin --skill handoffAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Snapshot the current session into a resumable handoff artifact so a cold session, agent, or person continues without replaying context. Use when the user says "write a handoff", "hand off", "snapshot this session", "I'm running low on context", "pause and pack this up for the next session", or "resume this later".
SKILL.md
3.9 KB, as published. Nobody here has run it
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.