Here's what works for me on Big Sur. I found a script somewhere in stack exchange (possibly in this thread), but I ran into some errors and fixed them. I've been using it for a few weeks with no issues -- it's also much faster than the script I was using before Big Sur.
1. Create a clear_notifications
script
You can do that by running this script from your terminal
write_target=~/bin/clear_notifications
mkdir ~/bin
cat << EOF > $write_target
#!/usr/bin/osascript
# Usage: clear_notifications [partial_title]
#
# Clears notifications from the notification center if they contain the string in [partial_title].
# If no arg is passed in, all notifications are cleared.
on run argv
tell application "System Events"
try
set _groups to groups of UI element 1 of scroll area 1 of group 1 of window "Notification Center" of application process "NotificationCenter"
repeat with _group in _groups
set temp to value of static text 1 of _group
set _actions to actions of _group # Get all the actions within this group
set isInScope to true
if (count of argv) > 0 then
set searchTerm to item 1 of argv
if temp does not contain searchTerm then
log "Didn't find any notifications matching " & searchTerm
set isInScope to false
end if
end if
if isInScope then
if exists (first action of _group where description is "Clear All") then
log "Found 'clear all' for " & temp
perform (first action of _group where description is "Clear All")
else if exists (first action of _group where description is "Close") then
log "Found close for " & temp
perform (first action of _group where description is "Close")
else
log "Didn't find close action for " & temp
end if
end if
end repeat
on error errMsg
log "Error: " & errMsg
end try
end tell
end run
EOF
chmod u+x $write_target
2. Connect the script to a keyboard shortcut.
You can do this using the keyboard shortcut instructions from the accepted answer (similar instructions here), but I find automator clunky and cumbersome for such a simple task. I much prefer using Better Touch Tool.
- Go to Better Touch Tool configuration
- In the left panel, select "All Apps"
- Add a new keyboard shortcut of your choice and choose
Execute Terminal Command (Async, non-blocking)
as the trigger.
- Enter
~/bin/clear_notifications
into the textbox where it says Enter Terminal Command
2. (Optional) Create shortcuts to clear specific notifications
If you just want to clear, say, Calendar notifications, where the title of the notification has the word "Calendar" in it, you can enter the following in the terminal command text box instead. I have terminal notifications from iTerm that let me know when builds are complete, and I mostly use it for that.
- Enter
~/bin/clear_notifications "Calendar"
into the textbox where it says Enter Terminal Command