Your agents run in parallel.
Your attention doesn't.

Every Claude Code session in your menu bar — which one finished, which one is blocking on you, and one click back to its terminal.

macOS 13.0 or later · Apple Silicon & Intel · Signed & notarized by Apple · Zero network calls

SESSIONS1 needs you
auth-flow
VS Code · ttys004 · waiting on your approval
Needs you
api-refactor
▸ Edit · router.ts
Working
fix-flaky-tests
⏱ 6m 12s · 84k tokens · ✦ Sonnet 5
Done
docs-pass
Terminal · ttys009
Idle
Every session you are running, ranked so the one blocking you is on top.
Runs entirely on your Mac· Zero network calls· Signed & notarized by Apple· Not affiliated with Anthropic

It reads process state and the status files the hooks write — not your transcripts.

What it does

Three things, done properly.

Status you can trust

TaskBeacon does not decide a session's state from one signal. It fuses the Claude Code hook events, live inspection of the process tree, and the daemon's own session state. That is why it does not stay red after you click approve, and why it keys everything by tty — the one identifier that stays put for the life of a terminal.

One click back to the exact terminal — even the third pane in the same VS Code window

Click a row and you land in that session's terminal with the cursor in its input box, and a breathing ring lights up the pane you landed on. Pane-level, not window-level. ⌃⌥⌘N walks you to the next session that needs you.

Status and usage in one place

A working row shows the tool step it is on right now (▸ Edit · router.ts). A finished row shows elapsed time, tokens, the model that session is on, and how much of its context window is gone — so you know who is burning Opus on chores before you open anything.

fleet-bar — VS Code
zsh — ttys005

tests passed
3 files changed
 

zsh — ttys008

? Bash(git push)
  Do you want to
  proceed?

zsh — ttys006

Edit router.ts
  esc to interrupt
 

The landing ring. Three terminals in one window, and no doubt about which one you were just sent to. Eight ring styles, configurable per status.
VS fleet-bar 1 1 1
ttys008
Needs you
ttys006
Working
ttys005
Done
miner
ttys004
Idle
The main window. Grouped by project window, with per-status counts on the header.
4 23:41
The menu bar itself. Counts per status, so most of the time you never open anything.
The question you were about to ask

Why does it need Accessibility access?

Because jumping you back to the right terminal means touching other apps. That is macOS's definition of an "accessibility" action, and macOS is right to gate it. Here is exactly what TaskBeacon does with the permission — and what it never does.

What it does with the permission

  • Reads window and tab titles, so it can find the terminal that belongs to a session
  • Raises that window and focuses the correct split pane when you click a row
  • Draws the highlight ring on the pane it landed on

What it never does

  • Read the contents of your terminal, your code, or your Claude transcripts
  • Take screenshots or record your screen — Screen Recording is not requested at all
  • Send anything over the network. TaskBeacon makes zero network calls.
  • Keep running in the background once you quit it
TaskBeacon is closed source — so don't take any of that on faith. Reading source wouldn't settle it anyway: the thing running on your Mac is the binary, not the source. So every claim above is written to be checked against the copy you downloaded, from outside it. Three commands, and none of them need anything from us:
  1. It asked for one permission, and it isn't network. The entitlement list lives inside the code signature — change one byte of the app and the signature breaks and macOS won't launch it.
    codesign -d --entitlements - /Applications/TaskBeacon.app com.apple.security.automation.apple-events — that's the whole list no network.client, no network.server, nothing else
  2. The binary has no network stack in it. An app can't make requests without the machinery to make them, and it verifiably isn't there.
    otool -L /Applications/TaskBeacon.app/Contents/MacOS/TaskBeacon Cocoa, AppKit, Foundation, Carbon, CoreGraphics, Swift runtime no CFNetwork, no Network.framework, no libcurl, no libssl
  3. Zero sockets while it runs. Not "a few harmless ones" — none, on launch and after a week of uptime.
    lsof -i -a -p $(pgrep -x TaskBeacon) no output at all
    Stronger versions of the same check: leave it behind Little Snitch or LuLu for a week — it will never once ask you to allow a connection. Or just turn off Wi-Fi and use it all day: every feature behaves identically, because none of them ever involved the network.
  4. It's the copy we signed, and Apple scanned it. Signed with an Apple Developer ID and notarized, so macOS can prove the app on your disk is byte-for-byte the one that was signed (spctl -a -vvv /Applications/TaskBeacon.appsource=Notarized Developer ID).
And the screen claim needs no command at all: macOS won't let any app read your screen without listing it under System Settings › Privacy & Security › Screen Recording. TaskBeacon isn't there, and never asks to be. Full detail, permission by permission, on the privacy page.
Measured, not asserted

How it compares

Every row below is a fact someone else can check — a line of source, a reproducible run, or a config value. Rows we could not measure say so.

Behaviour TaskBeacon c9watch v0.8.1
reads the transcript
claude-status-bar
hook-driven
Still reports "needs attention" after you already approved No — cleared by process probing plus a timestamp guard Conditional — allowlisted commands are read correctly Yes, until the command ends (replayed against its own hook code)
Flips a busy session to "idle" once the transcript has been quiet for 30 s No — process tree + daemon state, never file mtime 0 of 27 correct past its own 30-second threshold n/a — not transcript-driven
Reports a session that is genuinely blocked waiting on you 18 of 18 0 of 18 — the user sees "waiting for input" not measured
Finds every live session Yes — discovered from live processes one live session missed at all 58 sample points not measured
Lands on the correct split pane, not just the window Pane level + a ring on the landing spot window level window level
Minimum macOS 13.0 claude-status requires 26.2 or later — 13 major versions newer
Network use Zero network calls varies by project
How these numbers were produced, and where they stop being true.
  1. Sample. One machine, a five-minute window of real work: 58 sample points, 348 observations. macOS 26.6, Apple Silicon, 2026-08-03, c9watch v0.8.1, claude-status-bar 19281b2. These are not exhaustive-scenario numbers, and we do not present them as universal.
  2. The trade-off. TaskBeacon needs its hooks installed. c9watch needs nothing at all. Its lag is the price of that zero-integration design — quoting the scores without quoting the trade-off would not be an honest comparison.
  3. No circular scoring. The daemon's own state is both a reference and one of TaskBeacon's inputs. In all 18 blocked-session observations, TaskBeacon's raw hook state was already needs on its own, so the 18 of 18 is not the reference marking its own homework.
  4. Our own weak spot. TaskBeacon keys sessions by terminal tty. In a host that never allocates a pty, it stays completely silent — the session does not appear as a wrong row, it does not appear at all. Everything above assumes a terminal session. The full write-up is here.
  5. The four Notification-hook failure modes are on record as issues in anthropics/claude-code (#12048 / #59718 / #58909 / #19627); TaskBeacon has a signal source for each that does not depend on that hook. Three of the four are closed — this is not a claim that the official hook is broken today.
Full method, raw runs and source citations: TaskBeacon vs. the official notification hook.
No surprises

Install in 30 seconds

STEP 1

Download the installer

One file, one icon. Nothing to configure first.

STEP 2

Open it and click Install

It puts TaskBeacon in Applications, installs the status hooks into ~/.claude, and adds the companion editor extension if you have VS Code, Cursor or Windsurf. Nothing else on your system is touched.

STEP 3

macOS asks you to confirm — once

That is the standard prompt every app downloaded from the web gets. Click Open. It does not come back.

TaskBeacon is signed with an Apple Developer ID and notarized by Apple, so you will not see the "unidentified developer" warning, and you will never be asked to strip a quarantine flag from the terminal or dig through System Settings to allow it. If any Mac app asks you to do that, it has not been notarized.

Stop patrolling terminals. Let them tell you.

Free while it is in beta. Runs on macOS 13.0 and later, Apple Silicon and Intel, and never phones home.

Signed & notarized by Apple · Zero network calls · This build expires 1 October 2026 · Uninstalls cleanly (how)

Pricing

Free while it is in beta.

Still under active development — new builds and fixes land on this page.

One email per release — new builds and bug fixes, nothing else. No newsletter, no drip sequence.

Questions

Frequently asked

Why does TaskBeacon need Accessibility permission?

For two things only: reading window and tab titles so it can match a session to its terminal, and raising and focusing that window — including the correct split pane — when you click a row. It never reads terminal contents, your code, or your Claude transcripts, never takes screenshots, and makes no network calls. It does not request Screen Recording at all.

Does it send my code or session data anywhere?

No. TaskBeacon runs entirely on your Mac and makes zero network calls. It reads local process state and the local status files under ~/.claude/taskbeacon/.

You can verify that from outside the app: run it behind an outbound firewall such as Little Snitch and nothing will ever ask for permission, because nothing is ever sent.

It's closed source — why should I trust it?

You shouldn't have to. Publishing the code wouldn't actually settle this question either: what runs on your Mac is the binary, not the source, and nothing ties one to the other unless you compile it yourself.

So TaskBeacon is built to be audited from outside instead — against the exact copy you downloaded. Its signed entitlement list contains one permission and no network one (codesign -d --entitlements -). Its binary links no network stack at all (otool -L). It opens no sockets while running (lsof -i -a -p $(pgrep -x TaskBeacon) prints nothing). And Apple has notarized this exact build (spctl -a -vvv). Four checks, none of which rely on our word — the full walkthrough with expected output is on the privacy page.

How does it know a session's status?

Three independent sources, resolved in priority order: the Claude Code hooks write a state file per terminal; the app inspects the process tree of that terminal to see whether work is actually running; and the daemon's session state fills in cases the hooks cannot reach, such as a background subagent asking for permission.

Everything is keyed by controlling tty, which is unique per terminal and stable for its whole life — unlike session IDs, which can change inside a single process, or the SSE port, which every terminal in one VS Code window shares.

Is TaskBeacon affiliated with Anthropic?

No. TaskBeacon is an independent, unofficial tool and is not affiliated with, endorsed by, or sponsored by Anthropic. Claude and Claude Code are trademarks of Anthropic, PBC.

How do the hooks get installed?

The installer writes ~/.claude/hooks/taskbeacon-status.sh and registers the hook entries in ~/.claude/settings.json for you. If you already have hooks configured, yours are preserved. Hooks only affect sessions opened after installation, or sessions that are still active — a terminal that has fired no event since install has no state file yet.

Which Claude Code versions are supported?

TaskBeacon uses the documented Claude Code hook events and the local session state the CLI already maintains, so it tracks current releases. The exact verified version range is published with each release on the changelog.

macOS says it cannot open the app — what do I do?

On first launch macOS shows a one-time confirmation for anything downloaded from the web: click Open. That is the normal dialog, not an error, and it does not come back.

If you instead see "unidentified developer" or a blocked-app message, you did not get the build from this site — TaskBeacon is signed with an Apple Developer ID and notarized by Apple. Re-download it from taskbeacon.app/download.

How do I update it?

Download the current build and run the installer again — it replaces the app in place. Your settings, custom project icons and hidden-project list live outside the app bundle and are kept.

There is deliberately no update check yet, because today TaskBeacon makes zero network calls and that is a property worth keeping simple. If an opt-in update check is added, it will be announced on the changelog and documented on the privacy page before it ships.

How do I remove it completely?

Three steps, and nothing is left behind:

1. Drag TaskBeacon.app to the Trash — or use the uninstall option in the installer, which does all of this for you.
2. Delete the state directory: rm -rf ~/.claude/taskbeacon, and remove the taskbeacon-status.sh hook entries from ~/.claude/settings.json.
3. Revoke the permission in System Settings › Privacy & Security › Accessibility.

What does it cost?

Nothing while it is in beta. Each build carries an expiry date — this one stops working on 1 October 2026, and the app tells you well in advance; you then download the current build from this page. What will never happen: a build that quietly stops working. If you want an email when a new build lands, the form is just above.