Universal AI chat to local agent handover tool
Project description
handover
Design in chat. Build in terminal. Zero context lost.
handover is an open-source CLI tool that bridges AI chat interfaces (Claude, ChatGPT, Gemini, and others) to local terminal coding agents (Claude Code, Codex CLI, etc.). It extracts decisions, plans, and intent from a chat conversation and generates structured handover artifacts that a local agent can immediately act on — without re-explaining anything.
Install
pip install handover
Quickstart
# Basic usage — single conversation file
handover --input conversation.json --output ./my-project/
# List all conversations in a bulk export
handover list export.jsonl
# Bulk export — select a specific conversation by title
handover --input export.jsonl --title "API Design Discussion" --output ./my-project/
--dry-run Demo
$ handover --input chat.json --dry-run
🔍 Parsing conversation: "API Design Discussion"
Source: claude | Messages: 34 | Format: single-json v1.0
📋 Extracted HandoverContext:
Goal: Build a FastAPI REST API with JWT auth and PostgreSQL
Tech Stack: Python, FastAPI, PostgreSQL, pytest
Decisions:
• async handlers — high concurrency expected
• JWT auth — stateless API requirement
Tasks: 6 items
Constraints: 2
Open Questions: 1
📄 Would write:
→ ./my-project/CLAUDE.md (1.2 KB)
→ ./my-project/PLAN.md (0.4 KB)
Run without --dry-run to write files.
Supported Input Formats
| Source | Format | How to Get |
|---|---|---|
| Claude.ai bulk export | .jsonl (one JSON object per line) |
Settings → Privacy → Export Data |
| Claude.ai single chat | .json |
Claude Conversation Exporter browser extension |
| Claude.ai single chat | .md |
Browser extension (Markdown export) |
All Flags
handover --input chat.json --output ./my-project/ --source claude # explicit adapter
handover --input chat.json --output ./my-project/ --dry-run # print, don't write
handover --input chat.json --output ./my-project/ --no-llm # rule-based only, no API key needed
handover --input chat.json --output ./my-project/ --launch # run `claude` after writing
handover --input chat.json --output ./my-project/ --template ~/.handover/templates/
handover list export.jsonl # enumerate conversations in bulk export
handover init # scaffold customizable templates to ~/.handover/
Roadmap
| Phase | Source | Target | Status |
|---|---|---|---|
| 1 | Claude chat | Claude Code | This release |
| 2 | ChatGPT, Gemini, Perplexity | Claude Code | Open contribution path |
| 3 | Claude Code sessions (~/.claude/projects/) |
Claude chat | High value — spec next |
| 4 | Any chat | Codex CLI, Aider, Goose | Future |
Contributing
The primary contribution path is adding a new source adapter. Each adapter is an isolated Python class anyone can own end-to-end. See docs/adding-an-adapter.md for the step-by-step guide.
For general contribution guidelines, see CONTRIBUTING.md.
Full PRD
The complete Product Requirements Document is available at handover-prd-v2.md.
License
MIT © 2026 Mohan Krishnaa Alavala
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file handover-0.2.0.tar.gz.
File metadata
- Download URL: handover-0.2.0.tar.gz
- Upload date:
- Size: 40.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4169dfdb4bf4db7f2b1d0a29257612df49c9771bc187340f45bd221518bf8325
|
|
| MD5 |
ca9db12242cbe6bb01293d6d22bdd5aa
|
|
| BLAKE2b-256 |
430e2c0cbc8cd68f9e57b0f9a25c1cb5c6a13887d3c4164192032c3770986423
|
Provenance
The following attestation bundles were made for handover-0.2.0.tar.gz:
Publisher:
release.yml on mohankrishnaalavala/handover
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
handover-0.2.0.tar.gz -
Subject digest:
4169dfdb4bf4db7f2b1d0a29257612df49c9771bc187340f45bd221518bf8325 - Sigstore transparency entry: 1239437950
- Sigstore integration time:
-
Permalink:
mohankrishnaalavala/handover@ab4fb9c91e87712fa966929dcbcb563b55817c5d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mohankrishnaalavala
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ab4fb9c91e87712fa966929dcbcb563b55817c5d -
Trigger Event:
push
-
Statement type:
File details
Details for the file handover-0.2.0-py3-none-any.whl.
File metadata
- Download URL: handover-0.2.0-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35e9718c29f088f3bdd07ad0a938b03b53c606d485a2f199473d95f350e204e3
|
|
| MD5 |
65195e98977cdb935c36453727f22dd4
|
|
| BLAKE2b-256 |
73bb8acb9be376bb4a3baa5b38b9757e519e965b178d65d05f59e07cec3d10ac
|
Provenance
The following attestation bundles were made for handover-0.2.0-py3-none-any.whl:
Publisher:
release.yml on mohankrishnaalavala/handover
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
handover-0.2.0-py3-none-any.whl -
Subject digest:
35e9718c29f088f3bdd07ad0a938b03b53c606d485a2f199473d95f350e204e3 - Sigstore transparency entry: 1239437951
- Sigstore integration time:
-
Permalink:
mohankrishnaalavala/handover@ab4fb9c91e87712fa966929dcbcb563b55817c5d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/mohankrishnaalavala
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ab4fb9c91e87712fa966929dcbcb563b55817c5d -
Trigger Event:
push
-
Statement type: