Works with Claude Code, OpenAI Codex, GitHub Copilot Chat and Google Antigravity.
Ferry backs up the conversation history your AI coding assistants keep on your computer, and puts it back: on the same machine, on a new one, or in a different assistant altogether. It runs entirely on your machine and never changes the history it reads from.
Install
Ferry needs Python 3.11 or newer.
pip install ferry-cli
No Python? uv installs Ferry together with a Python of its own, without touching the rest of your system:
uv tool install ferry-cli
Either way, the command you run is ferry.
Moving to a new laptop
On the old machine, export each assistant you use into a bundle. A bundle is an ordinary folder you can copy anywhere.
ferry export --tool claude-code --output ferry-claude-code
Copy the folder to the new machine, close the assistant there, and import it. The first run is a preview that writes nothing:
ferry import --bundle ferry-claude-code --tool claude-code --dry-run
ferry import --bundle ferry-claude-code --tool claude-code
That is the whole idea. Backing up, restoring and moving to another assistant are all the same two steps: export to a bundle, then import from it.
The menu
Run ferry on its own and it finds your assistants, tells you what it sees,
and offers everything as a menu you move through with the arrow keys:
✓ Claude Code 2.1.266 · 4 conversations
✓ OpenAI Codex 0.146.0-alpha.3.1 · 5 conversations
✓ GitHub Copilot Chat 1.136.2 · 5 conversations
✓ Antigravity 2.12.2 · 2 conversations
Escape backs out of any screen without doing anything, and every screen that writes starts on the option that writes nothing. The guide walks through each one.
Supported assistants
| Assistant | Export | Import | Last checked with |
|---|---|---|---|
| Claude Code | yes | yes | 2.1.266 |
| OpenAI Codex | yes | yes | 0.146.0-alpha.3.1 |
| GitHub Copilot Chat | yes | yes | VS Code 1.136.2 |
| Google Antigravity | yes | yes | 2.12.2 |
None of these tools publish their storage formats. Ferry reads them as they are, and FORMATS.md records what was found and on which version. A tool update can change a format without warning, so if something looks wrong after an update, the troubleshooting page is the place to start.
Moving a conversation to a different assistant
A conversation from any of the four can be written into any of the others, and you can open it there and carry on working in it. Ferry only converts when you ask, tells you first what the conversion costs, and marks the result as converted rather than passing it off as native.
Two things do not survive the trip. The assistant's private reasoning is signed by the company whose model produced it, so no other assistant can accept it. And tool calls, such as commands the old assistant ran, arrive as readable text rather than as calls the new assistant can run again. CROSS-TOOL.md has the details.
Letting an AI assistant drive Ferry
Ferry ships with a skill file that teaches an AI coding assistant when to use Ferry and how, including the rules it must keep. Claude Code, OpenAI Codex, GitHub Copilot Chat and Google Antigravity all read the same kind of file, and one command installs it for every one of them Ferry finds on your computer:
ferry skill --install
After that you can simply ask, "move my Claude Code chats to my new laptop",
and the assistant runs the commands, checking with you before anything that
writes. ferry skill on its own prints the file, for any other assistant.
What Ferry does not do
It moves conversations, not memory. A conversation you restore or convert
keeps its own context, and you can pick it up where you left off. Some
assistants also keep separate notes about you that apply to every chat, and
those stay behind. Project instruction files such as CLAUDE.md and
AGENTS.md live in your project folder, so they travel with your code anyway.
It does not reach cloud chat history, such as claude.ai or chatgpt.com, only what is stored on your computer. It does not move your project files either: copy those the way you normally would.
If you would rather carry the gist of a long conversation than all of it, Compact turns one conversation into a short document to paste into a new session. It runs offline, with no account or model, and every line it writes is either quoted from your conversation or counted from it.
Safety
- Your original history is never changed. Exporting only reads.
- No network calls. Nothing Ferry reads ever leaves your computer.
- Close the assistant before importing into it. VS Code and Antigravity keep their conversation lists in memory and would undo an import made while they are open. Ferry checks and tells you.
- Backups come first. Anything an import replaces, and anything a delete
removes, is copied into
~/.ferry/backupsbeforehand. Ferry never deletes a backup on its own. - What is already there stays. If an assistant already has a conversation, Ferry keeps its copy unless you choose otherwise.
- Encryption is optional, and there is no recovery. Ferry can seal a bundle
into a single encrypted
.ferryfile. It asks for the passphrase twice and proves the file opens before offering to remove the unencrypted copy. Lose the passphrase and the bundle cannot be opened by anyone. - What Ferry imported, it can take back, but only while nobody has worked in it since, and never a conversation of your own.
Documentation
| Page | For |
|---|---|
| Guide | Every screen and every command |
| Moving between assistants | What converting costs, and what works |
| Troubleshooting | When something does not show up |
| Storage formats | Where each assistant keeps its history |
| Architecture and adapters | How Ferry is built |
| Development | Setting up to contribute |
| Changelog | What changed in each release |
License
MIT. See LICENSE.
Metadata
Release files for ferry-cli 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ferry_cli-0.1.1.tar.gz | 480.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ferry_cli-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 786.0 kB
Release files / ferry_cli-0.1.1.tar.gz
| Download URL | ferry_cli-0.1.1.tar.gz |
|---|---|
| Size | 480.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
30afd82db4efb8bc6ca2deb453ff59f8757ac16f4f1b2f200a89d1fafefd19d6
|
|
BLAKE2b-256 checksum How to use checksums |
19fd610ad9c484e39eb0f554559a633af8d8f326f56e1970bd17af2bedceac79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.
Transparency logRelease files / ferry_cli-0.1.1-py3-none-any.whl
| Download URL | ferry_cli-0.1.1-py3-none-any.whl |
|---|---|
| Size | 305.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb478571ae942c6b437175f38ba94017d5c96727174cee0655dcf1d4d22e99fc
|
|
BLAKE2b-256 checksum How to use checksums |
5522a27b3b56f35ecff07ef58c17436cdaa917c303074c042dda4e5a1174678d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.
Transparency log