|
1 | | -- DO NOT directly change the scripts or settings in .claude or ~/.claude. only update the source code that modifies these files. |
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. |
| 4 | + |
| 5 | +## Common Commands |
| 6 | + |
| 7 | +### Development |
| 8 | +```bash |
| 9 | +# Start dashboard development server (http://localhost:3000) |
| 10 | +npm run dev:dashboard |
| 11 | + |
| 12 | +# Watch hooks tests during development |
| 13 | +npm run dev:hooks |
| 14 | + |
| 15 | +# Run both dashboard and hooks development |
| 16 | +npm run dev # Runs dashboard by default |
| 17 | +``` |
| 18 | + |
| 19 | +### Testing |
| 20 | +```bash |
| 21 | +# Run all tests |
| 22 | +npm test |
| 23 | + |
| 24 | +# Run with coverage |
| 25 | +npm run test:coverage |
| 26 | + |
| 27 | +# Test specific component |
| 28 | +npm run test:dashboard |
| 29 | +npm run test:hooks |
| 30 | + |
| 31 | +# Run single test file in hooks (using UV) |
| 32 | +cd apps/hooks && uv run python -m pytest tests/test_post_tool_use.py -v |
| 33 | + |
| 34 | +# Run specific test |
| 35 | +cd apps/hooks && uv run python -m pytest tests/test_post_tool_use.py::TestClassName::test_method -v |
| 36 | + |
| 37 | +# Dashboard tests with watch mode |
| 38 | +cd apps/dashboard && npm run test:watch |
| 39 | +``` |
| 40 | + |
| 41 | +### Code Quality |
| 42 | +```bash |
| 43 | +# Run linters |
| 44 | +npm run lint |
| 45 | + |
| 46 | +# Full validation (lint + test + coverage check) |
| 47 | +npm run validate |
| 48 | + |
| 49 | +# Check coverage thresholds |
| 50 | +npm run coverage:check |
| 51 | + |
| 52 | +# Generate coverage reports |
| 53 | +npm run coverage:report |
| 54 | +npm run coverage:badges |
| 55 | +``` |
| 56 | + |
| 57 | +### Build & Production |
| 58 | +```bash |
| 59 | +# Build everything |
| 60 | +npm run build |
| 61 | + |
| 62 | +# Dashboard production build |
| 63 | +cd apps/dashboard && npm run build:production |
| 64 | + |
| 65 | +# Validate environment configuration |
| 66 | +cd apps/dashboard && npm run validate:env |
| 67 | + |
| 68 | +# Health check |
| 69 | +./scripts/health-check.sh |
| 70 | +``` |
| 71 | + |
| 72 | +### Installation & Setup |
| 73 | +```bash |
| 74 | +# Quick start (automated setup) |
| 75 | +./scripts/quick-start.sh |
| 76 | + |
| 77 | +# Install hooks system |
| 78 | +cd apps/hooks && python scripts/install.py |
| 79 | + |
| 80 | +# Validate installation |
| 81 | +cd apps/hooks && python scripts/install.py --validate-only |
| 82 | + |
| 83 | +# Setup database schema |
| 84 | +cd apps/hooks && python scripts/setup_schema.py |
| 85 | +``` |
| 86 | + |
| 87 | +## High-Level Architecture |
| 88 | + |
| 89 | +### System Overview |
| 90 | +Chronicle is an observability system for Claude Code agent activities, capturing tool usage, interactions, and performance metrics. It consists of two main components that communicate through a shared database: |
| 91 | + |
| 92 | +1. **Hooks System (Python)**: Intercepts Claude Code events and stores them in database |
| 93 | +2. **Dashboard (Next.js)**: Real-time visualization of captured events |
| 94 | + |
| 95 | +### Data Flow Architecture |
| 96 | +``` |
| 97 | +Claude Code Agent |
| 98 | + ↓ |
| 99 | + Hook Scripts (Python) |
| 100 | + ↓ |
| 101 | + Database Layer (Supabase/SQLite) |
| 102 | + ↓ |
| 103 | + Real-time Subscriptions |
| 104 | + ↓ |
| 105 | + Dashboard (Next.js) |
| 106 | +``` |
| 107 | + |
| 108 | +### Database Architecture |
| 109 | +The system uses a dual-database approach: |
| 110 | +- **Primary**: Supabase (PostgreSQL) for production with real-time capabilities |
| 111 | +- **Fallback**: SQLite for local development or when Supabase is unavailable |
| 112 | + |
| 113 | +Key tables: |
| 114 | +- `events`: Core event storage with tool usage, errors, and metadata |
| 115 | +- `sessions`: Claude Code session tracking and lifecycle |
| 116 | +- `tools`: Tool execution details and performance metrics |
| 117 | + |
| 118 | +### Hook System Architecture (`apps/hooks/`) |
| 119 | +The hooks system uses UV for dependency management and follows a modular pattern: |
| 120 | + |
| 121 | +- **Entry Points** (`src/hooks/`): Individual hook scripts for each Claude Code event |
| 122 | + - `session_start.py`: Initialize session tracking |
| 123 | + - `pre_tool_use.py`: Capture tool invocations (pure observation, no blocking) |
| 124 | + - `post_tool_use.py`: Record tool results and performance |
| 125 | + - `user_prompt_submit.py`: Track user interactions |
| 126 | + - `stop.py`: Clean session closure |
| 127 | + |
| 128 | +- **Shared Library** (`src/lib/`): |
| 129 | + - `base_hook.py`: Common hook functionality and event creation |
| 130 | + - `database.py`: Database abstraction layer with connection pooling |
| 131 | + - `utils.py`: MCP tool detection, sanitization, and utilities |
| 132 | + - `security.py`: Data sanitization and PII filtering |
| 133 | + - `performance.py`: Metrics collection and optimization |
| 134 | + |
| 135 | +- **Configuration** (`config/`): |
| 136 | + - `settings.py`: Environment and database configuration |
| 137 | + - `models.py`: Pydantic models for type safety |
| 138 | + - `database.py`: Database connection management |
| 139 | + |
| 140 | +### Dashboard Architecture (`apps/dashboard/`) |
| 141 | +Next.js 15 app with App Router and real-time updates: |
| 142 | + |
| 143 | +- **Components** (`src/components/`): |
| 144 | + - `EventDashboard.tsx`: Main dashboard container |
| 145 | + - `EventFeed.tsx`: Real-time event stream display |
| 146 | + - `EventCard.tsx`: Individual event visualization |
| 147 | + - `ConnectionStatus.tsx`: Database connection monitoring |
| 148 | + |
| 149 | +- **Hooks** (`src/hooks/`): |
| 150 | + - `useSupabaseConnection.ts`: Manages database connection and reconnection |
| 151 | + - `useEvents.ts`: Real-time event subscription and caching |
| 152 | + - `useSessions.ts`: Session management and filtering |
| 153 | + |
| 154 | +- **Libraries** (`src/lib/`): |
| 155 | + - `supabase.ts`: Supabase client with real-time configuration |
| 156 | + - `eventProcessor.ts`: Event transformation and filtering |
| 157 | + - `config.ts`: Environment-aware configuration |
| 158 | + - `security.ts`: Client-side data sanitization |
| 159 | + |
| 160 | +### Key Design Patterns |
| 161 | + |
| 162 | +1. **Environment Detection**: Both components auto-detect environment (development/staging/production) and adjust behavior accordingly |
| 163 | + |
| 164 | +2. **Graceful Degradation**: Falls back to SQLite if Supabase unavailable, demo mode if no database |
| 165 | + |
| 166 | +3. **Performance Optimization**: |
| 167 | + - Connection pooling in hooks |
| 168 | + - Event batching in dashboard |
| 169 | + - Debounced real-time subscriptions |
| 170 | + - 100ms target latency for hooks |
| 171 | + |
| 172 | +4. **Security First**: |
| 173 | + - Automatic PII filtering |
| 174 | + - Configurable data sanitization |
| 175 | + - Environment variable validation |
| 176 | + - No authentication required for MVP (pure observability) |
| 177 | + |
| 178 | +## Project Management |
| 179 | + |
| 180 | +### Linear Integration |
| 181 | +This project uses Linear for issue tracking and project management. The MCP Linear integration is available for: |
| 182 | + |
| 183 | +- **Creating issues**: Use issue IDs like `CHR-1`, `CHR-2` for Chronicle-related tasks |
| 184 | +- **Viewing project status**: Check current sprint progress and backlog items |
| 185 | +- **Updating task states**: Move issues through workflow states |
| 186 | +- **Adding comments**: Document progress and decisions on Linear issues |
| 187 | +- **Linking PRs**: Reference Linear issues in commit messages and PR descriptions |
| 188 | + |
| 189 | +When working on features or fixes: |
| 190 | +1. Check Linear for existing issues before starting work |
| 191 | +2. Reference Linear issue IDs in commits (e.g., `fix: resolve database connection issue [CHR-123]`) |
| 192 | +3. Update issue status as work progresses |
| 193 | +4. Add implementation notes as comments on the Linear issue |
| 194 | + |
| 195 | +## Important Notes |
| 196 | + |
| 197 | +- DO NOT directly change scripts or settings in `.claude` or `~/.claude` directories - only update source code that modifies these files |
| 198 | +- The system is designed for pure observability - hooks should never block or modify Claude Code behavior |
| 199 | +- All hook scripts use UV's single-file script format with inline dependencies |
| 200 | +- Coverage thresholds: Dashboard 80%, Hooks 60%, Security modules 90% |
| 201 | +- Real-time updates use Supabase's PostgreSQL LISTEN/NOTIFY under the hood |
0 commit comments