@diegopetrucci/pi-notify
A pi extension that sends a notification when the agent is ready for input.
Package details
Install @diegopetrucci/pi-notify from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@diegopetrucci/pi-notify- Package
@diegopetrucci/pi-notify- Version
0.1.2- Published
- Apr 22, 2026
- Downloads
- 382/mo · 168/wk
- Author
- diegopetrucci
- License
- MIT
- Types
- extension
- Size
- 11.9 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
notify
A pi extension that sends notifications when the agent finishes and is waiting for input.
This started from the original notify.ts example in badlogic/pi-mono, but now supports multiple notification channels and JSON configuration.
Supported notification channels
Terminal notifications
- OSC 777: Ghostty, iTerm2, WezTerm, rxvt-unicode
- OSC 99: Kitty
Desktop notifications
- macOS Notification Center via
osascript - Linux desktop notifications via
notify-send - Windows toast notifications via
powershell.exe/ Windows Terminal / WSL
Bells and sounds
- terminal bell (
\a) - macOS sound playback via
afplay - Linux sound playback via
canberra-gtk-playorpaplay - Windows beep via
powershell.exe
By default, these channels are enabled:
- terminal notification
- desktop notification
- bell
Sound remains available as an opt-in option via config.
The extension automatically picks the appropriate backend for the current environment.
Install
Standalone npm package
pi install npm:@diegopetrucci/pi-notify
Collection package
pi install npm:@diegopetrucci/pi-extensions
GitHub package
pi install git:github.com/diegopetrucci/pi-extensions
Then reload pi:
/reload
Configuration
Config files are merged, with project config overriding global config:
~/.pi/agent/extensions/notify.json<project>/.pi/notify.json
A ready-to-copy sample file is included at notify.example.json.
Example:
{
"enabled": true,
"onlyWhenInteractive": true,
"title": "Pi",
"body": "Ready for input",
"channels": {
"terminal": true,
"desktop": true,
"bell": true,
"sound": false
},
"terminal": {
"backend": "auto"
},
"desktop": {
"backend": "auto"
},
"sound": {
"backend": "auto",
"name": "Glass",
"linuxSoundId": "complete",
"frequencyHz": 1000,
"durationMs": 250,
"command": ""
}
}
Enable sound
Minimal example:
{
"channels": {
"sound": true
}
}
You can also customize the sound backend and options if needed.
Config fields
enabled: master on/off switchonlyWhenInteractive: skip notifications in print / non-UI modetitle: notification titlebody: notification bodychannels.terminal: enable terminal notification outputchannels.desktop: enable OS desktop notificationschannels.bell: enable terminal bellchannels.sound: enable sound playbackterminal.backend:auto,osc777,osc99,nonedesktop.backend:auto,macos,linux,windows-toast,nonesound.backend:auto,macos,linux,windows-beep,command,nonesound.name: macOS system sound name, likeGlassorHerosound.linuxSoundId: freedesktop sound id, likecompletesound.frequencyHz: Windows beep frequencysound.durationMs: Windows beep durationsound.command: custom shell command whensound.backendiscommand
Notes
- Hooks the
agent_endevent. - Default message is
Pi/Ready for input. - Terminal, desktop, bell, and sound channels can be enabled independently.
- To opt into sound playback, set
channels.soundtotrue.