An agent left alone does one of two things: it finishes, or it stops to ask, for permission to run a command or for your answer to a question. Either way it then waits, and an agent that asked at 2:05 while you were making coffee has done nothing since. A notification on your phone ends the wait. There are three ways to get one, and they differ in what they tell you and in what you can do from the notification itself.
Updated . We make Hako, the third way.
At a glance
| Hooks and ntfy | Remote Control | Hako | |
|---|---|---|---|
| Agents | Claude Code; Codex when a turn ends | Claude Code | Any, in herdr |
| Tells you | The text you write in the hook | The session needs you | The agent, the pane, the Mac and its question |
| Answer from the notification | No | No, open the app | Yes, from the Lock Screen |
| Several Macs | Set up on each | One session list | Every Mac in one list |
| Who sees the text | The push service | Anthropic | Nobody: end-to-end encrypted |
| Available | Now | Now | Coming soon |
1. Claude Code hooks and a push app
Claude Code runs a command of yours at points in its work, called hooks. Two matter here: Notification, when Claude Code sends a notification, such as asking for permission or waiting on your input, and Stop, when it finishes responding. Point both at a push service your phone listens to, such as ntfy, which is free and needs no account.
- Install the ntfy app on your iPhone and subscribe to a topic. Topics on ntfy.sh are public, so make the name long and random, like a password.
- Add the hooks to
~/.claude/settings.jsonto cover every project, or to a project’s.claude/settings.jsonfor just that one, with your topic in place ofYOUR-TOPIC:
{
"hooks": {
"Notification": [
{ "hooks": [{ "type": "command", "command": "curl -s -d 'Claude Code needs you' ntfy.sh/YOUR-TOPIC" }] }
],
"Stop": [
{ "hooks": [{ "type": "command", "command": "curl -s -d 'Claude Code finished' ntfy.sh/YOUR-TOPIC" }] }
]
}
}For Codex, the notify setting in ~/.codex/config.toml runs a program when Codex finishes a turn, which is the only event it reports. Codex passes the turn’s details as a JSON argument; this line ignores them and sends a fixed message:
notify = ["bash", "-c", "curl -s -d 'Codex finished' ntfy.sh/YOUR-TOPIC", "notify"]It’s free and works today. The catches: the hook knows nothing about which Mac or which window, so with several agents a ping says that something needs you but not which one; you still have to open an SSH app to answer; and anything you put in the message passes through the push service, so keep it to a fixed line rather than the agent’s output. Pushover works the same way, with a private key in place of a public topic.
2. Anthropic’s Remote Control
Remote Control connects a Claude Code session on your computer to the Claude app on your iPhone, and the app sends push notifications for it. Start a session with claude --remote-control, or type /remote-control in one that’s already open, and allow notifications in the Claude app.
You get the alert and, a tap later, the whole conversation, so you can answer in the app. It needs a paid Claude plan rather than an API key, works only for Claude Code, and sends the conversation through Anthropic’s servers. Claude Code on iPhone sets it up in full, and Hako vs Remote Control compares the two.
3. Hako
Hako knows which agent is working, which is waiting and what it asked, because your agents run in herdr, an open-source runtime that marks each pane working, blocked or idle. There are no hooks to write, and it works the same for Claude Code, Codex and every other agent in a pane.
- When an agent asks, its question shows on your Lock Screen and in the Dynamic Island with the answers as buttons. Tap one and it goes straight to the pane.
- When an agent finishes, tap Notify When Done in its menu and your phone says which pane on which Mac is done. Turn on Notify for All Panes to hear about every one. If you’re already watching the pane, Hako keeps quiet.
- On Apple Watch, each question an agent is waiting on gets its own page, and you can answer from your wrist.
Notifications are end-to-end encrypted, so the relay that delivers them can’t read them, and there’s no account. Hako is coming soon to the App Store; it suits you if you run several agents and want the alert to say which one, and to answer it without opening a terminal. See Notify When Done.
Questions
Why does my hook fire after every reply?
Stop runs each time Claude Code finishes responding, including after short answers while you’re at the keyboard. If that’s too many, keep only the Notification hook, which fires when Claude Code is waiting on you.
Can I answer a permission prompt from the notification?
Not with a hook: it can only send a message. Remote Control lets you answer in the Claude app once you open it. Hako puts the answers on the notification and the Lock Screen.
Will I get notifications while my Mac sleeps?
No. The agent runs on your Mac, so a sleeping Mac stops it. On a desktop Mac, turn on “Prevent automatic sleeping when the display is off” in System Settings → Energy; on a laptop, start the agent with caffeinate -i in front of it to hold off idle sleep until it exits.