needs-you

One inbox for “you have to do something.”

Your agents, servers and CI jobs post when they need you. A small pill on your Mac shows it. When it's handled, it goes away.

Your Mac is the hub: the app holds the alerts itself. No server, no account, no cloud.

How it works

  1. Your Mac is the hub. The app runs a hub: a small SQLite database behind a tiny web server, one Python file. It holds your alerts; there's nothing else to install.
  2. Senders post to it. A Claude session, a cron job or a CI step runs the one-file needs-you command. If your Mac is asleep, the alert waits in a local outbox and goes out when it wakes.
  3. The pill shows it until it's handled. It floats over everything and never takes focus. The sender clears it, or you click Done. Nothing piles up.

Server hubs are optional, for redundancy: the same hub on an always-on Linux server, so alerts land while your Mac sleeps. Most people don't need one. Under the hood has the details and the measured numbers.

How agents use it

An agent posts only when it's blocked on you, with a link to where you act: the PR, the ticket, or the session's folder in your editor. Here, an agent on devbox asks before it runs a migration:

needs-you add --key "claude-code:devbox:acme-api" --priority urgent \
  --title "Claude needs permission: acme-api" \
  --link "VS Code=vscode://vscode-remote/ssh-remote+devbox/home/dev/acme-api"
The pill springs out with the card. Its button names the link and, fainter, where it really goes (vscode here, the site for a web link), so a label can't pass for somewhere else. One click opens it and marks the card done; a click anywhere else opens the panel at the card.

Hooks for Claude Code and the other agents post these cards for you, and clear them once you answer. Agents posting on their own follow the agent guide: post when blocked, one key per thing, resolve it when it's handled.

What it looks like

The open panel on the Work tab with four cards. Urgent: Approve the prod deploy of api v2.14, from build-box, with Approve, Canary dashboard and Slack thread links. Normal: Claude is waiting for you on acme-web, with a three-step checklist whose first step is ticked; and CI failed on main for acme-web, with a link to the run. Low: a branch with 2 unpushed commits. Each card has Done, Dismiss and Snooze.
Click the pill for the cards, most urgent first, each with its links, steps, and Done, Dismiss and Snooze.
  • The idle pill: a faint capsule with a green dot reading Nothing needs you.

    Nothing waiting. A faint pill at the top of the screen. Drag it to any corner.

  • The count pill with a red ring: 4 work items, and 1 personal shown faintly. The same pill split by context: W 4, P 1.

    Something waiting. A count, ringed in the top priority's colour: red is urgent, amber normal, slate low. It can split work and personal.

  • Something new. The pill springs out to show it, with a button for its first link, then settles back. The demo plays it.

Under the hood

Senders

  • Claude Code on devbox
  • CI job
  • cron on build-box

needs-you CLI: queues offline, fails over

Hubs

  • Hub on your MacSQLite, runs inside the app
  • Server huboptional, always on

You

  • The pill on your Mac

uses whichever hub answers

Senders post to a hub. Server hubs copy every write to each other. The Mac app reads from the first hub that answers, its own first.

A hub is a small SQLite database behind a tiny web server. It's one Python file that needs only the standard library. The Mac app runs one, so your Mac is the hub: nothing to install or keep running.

Settings, Your inbox page. How it works: your machines and agents send alerts; this Mac holds them, the hub runs inside the app; the pill shows them until they're handled. Below, Run hub on this Mac is on and Running.
Settings → Your inbox: the hub runs inside the app, on by default.

Senders are the one-file needs-you command. It tries each hub in turn. If none answers (your Mac is asleep, say), it keeps the alert in a local outbox, exits cleanly so the job carries on, and sends it later.

Server hubs are optional, for redundancy. Run the same hub on an always-on Linux server, so alerts land while the Mac sleeps. Server hubs copy every write to each other; copying to and from your Mac's own hub is coming, and until then Server hubs says how to set one up. Most people don't need one.

The app checks every 30 seconds and keeps a live stream open, so new alerts show at once. With nothing new, a check is under 100 bytes and the stream sends a short ping every 15 seconds.

It cleans up after itself. Done and FYI cards expire after a day, closed items are deleted after 7 days, and a sender's outbox keeps at most 500 alerts for 7 days.

How heavy is it?

PieceMeasured
Mac app, idle0.4% of one CPU core, 55 MB memory
Hub on the Mac, idle0.2% of one core, 27 MB memory
Hub database0.9 MB after a day of use (138 items); about 600 bytes per item
Server hub, idleunder 0.1% of one core, 33 MB memory
1,000 alerts in a burst1.2 s in all, 1.1 ms each; hub memory grew by 1 MB
One needs-you callabout 0.12 s, the same when it queues offline

Measured 2026-10-07 on an Apple Silicon MacBook Pro (macOS 15, the app's bundled hub on Python 3.9) and a desktop Linux machine (8-core AMD Ryzen, Python 3.12). Idle CPU is the average over two quiet minutes. No Docker, no database server, no pip packages, no cloud account. Details in Words and Server hubs.

Works with

Supported

Anything that can run a shell command can post too: CI, cron, scripts. See Add a sender. For any other agent or tool with hooks, webhooks or a notification command, build a custom connector: the guide has the exact item format, which fields are required, and tested examples.

Install

Download for Mac

The latest release has NeedsYou-<version>.dmg (open it, drag the app to Applications) and the same app as a .zip. macOS 14 or later.

The app is ad-hoc signed, not notarized, so macOS blocks the first launch. On macOS 15 and later: double-click it, then System Settings → Privacy & Security → Open Anyway. On macOS 14: Right-click the app → Open → Open.

Connect a machine

A faint pill appears at the top right, and your Mac is now the hub. To connect a sender (a server, a CI runner, or Claude Code on this Mac): right-click the pill → Settings… → Connect a machine → Create invite.

Settings, Connect a machine page: a New invite form asking what the machine is (a server or agent that sends alerts, another Mac that shows the same alerts, or another Mac that can also connect machines), its name, uses and expiry, and a Create invite button.
One invite link sets up a server, an agent or another Mac.

The invite gives you the real commands to copy, with your hub's address and code in them. Paste the Agent prompt into the machine's agent, or run the Shell one-liner there. Either way the machine gets the needs-you command and posts a test card. The one-liner looks like this (the Claude Code options are optional):

curl -fsSL <join_url>/install.sh | bash -s -- --yes \
  --claude-hooks user --skill --alerts

Step by step: the Quickstart, the install guide for testers (first run, what to try, reporting problems), and Tailscale for servers and other machines. All guides.

Open source

The app, the hub and the sender CLI are on GitHub. Apache-2.0. No cloud, no accounts, no telemetry.