AgentNotify v0.0.2-alpha.1
Pre-releaseThis is a prerelease. It is intended for testing and evaluation: expect incomplete
features, breaking changes, and unsigned binaries. The mature1.0.0release is reserved for a
future stable milestone.
AgentNotify now runs on macOS and Linux, not just Windows.
Added
- Headless broker for macOS and Linux (
agentnotifyd). Runs the same broker the Windows tray
process hosts — configuration, SQLite history, the durable delivery outbox, and the loopback
/v1API — without a desktop UI framework. Agents cannot tell the two apart: the CLI, the bearer
token, and the API contract are identical on every platform. - Desktop notifications on macOS and Linux.
notify-sendon Linux,terminal-notifieror
Notification Center on macOS, and a console fallback so a notification is never silently dropped
when no graphical session exists, such as over SSH. - Per-platform provider secret protection. Windows continues to use DPAPI and never falls back.
macOS stores the key in the login keychain, Linux in the Secret Service keyring viasecret-tool,
and either falls back to an owner-only key file with an explicit startup warning. - Self-contained binaries for five runtimes —
win-x64,linux-x64,linux-arm64,osx-x64,
andosx-arm64— published as archives with SHA-256 checksums, alongside the Windows installer. install.shfor macOS and Linux, which verifies the published checksum before installing and
refuses to install anything it cannot verify.- Continuous integration on Linux and macOS runners, including a broker smoke test that
exercises the API, keyed deduplication, owner-only file permissions, andSIGTERMshutdown. - New documentation: a CLI reference, a configuration reference, a troubleshooting guide, a
macOS/Linux installation guide, and an index atdocs/README.md.
Fixed
- Local state could be written to the working directory on macOS and Linux. On Unix,
Environment.GetFolderPathreturns an empty string when the base directory does not exist yet —
the normal state of a fresh account — which produced a relative path. The first run could
therefore writeconfig.json, containing the local bearer token, plus the secret key and the
history database into whatever directory the broker was started from. The data directory is now
always resolved to an absolute path. agentnotifydignoredSIGTERM. The signal registrations were discarded and finalized, which
unhooked the handler; the broker neither shut down nor exited and could only be stopped with
SIGKILL, making it unmanageable under systemd or launchd.- Shutdown could hang indefinitely on an unbounded delivery-dispatcher stop. Every shutdown step
is now bounded, and a second signal exits immediately. - Configured sound file names were not sanitized consistently across platforms.
Path.GetFileName
treats a backslash as an ordinary character on Unix, so a Windows-style path inconfig.json
survived unchanged there. Since configuration is portable between machines, normalization is now
identical on every platform.
Security
- Local state on Unix is created owner-only: the data directory
0700, andconfig.json,
agentnotify.db, andsecret.key0600.config.jsonholds the local bearer token. - Desktop notification backends launch helper processes with an argument list rather than through a
shell, and the macOS AppleScript is a fixed program that receives notification text throughargv,
so agent-supplied titles and messages cannot be interpreted as commands or script.
Known limitations
- macOS and Linux have no tray icon, notification center window, or Settings UI. Configure the
broker throughconfig.jsonand use the CLI. - Neither graphical notification backend has been confirmed to display a notification on real
hardware, and the Linuxsecret-toolpath and the ARM64 binaries have not been executed.
See docs/VERIFICATION.md for exactly what has and has not been observed. - Binaries remain unsigned. Windows may show a SmartScreen prompt, and macOS requires clearing the
quarantine attribute on first run.
Install
Windows — download AgentNotifySetup.exe below and run it. No separate .NET runtime is needed.
The installer is not Authenticode-signed, so Windows may show a SmartScreen prompt.
macOS and Linux
curl -fsSL https://raw.githubusercontent.com/Akash97p/agent-notify/main/scripts/install.sh | shThis verifies the published SHA-256 checksum before installing agentnotify and agentnotifyd
into ~/.local/bin. To install this exact version, set AGENTNOTIFY_VERSION=v0.0.2-alpha.1.
See Installing on macOS and Linux.
Verifying downloads
SHA256SUMS.txt covers the Windows installer. SHA256SUMS-portable.txt covers the portable
archives. Check a download before running it:
sha256sum -c SHA256SUMS-portable.txt --ignore-missingDocumentation
Getting started ·
CLI reference ·
API ·
Configuration ·
Troubleshooting ·
What is verified
Full commit log: v0.0.1-alpha.1...v0.0.2-alpha.1