One Claude Code hook, four outputs: your RGB mouse changes color, a toast pops, your phone and watch buzz, and a local dashboard keeps score. No cloud. No account.
Windows Β· Python Β· MIT license
Four outputs
Every output can be toggled independently β from the dashboard settings page or an environment variable. Each one fails silently, so a dead mouse or closed browser never blocks Claude.
Your Logitech G102 shifts color with every state β via raw USB HID, no G HUB needed. Peripheral vision does the rest.
FastAPI + SSE on localhost. Session state, context %, usage limits β and a Jean-Claude Van Damme status indicator.
Push via open-source ntfy.sh, mirrored to your smartwatch. Fires only when Claude actually needs you.
A clean native popup on waiting and done β with context and quota stats appended to every finish.
The dashboard
Every state has a face. The dashboard ships with JCVD reacting to your session β doing the splits while Claude runs, staring impatiently when it needs you, thumbs up when it's done. Don't like it? Paste any GIF URL per state in settings and make it yours.
Blank reverts to the default JCVD gif. Saved to config, takes effect on the next hook event β no restart.
How it works
Claude Code lifecycle events pipe into a single entrypoint that fires all outputs in parallel threads. Claude Code never blocks on the hook β it fires async. Total added latency to your session: none.
Claude Code lifecycle event β βΌ hooks in settings.json β βΌ notify.py <EventName> β βββ ntfy.sh βββββββββββΊ π± phone βΊ β watch βββ USB HID βββββββββββΊ π±οΈ G102 RGB βββ localhost:8765 ββββΊ π dashboard (SSE) βββ Windows API βββββββΊ π toast popup
Quick start
Installs Python deps, copies scripts to ~/.claude/, merges hook config.
Install the free ntfy app, subscribe to your channel, restart Claude Code β hooks load on session start. Done.
Open source, MIT licensed. Fork it, theme it, ship it.
View on GitHub β