Skip to main content

claude-handoff

Summarize & export a Claude Code session into one clean handoff.md you can paste into Gemini, GPT, or another Claude — without the noise.

Claude Code stores every session locally as JSONL (~/.claude/projects/…/*.jsonl), full of tool calls, tool results, thinking blocks and system reminders. Existing exporters dump all of that into markdown. claude-handoff instead produces a handoff document: the actual conversation, what files were touched, what commands ran, and (optionally) an LLM-written summary of goal / decisions / current state / next steps — so the next model can just continue the work.

  • Zero dependencies. One Python file, stdlib only. Python 3.9+.
  • Deterministic by default. No API call, no cost, works offline.
  • --llm when you want a real summary. Claude, OpenAI or Gemini via your own API key — or --llm claude-cli, which runs your locally-installed Claude Code CLI on your existing Pro/Max plan: no API key at all.
  • Noise-free. Drops tool results, thinking blocks, system reminders, subagent chatter, slash-command envelopes. Keeps user intent, assistant answers, files modified, commands run.

Install

pipx install claude-handoff        # or: pip install claude-handoff
# or just grab the file — it's a single stdlib-only script:
curl -O https://raw.githubusercontent.com/Vasilispapg/claude-handoff/main/claude_handoff.py
python3 claude_handoff.py --list

Usage

claude-handoff                     # latest session → handoff.md
claude-handoff --list              # what sessions do I have? (title · first prompt)
claude-handoff --name "login bug"  # newest session whose title/prompt matches
claude-handoff "login bug"         # same — a non-path argument is a name search
claude-handoff --project myrepo    # latest session of a specific project
claude-handoff path/to/session.jsonl -o -     # explicit file → stdout
claude-handoff --include-tools     # keep collapsed per-tool-call detail

# real LLM summary (goal / decisions / current state / next steps):
claude-handoff --llm claude-cli                 # uses your Claude Code login — no API key
export ANTHROPIC_API_KEY=sk-...
claude-handoff --llm claude
claude-handoff --llm openai --model gpt-4o
claude-handoff --llm gemini --with-transcript   # summary + cleaned transcript

Then paste handoff.md into any other model. The document opens with instructions to the receiving assistant, so no extra prompting is needed.

Auto-selection skips nearly-empty sessions (like the stub claude /login leaves behind) so "latest" means your latest real conversation. An explicit path or --name always wins.

What the output looks like

# Conversation handoff

> To the receiving assistant: … you are taking over …

## Session
- Project: /home/you/myapp (branch main)
- When: 2026-08-20 09:00 → 09:04
- Activity: 2 user messages, 4 assistant replies, 4 tool calls

## Files created / modified
- /home/you/myapp/auth.py

## Commands run
- python -m pytest tests/test_auth.py -q

## Conversation
### 🧑 User
the login breaks on unicode passwords…
### 🤖 Assistant
Found it — ascii encoding. Changed to utf-8, tests pass.

Flags

Flag Meaning
--list list sessions (date, size, project, title · first prompt)
--name QUERY pick newest session whose title or first prompt contains QUERY
--project NAME pick latest session whose project path contains NAME
-o FILE / -o - output file / stdout (default handoff.md)
--include-tools collapsed <details> blocks with each tool call
--max-chars N cap the transcript section (default 80 000; keeps start + recent end)
--llm claude|openai|gemini|claude-cli LLM summary instead of raw cleaned transcript
--model ID override the LLM model
--with-transcript with --llm, also append the cleaned transcript

API keys (first set variable wins per provider):

Provider Env vars Notes
claude ANTHROPIC_API_KEY or CLAUDE_API Anthropic API
openai OPENAI_API_KEY or GPT_API OpenAI API
gemini GEMINI_API_KEY, GOOGLE_API_KEY or GEMINI_API Google AI API
claude-cli (none) Shells out to your installed Claude Code CLI; billed to your Pro/Max plan. Run claude once to log in.

Nothing is sent anywhere unless you pass --llm.

Roadmap

  • claude.ai web chat exports (conversations.json from the official data export) as input
  • ChatGPT / Gemini exports as input (handoff in both directions)
  • --format json for programmatic use

PRs welcome.

How it compares

This space isn't empty — it's fragmented. Pick the tool that matches your situation:

  • Exportersclaude-conversation-extractor, claude-code-log, claude-code-transcripts, claude-to-markdown — turn transcripts into readable Markdown/HTML, tool noise included, no handoff framing.
  • Cross-CLI session moverscli-continues (npm i -g continues) reads 16 coding CLIs' native session stores (Claude Code included) and injects a context doc into another terminal tool. Excellent for Claude Code → Codex/Cursor/Gemini CLI; but it can't target web chats, does no LLM summarization, and needs Node 22.5+.
  • In-session handoff skills/pluginsthepushkarp/handoff, claude-session-handoff, claude-code-handoff — great if you remember to run them before the session ends; the model writes the summary using your session's context, and the output targets the next Claude session.
  • Browser extensions — Handoff, LLM Context Bridge, ContextSwitch — transfer web chats between ChatGPT/Claude/Gemini; they can't see Claude Code sessions.

claude-handoff is the post-hoc, paste-anywhere corner of this map: it works on the JSONL after the fact — old sessions, crashed sessions, sessions that hit the usage limit — needs nothing installed in advance, costs zero tokens by default, can write a real summary when you ask for one (--llm), and produces a document any receiving model can pick up, including claude.ai, ChatGPT and Gemini in the browser or on your phone.

Docs

INDEX.md — file map · docs/DEVELOPMENT.md — architecture, JSONL schema notes, design decisions · AGENTS.md — instructions for AI coding agents · CONTRIBUTING.md · CHANGELOG.md

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_handoff-0.3.1.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_handoff-0.3.1-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file claude_handoff-0.3.1.tar.gz.

File metadata

  • Download URL: claude_handoff-0.3.1.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for claude_handoff-0.3.1.tar.gz
Algorithm Hash digest
SHA256 d1e7ac51a32f3cfbe1773010d56a3bdebced2c9f8b024bcf81fd067e73190ca2
MD5 6314176f8a2e9ee93421262d073bc7cd
BLAKE2b-256 09bbc3fd2d35ebcb2d7bbf700ab299ed69bd87075327666247feff2ae322921e

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_handoff-0.3.1.tar.gz:

Publisher: publish.yml on Vasilispapg/claude-handoff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_handoff-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: claude_handoff-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for claude_handoff-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 59d9dab93627546ad3000c5be9e9c3e840de153b4da9d245ae5955a205a10265
MD5 d42e3d3c3f121d1311ef38cab9b5edd5
BLAKE2b-256 2979f3f2e46d876138dc020a580e9797245b32b72c39991fb43761c86710c379

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_handoff-0.3.1-py3-none-any.whl:

Publisher: publish.yml on Vasilispapg/claude-handoff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.8.1

2 files

0.8.0

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

This release

0.3.1 This release

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page