Documentation
Everything to install CodeBaton and query a teammate's live Claude Code session.
# What it is
CodeBaton lets you query a teammate's live Claude Code session — the one running locally on their own laptop — and get a cited answer in seconds: what they're building, what they decided, what they ruled out. No pasted transcripts, no cloud sandbox, no interrupting them.
It ships two ways: a desktop app (a tray + dashboard, everything bundled) and a CLI (for terminal-first devs). Both run the same engine and expose the same four slash commands inside Claude Code.
# Install
Desktop app (macOS)
Download the .dmg, drag CodeBaton to Applications, and open it. It bundles its own Python runtime — no prerequisites. Apple Silicon, beta, currently unsigned (right-click the app → Open the first time to bypass Gatekeeper).
CLI (macOS · Linux · Windows)
❯ pipx install teammate-sync
❯ teammate-sync init # GitHub sign-in
❯ teammate-sync up # start the background daemon
Then restart Claude Code so it picks up the new hooks, MCP server, and slash commands. Requires pipx and Python 3.11+.
# First-time setup
teammate-sync init (run once) does all of this:
- Opens your browser to GitHub OAuth. On the org-access screen, click Grant for the org you want as your workspace.
- Saves your token to
~/.teammate-sync/auth.json(mode 0600, never synced). - Asks which GitHub org is your workspace (teammates are discovered from there).
- Installs the
/connect/ask/shared/disconnectslash commands. - Wires session hooks into
~/.claude/settings.jsonand registers the MCP server.
init (browser OAuth + a one-time org pick). A fully in-app sign-in is on the way.# The four commands
Type these inside any Claude Code session.
/connect <teammate> | Share this session with a teammate. They /connect you back — mutual means trusted. Per session, you choose what's visible. No args lists workspace status. |
/ask <teammate> <question> | Query their live session in plain language. Cited answer in seconds. Comma-separate handles to ask several at once. |
/shared | Audit what you're sharing right now, and with whom. |
/disconnect [<teammate>] | No args wipes every connection. Pass a handle to remove just that one. |
Sharing is per session: every new Claude Code session starts un-shared, even with people you're connected to. Re-run /connect <teammate> in each session you want visible. When a session ends, its share auto-revokes.
# Daemon & app
A small background daemon syncs only the sessions you've connected. Manage it from the CLI:
teammate-sync up | Start the daemon in the background (no terminal to keep open). |
teammate-sync down | Stop it. |
teammate-sync logs -f | Tail the daemon log. |
teammate-sync upgrade | One-shot: stop → upgrade → refresh commands → restart. |
teammate-sync dashboard | Open the desktop dashboard window (connections, sessions, activity, settings). |
teammate-sync app | macOS menu-bar tray. Add --install-launchagent to auto-start at login. |
The desktop .dmg bundles the tray + dashboard, so you don't run these by hand. The CLI path uses up/down and is fully headless unless you opt into app.
# Team setup
Everyone installs CodeBaton and signs in to the same GitHub org. To query a teammate, both of you connect:
# on your laptop, in Claude Code
❯ /connect dario
# on dario's laptop
❯ /connect <your-handle>
# now either side can ask
❯ /ask dario what did you decide about pagination?
Mutual /connect auto-accepts — no separate approval step. If only one side connects, the other sees a pending invite.
# Privacy
- Default: nothing is shared. The daemon runs but stays idle until you
/connect. - Per-session, per-recipient. You opt one session in, to specific people you name. Other sessions never leave your machine.
- Org-scoped. Only members of your GitHub org can connect at all.
- Auto-revoke. Ending the session — or running
/disconnect— wipes the shared copy immediately. - Token stays local. Your GitHub token lives in
~/.teammate-sync/auth.jsonand is never uploaded.
# Troubleshooting
Slash commands don't appear
Fully restart Claude Code — custom commands load at session start.
/ask returns "not found" or empty
The other side's daemon may not be uploading. Check teammate-sync logs on their machine. Also confirm they ran /connect <your-handle> in the session you're trying to read — trust persists, but sharing is per session.
/mcp shows "Failed to connect"
The MCP entry points at a binary that's moved (e.g. after a reinstall). Re-run teammate-sync init.
Daemon won't stay running
teammate-sync logs for the error, then teammate-sync down && teammate-sync up. First request after idle can be slow (backend cold-start, ~5–10s).
The app shows the "Apple cannot verify" warning
The beta build is unsigned. Right-click the app → Open once to allow it.
# Uninstall
❯ teammate-sync down
❯ pipx uninstall teammate-sync
❯ claude mcp remove teammate-sync --scope user
❯ rm -rf ~/.teammate-sync
# also remove the slash commands + the hooks block in ~/.claude/settings.json