MightyMouse

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.

On your phone? Get the Mac app by email.

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.

Download free for Mac

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:

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):

  1. Install the Claude app on your iPhone and sign in with the same account and organization you use for Claude Code.
  2. Allow notifications when iOS asks.
  3. Start a Remote Control session in your terminal. Their page covers the commands: claude remote-control, or claude --remote-control, or /remote-control inside a running session.
  4. In your terminal, run /config and 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:

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.

  1. 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.
  2. Install the ntfy app on your iPhone and subscribe to that topic.
  3. Install jq if you do not have it (brew install jq).
  4. Create ~/.claude/hooks/ping-done.sh with: #!/bin/sh then jq -r '.last_assistant_message[:200]' | curl -s -H "Title: Claude Code finished" -d @- ntfy.sh/YOUR-RANDOM-TOPIC
  5. Create ~/.claude/hooks/ping-blocked.sh the same way, using jq -r '.message', the title "Claude Code needs you" and the header Priority: high.
  6. Run chmod +x on both scripts and add the config above to ~/.claude/settings.json.
  7. 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.

Setup:

  1. Install the MightyMouse Mac app and the iPhone app, sign in on the Mac, and pair the phone.
  2. 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.
  3. 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."
  4. 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

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

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.

Download free for Mac

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.

Read next