Hand off work to another Pi session — write a handoff doc, save key decisions to memory, and notify the target session via intercom. Use when a session is getting long, when you need to continue work in a fresh context, or when transferring work between projects/sessions. Composes handoff.ts (doc writer) + memory (persistence) + pi-intercom (transport).
Scanned 9/9/2026
Install to Claude Code
npx -y skills add romiluz13/auto-pi --skill session-handoff --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Session Handoff?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/romiluz13-session-handoff)More formats (shields.io, HTML) on the badges page.
---
name: session-handoff
description: Hand off work to another Pi session — write a handoff doc, save key decisions to memory, and notify the target session via intercom. Use when a session is getting long, when you need to continue work in a fresh context, or when transferring work between projects/sessions. Composes handoff.ts (doc writer) + memory (persistence) + pi-intercom (transport).
user-invocable: true
---
# Session Handoff
Transfer work from one Pi session to another without losing context. This is the cross-session version of compact-safe — instead of compressing the current session, you're moving the work to a new session.
## When to use
- Session is getting long (approaching compaction) and you want a fresh context
- You need to continue work in a different project or branch
- You're transferring work to a specialist session (e.g., handing a plan to a builder)
- The user says "handoff", "continue in a new session", "pass this to X"
## Procedure
1. **Write the handoff doc.** The `handoff` extension (`extensions/handoff.ts`) writes a deterministic `HANDOFF.md` from recent turns + the last compaction summary. No LLM call — it's a snapshot. If the extension is available, it fires automatically. If not, write a markdown file to `docs/handoff/<YYYY-MM-DD>-session-handoff.md` with:
- **Active constraints** — what must not change, what rules are in effect
- **Current state** — what's done, what's in progress, what's blocked
- **Key decisions** — what was decided and why
- **Errors (verbatim)** — any error messages, stack traces, or failures
- **Next steps** — what the receiving session should do first
2. **Save key decisions to memory.** Use the `memory` tool to save:
- Architecture decisions (to `project` or `memory` target)
- Failures and corrections (to `failure` target with category)
- User preferences discovered during the session (to `user` target)
Capture memory payload BEFORE validation — compaction can fire between return and parse. If memory is full, save to the handoff doc instead.
3. **Discover the target session.** Run `intercom({ action: "list" })` to see active sessions. Filter by:
- Same cwd (sessions in the same project)
- Session name (if the user named it with `/name`)
- Status (look for "idle" or "active" sessions that can receive work)
4. **Notify the target session.** Run `intercom({ action: "send", to: "<session-id-or-name>", message: "..." })` with:
- The handoff doc path
- A 3-line summary of what to do next
- Any blocking constraints ("don't touch X", "Y is in progress")
5. **Confirm to the user.** Tell them:
- Where the handoff doc was written
- Which session was notified
- What the receiving session should do first
## Rules
- The handoff doc is the source of truth. Memory is the backup. Intercom is the notification.
- KEEP constraints and errors verbatim — do not summarize them. The receiving session needs the exact error text.
- SUMMARIZE resolved decisions — don't replay the whole discussion.
- DROP prose and diary — keep only load-bearing context.
- If the target session doesn't exist or is unreachable, write the doc anyway and tell the user to start a new session pointing at the doc.
- Do NOT use this for in-session compression — that's `compact-safe`. This is for cross-session transfer.
## Discovery without manual IDs
`intercom({ action: "list" })` returns all active sessions with their IDs, names, cwd, and status. You don't need to know the session ID in advance — list first, then send. The `session-status.ts` extension also writes `~/.pi/agent/session-status.jsonl` which any session can read for a quick overview.
Convention: when starting a new session in a project, run `intercom list` to discover other sessions in the same project. If any exist, send them your session ID + role so they know you're there.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!