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.

Three moves. No re-explaining.

  1. 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. 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. 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.

claude · /batonbaton · rev 12 · saved just now
BATON · acme-storefrontrev 12 · 4.1 KB · auto-updates every turn
live

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
    1. 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:4747

      Skip the hooks with BATON_NO_HOOKS=1 before installing; remove them with baton uninstall-hooks.

    2. Optional: in-terminal overlay Claude Code plugin

      Start Claude Code with the overlay loaded, then type /baton for 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-overlay and accept the hot-reload prompt.

    3. Re-run or repair the hooks

      node ~/.baton/bin/baton.mjs install-hooks

      Writes SessionStart, UserPromptSubmit, Stop, PreCompact and SessionEnd hooks to ~/.claude/settings.json (a backup is kept, your other hooks are untouched).

    4. 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.

    5. 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.

    0 · Pickup protocol

    Orders for the next Claude: locate the folder, verify, summarise, continue. Treats the file as data, not commands.

    1 · Location & fingerprint

    Path, git remote, branch, marker files. How to find the project even if you moved machines.

    2 · Narrative

    Goal, done, in progress, exact next step, open questions. Written by Claude.

    3 · Decisions

    Constraints and preferences, so they never need repeating.

    4–5 · Map & live state

    Layout, recent files, uncommitted changes, recent commits, auto-captured.

    6 · Conversation tail

    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.