A lightweight monitoring system for GSD (Get Shit Done) and Claude Code sessions.
Problem: GSD/Claude Code runs autonomously for extended periods, then suddenly needs user input. Without monitoring, you waste time either watching constantly or missing input prompts.
Solution: Hook scripts track session state, and a web dashboard alerts you with sound and browser notifications when Claude needs your attention.
- Web-based dashboard accessible from any device on your network
- Two-step notifications - yellow warning when idle, red alert when input needed
- Browser notifications and audio alerts (two-tone doorbell sound)
- GSD project integration - shows current phase and plan progress
- Mobile support - responsive design with QR code for phone access
- Auto-follow sessions - tracks sessions across
/clearoperations - Non-invasive - appends to existing hooks, doesn't replace
- Update-safe - marked hooks can be cleanly removed/updated
- Automatic backups before modifying settings
- Works with Claude Code without GSD Shows less information but works with just Claude Code too
- Now works with Claude Code plugins too (v 1.2) Detects if the Claude Code session is coming from a VSCodium/VSCode/JetBrains session & handles 60 seconds alerts for these too
- Claude's Last Message display (v 1.3) See Claude's actual question or prompt in the monitor UI - no need to switch to the terminal
# Clone or download this directory
cd gsd-monitor
# Install hooks (global)
python injector.py inject
# Or install to current project only
python injector.py inject --local
# Explicitly install to global settings only
python injector.py inject --global
# Install web monitor dependencies
cd gsd-monitor-web
pip install -r requirements.txtUsers on v1.1 or earlier must reinstall hooks when upgrading - the hook files have changed in v1.2 and v1.3. See the CHANGELOG for details on what's new in each version.
cd gsd-monitor
# Remove old hooks
python injector.py remove
# Install updated hooks
python injector.py injectv1.3 - Claude's Last Message display, NOTIFICATION status alerts, markdown rendering
v1.2 - Plugin alert support (VSCode/VSCodium/JetBrains), session type tracking
cd gsd-monitor-web
python run.pyThis will:
- Start the server on port 8765 (configurable with
--port) - Display a QR code for mobile access
- Show local and network URLs
Open one of the URLs in your browser to monitor your Claude Code/GSD session.
A handy QR Code is provided for phones. (NOTE: Make sure your firewall allows local network access to the IP & port displayed)
(sample URLs, yours will be different)

GSD Usage: You will be shown up to 10 current Claude Code sessions (this system actually monitors Claude with some extra info shown for GSD sessions). Look for the one that is active with your GSD project name (here it is named "TEST2"). Click on it to select that session to monitor.
Claude Code Usage: Click on the active Claude Code session you want to monitor. You will see sessions from Claude Code and Claude plugins in VSCodium, VSCode, etc. The Claude Code version just doesn't show GSD status information (because of course, you aren't using GSD).
The last monitored session (if any) will have a pin icon on it. You can also close old sessions by hoving over the session box and clicking the 'x'. NOTE: Any activity on Claude/GSD will rebuild the session in case you accidently close the wrong one.
- π Bell - Browser notifications enabled (click to request "Allow" for browser notifications)
- π Bell with slash - Browser notifications are disabled on this browser
- π Repeat - Repeating alarm mode: alerts play initially and repeat every 60 seconds while attention is needed
- π Speaker - Single alert mode: alert plays once when attention is needed
- π Muted speaker - Sound muted: no audio alerts
βΆοΈ Play - Play a blip sound to make sure alerts will be audible
Once hooks are installed, they fire automatically during Claude Code sessions:
| Event | What Happens |
|---|---|
| Session starts | Records start time |
| Tool executes | Updates status (e.g., "$ git status", "Writing: file.py") |
| Claude stops | Status turns yellow (waiting for next prompt) |
| Needs input (60s idle) | Status turns red + browser alert + sound |
| Needs permission | Status turns red + browser alert + sound |
python injector.py statusShows:
- Installed hook scripts
- Hook injection status in settings.json
- Active sessions and their states
python injector.py removeOnly removes GSD Monitor hooks - leaves GSD and other hooks intact.
gsd-monitor/
βββ injector.py # Main installer script
βββ hooks/
β βββ on_notification.py # Fires on idle_prompt, permission_prompt
β βββ on_tool_use.py # Fires before each tool execution
β βββ on_stop.py # Fires when Claude finishes
β βββ on_session_start.py # Fires on session start/resume
β βββ state_utils.py # Shared state file utilities
βββ gsd-monitor-web/
β βββ run.py # CLI entry point
β βββ server.py # FastAPI server
β βββ state_manager.py # Session management
β βββ gsd_reader.py # GSD project state parser
β βββ requirements.txt # Python dependencies
β βββ static/ # Web UI files
βββ requirements.txt
βββ README.md
After installation:
~/.claude/
βββ settings.json # Modified to include hook references
βββ gsd-monitor/
βββ hooks/ # Installed hook scripts
βββ state.json # Live session state
python run.py # Start on default port 8765
python run.py --port 9000 # Custom port
python run.py --host 127.0.0.1 # Bind to specific interface (default: 0.0.0.0)
python run.py --no-qr # Disable QR code display- 60-second delay: The
idle_promptnotification fires after 60+ seconds of idle time. The web UI mitigates this with a yellow warning state when Claude stops responding.
- Check installation:
python injector.py status - Verify settings.json has the hook entries
- Restart Claude Code after installing hooks
Make sure hook scripts are executable:
chmod +x ~/.claude/gsd-monitor/hooks/*.pyBell icon appears crossed out or disabled:
- You must access via localhost - Browser notifications require a "secure context" (HTTPS or localhost). If you're accessing the monitor via a LAN IP address (e.g.,
http://192.168.1.23:8765/), notifications will be blocked by the browser. Usehttp://localhost:8765/instead, or use audio alerts as an alternative.
Notifications enabled but not appearing:
- Make sure you've granted notification permissions when prompted (click the bell icon)
- Check your browser's notification settings for this site
- Turn off "Do Not Disturb" - On Windows, macOS, and mobile devices, Do Not Disturb / Focus modes will suppress browser notifications. Disable DND to receive alerts.
- On macOS: Check System Settings β Notifications β [Your Browser] is allowed
- On Windows: Check Settings β System β Notifications β ensure both the master "Notifications" toggle is on AND [Your Browser] is on in the app list below
MIT - Use as you like.


