pi-notify
v1.3.0
Published
Desktop notifications for Pi agent via OSC 777/99/9 and Windows toast
Downloads
1,154
Maintainers
Readme
pi-notify
A Pi extension that sends a native desktop notification when the agent finishes and is waiting for input.

Compatibility
| Terminal | Support | Protocol | | ------------------------------ | ------- | ------------------------------- | | Ghostty | ✓ | OSC 777 | | iTerm2 | ✓ | OSC 9 | | WezTerm | ✓ | OSC 777 | | rxvt-unicode | ✓ | OSC 777 | | Kitty | ✓ | OSC 99 | | tmux (inside a supported term) | ✓* | tmux passthrough + OSC 777/99/9 | | Windows Terminal | ✓ | PowerShell toast | | Terminal.app | ✗ | — | | Alacritty | ✗ | — |
* tmux requires passthrough enabled in your tmux config:
set -g allow-passthrough onInstall
pi install npm:pi-notifyOr via git:
pi install git:github.com/ferologics/pi-notifyRestart Pi.
How it works
When Pi's agent finishes (agent_end event), the extension sends a notification via the appropriate protocol:
- OSC 777 (Ghostty, WezTerm, rxvt-unicode): Native escape sequence
- OSC 9 (iTerm2): iTerm2 notification protocol, detected via
TERM_PROGRAM=iTerm.app - OSC 99 (Kitty): Kitty's notification protocol, detected via
KITTY_WINDOW_ID - tmux passthrough: OSC sequences are wrapped automatically when
TMUXis set - Windows toast (Windows Terminal): PowerShell notification, detected via
WT_SESSION
Clicking the notification focuses the terminal window/tab.
Optional: Custom sound hook
You can run a custom command whenever a notification is sent by setting PI_NOTIFY_SOUND_CMD.
This keeps the extension tiny and cross-platform: you choose the command for your OS.
Note: This is an additional sound hook. It does not replace native terminal/system notification sounds.
Example (macOS)
set -Ux PI_NOTIFY_SOUND_CMD 'afplay ~/Library/Sounds/Glass.aiff'Example (Linux)
export PI_NOTIFY_SOUND_CMD='paplay /usr/share/sounds/freedesktop/stereo/complete.oga'Example (Windows PowerShell)
$env:PI_NOTIFY_SOUND_CMD = 'powershell -NoProfile -Command "[console]::beep(880,180)"'The command is run in the background (shell: true, detached) so it won't block Pi.
What's OSC 777/99/9?
OSC = Operating System Command, part of ANSI escape sequences. Terminals use these for things beyond text formatting (change title, colors, notifications, etc.).
777 is the number rxvt-unicode picked for notifications. Ghostty and WezTerm adopted it. iTerm2 uses 9 instead, and Kitty uses 99 with a more extensible protocol.
Known Limitations
- tmux works only with passthrough enabled (
set -g allow-passthrough on). - zellij/screen are still unsupported for OSC notifications.
License
MIT
