port of sting25/claude-code-handoff

The next Claude Code session doesn't have to start blind.

A Cowork-installable port of Christopher Chadwick's claude-code-handoff. Snapshot session state on exit; auto-load it on the next session start. Plus /handoff at clean boundaries. Nothing to remember; nothing to copy-paste.

Credit where it's due. The original idea, snapshot logic, transcript appender, and /handoff skill are by Christopher Chadwick (@Sting25). This site is about a packaging port. Visit the upstream project.

The problem

Claude Code sessions hit context limits. When they do, the next session starts blind — you re-explain the project, the in-flight track, the decisions you made twenty minutes ago, all from memory. The model has no continuity. You become the continuity.

Christopher Chadwick wrote claude-code-handoff to fix this for the standalone Claude Code CLI. This repo ports that work to the Cowork desktop app, where users install plugins through a UI rather than running shell scripts — and where the host-side shell on Windows (MSYS Git Bash) is missing two dependencies the upstream relies on.

What it does

All four behaviors are upstream's design. This port packages them for Cowork.

Install

  1. Open the Cowork desktop app.
  2. Sidebar → Customize → Browse plugins → Add marketplace.
  3. Paste: https://github.com/scottconverse/claude-code-handoff-cowork
  4. Install claude-code-handoff from the marketplace.
  5. Start a fresh Code-tab session in any git repo. The /handoff skill appears in the / menu.

For the standalone Claude Code CLI (Linux/macOS terminal, no Cowork app), use Sting25/claude-code-handoff directly. Its install.sh is the right path there.

Which tabs does it work in?

The Cowork desktop app has three tabs and they run different runtimes.

Tab/handoffSessionStart auto-loadSessionEnd auto-writeStop per-turn dump
Code
Cowork
Chatno shell

The Cowork-VM-tab issue is upstream Anthropic bugs #27398 and #40495 — affects every marketplace plugin with hooks. The /handoff skill still loads there; use it manually.

Verified end-to-end

Tested on Windows 11 + MSYS Git Bash + Claude Code 2.1.87 with a real claude -p headless run against a real git repo and a real Anthropic API turn. All three hooks fired in sequence:

[2026-05-12T19:47:40Z] event=SessionStart
[2026-05-12T19:47:43Z] event=Stop
[2026-05-12T19:47:44Z] event=SessionEnd

Both artifacts written. The raw-dump file contained the actual model conversation:

## Turn at 2026-05-12 19:47:43 UTC

**User:**     Reply: ok
**Assistant:** ok

Full receipts including probe-log captures and commit SHAs: VERIFICATION.md.

What's port-specific (vs upstream)

Snapshot logic, output format, skill spec, HANDOFF_* env vars, substrate pattern — all unchanged from upstream. This port adds packaging and platform portability:

See ARCHITECTURE.md for the full per-piece breakdown with sequence diagrams.

Honest caveats

Things I want you to know before you install this.

Credit, again, plainly

Christopher Chadwick (@Sting25) wrote this. The idea is his. The snapshot script is his. The transcript appender is his. The /handoff skill spec is his. The substrate pattern is his. The HANDOFF_* env-var interface is his.

This repo is packaging and portability shims around his work. If claude-code-handoff is useful to you, his repo is where to file enhancements to the logic, send a thank-you, or follow upstream development.