Welcome aboard! This guide will help you install and configure Eyelet, the sophisticated hook orchestration system for Claude Code.
- System Requirements
- Installation Methods
- Quick Start
- Configuration
- Logging Options
- Verification
- Troubleshooting
- Uninstallation
Before installing Eyelet, ensure your system meets these requirements:
- Python: 3.11 or higher
- Package Manager: One of:
uv(recommended) - Install uvpipx- Install pipxpip- Comes with Python
- Operating System: Linux, macOS, or Windows
- Disk Space: ~50MB for Eyelet + space for logs
- Optional: Git (for enriched metadata in logs)
# Check Python version
python --version # Should show 3.11 or higher
# Check if uv is installed (recommended)
uv --version
# Check if pipx is installed (alternative)
pipx --version
# Check if git is installed (optional but recommended)
git --versionThe fastest way to use Eyelet without installation:
# Run Eyelet directly
uvx eyelet --version
# Or install permanently with uv
uv tool install eyeletInstall Eyelet in an isolated environment:
# Install Eyelet
pipx install eyelet
# Verify installation
eyelet --versionInstall in your current Python environment:
# Install from PyPI
pip install eyelet
# Verify installation
eyelet --versionFor development or latest features:
# Clone the repository
git clone https://github.com/bdmorin/eyelet.git
cd eyelet
# Install with uv (recommended)
uv pip install -e .
# Or install with pip
pip install -e .
# Verify installation
eyelet --versionGet Eyelet up and running in minutes:
This single command sets up comprehensive logging for ALL Claude Code hooks:
# Install logging for all hooks - one command does it all!
uvx eyelet configure install-all
# What this does:
# ✅ Configures PreToolUse hooks for all tools
# ✅ Configures PostToolUse hooks for all tools
# ✅ Sets up UserPromptSubmit, Stop, and PreCompact hooks
# ✅ Creates ~/.eyelet/hooks/ directory structure
# ✅ Updates your Claude settings.jsonFor better performance and advanced querying:
# Enable SQLite database logging
uvx eyelet configure logging --format sqlite
# Or use both JSON and SQLite
uvx eyelet configure logging --format json,sqliteVerify everything is configured correctly:
# Run comprehensive health check
uvx eyelet doctor
# Run with auto-fix for common issues
uvx eyelet doctor --fix
# Show detailed diagnostics
uvx eyelet doctor --verboseEnsure your Claude configuration is valid:
# Validate settings files
uvx eyelet validate settings
# Validate a specific file
uvx eyelet validate settings ~/.claude/settings.jsonEyelet uses a layered configuration system with two levels:
-
Global Configuration:
~/.claude/eyelet.yaml- Applies to all projects
- User-wide settings
- Default logging preferences
-
Project Configuration:
./eyelet.yaml- Project-specific settings
- Overrides global settings
- Committed to version control
# Example eyelet.yaml
logging:
format: sqlite # json, sqlite, or both
scope: global # global, project, or both
enabled: true # Enable/disable logging
add_to_gitignore: true # Auto-add log dirs to .gitignore
hooks:
# Hook configurations are managed via CLI
# Use 'eyelet configure' commands# Show current logging configuration
uvx eyelet configure logging
# Set logging format
uvx eyelet configure logging --format sqlite
# Set logging scope
uvx eyelet configure logging --scope both
# Configure global settings
uvx eyelet configure logging --format json --global
# Disable logging temporarily
uvx eyelet configure logging --disabledEyelet supports flexible logging configurations:
-
JSON Files (Default)
- Human-readable format
- One file per hook execution
- Easy to grep and parse
- Good for debugging
-
SQLite Database
- High-performance queries
- Full-text search
- Advanced analytics
- Compact storage
-
Both Formats
- Best of both worlds
- JSON for debugging
- SQLite for analysis
# Use JSON files only
uvx eyelet configure logging --format json
# Use SQLite database only
uvx eyelet configure logging --format sqlite
# Use both formats
uvx eyelet configure logging --format json,sqlite-
Global (Default)
- Logs stored in
~/.eyelet/hooks/ - Cross-project analytics
- Tidy citizen - no project pollution
- Logs stored in
-
Project
- Logs stored in
./eyelet-hooks/ - Project-specific data
- Easy to share with team
- Logs stored in
-
Both
- Logs to both locations
- Maximum visibility
- Useful for consultants
# Log to project directory only
uvx eyelet configure logging --scope project
# Log to global directory only
uvx eyelet configure logging --scope global
# Log to both locations
uvx eyelet configure logging --scope bothAfter installation, verify everything is working:
uvx eyelet --version
# Should show: eyelet version X.X.Xuvx eyelet doctor
# Should show all green checkmarks# List configured hooks
uvx eyelet configure list
# Show logging settings
uvx eyelet configure logging# Manually test a hook
echo '{"tool": "Bash", "arguments": {"command": "echo test"}}' | uvx eyelet execute --log-only
# Check if log was created
uvx eyelet logs --tail 1Problem: Python 3.11+ required
Solution:
# Check your Python version
python --version
# Install Python 3.11+ using your system package manager
# macOS: brew install python@3.11
# Ubuntu: sudo apt install python3.11
# Or use pyenv/mise for version managementProblem: Permission denied when creating log directories
Solution:
# Fix with doctor command
uvx eyelet doctor --fix
# Or manually create directories
mkdir -p ~/.eyelet/hooks
chmod 755 ~/.eyelet/hooksProblem: No Claude settings.json found
Solution:
# Create Claude settings directory
mkdir -p ~/.claude
# Run install-all to create initial settings
uvx eyelet configure install-allProblem: SQLite-related errors
Solution:
# Check SQLite version
uvx eyelet doctor --verbose
# If JSON1 extension missing, update SQLite
# Or use JSON logging format instead:
uvx eyelet configure logging --format jsonProblem: Hooks configured but not executing
Solution:
# Verify hook configuration
uvx eyelet configure list
# Check Claude is using correct settings file
uvx eyelet doctor --verbose
# Ensure hooks are enabled
uvx eyelet configure enable <hook-id>If you encounter issues not covered here:
- Run diagnostics:
uvx eyelet doctor --verbose - Check logs:
uvx eyelet logs --tail 50 - Visit GitHub Issues
- Review documentation
Depending on how you installed:
# If installed with uv tool
uv tool uninstall eyelet
# If installed with pipx
pipx uninstall eyelet
# If installed with pip
pip uninstall eyelet# Remove project configuration
rm -f eyelet.yaml
rm -rf ./eyelet-hooks/
# Remove global configuration (optional)
rm -f ~/.claude/eyelet.yaml
rm -rf ~/.eyelet/
# Remove from Claude settings
# Edit ~/.claude/settings.json and remove eyelet hooksIf you added log directories to .gitignore:
# Remove these lines from .gitignore if present:
# eyelet-hooks/
# .eyelet-logs/Now that Eyelet is installed:
- Explore Commands: Run
uvx eyelet --helpto see all available commands - Query Your Data: Try
uvx eyelet query summaryafter some usage - Create Workflows: Check out the workflow documentation
- Browse Templates: See available templates with
uvx eyelet template list
Welcome to the Eyelet community! ⚓
"Thread through the eyelet!" - Happy hook orchestration!