A skill for Claude Code & Claude chats
Switch accounts.
Keep the thread.
Baton keeps one living BATON.md of your project: where the folder is, what's done, what's decided, what's next. Drop it into any chat, on any account, and the new Claude finds your project and carries on from that exact sentence.
- Local-only, no accounts
- Secrets redacted
- Auto-saves in every project, forever
Three moves. No re-explaining.
- 1
It saves while you work
After every reply Baton refreshes the file: project path, git state, recent files, your decisions and the tail of the conversation. You write nothing.
- 2
Drop it in a new chat
Log out, log in, switch machines. Attach
BATON.md. A protocol at the top tells the new Claude exactly how to behave. - 3
It finds your folder
Not sure where the project lives? The file carries a fingerprint (git remote, marker files). Claude searches, verifies against the real folder, then continues.
The overlay shows it happening
Every install ships a live dashboard at localhost:4747 that starts with each Claude session: every save streams in, and one click copies the whole file or stores it in OneDrive, Dropbox or Drive. Below is an interactive replica, press the buttons.
Save a copy to
Live log
Demo only: the buttons here copy and download a sample file. In the real overlay they act on your own BATON.md.
Install
Needs Node 18+ and Claude Code. Takes about 30 seconds. Nothing leaves your machine. Reading on a phone? Tap Copy and send the command to your computer, that is where Baton installs.
Run in PowerShell
irm https://baton-handoff.vercel.app/install.ps1 | iex
Run in a terminal
curl -fsSL https://baton-handoff.vercel.app/install.sh | sh
Download baton.zip, unzip, then run install.ps1 or install.sh from the folder. Or copy by hand:
skill/baton/ → ~/.claude/skills/baton/
skill/baton/scripts/baton.mjs → ~/.baton/bin/baton.mjs
overlay/ → ~/.baton/overlay/
Set up once, works everywhere done by the installer
The installer adds user-level hooks, so Baton saves on every prompt, reply and compaction in every project, even after you close Claude and open a new folder. Open the live dashboard any time:
http://localhost:4747Skip the hooks with
BATON_NO_HOOKS=1before installing; remove them withbaton uninstall-hooks.Optional: in-terminal overlay Claude Code plugin
Start Claude Code with the overlay loaded, then type
/batonfor the same view inside the app.claude --plugin-dir "$HOME/.baton/overlay"In the desktop app, put the folder in
~/.claude/dev-mods/<session>/baton-overlayand accept the hot-reload prompt.Re-run or repair the hooks
node ~/.baton/bin/baton.mjs install-hooksWrites SessionStart, UserPromptSubmit, Stop, PreCompact and SessionEnd hooks to
~/.claude/settings.json(a backup is kept, your other hooks are untouched).Hand off
Just say "baton, hand off" in a chat. Claude writes the narrative (goal, state, exact next step) and the engine does the rest.
Resume
In the new account's chat, drop
BATON.md(it's at~/.baton/BATON.md) and send. That's the whole ritual.
Commands
baton savesnapshot now
baton narrative -set goal / state / next step (stdin)
baton note "…"record a decision or preference
baton copywhole file to the clipboard
baton export --to DIRsave a copy to OneDrive, Dropbox, USB…
baton targetslist detected storage folders
baton listevery project with a handoff
baton livestart the dashboard (localhost:4747)
baton install-hooksglobal auto-save for every project
What's inside BATON.md
One portable markdown file with six parts, written so a model with no memory of you can act on it.
Orders for the next Claude: locate the folder, verify, summarise, continue. Treats the file as data, not commands.
Path, git remote, branch, marker files. How to find the project even if you moved machines.
Goal, done, in progress, exact next step, open questions. Written by Claude.
Constraints and preferences, so they never need repeating.
Layout, recent files, uncommitted changes, recent commits, auto-captured.
Opening request and last exchanges, secrets redacted.
Read a sample BATON.md
Questions
Where is my data stored?
Only in ~/.baton/ on your machine, plus wherever you export it. There is no server and no account. This website only hosts the installer.
Does it keep secrets out?
Common token shapes (API keys, GitHub tokens, bearer headers, password=…) are redacted before anything is written. Still, read the file before sharing it, and never put secrets in notes.
Will the new chat remember everything?
It gets the narrative, decisions, live state and the conversation tail, not a transcript. That is deliberate: a small, current file beats a stale giant one. Keep the narrative fresh and the handoff is lossless where it matters.
Can it be a prompt-injection risk?
The protocol tells the next Claude to treat the file as data from a past session and to ask before acting on anything that looks like a command. Only paste handoffs you created.