Claude Code notifications on your phone: three ways to get a push when it finishes or needs you
Claude Code is at its best when you walk away from it. The problem is it never tells you when it is done, or when it has been sitting on a question for twenty minutes.
Short answer: The built-in way is Claude Code Remote Control: sign in to the Claude app on your phone, start Remote Control, and turn on the two push toggles in /config. If you want something that works without Remote Control, a Stop and Notification hook that calls ntfy or Pushover works, and MightyMouse adds push cards you can answer from the lock screen.
You start a long Claude Code run, close the laptop lid halfway or just walk to the kitchen, and now you have two ways to lose time. Either you keep checking the terminal, or you forget about it and come back to a session that finished an hour ago, or one that stopped on a permission prompt in the first two minutes.
There are three real ways to fix that, and they are not the same thing. One tells you something happened. One tells you and lets you answer. They also differ a lot in what text leaves your computer on the way to your phone. Here is each one with the steps, then an honest side-by-side.
What you actually want a notification for
Google suggests searches like "claude code notification when done" and "claude code notification when waiting for input". Those are two different events, and it helps to name them before picking a tool:
- It finished. The turn is over and nothing else will happen until you type something. You want a ping, and ideally the first line of what it did.
- It is blocked on you. A permission prompt, or a question it needs answered before it can continue. This is the expensive one, because the agent is idle for as long as you do not know.
If a tool only covers the first event, you will still come back to stalled sessions. Check that whatever you pick covers both.
Way 1: Anthropic Remote Control with mobile push
Anthropic's own answer is part of Remote Control. According to their docs, when Remote Control is active Claude can send push notifications to your phone. Their words: Claude decides when to push, and it typically sends one when a long-running task finishes or when it needs a decision from you to continue. You can also ask in your prompt, for example "notify me when the tests finish".
Setup, as their docs describe it (as of October 2026):
- Install the Claude app on your iPhone and sign in with the same account and organization you use for Claude Code.
- Allow notifications when iOS asks.
- Start a Remote Control session in your terminal. Their page covers the commands:
claude remote-control, orclaude --remote-control, or/remote-controlinside a running session. - In your terminal, run
/configand turn on Push when Claude decides (proactive pings), Push when actions required (permission prompts and questions), or both.
If /config says "No mobile registered", open the Claude app on the phone once so it can refresh its push token. On iOS, Focus modes and notification summaries can delay or hide the push, so check Settings, then Notifications, then Claude.
Two details people miss. Claude Code skips the push while you are typing in or focused on the connected terminal, which is what you want. And there is no per-event setting beyond the two toggles, so you cannot say "only ping me on errors".
The honest limits are on Anthropic's page too. It needs a Pro, Max, Team or Enterprise plan and does not work with API keys. It does not work through Bedrock, Vertex-style cloud providers or a custom gateway. The session is a local process, so if you close the terminal or quit the app that runs it, the session goes offline. And it needs Remote Control to be on: no active Remote Control session, no push. If yours is misbehaving, this fix list for Remote Control not working covers the usual causes, and our comparison with Remote Control covers when it is and is not the right tool.
Way 2: Claude Code hooks that call ntfy or Pushover
If you do not want Remote Control, or you are on an API key, hooks are the do-it-yourself route and they are good. Claude Code can run a shell command when certain events fire. Two events matter here, both from the hooks reference:
Stopfires when Claude finishes responding. Its input includeslast_assistant_message, the text of Claude's final reply, and the docs say to use that field instead of reading the transcript for notification hooks.Notificationfires when Claude Code sends a notification. Its input includesmessage, an optionaltitle, andnotification_type. You can filter with a matcher on that type:permission_promptfor approval prompts,idle_promptfor the "Claude is waiting for you" case.
The config shape is an event name, then a list of matcher groups, each with a list of handlers of type command. Stop has no matcher. In ~/.claude/settings.json it looks like this: {"hooks":{"Stop":[{"hooks":[{"type":"command","command":"~/.claude/hooks/ping-done.sh"}]}],"Notification":[{"matcher":"permission_prompt","hooks":[{"type":"command","command":"~/.claude/hooks/ping-blocked.sh"}]}]}}
Claude Code passes the event as JSON on the script's standard input. So each script reads that JSON, picks a field, and posts it to a push service.
Option 2a: ntfy
ntfy is a free, open source push service. Publishing is one curl: their docs show curl -d "Backup successful" ntfy.sh/mytopic, and you can add headers such as Title and Priority. Install the ntfy app on your iPhone and subscribe to the same topic.
- Pick a topic name nobody can guess, like a long random string. ntfy has no sign-up, and its docs say the topic is essentially a password.
- Install the ntfy app on your iPhone and subscribe to that topic.
- Install
jqif you do not have it (brew install jq). - Create
~/.claude/hooks/ping-done.shwith:#!/bin/shthenjq -r '.last_assistant_message[:200]' | curl -s -H "Title: Claude Code finished" -d @- ntfy.sh/YOUR-RANDOM-TOPIC - Create
~/.claude/hooks/ping-blocked.shthe same way, usingjq -r '.message', the title "Claude Code needs you" and the headerPriority: high. - Run
chmod +xon both scripts and add the config above to~/.claude/settings.json. - Run a short task and watch your phone. If nothing arrives, run a script by hand with some sample JSON piped in first, because a typo in a hook fails quietly.
What it costs: nothing on the public server. What leaves your computer: the text you piped in. In the example above that is the first 200 characters of Claude's last reply, sent to ntfy.sh. ntfy's FAQ says messages are cached on the server for 12 hours by default. If that reply can contain code or secrets, send a fixed string like "Claude Code finished" instead, or run your own ntfy server.
Option 2b: Pushover
Pushover is the paid-but-polished version of the same idea. Its API needs three things: an application token, your user key, and the message. As of October 2026, their pricing page lists the iPhone app at a one-time $4.99 with a thirty day trial, and 10,000 free messages per month per user. You replace the curl in the scripts above with a POST to https://api.pushover.net/1/messages.json carrying token, user and message.
The limit that matters for both: these are one-way. You get the ping, you cannot tap an answer. A permission prompt on your phone is a notification that tells you to go to a computer. And because hooks run where Claude Code runs, your computer has to be awake for the ping to go out at all.
Way 3: MightyMouse, where the notification is also the answer
MightyMouse pairs your iPhone to your Mac as a trackpad, keyboard, live screen and microphone, and it has a part built for coding agents. The Mac app runs a small server that speaks MCP, the tool protocol Claude Code already uses. Your agent gets a few extra tools: notify, ask and approve. Each one lands on your phone as a push.
notifyis fire and forget: "build is green", "tests failed". The agent keeps going. It takes a state of done or progress, so a finished turn can ping you.askposes a question, with optional choices that show up as buttons.approveis a yes or no before something risky. The agent waits for your answer. A timeout comes back as a denial, never as approval, and you can set how long it waits.
Setup:
- Install the MightyMouse Mac app and the iPhone app, sign in on the Mac, and pair the phone.
- In the Mac app's settings, turn on the agent relay and use the "Set up for me" button for Claude Code. It writes the MCP entry for you, which runs
npx -y mightymouse-code. - Tell Claude Code when to use it, in your project's CLAUDE.md. For example: "When you finish a task, call notify. When you need a decision, call ask or approve instead of stopping."
- Start a task and lock your phone. The card arrives, with buttons for approve and deny or for the choices the agent offered, plus a field to type your own answer.
That third step is the real difference from hooks. A hook fires on events Claude Code decides to emit. Here the agent chooses to call a tool, so you get to say in plain English what deserves a buzz, and you can also stop it from pinging on every small step.
What text goes through a server
Be clear-eyed about this one, because it is the question people ask last and should ask first. A push notification on iOS has to travel through Apple. In MightyMouse the push is sent through a MightyMouse cloud function, because the key that talks to Apple cannot live inside an app that everyone downloads. Per the code, that function is stateless: the Mac supplies the phone's device token on each call and it is not stored.
What rides along: a preview capped at 300 characters of the notify body (or its recap), the ask question, or the approve action and its detail. A notify title of up to 120 characters travels too. Option labels for an ask also travel so the buttons can be drawn, and so does a short label for which project is asking. Anything past that preview, and any attached screenshot, comes from your own Mac rather than riding the push. So the honest summary is not "nothing is sent". It is "a 300 character preview is sent so the banner is readable, and the rest comes from your Mac". If an agent might put a secret in a question, write the question so the secret is not in the first 300 characters, or ask for an answer without quoting it.
Side by side
- Setup time. Hooks with ntfy: a short shell script plus a phone app. Remote Control: a few commands and two settings, if you already have the Claude app and a Pro or Max plan. MightyMouse: pairing a phone plus one button, then a line in CLAUDE.md.
- Can you answer from the phone. Hooks: no, you get a ping only. Remote Control: yes, you can answer permission prompts and questions in the Claude app, which is its main point. MightyMouse: yes, as buttons on the notification. Approve asks for Face ID or your passcode, so a bystander cannot approve off your lock screen. Deny does not.
- Text through a third party. Hooks: whatever you pipe in, to ntfy or Pushover (and Apple). Remote Control: the Claude app is a window into your session through Anthropic's service, and Anthropic's Remote Control page does not describe what text a push contains, as of October 2026. MightyMouse: up to 300 characters of preview via our push function and Apple; anything longer comes from your Mac.
- Cost. Hooks with public ntfy: free. Pushover: $4.99 once for iPhone as of October 2026. Remote Control: needs a Pro, Max, Team or Enterprise plan you may already have. MightyMouse: the Mac app is a free download.
- Needs your computer on. All three. A sleeping computer sends nothing.
Pick Remote Control if you already pay for Claude and want the least setup. Pick hooks if you want full control and one-way pings are enough, or you use an API key. Pick MightyMouse if the reason you want a notification is to get the agent unstuck without walking to a desk, or if you run Codex and Cursor as well and want one inbox. For more on that angle, see approving an agent from your lock screen and running coding agents from your phone.
What this costs you, and the limits
- MightyMouse's relay sends discrete cards: a notification, a question, an approval. It is not a live feed of the terminal scrolling by. If you want to watch tokens stream, that is a different tool.
- The Mac app has to be running, and the Mac has to be awake. We cannot reach a sleeping Mac or get past a locked screen.
- Approve needs Face ID or your passcode on purpose. Deny and the choices an agent offers are one tap.
- The agent only notifies you if it is told to. It follows CLAUDE.md well but not perfectly, so keep an eye on the first few runs.
- macOS only for now.
- iOS controls delivery. Focus modes, notification summaries and a muted app will all hide a push, whichever of the three ways you use.
If you run your agent on a Mac mini or a machine you rarely sit at, the same logic applies: the notification is the cheap half, and being able to answer is the half that saves the time. Using Claude Code on your iPhone goes through the full set of options, and our comparison with Happy Coder covers the app people most often ask about next.
Get the push, and answer it from the lock screen.
Your iPhone as a trackpad, keyboard and mic for your Mac. Free to try.
Common questions
How do I get Claude Code notifications on my phone?
The built-in way is Remote Control: install the Claude app, start a Remote Control session, then run /config and turn on Push when Claude decides, Push when actions required, or both. Without Remote Control you can use a Stop and Notification hook that sends a message to ntfy or Pushover, or use MightyMouse to get approve and ask cards on your lock screen.
How do I get a notification when Claude Code is done?
Add a Stop hook in ~/.claude/settings.json that runs a script. The Stop event fires when Claude finishes responding and its input includes last_assistant_message, so the script can post a short summary to ntfy or Pushover. With Remote Control active, Claude also typically pushes when a long task finishes.
How do I get a notification when Claude Code is waiting for input?
Use a Notification hook with the matcher permission_prompt for approval prompts or idle_prompt for when Claude is waiting on you. Or turn on Push when actions required in /config while Remote Control is running, which covers permission prompts and questions.
Can I answer a Claude Code permission prompt from my phone?
Yes with Remote Control in the Claude app, or with MightyMouse when the agent asks through its approve tool and you tap approve (after Face ID or your passcode) or deny on the notification. Plain hook notifications through ntfy or Pushover are one-way, so they tell you to go back to your computer.
Is the ntfy topic private?
Only as private as the name. ntfy has no sign-up and its docs say the topic is essentially a password, so use a long random name. Messages are also cached on the server for 12 hours by default, so avoid sending code or secrets, or host your own ntfy server.
Do Claude Code notifications work when my Mac is asleep?
No. Hooks, Remote Control and MightyMouse all depend on Claude Code running on a Mac that is awake, so a sleeping or shut laptop sends nothing. Keep the Mac awake for long runs.
If you want the notification to be something you can answer: MightyMouse turns your iPhone into a trackpad, keyboard and mic for your Mac and puts your coding agent's questions on your lock screen.