Guidesclaude code desktop notificationsclaude code mac notificationclaude code notification sound

Claude Code Desktop Notifications on macOS: Every Option

Get a desktop alert when Claude Code finishes — from the terminal bell and native macOS banners with no app, to putting your iPhone's Claude Code Live Activity right in the Mac menu bar via iPhone Mirroring.

Ian Brillantes · Founder & iOS EngineerJuly 12, 20265 min read

Quick answer

For a desktop signal with no extra app, hook Claude Code's Stop event to a native macOS banner with osascript (display notification) or terminal-notifier, or ring the terminal bell. Those only fire while you're at that Mac. For a live, updating indicator, macOS Tahoe 26 mirrors your iPhone's Live Activities into the Mac menu bar via iPhone Mirroring — so a Claude Code Live Activity running on your phone shows up as a pill in your Mac's menu bar automatically.

You want your Mac to tell you when Claude Code is done, not to keep checking a terminal tab. There are two very different ways to get there: native banners that live on that one Mac, and — new in macOS Tahoe 26 — your iPhone's Live Activity mirrored straight into the Mac menu bar. The second is the interesting one, so we'll build up to it.

Option 1: Native macOS banners (no app, no account)

Claude Code's hook system can run any command when the agent finishes, so the simplest desktop notification is a one-liner that macOS already ships.

osascript (built in)

Hook the Stop event to osascript and macOS shows a banner:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "/usr/bin/osascript -e 'display notification \"Claude Code finished — your move.\" with title \"Claude Code\" sound name \"Glass\"'"
          }
        ]
      }
    ]
  }
}

That posts a banner in the top-right corner, drops it into Notification Center, and plays the Glass chime. No install required.

terminal-notifier (more control)

If you want to set the sound, subtitle, or click action more precisely, install terminal-notifier with Homebrew and call it instead:

brew install terminal-notifier
/opt/homebrew/bin/terminal-notifier -title "Claude Code" -message "Finished — your move." -sound Glass

Just a beep

If all you want is a sound, have the hook print a bell character and let your terminal handle it:

printf '\a'
Heads up

Use absolute paths in every hook command (/usr/bin/osascript, /opt/homebrew/bin/terminal-notifier). Hooks run in a non-interactive shell that doesn't load your ~/.zshrc, so a bare terminal-notifier often won't be found even though it works in your terminal. This is the most common reason a desktop hook silently does nothing — see notifications not working.

The honest limit of all three: they fire on that Mac. Perfect when you're at the keyboard with the window buried; useless the moment you walk away.

Option 2: Your iPhone's Live Activity in the Mac menu bar

Here's the part most people don't know about. As of macOS Tahoe 26, your iPhone's notifications and Live Activities mirror to your Mac through iPhone Mirroring — and a Live Activity shows up as a pill-shaped indicator right in the Mac menu bar. So if you already run a Claude Code Live Activity on your phone, you can watch its status from the top of your Mac screen without picking the phone up.

What you need

  • macOS Tahoe 26 on the Mac. (iPhone Mirroring and iPhone notifications shipped earlier in macOS Sequoia, but Live Activities on the Mac arrived in Tahoe 26.)
  • An iPhone on iOS 18 or iOS 26, signed into the same Apple Account as the Mac.
  • Wi-Fi and Bluetooth on, and Handoff enabled.
  • iPhone Mirroring set up on the Mac.

Turn it on

  1. Set up iPhone Mirroring on the Mac (open the iPhone Mirroring app and follow the prompts). Once connected, your iPhone's notifications and Live Activities flow to the Mac automatically — even when you're not actively mirroring the screen.
  2. On the Mac: System Settings → Notifications → Allow notifications from iPhone, and confirm Allow Live Activities from iPhone is on (it defaults on after updating).
  3. On the iPhone: Settings → General → AirPlay & Continuity → Handoff on.

Using it

Start a Claude Code session that runs a Live Activity on your phone. A pill appears in your Mac's menu bar — a small icon or a compact view depending on how much menu-bar room you have. Click it to expand and read the current state (running, needs you, done); double-click to open the app in an iPhone Mirroring window. Your phone can stay in your bag.

Info

This is the cleanest desktop story for Claude Code: you set up the Live Activity once on your phone, and it rides along to the Mac menu bar for free. The same card also shows on your iPhone Lock Screen and Dynamic Island — one status, three places.

Stop babysitting your terminal

Agentfy pushes Claude Code status to your iPhone — Live Activities, Dynamic Island, and instant alerts.

Download Agentfy

Which should you use?

| You want... | Use | |---|---| | A one-off ping while you're at the Mac | osascript / terminal-notifier banner | | Just a sound when it finishes | Terminal bell or a notification sound | | A live, updating status in the menu bar | iPhone Mirroring Live Activity (Tahoe 26) | | To be told when you've left the Mac | A push notification to your phone |

Native banners and the menu-bar Live Activity both depend on being near an awake Mac. The moment you leave the desk entirely, only a phone push reaches you — that's the gap Agentfy fills. It installs the Claude Code hooks via an open-source plugin, pushes each session's status to your iPhone, and runs the Live Activity that then mirrors into your Mac's menu bar — so you're covered both at the desk and away from it. For the full picture of what "done" even means, see how to know when Claude Code is done.

About the author

Ian Brillantes · Founder & iOS Engineer

Ian is the founder of Agentfy and a senior software engineer who lives in Claude Code daily. He builds the hooks-to-push-notification pipeline behind Agentfy and writes these guides from the same multi-agent workflow they describe.

Part of Running Claude Code Like a Pro

More guides in this series

Frequently asked questions

How do I get a desktop notification when Claude Code finishes?+
Attach a hook to Claude Code's Stop event that shows a native macOS banner. The no-install option is osascript: run osascript -e 'display notification "Claude Code finished" with title "Claude Code"' from the hook. If you install terminal-notifier (via Homebrew) you get more control over the title, sound, and click action. Either way the banner appears in the top-right corner and lands in Notification Center.
How do I make Claude Code beep or play a sound when it's done?+
The simplest sound is the terminal bell — have the Stop hook print a bell character (printf '\a') and let your terminal turn it into a sound. For a distinct chime, use osascript with 'display notification ... sound name "Glass"' or afplay to play a specific system sound file. The bell only helps if the terminal has focus permission to make sound; a notification sound is more reliable.
Can I see my iPhone's Claude Code Live Activity on my Mac?+
Yes, on macOS Tahoe 26. Once iPhone Mirroring is set up, your iPhone's notifications and Live Activities appear on the Mac automatically — the Live Activity shows as a pill-shaped indicator in the Mac's menu bar. So if you run a Claude Code Live Activity on your phone, you can watch its status from the Mac menu bar without touching the phone. Click the pill to expand it; double-click to open the app through iPhone Mirroring.
What do I need for Live Activities to show on my Mac?+
Live Activities on Mac require macOS Tahoe 26 (iPhone Mirroring and iPhone notifications arrived earlier in macOS Sequoia, but Live Activities on the Mac came in Tahoe 26). You also need an iPhone on iOS 18 or iOS 26 signed into the same Apple Account, Wi-Fi and Bluetooth on, Handoff enabled, and iPhone Mirroring set up. Then check System Settings → Notifications → Allow notifications from iPhone, with Allow Live Activities from iPhone turned on.
Why don't native macOS banners reach me when I leave my desk?+
Because they're local to that Mac — osascript, terminal-notifier, and the terminal bell all fire on the machine running the command, so once you walk away there's nothing to see or hear. The iPhone Mirroring menu-bar Live Activity has the same limitation (it needs the Mac awake and nearby). To be notified away from the computer entirely, send the alert to your phone with a push notification instead.

Ready to stop babysitting your terminal?

Agentfy pushes Claude Code status to your iPhone — Live Activities, Dynamic Island, and instant alerts. Set up in under a minute.

Download Agentfy