A tiny Windows toast notification CLI that knows how to hook into Coding Agents so you get notified when their long running tasks are finished. 229 KB, no dependencies.
toasty "Hello World" -t "Toasty"That's it. Toasty auto-registers on first run.
toasty <message> [options]
toasty --install [agent]
toasty --uninstall
toasty --status
Options:
-t, --title <text> Set notification title (default: "Notification")
--app <name> Use AI CLI preset (claude, copilot, gemini, codex, cursor)
-v, --version Show version and exit
-h, --help Show this help
--install [agent] Install hooks for AI CLI agents (claude, gemini, copilot, or all)
--uninstall Remove hooks from all AI CLI agents
--status Show installation status
--dry-run Show what would happen without executing side effects
| Agent | Icon | Auto-Detect | --install |
Hook Type | Config Location |
|---|---|---|---|---|---|
| Claude Code | ✅ | ✅ | ✅ | Stop |
~/.claude/settings.json |
| GitHub Copilot | ✅ | ✅ | ✅ | sessionEnd |
.github/hooks/toasty.json |
| Gemini CLI | ✅ | ✅ | ✅ | AfterAgent |
~/.gemini/settings.json |
| OpenAI Codex | ✅ | ✅ | ✅ | notify |
~/.codex/config.toml |
- Icon: Built-in icon for toast notifications
- Auto-Detect: Toasty recognizes the agent's process and applies the preset automatically
--install:toasty --installcan automatically configure the agent's hook
Don't see your agent? Any CLI tool with a hook/notification mechanism can call toasty directly.
Toasty automatically detects when it's called from a known AI CLI tool and applies the appropriate icon and title. No flags needed!
# Called from Claude - automatically uses Claude preset
toasty "Analysis complete"
# Called from Copilot - automatically uses Copilot preset
toasty "Code review done"Override auto-detection with --app:
toasty "Processing finished" --app claude
toasty "Build succeeded" --app copilot
toasty "Query done" --app geminiToasty can automatically configure AI CLI agents to show notifications when tasks complete.
📖 Want more control? See HOOKS.md for all available hook events (permission requests, errors, session lifecycle, etc.)
# Install for all detected agents
toasty --install
# Install for specific agent
toasty --install claude
toasty --install gemini
toasty --install copilot
# Check what's installed
toasty --status
# Remove all hooks
toasty --uninstallDetecting AI CLI agents...
[x] Claude Code found
[x] Gemini CLI found
[ ] GitHub Copilot (in current repo)
Installing toasty hooks...
[x] Claude Code: Added Stop hook
[x] Gemini CLI: Added AfterAgent hook
Done! You'll get notifications when AI agents finish.
If you prefer to configure hooks manually:
Add to ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "C:\\path\\to\\toasty.exe \"Claude finished\"",
"timeout": 5000
}
]
}
]
}
}Add to ~/.gemini/settings.json:
{
"hooks": {
"AfterAgent": [
{
"hooks": [
{
"type": "command",
"command": "C:\\path\\to\\toasty.exe \"Gemini finished\"",
"timeout": 5000
}
]
}
]
}
}Add to .github/hooks/toasty.json:
{
"version": 1,
"hooks": {
"sessionEnd": [
{
"type": "command",
"bash": "toasty 'Copilot finished'",
"powershell": "toasty.exe 'Copilot finished'",
"timeoutSec": 5
}
]
}
}Get push notifications on your phone when AI agents finish — even when you're away from your desk. Uses ntfy.sh, a free, open-source notification service. No account or API key required.
- Install the ntfy app on your phone (iOS/Android)
- Subscribe to a topic of your choice (use something unique and hard to guess)
- Set the environment variable:
set TOASTY_NTFY_TOPIC=my-secret-toasty-topicThat's it. Now every toast notification also sends a push to your phone.
If you run your own ntfy server, point toasty at it:
set TOASTY_NTFY_SERVER=ntfy.example.comDefault server is ntfy.sh if not set.
- Toasty checks for
TOASTY_NTFY_TOPICon each run - If set, it sends an HTTPS POST to
ntfy.sh/<topic>(or your custom server) with the notification title and message - The request has a 5-second timeout — if the service is down or the network is slow, toasty won't hang
- If anything goes wrong with the push notification, the local toast still shows normally
# Set once (add to your shell profile)
set TOASTY_NTFY_TOPIC=scotts-coding-notifications
# Now every toasty notification also goes to your phone
toasty "Claude finished analysis" --app claudeToasty automatically checks for new versions once per day. If an update is available, you'll see:
- A message in your terminal:
Update available: v0.3 → v0.4 (https://github.com/shanselman/toasty/releases) - A clickable toast notification that opens the releases page
The check is non-blocking (5-second timeout), throttled to once every 24 hours, and silently skips if offline. It never auto-updates — you download the new version yourself.
Check your current version anytime:
toasty --versionRequires Visual Studio 2022 with C++ workload.
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config ReleaseOutput: build\Release\toasty.exe
Run the test suite after building:
.\tests\test-toasty.ps1 -ExePath .\build\Release\toasty.exeTests use --dry-run to validate argument parsing, preset icons, toast XML generation, install/uninstall logic, and ntfy configuration without showing actual notifications or modifying any config files.
MIT