The papercut
Notifications are all-or-nothing. You either leave an app on, and drown in its banners, or turn it off, and miss the one that counted: the deploy alert from Azure, the Slack thread where someone finally mentioned you, the email about a deal you’re tracking. macOS has Focus modes and per-app toggles, but no way to say “these are important and everything else can wait,” in your own words, across every app at once.
What filter does
It lives in the menu bar and watches the notifications macOS delivers, from every app. You give it rules in plain English, one per line, toggleable:
- email from Azure about the Postgres database
- mentioned in Slack, or messages about Ford Motor Company
Each incoming notification is matched against your rules two ways, both on-device: a fast literal pass catches named things (“Ford”, “Azure”), and Apple’s built-in language model catches the paraphrases a literal pass would miss (“the database is down” against a rule about “Postgres problems”). When one matches, filter re-raises it, verbatim, as its own alert, and lists it in a Highlights feed with a note of which rule caught it. Set filter to the persistent Alerts style and your chatty apps to temporary Banners, and the only notifications that linger are the ones that earned it.
On-device, by construction
Something that reads all your notifications has no business
sending them anywhere. So filter doesn’t: classification runs
entirely on your Mac with Apple’s bundled
NaturalLanguage model: no account, no API key, no
network. It needs two grants, each with a plain reason: Notifications,
to re-raise the important ones, and Full Disk Access, because macOS
offers no API to observe other apps’ notifications, so filter
reads the system notification log directly, read-only, never
writing to it. The matching logic is a small, unit-tested engine with no
dependency on any of that, which is also the seam where a cloud
classifier could drop in later if the on-device model ever proves too
blunt.