Hooks now read backend URL from ~/.claude/monitor_url config file,
making it easier to configure for remote/VM deployments without
relying on environment variables.
Priority order:
1. Config file (~/.claude/monitor_url)
2. Environment variable (CLAUDE_MONITOR_URL)
3. Default (http://localhost:8000)
This fixes the issue where Claude Code doesn't see environment
variables when not started from a configured shell.
Usage:
echo "http://your-vm:8000" > ~/.claude/monitor_url
cp .claude/hooks/*.sh ~/.claude/hooks/
chmod +x ~/.claude/hooks/*.sh
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
All hooks now use CLAUDE_MONITOR_URL environment variable to allow
configuration for remote deployments. Defaults to http://localhost:8000
for local development.
Changes:
- All hooks now read CLAUDE_MONITOR_URL from environment
- Added README.md with installation instructions for local and remote setups
- Includes troubleshooting guide for common issues
Usage:
export CLAUDE_MONITOR_URL="http://vm-ip:8000"
cp -r .claude/hooks/* ~/.claude/hooks/
chmod +x ~/.claude/hooks/*.sh
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Configure nginx to proxy API and WebSocket requests to backend.
This allows the frontend to work on VMs without hardcoded localhost URLs.
Changes:
- nginx.conf: Added proxy rules for /api/, /ws, and /health
- client.ts: Use relative URLs in production mode
- websocket.ts: Dynamically construct WebSocket URL based on current host
This fixes ERR_BLOCKED_BY_CLIENT and connection issues on VMs.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The backend was always trying to parse tool_input as JSON, which
failed for UserPromptSubmit events that contain plain text prompts.
This caused 500 errors when creating or fetching UserPromptSubmit events.
Fixed by adding try-except blocks that gracefully handle both JSON
and plain text tool_input values.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The EventFeed component was filtering events twice:
1. First in useEvents hook (backend query with event_types filter)
2. Then again in EventFeed component (client-side filter)
This caused filter issues where switching between filters would show
incorrect events (e.g., switching from SESSIONS to ALL would only show
session events).
Fixed by removing the duplicate client-side filter, as useEvents already
provides correctly filtered events from the backend.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Features:
- User prompt hook now captures and displays actual prompt text
- Added tab switching between Event Feed and Agents Graph
- Created AgentsGraph component with placeholder
- Added CSS styling for agents graph view
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Remove unused Event import from client.ts
- Fix fractionalSecondDigits incompatibility in EventCard.tsx
- Manually format milliseconds for timestamp display