benatsf

Batonpass — Development skill for Claude Code

Development community

Local, verbatim session handoff between Codex and Claude Code, in both directions, plus messages between the two agents.

How to install Batonpass

This entry records only its repository, not the path inside it, so there is no exact command to give. Open benatsf/batonpass and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Batonpass does

Local, verbatim session handoff between Codex and Claude Code, in both directions, plus messages between the two agents. On macOS, also keeps Claude desktop's Code-tab sessions visible in every Claude account.

Alternatives in Development

  • Claude Keysmith — Managed Claude Code instruction deployment with safe CLI recovery and an unsigned macOS/Windows desktop beta 696 ★
  • Clarc — Native macOS client for Claude Code — a GUI desktop app built with SwiftUI 363 ★
  • Cc Bar — Native macOS menu bar app: track quota, usage and cost for Codex (multi-account) and Claude Code, from your me 119 ★

README

batonpass

Automatic, local, verbatim session handoff between Codex and Claude Code.

Finish a turn in Codex, open Claude Code in the same repository, and it already knows what Codex just did: the last exchanges word for word, the goal, the pull requests and the state of the branch. The same works from Claude Code to Codex. No command to remember, no hosted service, no model-written summary.

While both work on the same repository, either one (or you) can also message the other with `baton send`; the message shows up in the other agent at its next prompt, tool call or turn end.

![A real Codex turn on a demo repo, then a fresh Claude Code session in the same repo that already knows what Codex did and the rule it was given](docs/demo.gif)

How it works

  • Stop hook (both tools, runs in the background): reads the new lines of the session transcript, removes secrets, stores the dialogue in a local SQLite ledger (~/.baton/baton.db) and renders a numbered snapshot of the project.
  • SessionStart hook (both tools): injects the latest brief, about 2,000 tokens, as context. No network call, no model call.
  • PreCompact hook: stores everything before the tool compacts its own context.
  • UserPromptSubmit, PostToolUse and Stop hooks (both tools): deliver messages from the other agent. See Messages between agents.
  • Sessions are grouped by git remote, so clones and worktrees of one repository share one history.

The brief is framed as prior context, not instructions, and always tells the new session how to look further back: `baton search ""`, `baton show --full`, or the original session (`codex resume `, `claude --resume `).

Install

Requires Node.js 24 or later.

npm install -g @batonpass/cli
baton install --dry-run
baton install

`baton install` merges five hooks into `~/.claude/settings.json` and `~/.codex/hooks.json`, installs the `baton-resume` and `baton-message` skills for both t