Your AI coding chats,
ChatRelay keeps your chats from Claude Code, Codex, Cursor, Kiro and Antigravity on all your devices, rewrites every file path for the new machine, and hands a project's context to the next AI tool. Your storage, no server.
Start on one device. Pick up on the other.
Every conversation, tool call and changed file goes to storage you own, then to your other devices. Claude Code and Codex chats show up in the tool's own history list, with every path changed to the new machine. Cursor, Kiro and Antigravity chats open in ChatRelay on any device. After the first upload, only the new lines travel.
# DESKTOP: upload what changed $ chatrelay push --all shop ↑ 3 sessions (delta, 41 KB) invoice-api ↑ 1 session (delta, 6 KB) secret scan: 1 key found → redacted in the upload # LAPTOP: preview first, then write $ chatrelay pull --dry-run shop → D:\work\shop (matched by git remote) ×166 C:\Users\me\shop → D:\work\shop codex 3 threads (Codex is closed: OK to write) cursor, kiro, antigravity 6 chats (open in ChatRelay) nothing written. run without --dry-run to apply
- 1Install and pick the same storage. The same synced folder or the same private GitHub repo.
- 2Get the project folder. For example with
git clone. The path may be different. - 3Bring history to this device. Git projects are matched by their remote. Others you link once.
- 4Check the dry run, then confirm. Turn on auto-sync and it happens by itself from then on.
Start in one tool. Finish in another.
Summarize a project's chats from Claude Code, Codex, Cursor, Kiro and Antigravity into one HANDOFF.md, and put a short version into CLAUDE.md, AGENTS.md or GEMINI.md so the next tool starts with the context. A Codex chat can also become a Claude Code one, or the other way round, with the whole history.
Project overview
Online shop: Next.js front end, Stripe checkout, PDF invoices.
What's done
- Discount rounding fixed in checkout and invoices
- Coupon codes can stack
Key decisions
- Round once, after tax, in cartTotal()
Open bugs
- Refund emails show the pre-discount price
Next steps · Files touched
- cart/total.ts, invoice/pdf.ts, emails/refund.tsx
$ chatrelay summarize --target claude-md project shop (Claude Code 20 · Codex 9 · Cursor 5 · Kiro 3 · Antigravity 4) condensed 1.9M → 84k tokens hidden 3 secrets · 2 .env values · 1 "never send" word model claude-sonnet-5-5 ✓ wrote "Previous context" in CLAUDE.md (the rest of the file is untouched) # any OpenRouter model works too $ chatrelay summarize --model openrouter:<id> --target handoff
CLAUDE.mdAGENTS.mdGEMINI.mdUse the Claude Code or Codex login you already have (no API key), the Claude API, or OpenRouter, including free models.
Find any prompt. See where your tokens go.
Search every prompt and answer in every project and every tool in under a second. Usage shows conversations, messages and tokens per day, the models you used, the hours you work, your streaks and your longest conversations. It is worked out on your device; nothing is sent.
$ chatrelay search discount rounding shop · Codex · Fix checkout total rounding …the discount is rounded before tax… invoice-api · Claude Code · Invoice PDF totals shop · Cursor · Landing page polish shop · Kiro · Spec: stacking coupons notes-app · Antigravity · Offline notes sync 7 matches in 5 conversations (0.2 s) $ chatrelay usage --days 90 conversations 612 messages 19,840 tokens 1.2B active days 71 by model, output / input / cache read …
| Model | Output | Input | Cache read |
|---|---|---|---|
claude-opus-5-5 | 4.1M | 9.8M | 310M |
claude-sonnet-5-5 | 1.6M | 3.2M | 74M |
gpt-5.1-codex | 0.9M | 2.7M | 21M |
claude-haiku-5-5 | 0.2M | 0.6M | 4M |
Example numbers. Conversations and messages cover every tool. Token counts come from Claude Code and Codex, because Antigravity, Cursor and Kiro don't record them. Copy report copies it all as Markdown.
Your history stays where you put it.
ChatRelay has no server of its own. Pick a folder your devices can all see, or a private GitHub repository. Only compressed copies go there; the history folders of your AI tools never move.
Sign in with GitHub, no password stored. One commit per upload, big files split automatically, public repos refused. Also powers the web and phone viewer.
G:\My Drive\chatrelay%OneDrive%\chatrelayEverything in the app, from the terminal.
The installer puts chatrelay.exe next to the app. It works with every tool, runs the auto-sync hooks, and never fails a session. Use it in scripts, with --json for machine-readable output.
$ chatrelay status machine LAPTOP backend github · me/ai-history (encrypted) last sync 2 minutes ago ✓ hooks SessionStart → pull · SessionEnd → push queue empty cleanupPeriodDays 3650
$ chatrelay push --cwd D:\work\shop --redact shop (git:github.com/me/shop) ↑ 2 Claude Code sessions delta · 18 KB ↑ 1 Codex thread delta · 7 KB ↑ 1 Cursor chat 1 KB ↑ 1 Kiro CLI chat 2 KB ↑ 1 Antigravity chat 4 KB ! 1 secret redacted in the uploaded copy (github token) ✓ 1 commit to me/ai-history
$ chatrelay providers claude-code 2.1.x format ok restore on codex 0.160 state_5 / 58 restore on antigravity 2.6.0 IDE + CLI view, search, sync cursor 3.28.7 editor + CLI view, search, sync kiro 1.4.86 editor + CLI view, search, sync
$ chatrelay hooks install backup ~/.chatrelay/backups/…-settings + SessionStart chatrelay pull --hook --quiet + SessionEnd chatrelay push --hook --quiet ✓ your other settings and hooks are kept
$ chatrelay backups 20261105-104211-pull-shop 14 files 20261104-181502-settings 1 file $ chatrelay backups restore 20261105-104211-pull-shop ✓ 14 files put back exactly as they were
We worry about your history, so you don't have to.
Your originals are never changed on upload. Every write is backed up first and shown as a dry run. If a conversation changed on both devices, you keep both. If ChatRelay sees a tool format it doesn't know, it turns writing off instead of guessing.
- End-to-end encryption
- Secrets in the OS keychain
- Logins never touched
- Private repos only
- No ChatRelay server
- Never-send list
One history for all your tools.
Each tool is an adapter that checks the format it finds on your device. Unknown versions are still shown, but writing is turned off with a clear reason.
| Tool | View and search | Sync between devices | Summarize | Open your chats in | Context file |
|---|---|---|---|---|---|
| ✓ | ✓ automatic, on session start and end | ✓ | claude --resume, VS Code history | CLAUDE.md | |
| ✓ | ✓ automatic, a minute after a chat goes quiet | ✓ | codex resume, Codex sidebar | AGENTS.md | |
| ✓ | ✓ to every device | ✓ | ChatRelay on desktop, web and phone | GEMINI.md | |
| ✓ | ✓ to every device | ✓ | ChatRelay on desktop, web and phone | AGENTS.md | |
| ✓ | ✓ to every device | ✓ | ChatRelay on desktop, web and phone | AGENTS.md |
Verified with Claude Code 2.1, Codex 0.160, Antigravity 2.6, Cursor 3.28 with its CLI, and Kiro 1.4 with Kiro CLI 3.1. Summaries can also be written for Gemini CLI as GEMINI.md.
After the first upload, only the new lines of a conversation travel: a few KB instead of the whole file.
How push worksto search about 2 GB of history: every prompt and answer, in every project and every tool.
How search worksYour chats go between your devices and your own folder or private repo. Nobody else holds them.
Safety and privacySet up once, in a few minutes.
Install
Run the installer. A setup wizard finds the history of your AI tools and shows how many conversations each one has.
Choose storage
A synced folder or a private GitHub repo. Name the machine and turn on auto-sync.
Add your other device
Install, choose the same storage and bring history in. From then on it syncs by itself when sessions start and end.
Desktop, phone and browser.
You only install once. New versions arrive by themselves; the app only accepts updates signed with the project's key.
Windows
The full app: sync, auto-sync, search, usage, summaries and the CLI. Lives in the system tray.
ChatRelay_x64-setup.exe
Download
Android
Read every conversation from your GitHub storage on your phone. A read-only viewer.
ChatRelay.apk
Get the APK
Web viewer
The same Rust engine in WebAssembly. Talks only to api.github.com and loads no third-party scripts.
abh1shxkk.github.io/chatrelay-web
Open
macOS and Linux beta
Built by GitHub Actions as .dmg, .AppImage and .deb. Not code-signed and lightly tested.
.github/workflows/desktop-mac-linux.yml
All releases
The Windows installer isn't code-signed yet. If SmartScreen says "Windows protected your PC", click More info → Run anyway.
Which AI tools does it work with?
Claude Code, Codex, Cursor, Kiro and Antigravity, in the editor and in the terminal. Every chat can be viewed, searched, summarized and synced. Claude Code and Codex chats can also be restored into the tool on your other device; Cursor, Kiro and Antigravity chats open in ChatRelay on desktop, web and phone.
Can syncing log me out of my AI tools?
No. ChatRelay only works with your chat history. It never reads, copies or changes the login files of Claude Code, Codex, Cursor, Kiro or Antigravity. If you get logged out, it comes from the tool itself.
What if I continued the same chat on both devices?
Nothing is overwritten. Your copy stays as it is and the other version is saved as a new conversation, for example "… (from DESKTOP)". Both then appear in the tool and sync to your other devices.
My old Claude Code conversations disappeared.
Claude Code deletes conversations older than cleanupPeriodDays (30 by default). ChatRelay can raise it for you, and anything already uploaded can be pulled back from your storage.
Why was a Codex conversation skipped?
ChatRelay never writes to Codex's files while Codex is running. Close the Codex CLI, VS Code panel and desktop app and pull again, or let background sync retry by itself.
Is my code sent to an AI when I make a summary?
Only when you ask for a summary, and only after you confirm. Keys, tokens, passwords, .env values and your "never send" list are hidden first. For client code, use a model whose provider doesn't keep data.