Preserve and restore context between Claude Code sessions.
When working with Claude Code across multiple sessions, switching agents, or hitting context limits (auto-compaction), valuable context is lost:
- What task was being worked on
- Key decisions and their rationale
- Blockers and open questions
- Next steps to continue
Handoff captures "necessary and sufficient" context to a docs/handoff/HANDOFF.md file, enabling seamless continuation across sessions.
# Add the marketplace
/plugin marketplace add thepushkarp/handoff
# Install the plugin
/plugin install handoff@handoffCapture current session context to docs/handoff/HANDOFF.md.
What it captures:
- Current task state (what's in progress)
- Key decisions and rationale
- Modified files
- Blockers and open questions
- Next steps
- Critical context (gotchas, patterns, etc.)
- Model summary (8–12 bullets)
- Handoff context (pasteable resume instructions)
Usage:
/handoff:create
The handoff is appended with a timestamp, creating a history log.
Load existing handoff context to continue work.
Default mode: Displays handoff summary and asks how to proceed.
/handoff:resume
Auto mode: Automatically loads context and starts working on next steps.
/handoff:resume --auto
The plugin includes always-on hooks that make compaction safe:
- Before compaction (
PreCompact): appends a new entry todocs/handoff/HANDOFF.mdwith deterministic snapshot data and placeholders for a model-written summary/context. - After compaction (
SessionStartmatchercompact): auto-injects the latest handoff entry back into Claude's context (stdout injection). - Enforcement (
Stop): if the latest entry still has TODO placeholders for Model Summary and Handoff Context, Claude is blocked from stopping (up to 3 attempts) until it fills them in.
This ensures you never lose important context to auto-compaction.
Note: These scripts use
jqwhen available to parse hook input and transcripts. Withoutjq, the plugin degrades gracefully but will capture less detail.
Handoffs are stored in docs/handoff/HANDOFF.md with timestamped entries:
---
## Handoff: 2025-01-05 14:32:00
### Current Task State
Implementing user authentication feature. Login flow is complete, working on password reset.
### Key Decisions
- Using JWT for session tokens: Better for stateless scaling
- Email verification required: Security requirement from product
### Modified Files
- `src/auth/login.ts` - Added JWT generation
- `src/auth/middleware.ts` - Token validation middleware
- `tests/auth.test.ts` - Login flow tests
### Blockers / Open Questions
- Need to decide on password reset token expiry (1hr vs 24hr?)
### Next Steps
1. Implement password reset endpoint
2. Add email sending for reset tokens
3. Write tests for reset flow
### Critical Context
- The `AUTH_SECRET` env var must be set or tests fail silently
- Rate limiting is handled in nginx, not in code
### Model Summary
- Login flow is complete; password reset in progress
- Using JWT sessions for stateless scaling
- Blocker: decide reset token expiry (1h vs 24h)
### Handoff Context (paste into next session)
1. Open `docs/handoff/HANDOFF.md` and focus on the most recent entry.
2. Implement password reset endpoint and tests first.
3. Confirm `AUTH_SECRET` is set before running tests.
---- Ending a session: Run
/handoff:createbefore closing Claude Code - Switching contexts: Create a handoff before switching to a different task
- Context limits: Compaction auto-saves and re-injects a handoff entry
- Team handoffs: Share
docs/handoff/HANDOFF.mdfor async collaboration - Resuming work: Run
/handoff:resumewhen starting a new session
- Be explicit about blockers: Include specific questions or decisions needed
- Include file paths: Helps the next session navigate quickly
- Note gotchas: Things that weren't obvious save time later
- Use auto mode carefully: Good for continuing known tasks, but review mode helps verify context is correct
Claude Code supports project-level compaction guidance via a CLAUDE.md section named # Compact instructions:
# Compact instructions
When compacting, preserve:
- the latest handoff entry in docs/handoff/HANDOFF.md
- current task state, blockers, and next steps
- key decisions and constraintsClaude Code caches plugin content by version. When you change plugin code, bump the version in plugins/handoff/.claude-plugin/plugin.json so existing users receive the update.
Useful commands when developing:
# Validate manifests and marketplace structure
/plugin validate
# If testing a local plugin directory (see Claude Code docs for the exact flag usage)
claude --plugin-dir ./plugins/handoffMIT