A push notification hook for Amplifier, built by Amplifier
Amplifier · Hooks · Notifications
A long autonomous session is only truly "walk away" if something tells you when the agent is actually blocked on a human. Until then, you babysit the terminal.
amplifier-hooks-notifications is that missing signal — and it's tiny.
Shipped and public as robotdad/amplifier-hooks-notifications, a "Push notification hook for Amplifier events via ntfy.sh." The repo tracks just three files.
A tool small enough to build its own notifier. So why isn't it simpler still?
__init__.py — the entire moduleThe hard problem was never sending notifications. It's sending the RIGHT one, so signal survives contact with a long, busy session.
The design's whole job: keep the alert meaningful. Here's how it does that.
ping · ping · ping · ping · ping…
You mute it by lunch.
— — "waiting for your input" —
You look up, because it earned it.
The default enabled_events is exactly tool:error and session:end — not every sub-step. Restraint by default is what makes each alert mean something.
Quiet by design — and just as importantly, safe by design.
It launches the notify script as an async subprocess and doesn't wait. It runs at priority 90 (low), after other hooks, and swallows its own errors.
Never blocks, never interferes, never breaks a run. Now — what does it actually say?
create_subprocess_exec then create_task(process.wait()) — "Don't wait for completion."Commit 2e4dd0d replaced a raw tool-count message with a prompt preview; follow-up 71e08fb caches the prompt from session:start so session:end can name it.
One glance tells you which session finished. Meaning beats volume — and that sets up the climax.
Session ended. {tool_count} tool calls executed.
Session Complete — Re: {preview}
On tool:post, if the tool is AskUserQuestion, it sends a high-priority alert. Delivered via a portable 3-arg notify script.
The one moment a human is the blocker becomes unmissable — "walk away" finally means walk away.
notify <message> <title> <priority> script — ntfy.sh to your phone, or native macOS, Linux, Windows.You get pulled back only when it's actually your turn. The generalized pattern: targeted, low-noise notifications are what make async agent work real.
Status: Shipped & public — robotdad/amplifier-hooks-notificationsData as of: 2026-01-06 (last commit 71e08fb). Feature status: Shipped and public.
Source repo: robotdad/amplifier-hooks-notifications (cloned at /tmp/ahn); event system cross-checked in microsoft/amplifier-core.
Commands run:
gh repo view robotdad/amplifier-hooks-notifications --json name,description — description & namewc -l amplifier_module_hooks_notifications/__init__.py (180 lines) + find /tmp/ahn -type f -not -path '*/.git/*' (3 files)git log --pretty=format:'%an|%ae' and git log --oneline | wc -l (5 commits, all 2026-01-06)git show 2e4dd0d ; git show 71e08fb — prompt-preview change and prompt cachingread_file __init__.py lines 17-21, 34-41, 91-109, 147/160/170 — defaults, AskUserQuestion path, fire-and-forget, priority 90grep -rn 'session:end|tool:post|HookResult' amplifier-core/amplifier_core/*.py — verified lifecycle eventsPrimary contributors: Marc Goodner (all 5 commits), co-authored by the Amplifier bot on every commit.
Gaps: Real-world adoption / user counts are not verifiable from the repo (none stated). ntfy.sh delivery latency ("across the room" timing) is inherent to ntfy.sh, not benchmarked here. The module has no dedup/one-notification-per-run counter; it can fire on multiple configured events.