← Back to all posts

Get Claude Code Notifications on Your iPhone & Apple Watch in 1 Minute

1-Minute Implementation

This is not an exaggeration - it genuinely takes 1 minute. Copy this entire post into Claude Code and tell it to set this up for you. It will configure the hook automatically - all you need to do is:

  1. Download ntfy on your iPhone
  2. Paste the topic ID that Claude Code generates into the ntfy app

That's it. You'll start getting notifications on your iPhone (and Apple Watch) whenever Claude Code finishes. No restart needed - by the time Claude Code finishes setting it up, the hook is already active, and that response itself will trigger your first notification.


5-Minute Implementation

I often kick off long-running tasks in Claude Code and walk away - grab coffee, stretch, context-switch. The problem: I'd come back too early (still running) or too late (finished ages ago).

So I set up push notifications that hit my iPhone the moment Claude Code finishes responding. It works anywhere in the world - at my desk, on a walk, or in a different country - as long as my phone has connectivity. And if you have an Apple Watch, the notification mirrors to your wrist as a haptic tap.

Here's how to set it up manually.

How It Works

Claude Code has a hooks system - shell commands that run in response to lifecycle events. The Stop hook fires every time Claude finishes its turn. We'll use that hook to send a push notification via ntfy, a free and open-source notification service.

Claude Code finishes → Stop hook fires → curl hits ntfy.sh → iPhone notification → Apple Watch vibrates

Prerequisites

  • Claude Code installed and working
  • An iPhone with the ntfy app (free on the App Store)
  • An Apple Watch paired to your iPhone (optional - for wrist notifications)

Step 1: Set Up ntfy on Your iPhone

  1. Install ntfy from the App Store
  2. Open the app and tap + to subscribe to a new topic
  3. Pick a secret topic name - this acts as your private channel. Use something hard to guess (e.g., a UUID). Anyone who knows this topic name can send you notifications, so treat it like a password.
# Generate a random topic name
uuidgen | tr '[:upper:]' '[:lower:]'
# Example output: 86e59607-fe76-4619-9b48-8d4892d79868
  1. Subscribe to that topic in the ntfy app

Step 2: Configure Claude Code's Stop Hook

Open your Claude Code user settings file at ~/.claude/settings.json and add a hooks section. If you already have other settings in the file, merge this in:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "curl -s -d 'Claude Code done' ntfy.sh/YOUR_TOPIC_NAME > /dev/null 2>&1 &"
          }
        ]
      }
    ]
  }
}

Replace YOUR_TOPIC_NAME with the topic you subscribed to in Step 1.

The trailing & backgrounds the curl request so it doesn't block Claude Code. The > /dev/null 2>&1 suppresses output.

Bonus: Add a Local Sound Too

If you also want an audible chime on your Mac when Claude finishes, combine both in one hook:

"command": "afplay /System/Library/Sounds/Glass.aiff & curl -s -d 'Claude Code done' ntfy.sh/YOUR_TOPIC_NAME > /dev/null 2>&1 &"

macOS ships with several built-in sounds in /System/Library/Sounds/ - try Ping.aiff, Pop.aiff, Purr.aiff, or Hero.aiff if Glass isn't your thing.

Step 3 (Optional): Enable Apple Watch Mirroring

Most Apple Watches have notification mirroring enabled by default, so this should already work. If you're not seeing notifications on your watch, check these settings:

  1. Open the Watch app on your iPhone
  2. Go to Notifications
  3. Find ntfy in the app list
  4. Enable Mirror iPhone Alerts

Note: Apple Watch only shows mirrored notifications when your iPhone is locked. If your phone is unlocked, the notification stays on the phone.

Step 4 (Optional): Activate the Hook

If you edited settings.json while Claude Code was already running, you may need to restart Claude Code or run /hooks inside your current session to pick up the new hook. If you used the 1-minute implementation above (copying this post into Claude Code), the hook is already active - no restart needed.

Step 5 (Optional): Test It

If you used the 1-minute implementation, you've already received your first notification - Claude Code's response triggered the hook automatically. Otherwise, send a test notification from your terminal:

curl -s -d 'Claude Code done' ntfy.sh/YOUR_TOPIC_NAME

You should see the notification on your phone immediately. To test the watch: lock your iPhone first, then run the curl command again. You should feel a tap on your wrist.

Bonus: A Slash Command to Toggle Notifications

Once you have this set up, you'll probably find yourself wanting to turn push notifications on and off depending on context - maybe you don't need your watch buzzing for every quick question, but you want it for long-running tasks.

You can create a custom Claude Code slash command that toggles push notifications with a single /push-notifications invocation.

Create a file at ~/.claude/skills/push-notifications/SKILL.md:

---
name: push-notifications
description: Toggle ntfy.sh push notifications on or off in the Stop hook
disable-model-invocation: true
---

Toggle push notifications in `~/.claude/settings.json` Stop hook.

Steps:
1. Read `~/.claude/settings.json`
2. Find the Stop hook command
3. If the command contains the ntfy.sh curl, remove it (disable push notifications). The sound-only command should be: `afplay /System/Library/Sounds/Glass.aiff`
4. If the command does NOT contain the ntfy.sh curl, add it back (enable push notifications). The full command should be: `afplay /System/Library/Sounds/Glass.aiff & curl -s -d 'Claude Code done' ntfy.sh/YOUR_TOPIC_NAME > /dev/null 2>&1 &`
5. Edit the settings file to apply the change
6. Tell the user the new state (enabled or disabled)

Replace YOUR_TOPIC_NAME with your actual ntfy topic. Now you can type /push-notifications in any Claude Code session to toggle them on or off. No restart needed - the change takes effect immediately.

Tips

  • Privacy: Your topic name is the only "authentication." Pick something random and don't share it publicly. ntfy also supports access control if you want token-based auth.
  • Custom messages: You can include context in the notification body. For example, change the message to include the working directory: "command": "curl - s - d \"Done in $(basename $PWD)\" ntfy.sh/YOUR_TOPIC_NAME > /dev/null 2>&1 &"
  • Linux: Replace afplay with paplay /usr/share/sounds/freedesktop/stereo/complete.oga for the local sound.
  • Notification priority: ntfy supports priority levels. Add -H "Priority: high" to the curl command for a more aggressive notification that bypasses Do Not Disturb.
  • Other hook events: Claude Code also has PreToolUse, PostToolUse, Notification, and SubagentStop hooks. You could set up notifications for specific events like when a subagent finishes a background task.

Why Not Just Use macOS Notifications?

macOS notifications work great when you're at your desk. But they don't reach you when you're away from your computer. The ntfy approach works over the internet - your Mac sends a request to ntfy's server, which pushes it to your phone, which mirrors it to your watch. Your watch's eSIM or Wi-Fi connection handles the rest. You could be on a different continent and still get the tap.


That's it - a 1-minute setup that saves you from constantly checking whether Claude is done. The little tap on the wrist is surprisingly satisfying.