Can Apple Shortcuts change notification sounds on your Mac?
No. Shortcuts on macOS has no “when a notification arrives” trigger, so there's nothing to hang a sound on. As of macOS 26 Tahoe, the automation triggers available on Mac are time of day, alarm, sleep and wake, an email or message arriving, joining a Wi-Fi network, connecting Bluetooth, and a Focus turning on or off. Another app's notification isn't in that list.
The reason this question gets asked so often is that Shortcuts looks like it should work. It has a Play Sound action. It has a Show Notification action. Both of those are Shortcuts sending something. Changing what you hear when Slack pings you means reacting to a notification another app already posted, and that's the half macOS doesn't expose to Shortcuts.
Two of those triggers come close enough to be worth naming. “Email arrives” and “Message arrives” watch Mail and Messages accounts directly, not the notifications those apps post. They're the only two apps with that treatment, they only fire on the account conditions you set, and no equivalent exists for Slack, Teams, Discord, Outlook, or anything else.
Limit: Shortcuts can play any sound you like at a time you choose. It cannot be started by a notification from another app.
What people try instead, and where each one stops
The three neighbours to Shortcuts hit the same wall in the same place: each of them can make a sound, and none of them gets told that a notification happened.
Automator
Automator has a Play Sound action and it's genuinely good at the thing it was built for — a workflow that runs when a file lands in a folder, when a Calendar alarm fires, when a camera is plugged in, or when you press run. Those are the triggers. A notification arriving isn't a trigger, so an Automator workflow that plays a sound for new Slack messages has no way to start.
Limit: same gap as Shortcuts. Automator can play the sound; nothing tells it when.
AppleScript
AppleScript has display notification with a sound name parameter, which posts a banner and plays a sound — again, a notification AppleScript sends. There's no notification-received event to handle. A script can't subscribe to Notification Center and be called when Slack posts a banner.
There is one approach that circles around this: Notification Center keeps a local database, and a script can poll it and diff what's new. I'm naming it rather than writing it out, because it needs Full Disk Access, the path and the schema have moved between macOS releases, and a poll interval you can feel is a poll interval that costs battery. In my testing it's the kind of thing that works on the Mac you built it on and breaks the morning after an OS update, which is a bad trade for a sound.
Limit: no supported hook. The database-polling route works until macOS changes the database, and you find out by not hearing anything.
terminal-notifier
terminal-notifier is a small command-line tool that posts a macOS notification from a shell script, and its -sound flag picks which sound plays with it. It's the right tool for “tell me when this build finishes” — make && terminal-notifier -message "done" -sound Hero earns its place in a Makefile.
It's still sending, not reacting. The flag chooses the sound for the notification you're posting. It can't change what Slack, Mail, or Teams sound like, because those apps post their own notifications and never route through it.
Limit: -sound applies to notifications terminal-notifier posts itself, and only those.
What actually can react to a notification
Exactly one mechanism on macOS lets a program notice another app's notification banner: the Accessibility API, which can read the text already visible in Notification Center banners. Everything that works goes through it, or works inside a single app's own API.
| Approach | Reacts to another app's notification | Can play a sound | What it needs |
|---|---|---|---|
| Shortcuts | No | Yes | Nothing — it's built in. There's no automation trigger for an incoming notification. |
| Automator | No | Yes | Nothing. Folder Action, Calendar Alarm, and Image Capture are the triggers; notifications aren't one. |
| AppleScript | No | Yes | No notification-received hook. Polling the Notification Center database needs Full Disk Access and breaks on OS updates. |
| terminal-notifier | No | Yes | Homebrew install. Its -sound flag decorates a notification it sends itself. |
| Hammerspoon | Yes, with work | Yes | Lua you write and maintain, watching Notification Center through the Accessibility API. |
| A Slack bot script | Yes, inside Slack | Yes | A Slack app, OAuth scopes, a process running all day, and the bot invited to each channel. |
| Chirpy | Yes | Yes | Accessibility access and a rule. |
Three routes are open, and they're very different amounts of work.
- A per-service script. Skip macOS and talk to the service instead. The best-known version is a Slack bot that watches channel history and plays a file per channel: what the slack-sounds scripts on GitHub actually do. Real per-channel sounds, at the cost of a Slack app, OAuth scopes, a process that has to stay running, and inviting the bot to every channel you want a sound for. Slack only — nothing else on your Mac benefits.
- Hammerspoon. The one general-purpose scripting answer that reaches notifications, via
hs.axuielementobservers on the Notification Center UI — the same Accessibility mechanism, hand-rolled in Lua. There's working code and the list of things that break in using Hammerspoon for notification sounds. - Chirpy. Chirpy is a native Mac menu bar app that plays a chosen sound when a matching notification banner appears. It reads the text already visible in Notification Center banners through the Accessibility API, matches each banner against rules stored on your Mac, and plays the sound attached to the most specific match. Rules can name an app, a person, a channel, or a keyword, and each rule has its own sound and volume.
Chirpy needs Accessibility access and never Screen Recording, never connects to Slack's or Teams' APIs, and never sends notification content off your Mac. It's $19.99 once, free to try for 3 days without a card, with 30 days to ask for your money back, and it runs on macOS 13 or later. See what the licence covers. If your problem is broader than Shortcuts — giving each Mac app its own notification sound — start there instead.
What the scripting route actually costs
I wrote the Hammerspoon version before I built Chirpy, so this part is first-hand: the code is the easy half. Notification Center's Accessibility tree isn't documented API, and when a macOS update moves it, the observer stops firing and nothing tells you. Silence looks identical to working. You find out you've been unprotected when you miss the message the script existed to catch. Chirpy is the same mechanism with that maintenance done for you, tested against each macOS release, and it leaves the rest of your automations alone.
One setup note, since it decides whether any of this helps: keep a quiet default and give distinct sounds to the few alerts that have earned an interruption. Sounds for everything put you back where you started, unable to tell them apart.
Frequently asked questions
No. As of macOS 26 Tahoe, the Shortcuts automation triggers on Mac are time of day, alarm, sleep and wake, email or message arriving, Wi-Fi, Bluetooth, and Focus changes. An incoming notification from another app isn't among them, so there's no trigger to attach a sound to.
No. Automator can play a sound file, but it starts from a Folder Action, a Calendar Alarm, an Image Capture event, or you pressing run. Nothing in Automator watches Slack, so it never learns a message arrived.
Yes, through the Accessibility API. Hammerspoon can watch Notification Center in Lua and play a sound when a banner from a chosen app appears. You write the element paths and the text matching, and you fix them when macOS changes them.
It picks the sound for the notification terminal-notifier is posting. It's useful at the end of a long build, in a shell script you control. It has no effect on notifications that other apps post.
Comparisons reflect publicly available information as of August 2026.