A Pi extension that sends a native desktop notification when the agent finishes and is waiting for input.
| 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 onpi install npm:pi-notifyOr via git:
pi install git:github.com/ferologics/pi-notifyRestart Pi.
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.
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.
set -Ux PI_NOTIFY_SOUND_CMD 'afplay ~/Library/Sounds/Glass.aiff'export PI_NOTIFY_SOUND_CMD='paplay /usr/share/sounds/freedesktop/stereo/complete.oga'$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.
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.
- tmux works only with passthrough enabled (
set -g allow-passthrough on). - zellij/screen are still unsupported for OSC notifications.
MIT
