Claude Code notifications and approvals on your phone
You start a long task in Claude Code and walk away. Twenty minutes later you come back, and it has waited eighteen of them for a yes. This page fixes that in two steps. First, a notification on your phone when Claude Code finishes or needs you: ten lines in a settings file, no extra software. Second, an answer to the permission prompt from the phone, so the work goes on while you are away. I built Angelia, which does the second step, so I'll say where each tool fits.
Step 1: a notification with hooks
Claude Code runs hooks: shell commands it starts on events. Two events matter here. Stop fires when Claude Code finishes its answer. Notification fires when it needs you, for example for a permission prompt (permission_prompt) or when it waits for your input (idle_prompt).
The simplest way to reach a phone is ntfy: install its app, subscribe to a topic, and anything posted to that topic arrives as a push notification. Add this to ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "curl -s -d 'Claude Code is done' ntfy.sh/YOUR-RANDOM-TOPIC" }] }
],
"Notification": [
{ "matcher": "permission_prompt",
"hooks": [{ "type": "command", "command": "curl -s -d 'Claude Code needs your yes' ntfy.sh/YOUR-RANDOM-TOPIC" }] }
]
}
}
- Pick a long random topic name. On the public ntfy server, anyone who knows the name can read the topic.
- The notification text is fixed here, so no code or file names leave your machine. Do not post the hook's input (it carries the session's details) to a public topic.
- Pushover, a Slack webhook or a Telegram bot work the same way: one
curlline.
This tells you that Claude Code waits. It does not let you answer. For that you must go back to the terminal, or use step 2.
Step 2: approve from the phone
There are three ways to answer a prompt without the terminal.
- Remote Control (Anthropic): the session shows up in the Claude app, and you answer there. Best for one coding session you started at your desk.
- Official channels (research preview): a Telegram, Discord or iMessage plugin can relay the prompt to the chat. It works in the one session you keep open.
- Angelia (mine): Claude Code runs in the background on your Mac, one session per chat, on Telegram or WhatsApp. Every prompt comes to the chat.
The four ways compared covers when each fits.
How approvals work in Angelia
Install it and pair a chat (step by step). Under permission_mode: acceptEdits, Claude Code edits files on its own and asks before it runs other commands. The question comes to the chat:
🔐 Bash: npm test
Reply "yes 6b480a6f" or "no 6b480a6f".
- Answer
yes 6b480a6fand the turn goes on. The id ties the answer to this one request, so an old yes cannot approve a new command. - No answer in ten minutes counts as no.
- Only the chat's owners can approve. In a group, other members can talk to the agent but cannot say yes for you.
- The same works when Angelia runs Grok Build or pi. Codex runs inside its own sandbox and asks only when it needs more access than the sandbox gives.
The "done" notification comes for free: the answer itself arrives as a chat message, after short progress lines while it works.
Fewer prompts
Each profile has a permission mode. default asks before edits and commands. acceptEdits asks only before commands. plan only plans. bypassPermissions asks nothing. Use it only in a profile that you alone write to, and whose folders you can afford to lose. Angelia also writes deny rules for your credentials and the other profiles' folders into every profile. A deny rule stops Claude Code's file tools, not every program a command starts, so keep commands asking in a profile other people can write to.
Try Angelia
curl -fsSL https://useangelia.com/install | sh
It checks the release's signature, then a wizard pairs your first chat. Free and open source (MIT). How it works · Security model · GitHub