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

@alinrj/claude-notify

v0.1.2

Published

Cross-platform desktop notifications for Claude Code

Downloads

352

Readme

claude-notify

Stop babysitting your terminal. Get native macOS notifications when Claude Code finishes, needs permission, or has a question. Respond directly from the notification without switching windows.

Install

npm install -g @alinrj/claude-notify
claude-notify setup

That's it. setup installs the native notifier app and wires up Claude Code hooks automatically.

On first run, macOS will ask to allow notifications — approve once and forget about it.

What it does

  • Banners when Claude finishes — no more checking the terminal
  • Allow/Deny buttons — approve tool use right from the notification
  • Answer dropdowns — pick from Claude's options without switching windows
  • Smart suppression — if you're already looking at the terminal, no notification fires

How it behaves

  • Terminal focused? No notification. You're already there.
  • Clicked Allow/Deny? Response sent silently. Terminal stays in background.
  • Clicked the notification body? Terminal comes to front.
  • Timed out or dismissed? Terminal focuses so you can respond there.

Configuration

Sounds

Override the notification sound with -s:

claude-notify notify -m "Done" -s Ping

Available: default, Basso, Blow, Bottle, Frog, Funk, Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tink.

Path display (CLAUDE_NOTIFY_PATH_DISPLAY)

Controls how file paths appear in permission notifications (e.g. when Claude wants to edit a file).

| Value | Example | When to use | |---|---|---| | relative | src/hooks/permission.ts | Default — shows path from project root | | filename | permission.ts | When you work in deep directories and want less noise | | full | /Users/you/project/src/hooks/permission.ts | When you work across multiple projects simultaneously |

Where to set it: Add it as an environment variable in your hook command inside ~/.claude/settings.json:

{
  "hooks": {
    "PermissionRequest": [
      {
        "matcher": "",
        "hooks": [{ "type": "command", "command": "CLAUDE_NOTIFY_PATH_DISPLAY=filename claude-notify permission -s Basso" }]
      }
    ]
  }
}

You can also export it in your shell profile (~/.zshrc or ~/.bashrc):

export CLAUDE_NOTIFY_PATH_DISPLAY=filename

Setup details

claude-notify setup is idempotent — run it again and it skips what's already configured. It never overwrites your existing hooks.

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "ExitPlanMode",
        "hooks": [{ "type": "command", "command": "claude-notify notify -m 'Plan ready for review'" }]
      }
    ],
    "PermissionRequest": [
      {
        "matcher": "",
        "hooks": [{ "type": "command", "command": "claude-notify permission -s Basso" }]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [{ "type": "command", "command": "claude-notify notify -m 'Claude stopped'" }]
      }
    ]
  }
}

Uninstall

claude-notify setup --uninstall

Removes the app and hook entries. Your other settings stay untouched.

Supported terminals

Ghostty, iTerm2, VS Code, Cursor, IntelliJ (JetBrains), Warp, Terminal.app, Alacritty, Kitty.

Detection is automatic via environment variables — no configuration needed.

Requirements

  • macOS 13.0+
  • Node.js >= 18

License

MIT