npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

pi-notify

v1.3.0

Published

Desktop notifications for Pi agent via OSC 777/99/9 and Windows toast

Downloads

1,154

Readme

pi-notify

A Pi extension that sends a native desktop notification when the agent finishes and is waiting for input.

pi-notify demo

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 on

Install

pi install npm:pi-notify

Or via git:

pi install git:github.com/ferologics/pi-notify

Restart 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 TMUX is 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