Today News

Show HN: Baton – Know which of your AI coding agents needs you

Baton: know which AI agent needs you, right now

macOS menu bar
Python 3.9+
works with Claude Code and Codex
MIT license

A local command center for every AI agent you have in flight. Claude Code sessions and
Codex threads, in one glance, so you always know which one needs you right now.

इससे जुड़ी जानकारी

As agents do more work unattended, the hard part stops being doing the work and becomes
knowing which of your N running things is waiting on a decision. Baton reads the signals your
machine already emits (zero manual entry) and surfaces the one that matters: the
🎽 “the baton’s with you” bucket, an agent that ran its leg and handed back to you. That’s
the thing that’s easy to drop when you’re looking elsewhere.

It lives in your macOS menu bar (a relay runner + “N batons for you”); click for the full
picture, click any session to jump straight to it.

Demo: agents hand back while you work, the count ticks up, one click jumps to the session and clears it

Install

curl -fsSL https://raw.githubusercontent.com/neilkpatel/baton/main/install.sh | bash

That clones Baton into ~/.baton, sets up an isolated Python venv (the only deps are rumps
and the FSEvents binding), and installs a login LaunchAgent. The 🎽 appears in your menu bar
immediately, starts at login, and relaunches if it crashes.

Prefer to look first? Clone and run the same script from the checkout:

git clone https://github.com/neilkpatel/baton.git && cd baton
bash install.sh                  # or: bash install.sh --no-autostart

Update: re-run the same one-liner. It pulls the latest into ~/.baton and restarts the app.
Remove the autostart anytime with bash install.sh --uninstall.

Requirements: macOS, Python 3.9+ (3.11+ enables Codex scheduled-automation tracking), and
Claude Code and/or Codex. Baton shows whatever it finds; either alone is fine.

What it does

  • Menu bar glance: the title is a live count of sessions waiting on you. Always visible,
    updates in under a second (it watches your session files with FSEvents rather than
    polling, so it’s both instant and battery-cheap; it idles until something actually changes).
  • Two agents, one view: the dropdown groups what’s waiting by tool (Claude Code / Codex),
    then Working, then Done.
  • Click to jump: click a Claude session and its Terminal.app tab comes to the front;
    click a Codex thread and it opens in Codex via its codex:// deep link. No more hunting
    through windows.
  • Accurate “waiting” signals, per tool:
    • Claude Code: a session that’s idle with an assistant answer as its last turn = waiting.
    • Codex: mirrors Codex’s own unread (blue-dot) state, so a thread you’ve already
      opened doesn’t nag you.
  • Click-to-acknowledge: jumping to a waiting session clears it from the count until it
    produces a new answer, and the session you currently have open in Terminal isn’t counted
    while you’re looking at it. The number goes down when you deal with things.
  • Optional hand-off notifications: off by default (the menu bar is the calm channel); one
    toggle turns on a banner the moment a baton comes back.
  • Recognizable labels: each session is titled by Claude Code’s own running summary
    (ai-title), so you know what it’s about at a glance.

The dashboard

There’s also a full HTML dashboard (server.py + index.html) for the rich multi-tab view.
Open it from the dropdown (“Open full dashboard →”), or:

bash start.sh        # python3 server.py --port 8787  → http://127.0.0.1:8787

Baton dashboard: everything in flight, and where the baton is right now

How it works

Every source is a collector that normalizes into one track record, so the UI never changes
as sources are added:

     
                    WhatsApp Channel                             Join Now            
   
                    Telegram Channel                             Join Now            
   
                    Instagram follow us                             Join Now