needs-you

Guides

The Mac app

NeedsYou.app is the only thing that shows anything. It's a small floating panel (no Dock icon; an optional menu bar icon) that polls your hubs and stays out of the way until something needs you.

Build, install and signing details live with the code: mac/README.md. This page is the short version for users. New to the words hub, sender and owner? Words explains them in one table.

Install #

  1. Download NeedsYou-X.Y.Z.dmg (or NeedsYou-X.Y.Z-macos.zip) from the repository's Releases page, plus SHA256SUMS if you want to check it (shasum -a 256 -c SHA256SUMS), and check its build provenance with gh attestation verify NeedsYou-X.Y.Z.dmg --repo tayharris/needs-you (release-signing.md). Or build it per mac/README.md.
  2. Drag NeedsYou.app to /Applications and open it. It's ad-hoc signed, not notarized, so macOS blocks the first launch once: on macOS 14 and earlier, right-click → Open → Open; on macOS 15 and later, double-click, then System Settings → Privacy & Security → Open Anyway. Or: xattr -dr com.apple.quarantine /Applications/NeedsYou.app. On a managed work Mac, endpoint security (e.g. SentinelOne) may flag ad-hoc signed builds; ask IT.
  3. The built-in hub needs /usr/bin/python3 (Apple's Command Line Tools). If Settings… says Python 3 isn't available on this Mac, run xcode-select --install, then quit and reopen the app.
  4. Optional: Settings… → General → Open at login.

Its own hub #

The app runs a hub itself (hub/needs_you_hub.py with the Mac's /usr/bin/python3, as a child process that exits with the app). It listens on 127.0.0.1:8765, and on the Mac's tailnet address whenever Tailscale is up (there's no separate switch; Settings… → Your inbox shows the URL servers use, next to the 127.0.0.1 one). It provisions its own owner token, so there's nothing to configure. The first time a server connects, macOS may ask whether python3 may accept incoming connections: allow it.

While the Mac sleeps its hub is offline: senders queue items and deliver them within about 5 minutes of it waking. Always-on server hubs avoid the wait.

The exact settings and how the app passes options to its hub are in mac/README.md.

Using it #

The open panel on the Work tab: an urgent deploy approval with three links, a Claude is waiting card with a three-step checklist, a CI failure with a link to the run, and a low-priority branch cleanup, each with Done, Dismiss and Snooze.
You seeIt means
A barely visible pillNothing needs you. Hover for "all clear" and the last check time.
A pill with a number and a colored ringOpen needs items in the current context. Red = urgent, amber = normal, slate = low.
3 · 13 in the current context, 1 waiting in the other (work vs personal). Settings → Panel → Collapsed pill can show them as W 3 | P 1 instead, or split by priority.
3 +2, a moon2 more are waiting under Later; a focus is on (see Focus).
3 2 new2 of the 3 arrived (or changed, or turned into needs) since you last opened the panel. Opening it clears the badge.
The pill springs out with a titleA new item just arrived. It stays out 14 s; point at it to keep it there, click it to open the panel.

The pill when nothing needs you, with 4 work items and 1 personal one waiting (count only, then split work | personal and count and top item), and a new item springing out:

The idle pill: Nothing needs you. The count pill: 4, with 1 personal shown faintly, in a red ring. The split pill: W 4, P 1. The pill showing the count and the top item's title.
An arrival preview: Approve the prod deploy of api v2.14, needs you, from build-box, with a button reading Approve, then ci.example.com in fainter text, then an arrow.

The open panel shows one context at a time; the tab in its header switches (here, Personal):

The open panel on the Personal tab with one low-priority card: Renew example.org, it expires in 9 days, with a Registrar link.

Setup tips #

While something isn't set up yet, the open panel shows a setup tip: a card like any other, from Needs You setup, with a button and a link to the guide. The idle pill says so (Nothing needs you · 1 setup tip).

TipShows whenButton
Turn on the hub on this MacRun hub on this Mac is off and no other hub is set upOpen Settings (Your inbox)
Connect your first agent or machineThe hub answers, but nothing has ever posted to it and it lists no token besides this Mac'sCopy agent prompt: makes a one-use sender invite (24 hours) and copies the prompt to paste into Claude Code
Reach this Mac from your other machinesThe hub on this Mac listens on 127.0.0.1 only (no Tailscale) and you have server hubs or cards from other machinesOpen Settings, and the Tailscale guide
Install the Claude Code hooks on this Mac~/.claude exists but ~/.claude/settings.json doesn't use the needs-you hook, after the first sender connectedCopy agent prompt, and the Claude Code guide

Setup tips stay on this Mac: they're never sent to a hub, never count in the pill or the menu bar, never spring out or pulse, and aren't in the menu bar menu or the shortcut's "top card". A tip goes for good once its condition is met (turning the hub off later doesn't bring the first one back), or when you click Dismiss. Settings → Panel → Setup tips turns them off and has Show Again for dismissed ones. The card only says the prompt was copied; the invite link is only on the clipboard (and in Settings → Invite a machine, which shows the invite it made). While no hub is set up at all, clicking the Set up Needs You pill opens the panel with the first tip (with tips off, it opens Settings as before).

Focus: heads-down, except what you choose #

Every new item arrives one of three ways:

TierWhat you seeIn the count
InterruptThe pill springs out with the title and a glow (urgent pulses twice)Yes
AmbientThe count and ring change, with one soft glowYes
LaterNothing. It waits in a Later section at the bottom of the open panel (a faint +3 on the pill)No

With no focus: urgent and normal interrupt, low and done/info are ambient, the other context's items are the faint second number. Right-click the pill or open the menu bar menu → Focus:

FocusInterruptsWaits under Later
Agents and urgent onlyUrgent items, and agent cards (keys starting agent:, which every Claude Code session uses)Everything else
Urgent onlyUrgent itemsEverything else
Everything laterNothing (only an "Always interrupt" rule)Everything, urgent too

Each for 30 min, 1 hr, 2 hr or until tomorrow (7:00). A moon on the pill shows a focus is on; Focus → Off ends it. When a focus or a snooze ends (and when the work day starts), whatever waited comes back in one quiet peek, "3 waited while you were focused", and joins the count. Show now in the Later section brings them back early.

Two guards: an urgent item breaks through a focus unless you turn off Settings → Alerts → Urgent items break through Focus (for a presentation), and a sender that would interrupt more than 6 times in an hour is held to ambient for the rest of it (the open panel says so).

Settings → Alerts → Delivery sets the tier for normal, low, done/info and other-context items, and shows a table of what each focus does. Bypass rules (same tab) override everything, top to bottom, first match wins: match a key prefix (agent:, work:gh:deploy:), a sender agent prefix (orca:, claude-code) or a host (devbox), and choose Always interrupt, Never interrupt (ambient at most) or Always later. A hidden panel stays hidden; bypass never means taking focus.

Drive it from Shortcuts or a script #

The app handles needsyou://focus?level=<level>[&minutes=<n> | &until=tomorrow], with level one of off, agents (agents and urgent only), urgent, later (everything later). Anything else in the link is refused and does nothing.

Any app or web page can open a needsyou:// link, so a focus link is fenced in:

From a script or Terminal, use open -g so nothing comes forward:

open -g 'needsyou://focus?level=urgent&minutes=60'
open -g 'needsyou://focus?level=off'

To follow a macOS Focus, first turn on Allow focus links from other apps (otherwise each automation run asks), then make two personal automations in the Shortcuts app → Automation → +:

  1. When "Work" Focus turns on (any Focus you like) → Run Immediately → action Run Shell Script: open -g 'needsyou://focus?level=agents'.
  2. When "Work" Focus turns off → Run Shell Script: open -g 'needsyou://focus?level=off'.

(The Open URLs action works too, but it may bring Needs You forward for a moment; the app hands focus straight back. Run Shell Script with open -g doesn't.)

Make it yours #

Everything is in Settings (right-click the pill → Settings…). The defaults are the original look, except that new items stay out 14 s (was 4 s) and a light dark backdrop sits behind the glass.

SettingWhereChoices (default first)
Size of the pill, the cards' type and the open panelPanel → Look → SizeRegular, Compact, Large
Card body text (agents' step-by-step instructions)Panel → Look → Card text sizeDefault, Small, Large, Extra large
How much of each card's text showsPanel → Look → Card textFull, First lines (3), Title only (click Show details)
Links on one short rowPanel → Look → Compact linksOff, On (3 links, +N shows the rest)
Cards before the list scrollsPanel → Look → Cards before scrollingAs many as fit, 2, 3, 5, 8
Close the open panel when you click in another app or open a linkPanel → Open panel → Collapse when clicking elsewhereOn, Off
How dark the layer behind the glass isPanel → Opacity → Background darkness30% (default), None, 15%, 45%, 60%, 75%
The open panel's list heightPanel → Open panel → List height (drag the panel's edge)Automatic, or the height you dragged
How see-through the collapsed pill and the open panel arePanel → Opacity: Collapsed pill, Collapsed pill pointer over it, Open panel (also previews), Open panel pointer over it100% to 30% (defaults 85%, 100%, 100%, 100%)
Size of the collapsed pill onlyPanel → Collapsed pill → Pill sizeMedium, Small, Large
What the collapsed pill saysPanel → Collapsed pill → ShowsCount only; Count and top item (the top card's title, truncated); Minimal dot (a dot in the top priority's colour, the count on hover)
How the count is splitPanel → Collapsed pill → SplitNone (3 · 1); Work | Personal (W 3 | P 1, the current side brighter); By priority (urgent, normal and low counts in their colours, empty ones hidden)
The 2 new badgePanel → Collapsed pill → New since last openedOn, Off
Cards about what isn't set up yet (Setup tips)Panel → Setup tips → Show setup tipsOn, Off
The global shortcutPanel → KeyboardControl-Option-Space (⌃⌥Space), or record your own (it must use Control, Option or Command)
The panel's coloursAppearance → ThemeDefault (the original dark glass), Match system (Default or Paper with macOS's light or dark), Graphite, Midnight, Paper (light), High contrast (dark or light with macOS), Ocean, Sunset
Colour of ticked steps, links in card text and small badgesAppearance → Accent colourTheme's own, Blue, Purple, Pink, Orange, Green, Teal, Graphite, Custom (any colour; made lighter or darker if it wouldn't read)
How loud urgent items areAlerts → Urgent itemsNormal, Off, Subtle, Bright (urgent never goes below Subtle)
How loud normal and low items areAlerts → Normal and low itemsNormal, Off, Subtle, Bright
How long a new item's preview stays out (also the "3 waited" Later peek)Alerts → Arrivals → Show new items for14 s, 5 s, 10 s, 20 s, 30 s, Until I click or point at it (pointing at it always holds it)
How an urgent item arrives on the pillAlerts → Arrivals → Urgent items arrive withGlow pulse, Bounce, Shake, Slide in, Ripple (never None)
How normal and low items arriveAlerts → Arrivals → Normal and low items arrive withGlow pulse, Bounce, Shake, Slide in, Ripple, None
How many times the arrival playsAlerts → Arrivals → PlaysAutomatic (urgent twice, others once, one more at Bright), Once, Twice, 3, 5 times (Slide in plays once)
How fast it playsAlerts → Arrivals → SpeedNormal, Slow, Fast
Play urgent's arrival again while nobody has lookedAlerts → Arrivals → Remind about unseen urgent itemsOff, every 2, 5, 10, 15, 30 min, every hour
How normal / low / done and info / other-context items arriveAlerts → DeliveryInterrupt, Ambient, Ambient, Later (see Focus)
Urgent items break through FocusAlerts → DeliveryOn, Off
Focus links from other apps apply without askingAlerts → DeliveryOff (ask), On
Bypass rulesAlerts → Bypass rulesNone; up to 50
Where new items spring outAlerts → On the work screenThe pill's display (default), The display you're working on
Edge glowAlerts → On the work screenOff, Urgent arrivals

The Panel and Appearance pages show a sample card as you change things, and the Alerts page plays each alert. Alerts → Arrivals → Preview on the pill (Urgent or Normal) plays your choice on the real pill without posting anything; like everything on the pill, it never takes focus. Advanced → Reset to defaults puts the look, theme and alerts back.

Themes #

Every theme keeps urgent red and easy to read: the text, the secondary text and the urgent colour are checked against each theme's background for contrast (WCAG 4.5:1 or better; 7:1 for urgent in High contrast), and urgent stays clearly different from normal and low. Match system and High contrast switch between dark and light glass when macOS does; the others always look the same. Light themes use a light layer behind the glass instead of a dark one, so Background darkness lightens it. High contrast keeps that layer at 60% or more.

Arrival animations #

Glow pulse is the original: the priority colour glows around the pill and fades. Bounce hops the pill up and lets it land, Shake shakes it side to side, Slide in slides it down into place as it fades in (once), and Ripple sends a ring out from its edge. Each moves a few points at most, inside the pill's own margin, and the alert loudness (Off, Subtle, Normal, Bright) still sets how strong it is: Off for normal and low means no animation at all. Urgent can't be set to None or Off; it always moves at least once.

With Reduce Motion on (System Settings → Accessibility → Display), every animation plays as a gentle glow fade instead.

The repeat reminder plays urgent's arrival again every few minutes while an urgent item that came in since you last opened the panel is still open. It stops when you open the panel, and doesn't play while the panel is hidden or snoozed, while a preview is out, or in a focus that holds urgent items.

Settings, Panel, Opacity: Background darkness 30%, Collapsed pill 85%, Collapsed pill pointer over it 100%, Open panel 100%, Open panel pointer over it 100%, each with a one-line explanation.
Settings → Panel → Opacity, at the defaults.

Terminal button #

Agent cards from the Claude Code hook (and Orca) carry a Terminal button: an app action, not a web link. Clicking it shows you the terminal the session runs in and marks the card done.

LinkWhat the app does
needsyou://orca/terminal?handle=term_…orca terminal switch, then Orca comes forward
needsyou://terminal/focus?app=wezterm&pane=<n>wezterm cli activate-pane --pane-id <n>, then WezTerm comes forward
needsyou://terminal/focus?app=tmux&pane=<n>[&host=<terminal>] (or target=<session>:<window>.<pane>)tmux select-window and select-pane, then the terminal tmux runs in comes forward
needsyou://terminal/focus?app=iterm&session=<UUID> (or tty=/dev/ttys<n>)Selects that iTerm2 session with AppleScript (opt-in, below), else brings iTerm2 forward
needsyou://terminal/focus?app=terminal&tty=/dev/ttys<n>Selects the Terminal tab on that tty with AppleScript (opt-in), else brings Terminal forward
needsyou://terminal/focus?app=ghosttyBrings Ghostty forward

iTerm2 and Terminal need Settings → Integrations → Jump to iTerm2 and Terminal tabs (off by default). Turning it on asks macOS for the Automation permission for each app that's running (System Settings → Privacy & Security → Automation lists it); Check again asks again after you open the other one. The panel itself never asks.

What keeps a card from doing more than switching tabs:

If a CLI switch fails (the pane is gone), the command goes on the clipboard. Logs: Console, subsystem app.needsyou.mac, category terminal-jump. Setting the hook up, including SSH sessions: Claude Code alerts everywhere → Terminal button.

Settings #

Right-click the pill (or the menu bar icon) → Settings…. Settings is a sidebar of short pages, like System Settings. The look, alerts and shortcut are under Make it yours above; the pages:

Settings, Your inbox: How it works in three lines, then Run hub on this Mac, on and Running. Settings, Connect a machine: the New invite form, with what the machine is, its name, uses, expiry and Create invite.

Built in, not settings yet:

mac/README.md is authoritative for the details.

This page is docs/guides/mac-app.md in the repo. View or edit it on GitHub.