On macOS and Linux anotifier uses the notification tool the operating system already has: osascript on a Mac and notify-send on Linux. Nothing runs in the background, and on macOS nothing extra is installed. Here is what each backend shows, what it needs, and how to check that banners really arrive.
Rather skip the manual setup? One command wires every agent you have installed to desktop toasts, phone push, and Slack, Discord or Telegram:
Updated 2026-09-25 · also see the full docs
Each toast is an AppleScript display notification call with the title (my-app · Claude Code), the message, and a sound. There is no helper app to install, which also means no custom icon and no click action: macOS shows the banner under the app it attributes AppleScript notifications to, usually Script Editor or your terminal.
Sounds map to built-in macOS sounds: finished tasks (IM) play Glass and approvals or questions (Reminder) play Ping. Mail maps to Purr, SMS to Tink, and Alarm to Sosumi. You can also name any built-in sound directly:
{ "events": { "task_complete": { "toastSound": "Hero" } } }anotifier test toast once first.anotifier doctor reads that permission and warns when the app is not allowed. macOS does not expose this officially, so doctor treats the reading as best-effort.anotifier doctor --deep sends a marker notification and reads it back from Notification Center's database, waiting up to 15 seconds. If the database can't be read, grant your terminal Full Disk Access in System Settings > Privacy & Security.On Linux each toast is a notify-send call with the agent's icon, the title, and the message. It needs a desktop session with a notification daemon (GNOME, KDE Plasma, and most desktops ship one) and the libnotify command-line tool:
sudo apt install libnotify-bin # Debian, Ubuntu
sudo dnf install libnotify # Fedora
sudo pacman -S libnotify # ArchPriority becomes urgency. Approvals and questions go out critical, which the notification spec says should stay on screen until you dismiss it; finished tasks go out low. Sound names are ignored on Linux.
On a server, or over SSH with no desktop session, notify-send has nowhere to deliver. The toast fails, the failure is logged to ~/.anotifier/errors.log as toast:linux, and ntfy, webhooks, and the bell still deliver. On remote machines, phone push is the channel to rely on.
anotifier doctor warns when notify-send is missing.anotifier doctor --deep sends a low-urgency toast and reads it back from dunstctl history if you run dunst. Other notification daemons report dispatched-but-unverified.anotifier test toast # prints Toast sent or Toast failed
anotifier doctor --deep # send a marker and read it backIf the test works but real notifications don't, the hook is the problem, not the backend: see the troubleshooting guide.
AppleScript banners always use the icon of the app macOS attributes them to, usually Script Editor or your terminal. anotifier puts the project and agent in the title instead: my-app · Claude Code.
No. anotifier only uses osascript, which ships with macOS.
Yes. notify-send talks to the notification daemon over D-Bus, which works the same under Wayland and X11.
Yes. Toasts need a desktop, but ntfy push and webhooks work anywhere with network access. Enable ntfy during setup and subscribe to the topic in the ntfy app.
One command wires every agent you have installed: Claude Code, Codex CLI, Cursor, and Gemini CLI.
npx anotifier@latest setup