About handoff
Handoff is an agent skill for transferring context between separate sessions, with prompt and artifact channels. It defines rules for concise, referenced handoffs, honest progress reporting, and handling secrets across different client interfaces.
Key features
- 01Choose prompt or artifact channel
- 02Transfer pointers instead of full content
- 03Separate completed, ongoing, and blocked work
- 04Redact secrets and personal information
- 05Map handoffs to client interfaces
Use cases
- 01Continue work in a fresh chat
- 02Transfer model-invoked context through an artifact
- 03Pass review status without a full context pack
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ csark0812/ toolbox --skill handoffAfter installing, type/handoffin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/handoff-subagent-dispatch.mdoutput.mdpack.mdresearch-basis.mdDetails
From the project READMEHandoff
Orchestrator — cross-session A2A (channel:prompt vs channel:artifact). Shared vocabulary → process-skill-composition.md.
References: pack.md · output.md · handoff-subagent-dispatch.md
When you calibrate claims, read research-basis.md.
Entry gate
- New chat intended — same-session continuation without transfer is out of scope.
- Channel chosen —
prompt(user) orartifact(model-invoked).
Non-negotiables
- Pointers not bodies — paths, URLs, SHAs. Never paste plans, PRDs, or diffs into handoff.
- Honest state — done vs in-progress vs broken. When you claim progress, cite commits or tests.
- Redact secrets, tokens, and PII before write or paste.
- Channel prompt — user
/handoff→ no disk (_agent/handoffs/forbidden). - Channel artifact — model-invoked → subagent write mandatory. Coordinator-primary write is a violation.
Workflow
- Pick the channel, pack, and goal — use the closest rows in pack.md. These values control production only.
- Gather — minimal bullets from thread. Omit empty categories.
- Deliver —
channel:prompt→ fenced receiving prompt per output.md in clear Englishchannel:artifact→ handoff-subagent-dispatch.md → paste stub only
Execution interface map
Use this map when the request says "handoff via X client."
- Pick channel from producer intent:
promptfor user-directed handoff (/handoff)artifactfor model-invoked context-pressure continuation
- Build one canonical payload from
pack,goal, and thread claims. - Route to the client interface:
prompt: emit receiving prompt block and hand it to next chat startup.artifact: write<workspace>/_agent/handoffs/<filename>.md, then emit only the read stub.
- Validate output with the client-specific rule.
Cross-client default behavior
| Interface | Transport rule | Producer action | Required receive artifact |
|---|---|---|---|
| Codex | Chat thread controls | channel:prompt for user handoff, channel:artifact for model-invoked | channel:prompt block or handoff artifact path |
| Cursor | Conversation continuation | channel:prompt into fresh chat unless artifact hook is explicitly available | Prompt block |
| Claude Code | Chat continuation | channel:prompt into fresh chat; if client-specific task API exists, pass block as first user message | Prompt block |
| Claude API / GPT-like interface | Chat continuation | channel:prompt is required; map fields to a user-visible handoff message | Prompt block |
| ChatGPT UI / web chat | Chat continuation | channel:prompt with Open workspace target first line | Prompt block |
| GitHub Copilot Chat | IDE continuation | channel:prompt only; no shared artifact path unless local host exposes handoff write | Prompt block |
| Generic MCP / custom client | API-specific | map to canonical payload fields; if no artifact support, downgrade to prompt | Prompt block (or artifact path if supported) |
When an interface does not expose an artifact API, always fall back to channel:prompt.
Codex API branch
Use this when the ask explicitly targets Codex API execution.
- Build
channel:promptpayload from plan claims. - Prefer one of:
- start fresh chat with the prompt payload if orchestration is in user flow.
- use
create_threadfor a new Codex task, thensend_message_to_threadwith the prompt block for handoff bootstrap.
- For
channel:artifact, callhandoffwithchannel:artifactvia your orchestration flow, spawn the subagent writer path, then emit only the stub pointing to<workspace>/_agent/handoffs/<filename>.md.
Avoid fabricating any unsupported Codex tool calls. If a required API is unavailable, document fallback at channel:prompt.
High-volume interface notes
- For clients with both UI and API modes, document the mode explicitly in your own orchestration.
- If a client has a structured conversation API, preserve the same fields and map only into its initial message payload.
- For IDE-native chat clients, prefer prompt mode with explicit workspace.
Interface execution boundaries
- Don’t hard-code any one chat stack’s control API as the only supported path.
- Do not include
channelandpackinside receiving content. - Don’t skip the redaction rule for any interface.
- Don’t write handoff files from the coordinator for
channel:artifact; spawn/coordinate the subagent path when required.
If the next session needs only review state, use consumer overlay blocks instead of Pack: full.
Consumer bindings
Project-specific injected context is appended on skill read.