ai-baton
Portable, auditable, file-first handoff protocol for AI assistants.
Lets you move between AI tools — Claude Code, Codex CLI, Cursor, or
anything else that reads/writes files — on the same long-running project
without re-explaining context every time. State lives in plain Markdown +
YAML files in your own repo: a memory/ for durable facts and decisions,
a status/CURRENT_STATUS.md for what's happening right now, an
append-only evidence/ trail, handover/ snapshots, and archive/ for
superseded plans. No server, no vector DB, no vendor plugin required —
every change is just a git diff.
Requires local filesystem access — this works with tools that run on your
machine or have been given access to a folder (Claude Code, Codex CLI,
Cursor, Windsurf, Claude Desktop with a filesystem connector, etc.). Plain
web ChatGPT or web Claude.ai chat, without file access, can't read
PROTOCOL.md at all, regardless of Agent Skills support.
Not the first system aiming at cross-tool AI memory — Mem0, OpenMemory,
and Letta solve overlapping problems with a vector store and/or an agent
runtime. This makes the opposite trade-off: zero infrastructure and
git-native auditability, at the cost of semantic search and automatic
extraction. See docs/comparison.md.
Status
Pre-alpha. pip install ai-baton-tool (PyPI distribution name differs
from the ai-baton command — an existing unrelated package blocked that
name). Working: the spec (SPEC.md), the init / validate / status /
list / workspace set / skill install CLI, a default workspace
convention (~/ai-baton-workspace/<project-name>/, its root chosen once
and remembered via ~/.ai-baton/config.json, discoverable across
tools/sessions via ai-baton list), a full worked example
(examples/demo-project/), and an Agent Skills
skill — ai-baton skill install puts it where Claude Code and Codex CLI
look for it, confirmed triggering live in both (a real user test in Codex
CLI discovered and ran the skill correctly, though full compliance with
every rule — e.g. the canary tag, guided-question UI — wasn't confirmed
there). Not yet tested in Cursor.
validate also flags well-known credential formats (AWS/GitHub/Slack
keys, private key blocks) as a heuristic safety net, not a full secrets
scanner, and warns (per-project configurable via .ai-baton.json) when
memory/ gets large enough to be a real token cost every session. Bad
paths now fail with a plain error message instead of a Python traceback.
40 tests pass locally. Not
built: semantic search (by design) and any automated measurement of
handoff effectiveness (methodology sketched in
docs/metrics.md, nothing wired up).
Quick orientation
docs/quickstart.md— install and try it.SPEC.md— the protocol.docs/comparison.md— vs. Mem0 / OpenMemory / Letta / Letta Code.docs/metrics.md— how we'd measure handoff quality.examples/demo-project/— worked example..agents/skills/ai-baton/SKILL.md— install once, an AI tool follows the protocol without being reminded.
License
MIT — see LICENSE.
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 ai_baton_tool-0.0.18.tar.gz.
File metadata
- Download URL: ai_baton_tool-0.0.18.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80b65efe7bb4b329c2cdc485a1d7a8931a4fc672b88f89ad80ab81c0570c1627
|
|
| MD5 |
45459ec391d379e61fbe0397829ea105
|
|
| BLAKE2b-256 |
4a5ea0b282230f8633a1e78bd6dbcaa5af26fc6189e2553eba0bd2b052c84efc
|
Provenance
The following attestation bundles were made for ai_baton_tool-0.0.18.tar.gz:
Publisher:
publish.yml on CilantroFanatic/ai-baton
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_baton_tool-0.0.18.tar.gz -
Subject digest:
80b65efe7bb4b329c2cdc485a1d7a8931a4fc672b88f89ad80ab81c0570c1627 - Sigstore transparency entry: 2423396951
- Sigstore integration time:
-
Permalink:
CilantroFanatic/ai-baton@e67966491940cf5f5fbe8d8399919161aacce672 -
Branch / Tag:
refs/tags/v0.0.18 - Owner: https://github.com/CilantroFanatic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e67966491940cf5f5fbe8d8399919161aacce672 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ai_baton_tool-0.0.18-py3-none-any.whl.
File metadata
- Download URL: ai_baton_tool-0.0.18-py3-none-any.whl
- Upload date:
- Size: 23.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80262f21b34d1141457fb02a8954ad8f2628a1098473cb15a78880e87f9bad16
|
|
| MD5 |
f2cc6622d96a8fdb42bd9b34a08f143f
|
|
| BLAKE2b-256 |
55e51f4931a582b827717ba0b485bfa9a4e61b6f17e3f00357a570fd82532a28
|
Provenance
The following attestation bundles were made for ai_baton_tool-0.0.18-py3-none-any.whl:
Publisher:
publish.yml on CilantroFanatic/ai-baton
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_baton_tool-0.0.18-py3-none-any.whl -
Subject digest:
80262f21b34d1141457fb02a8954ad8f2628a1098473cb15a78880e87f9bad16 - Sigstore transparency entry: 2423396998
- Sigstore integration time:
-
Permalink:
CilantroFanatic/ai-baton@e67966491940cf5f5fbe8d8399919161aacce672 -
Branch / Tag:
refs/tags/v0.0.18 - Owner: https://github.com/CilantroFanatic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e67966491940cf5f5fbe8d8399919161aacce672 -
Trigger Event:
release
-
Statement type: