{"_id":"@delorenj/claude-notifications","_rev":"9-b2cc345c0778864c5ce466a6e63b12a4","name":"@delorenj/claude-notifications","dist-tags":{"latest":"2.2.1"},"versions":{"1.0.0":{"name":"@delorenj/claude-notifications","version":"1.0.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@1.0.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"c466b70f408401823dfe75b158794b79e80ec892","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-1.0.0.tgz","fileCount":13,"integrity":"sha512-7pWLZ+zUyhilKDJU2n1jTpmx6Lxr1pEyUIjjM47XP1bxw06UnV4fziTFtnRQ3N6RmRSmYDS1izdAAJzRK/kaWA==","signatures":[{"sig":"MEYCIQD4pRApM62xblXQ/URsK4W2c4DIa51eeFV3tI1G/0GbeAIhAN314KbCbdSxQAie6a4BTbyLxl0Z6iQofCqmWLyAhWcn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225888},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"c79a1f025021ab45e221c6ce0e9da1e130d4ead6","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","actor":{"name":"lasertoast","type":"user","email":"jaradd@gmail.com"},"email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_1.0.0_1752068665386_0.930749660743194","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@delorenj/claude-notifications","version":"1.0.1","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@1.0.1","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"6fb1c1b8a91baee801804ffe327bf42874b80ae2","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-1.0.1.tgz","fileCount":13,"integrity":"sha512-G5hLduJrFCd/hSGDqPN0+92rSvZ5O3jF+0Sw2w47Z+cNM7LXSO0lzoHPnua/xGGXt3Zye85joIt4+WxCTYA6Yw==","signatures":[{"sig":"MEUCIQDvcCbQhc43IXEAIUwyixjsr4waMUcJlyBrGvGCKhl8wAIgK4AMej90rANjLoLsrgjiYllpmII2oWVCIXlkRs3WGkc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225888},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"1ffe072b218c18e91ea981502b4a9ac76ad46ad0","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","actor":{"name":"lasertoast","type":"user","email":"jaradd@gmail.com"},"email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_1.0.1_1752070699898_0.05775212773096339","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@delorenj/claude-notifications","version":"1.0.2","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@1.0.2","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"65c4d5e785ebe43593457be75d873f350b30f3c7","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-1.0.2.tgz","fileCount":13,"integrity":"sha512-X79CIKaykq9agqKt8XHLaoBYlbXU1Y53Cr25MvxpGjKoeBsHmM7AXfMuFQ0Sy/32A8OukNhcdsi3D4ZBy8o9ZA==","signatures":[{"sig":"MEUCIQD0xnDAwirs7LFcJ6MMm5nedtv/tr69LPIQGhrSXhAtjAIgO2aUhdzK0jg8J0LX+mFpb33taNntUNBSMNNg4A6CixY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225888},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"a2eac152129fd545fc0ca3691e56ff464c44e4e7","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","actor":{"name":"lasertoast","type":"user","email":"jaradd@gmail.com"},"email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_1.0.2_1752071257519_0.14002186952731366","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@delorenj/claude-notifications","version":"1.1.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@1.1.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"427737d8e2f26f6b5f0d22663a13345d07c6d771","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-1.1.0.tgz","fileCount":16,"integrity":"sha512-pL1iZE6YbhwAK34fBvSd/y1m1LLBdwJQUUqmJgN9Yiwg+yrq/36kHhfw0f4f4S0cspfDGBWfNJtzs+36EeAvSw==","signatures":[{"sig":"MEUCIHGHLvigKtob9Tba9skytP3lOkZfy24xJX8gR84lM0lkAiEA9pba3PqlFZvWsH9VqGVqAtOvC3QuK4mKpp1H6xCydQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408960},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"0f75ceabc7be56592fce82589a0f708f08d49450","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_1.1.0_1753273453322_0.46981761024843727","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@delorenj/claude-notifications","version":"1.2.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@1.2.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"4be463788355ea8aeb5e2aae3f4449e82633d628","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-1.2.0.tgz","fileCount":16,"integrity":"sha512-AGObqJ5w5D7FTN1a98vGlvQrsNU9TWjPOLpCeyE/5WN0CINfe5bqFHqGv3HXOq9ohSFJ9vMOL5XsTnYkeImBjQ==","signatures":[{"sig":"MEUCIDYjEIsSapT//wps+dDkUWDPRdcNiX2ZsQ1omCXgvDVqAiEAkeSQDhgYiwZV3wuAu2Hhj4zfodRLznxtomxQa5ThDyc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417123},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"e5c410cb19da2e65385e75762b1c1f0cc247309e","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_1.2.0_1753501891294_0.14158997362449988","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@delorenj/claude-notifications","version":"2.0.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@2.0.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"f180143a5cf7dea2e0ccc67dcc6df39af233f133","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-2.0.0.tgz","fileCount":156,"integrity":"sha512-FUxW/kS/RMlR+Brv8/4/bQor4lQe9ofxWhCZM5zLCGlEfttgHtLNXXJ8X3yV/dWHEWWdjoA1mvZkgVeldHZ5kA==","signatures":[{"sig":"MEYCIQDEkHNGCBbmA5H5azV5VkIzORqb0Aq0mHLrl89kcrIm8AIhAPpJ4Zc1nRW7UQL/UF1zYT0VbyEXbku5trB1S9LcPcfj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":573178},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"bc7bda2daa4c904f77dfad1a8863975f34f721c9","scripts":{"test":"node test.js","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.4.2","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.3.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_2.0.0_1756392937178_0.6885073979481942","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@delorenj/claude-notifications","version":"2.1.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@2.1.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","zellij-notify":"bin/zellij-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"5bbe25af8854c14840b377cedaa8c8fc39d7fd04","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-2.1.0.tgz","fileCount":73,"integrity":"sha512-ti63xYiRpkIpDtFrhTahprvWyYrIvF3z2cLCQemmC38movDV2+G2qqU0IdgCbM96of0hpm5ybeR8NzK3/ckGug==","signatures":[{"sig":"MEUCIQDO8jXwEdsiBlj6oNOTw58pKqrI2cfaPYY7G3GVjGvcWAIgDeMmkx1fmMf+AcgKAXTZ92y/K49+CQUffp4nh0EGiEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":646498},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"d840459dbd713a981f067e439962f4e920af762f","scripts":{"test":"node --test \"test/**/*.test.js\"","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.5.1","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"24.6.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1","@clack/prompts":"^0.7.0"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_2.1.0_1776291231752_0.3540918684558416","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@delorenj/claude-notifications","version":"2.2.0","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","_id":"@delorenj/claude-notifications@2.2.0","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"homepage":"https://github.com/delorenj/claude-notifications#readme","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"os":["linux","darwin"],"bin":{"claude-notify":"bin/claude-notify.js","zellij-notify":"bin/zellij-notify.js","claude-notifications":"bin/claude-notifications.js"},"dist":{"shasum":"4d0881892216b40aa0f5c45ebe2a8bc2855219ae","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-2.2.0.tgz","fileCount":227,"integrity":"sha512-0lmtv9o3/Q4vhIAUFW1Pgy3cOGl28aG0Lo02Yfl3UAcggHfpzQ0t2JLDMjXGuIN/DdSRkueE5EUl63RLdacorA==","signatures":[{"sig":"MEUCIQCGo/DToGtUw4QpgjuMw7/+COE1WuMnUgozyoUON9qCUAIgPV9zfE5aurKqRCNVRjX8/2eW/zpuPUE8O7p80HsdAnc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2005056},"main":"index.js","engines":{"node":">=18.0.0"},"gitHead":"22e6c2bf6f4e6d411d5fe90a75e0bda9c02605c2","scripts":{"test":"node --test \"test/**/*.test.js\"","postinstall":"node postinstall.js","preuninstall":"node preuninstall.js"},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"overrides":{"uuid":"^11.1.1"},"repository":{"url":"git+https://github.com/delorenj/claude-notifications.git","type":"git"},"_npmVersion":"11.12.1","description":"Delightful Notification for Claude Code","directories":{},"_nodeVersion":"25.9.0","dependencies":{"which":"^4.0.0","node-notifier":"^10.0.1","@clack/prompts":"^0.7.0"},"preferGlobal":true,"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/claude-notifications_2.2.0_1779997651967_0.29804331273024887","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@delorenj/claude-notifications","version":"2.2.1","description":"Delightful Notification for Claude Code","main":"index.js","bin":{"claude-notifications":"bin/claude-notifications.js","claude-notify":"bin/claude-notify.js"},"scripts":{"postinstall":"node postinstall.js","preuninstall":"node preuninstall.js","test":"node --test \"test/**/*.test.js\""},"repository":{"type":"git","url":"git+https://github.com/delorenj/claude-notifications.git"},"keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"author":{"name":"Jarad DeLorenzo"},"license":"MIT","bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"homepage":"https://github.com/delorenj/claude-notifications#readme","os":["linux","darwin"],"engines":{"node":">=18.0.0"},"dependencies":{"@clack/prompts":"^0.7.0","node-notifier":"^10.0.1","which":"^4.0.0"},"preferGlobal":true,"overrides":{"uuid":"^11.1.1"},"gitHead":"3a3a49cbe74c04f560a1467bf9ceb55af80282d3","_id":"@delorenj/claude-notifications@2.2.1","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-Gnss6ZFTGgdy7kf8PWU+Vbj2GLOXE2dc89lBkoJgLFAJPb56qlUjubFb/wNy9O9pjEWO2WTpf2kzZPw/pRwhFA==","shasum":"2f78e57fa029f18dc6e8488962a0462845c363a8","tarball":"https://registry.npmjs.org/@delorenj/claude-notifications/-/claude-notifications-2.2.1.tgz","fileCount":187,"unpackedSize":1645488,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICpKxQEvc5+vQeaXR8RwlszG1HaGuFyOuoB7VNmM6jJdAiEA/sxKbsg1SU1e6Oi8VaWWneDbnvYBQ/3uYhVBUD/gDV8="}]},"_npmUser":{"name":"lasertoast","email":"jaradd@gmail.com"},"directories":{},"maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-notifications_2.2.1_1780001491601_0.9517952898073154"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-09T13:44:25.286Z","modified":"2026-05-28T20:51:31.960Z","1.0.0":"2025-07-09T13:44:25.650Z","1.0.1":"2025-07-09T14:18:20.132Z","1.0.2":"2025-07-09T14:27:37.745Z","1.1.0":"2025-07-23T12:24:13.538Z","1.2.0":"2025-07-26T03:51:31.521Z","2.0.0":"2025-08-28T14:55:37.416Z","2.1.0":"2026-04-15T22:13:51.911Z","2.2.0":"2026-05-28T19:47:32.174Z","2.2.1":"2026-05-28T20:51:31.839Z"},"bugs":{"url":"https://github.com/delorenj/claude-notifications/issues"},"author":{"name":"Jarad DeLorenzo"},"license":"MIT","homepage":"https://github.com/delorenj/claude-notifications#readme","keywords":["claude-code","notifications","adhd","audio","desktop-notifications","linux","productivity","cli"],"repository":{"type":"git","url":"git+https://github.com/delorenj/claude-notifications.git"},"description":"Delightful Notification for Claude Code","maintainers":[{"name":"lasertoast","email":"jaradd@gmail.com"}],"readme":"# Claude Notifications 🔔\n\nDelightful audible notifications for Claude Code. Never alt+tab back to disappointment, thinking it was cranking away for 30-minutes on your task only to see a \"Just double checking - you cool with this plan? Y/n\"\n\n![Notification bar as seen in Ubuntu](claude-notification.png)\n\n## ⚡ Super Quick Install\n\n```bash\nnpm install -g @delorenj/claude-notifications\nclaude-notifications install\n```\n\nStep 1 installs the CLI and generates sound assets. Step 2 opens an interactive selector that:\n\n- 🔎 Detects every supported agent CLI on your `$PATH` (Claude Code, Opencode, Gemini, Auggie, Copilot, Kimi, Vibe, Codex)\n- ☑️ Lets you toggle which ones should receive notification hooks\n- 🪝 Writes a marker-tagged hook block into each selected CLI's config (idempotent — re-running is safe)\n- 🚫 Shows unsupported CLIs disabled with a reason rather than silently skipping them\n\nHook installation no longer runs automatically on `npm install` — it's an explicit, opt-in step so you stay in control of what gets written to your agent configs.\n\n## Features\n\n- 🎵 **Final Fantasy Dream Harp** - Classic C-D-E-G ascending/(optional)descending pattern\n- 🔔 **Service Desk Bell** - Optional short, crisp bell sound for a quick \"done!\" signal\n- 🔊 **Cross-Platform Audio** - Works on Linux and macOS\n- 🖥️ **Desktop Notifications** - Visual notifications with Claude Code branding (optional)\n- 🪝 **Auto-Integration** - Automatically configures Claude Code hooks\n- ⚡ **Zero Configuration** - Works out of the box\n- 🎨 **Customizable** - Easy to modify sounds and settings\n\n## Usage\n\nAfter installation, Claude Code and OpenCode can notify you when they finish or\nneed your response.\n\n### Manual Commands\n\n```bash\n# Interactive hook installer (TUI)\nclaude-notifications install\n\n# Scripted install for specific CLIs (skips the TUI)\nclaude-notifications install --non-interactive --cli=claude-code,opencode\n\n# Preview changes without writing\nclaude-notifications install --dry-run --cli=opencode\n\n# Show which CLIs are detected and whether hooks are installed\nclaude-notifications status\nclaude-notifications status --json\n\n# Cleanly remove everything this package installed\nclaude-notifications uninstall\n\n# Regenerate sound assets only\nclaude-notifications sounds\n\n# Trigger notification manually\nclaude-notify\nclaude-notify --bell\n\n# Test the system\nclaude-notifications test\nclaude-notifications test-bell\n\n# Full flag reference\nclaude-notifications help\n```\n\n### Adding support for another agent CLI\n\nEach supported CLI is a module under `lib/adapters/<id>.js` exporting this shape:\n\n```js\n{\n  id, label, binary, supportsHooks,\n  detect(deps), configPath(), install(ctx), uninstall(ctx), status(ctx)\n}\n```\n\nTo add a new adapter:\n\n1. Copy `lib/adapters/claude-code.js` as a starting point (for hook-capable CLIs)\n   or `lib/adapters/_stub.js::createStubAdapter({...})` (for CLIs whose hook API\n   you haven't verified yet).\n2. Implement `install` / `uninstall` with the shared marker protocol. Use\n   `upsertByMarker` / `removeByMarker` for array-shaped config entries, or\n   embed `source: \"claude-notifications\"` in managed files so the entry is\n   idempotent and cleanly removable.\n3. Register the module by appending a `require()` line to the `adapterFactories`\n   array in `lib/adapters/index.js`.\n4. Add a test under `test/adapters/<id>.test.js` following the pattern in\n   `test/adapters/claude-code.test.js`.\n\nThe TUI and status commands pick up the new adapter automatically.\n\n## The Sound\n\n- **Pattern**: C1-D1-E1-G1-C2-D2-E2-G2-C3-G2-E2-D2-C2-G1-E1-D1-C1\n- **Duration**: ~2 seconds of dreamy notes\n\n## How It Works\n\nThe package automatically:\n\n1. **Detects supported CLIs** - Finds Claude Code, OpenCode, and other agent CLIs\n2. **Adds hooks** - Configures the notification trigger for each supported CLI\n3. **Creates Sound** - Generates the sound using `sox`\n4. **Sets Up Commands** - Installs `claude-notify` globally\n\n### Claude Code Integration\n\nThe installer automatically adds this to your Claude Code settings:\n\n```json\n{\n  \"hooks\": {\n    \"Stop\": [\n      {\n        \"matcher\": \"\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"claude-notify\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### OpenCode Integration\n\nThe installer writes a managed global plugin at\n`~/.config/opencode/plugins/claude-notifications.js`. The plugin listens for\nOpenCode session and permission events, then runs `claude-notify`:\n\n```js\nexport const ClaudeNotifications = async () => ({\n  event: async ({ event }) => {\n    if (event && EVENT_TYPES.has(event.type)) runNotification();\n  },\n});\n```\n\nUninstall removes this plugin only when it contains the\n`claude-notifications` marker. Existing plugin files without that marker are\nleft untouched.\n\n## Requirements\n\n- **Node.js** 14+ (you probably have this if you use Claude Code)\n- **Linux or macOS** (Windows support coming soon)\n- **Audio system** (PulseAudio, ALSA, or CoreAudio)\n\n### Auto-Installed Dependencies\n\nThe package will automatically install:\n\n- `sox` for sound generation (Linux: apt/dnf, macOS: brew)\n- `node-notifier` for desktop notifications\n\n## Customization\n\n### Change the Sound\n\nReplace the generated sound file:\n\n```bash\n# Find the sound file\nls ~/.local/share/sounds/claude-notification.wav\n\n# Replace with your own\ncp your-custom-sound.wav ~/.local/share/sounds/claude-notification.wav\n```\n\n### Configuration\n\nCreate a configuration file at `~/.config/claude-notifications/settings.json` to customize behavior.\n\n**Example `settings.json`:**\n\n```json\n{\n  \"sound\": true,\n  \"soundType\": \"claude-notification\",\n  \"desktopNotification\": false\n}\n```\n\n**Configuration Options:**\n\n- `sound`: (boolean) Whether to play notification sounds. Defaults to `true`.\n- `soundType`: (string) Which sound to play. Available options:\n  - `\"claude-notification\"` - Final Fantasy dream harp (default)\n  - `\"claude-notification-bell\"` - Service desk bell\n- `desktopNotification`: (boolean) Whether to show desktop notification banners. Defaults to `false`.\n\n### Sound Files\n\nSound files are stored in `~/.config/claude-notifications/sounds/` and can be customized by replacing the `.wav` files in that directory.\n\n### Create Custom Patterns\n\nUse `sox` to create new victory fanfares:\n\n> Note: Previously, a tedious chore I wouldn't recommend to a sane person. But now that we live in a fictional Blade Runner, Cyberpunk-inspired alternate timeline, just ask your robot buddy to do it!\n\n```bash\n# Simple ascending scale\nsox -n custom.wav synth 0.1 sine 261.63 : synth 0.1 sine 293.66 : synth 0.1 sine 329.63\n\n# Your imagination is the limit!\n```\n\n## Troubleshooting\n\n### No Sound?\n\n```bash\n# Test your audio system\npaplay /usr/share/sounds/alsa/Front_Left.wav  # Linux\nafplay /System/Library/Sounds/Glass.aiff      # macOS\n\n# Reinstall\nclaude-notifications install\n```\n\n### No Notification?\n\n```bash\n# Test manually\nclaude-notify\n\n# Check Claude Code config\nclaude-notifications install  # Will show config location\n```\n\n### Command Not Found?\n\n```bash\n# Reinstall globally\nnpm install -g @delorenj/claude-notifications\n\n# Or use npx\nnpx @delorenj/claude-notifications test\n```\n\n## Uninstall\n\n```bash\nnpm uninstall -g @delorenj/claude-notifications\n```\n\nThe uninstaller will clean up sound files and notify you about manual config cleanup.\n\n## Development\n\n### Local Development\n\n```bash\ngit clone https://github.com/delorenj/claude-notifications.git\ncd claude-notifications\nnpm link\nclaude-notifications install\n```\n\n### Publishing\n\n```bash\nnpm version patch\nnpm publish\n```\n\n## Contributing\n\nPRs welcome! Especially for:\n\n- Windows support\n- More sound patterns\n- Better Claude Code detection\n- macOS improvements\n\n## License\n\nMIT License - Make it your own! 🎵\n\n---\n\n**Ready to level up your Claude Code experience?**\n\n```bash\nnpm install -g @delorenj/claude-notifications\n```\n\n_Made with ❤️ for fellow developers of the world over.\nbut mostly for me, who alt-tabs away into the night leaving techno-breadcrumb trails of unanswered and unfinished Claude Code tasks._\n\n🎮✨ **Enjoy!** ✨🎮\n","readmeFilename":"README.md"}