Get notified when Claude Code needs you
You kick off a long run, switch to something else, and twenty minutes later discover the agent has been sitting on a permission prompt since minute two. Here is every real way to fix that — starting with the free built-in options, because for a lot of people those are genuinely enough.
1. The built-ins: terminal bell and desktop notifications
Claude Code already fires a notification event when it finishes a task or pauses on a permission prompt. What happens to that event depends on your terminal:
- Ghostty, Kitty, and iTerm2 get a real macOS desktop notification by default. Ghostty and Kitty forward it with no setup. iTerm2 needs one switch flipped: Settings → Profiles → Terminal → check “Notification Center Alerts”, then click “Filter Alerts” and enable “Send escape sequence-generated alerts”.
- Everything else (Warp, VS Code’s integrated terminal, Apple Terminal…) doesn’t
receive the desktop notification. There you can turn on the terminal bell instead, in
~/.claude/settings.json:
{
"preferredNotifChannel": "terminal_bell"
}
Two gotchas worth knowing. If you run Claude Code inside tmux, notifications get
swallowed until you add set -g allow-passthrough on to ~/.tmux.conf.
And if desktop notifications silently don’t appear, check that your terminal app has
notification permission in System Settings — macOS asks once and people click “Don’t Allow”
more often than they remember.
When this fits: you’re at the Mac, the terminal is on-screen or at least audible, and you just need a nudge. It costs nothing and takes two minutes. Where it stops helping: the moment you leave the desk, or the notification says “Claude needs your attention” and you still have to walk back to find out what it’s asking.
2. Hooks: run any command when Claude needs you
Claude Code’s hooks let you attach a shell command to lifecycle events. Two matter here: the Notification hook fires when Claude surfaces a notification (permission prompts, waiting on input), and the Stop hook fires when Claude finishes responding. Hooks run alongside the built-in notification, in any terminal.
A native macOS banner (or sound)
// ~/.claude/settings.json
{
"hooks": {
"Notification": [
{
"hooks": [{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your input\" with title \"Claude Code\" sound name \"Glass\"'"
}]
}
]
}
}
The hook receives JSON on stdin including a message field with the actual
notification text, so a small script can put the real message in the banner instead of a
static string. If you just want a sound, afplay /System/Library/Sounds/Glass.aiff
as the command works too — that’s the example Anthropic’s own docs use.
Push to your phone with ntfy
ntfy.sh turns an HTTP POST into a phone push: install the ntfy app, subscribe to a topic, and have the hook curl it.
{
"hooks": {
"Notification": [
{ "hooks": [{ "type": "command",
"command": "curl -s -d \"Claude Code is waiting on you\" ntfy.sh/your-long-random-topic" }] }
],
"Stop": [
{ "hooks": [{ "type": "command",
"command": "curl -s -d \"Claude Code finished\" ntfy.sh/your-long-random-topic" }] }
]
}
}
Caveats, honestly stated: on the public ntfy.sh server, anyone who guesses your topic name can read it, so use a long random topic (or self-host, or use reserved topics on their paid tier) and don’t put code or secrets in the message. And the Stop hook fires at the end of every turn — fine for long autonomous runs, noisy if you’re chatting back-and-forth. Some people scope it with a check in the script.
When this fits: you want alerts your way — a sound, a Slack webhook, a phone push — and you’re comfortable editing JSON once. It’s free and very flexible. The ceiling: it’s one-directional. The push tells you Claude is waiting; answering still means getting back to the terminal (or pairing it with SSH/tmux gymnastics, which we’ve written about in Claude Code on your phone).
3. Relay push: Anthropic’s Remote Control, and third-party apps
The next tier routes your session through a server so a phone app can both notify you and let you reply.
Anthropic’s own option is Remote Control (research preview): run
claude --remote-control, sign in to the Claude mobile app with the same account,
then enable “Push when Claude decides” and/or “Push when actions required” in
/config. Claude then pushes to your phone when a long task finishes or it needs a
decision, and you can reply from the app. It even skips the push while you’re actively typing
in the terminal. Requirements per Anthropic’s docs: a Pro/Max/Team/Enterprise claude.ai login
(API keys don’t work; on Team and Enterprise it’s off until an admin enables it), and while
connected the session transcript — your messages, Claude’s responses, tool activity — is
stored on Anthropic’s servers to keep devices in sync. The local claude process
has to keep running: close the terminal and the session ends. A sleeping Mac isn’t fatal —
per the docs the session reconnects when the machine comes back online — but nothing
executes while it’s asleep.
Third-party relays like Omnara and Happy Coder wrap Claude Code and push to their companion apps when the agent needs input, with replies from the phone. They’re real products that solve this; the structural trade is the same — your session traffic transits a relay (Happy is open-source with end-to-end encryption and a self-host option; Omnara is a hosted service with a subscription for full use). We compare them feature-by-feature in DevFob vs Omnara and DevFob vs Happy.
When this fits: you want to answer from anywhere in the world, not just near your Mac, and you’re fine with a cloud relay in the loop. Remote Control is the lowest-friction choice if you already pay for a Claude subscription.
4. DevFob: the question itself, on your phone and watch
Disclosure: DevFob is our product. It exists because of one specific annoyance with everything above: most notifications tell you Claude needs you, not what it’s asking — and even when they do, answering means a round trip to the terminal.
DevFob is a Mac menu-bar app that mirrors your Claude Code (and Codex) sessions to free iPhone, Apple Watch, Android, and Wear OS companions. When a session stalls, the push carries the actual question — a permission gate, a plan to approve, a multiple-choice question — as a tappable form. Claude asks “which of these three approaches?”, your watch shows three buttons, you tap one, the run continues. No terminal round trip.
The architectural difference from tier 3: there is no relay. Your Mac talks to your phone directly over LAN or hotspot, end-to-end encrypted (Curve25519 pairing, ChaCha20-Poly1305), with no cloud, no account, and zero app analytics. The trade is honest: direct transport means it works at home, at the office, or tethered to your phone — not from a beach on another continent. In exchange, your session content never touches anyone’s server. It also does things a notification pipe can’t: live per-account rate-limit meters (the 5-hour and weekly windows — see our rate-limits guide) with auto-switch between logins, a notch HUD for at-a-glance status, and Nomad mode so sessions keep running with the lid closed.
Which one should you pick?
| You are… | Use | Cost |
|---|---|---|
| At the Mac, terminal visible or audible | Built-in desktop notification (Ghostty/Kitty/iTerm2) or terminal_bell | Free |
| At the Mac, want custom sounds/banners/webhooks | Notification + Stop hooks (osascript, ntfy, anything) | Free |
| Away from the Mac, fine with a cloud relay | Remote Control + Claude app, or Omnara / Happy | Claude sub / varies |
| Away from the terminal but on your own network, and want to answer — not just be pinged | DevFob (ours) | $15 once |
These stack, by the way. Plenty of people run the free bell for desk work and a phone option for everything else. Start with tier 1 — it’s two minutes — and climb only when a missed prompt actually costs you an afternoon.
Built-in notification, hooks, and Remote Control details verified against Anthropic’s Claude Code docs as of July 2026; Claude Code changes fast, so check the official docs for current behavior. Third-party product descriptions are based on their public materials. Something wrong here? Tell us.