Automated installer and global/user configuration for Claude Code with hooks, TTS, LLM integration, and MCP server management.
Acknowledgments: This project builds upon the excellent work by IndyDevDan's claude-code-hooks-multi-agent-observability.
(Though we respectfully disagreed with the UV approach and went with good old venv + pip instead π)
- One-command setup:
make install - Interactive prompts for engineer details and API keys
- Automatic environment file creation and configuration
- Preserves existing settings on re-runs
- Multi-service support with automatic fallback chain
- Supported services:
- macOS
say(free, no API key required) - OpenAI TTS (high quality)
- ElevenLabs (premium quality)
- pyttsx3 (offline fallback)
- macOS
- FIFO queue for sequential playback
- Background processing for non-blocking operation
- Completion message generation (OpenAI/Anthropic)
- Summary generation for task completion
- Automatic fallback to preset messages when no API key configured
Automated lifecycle hooks for:
- Session Start/End: TTS announcements and logging
- Stop: Task completion messages with optional summarization
- Subagent Stop: Subagent completion notifications
- Notification: Custom notification handling
- User Prompt Submit: Pre-commit hooks and validation
- Automatic MCP server configuration merging
- Conditional server inclusion based on API key availability
- Installed MCP servers:
- Context7 - Up-to-date library documentation
- Firecrawl - Web scraping and crawling (requires API key)
- Limitless - Memory and context enhancement (requires API key)
- Playwright - Browser automation and testing
- Hook event streaming to observability server
- Disabled by default (
SEND_EVENTS=false) - When enabled, sends hook events to
http://localhost:4000/events - Requires IndyDevDan's observability server
- 27 passing tests covering core functionality
- Pre-commit hooks for code quality
- Black + isort formatting
- Pylint + mypy type checking
- 10/10 pylint score
# Clone the repository to ~/.claude
git clone [email protected]:InstruktAI/ClaudeConfig.git ~/.claude
cd ~/.claude
# Run the interactive installer
make install
# Start MCP servers
make start-mcpThe installer will:
- Prompt for engineer name and email
- Optionally collect API keys (OpenAI, ElevenLabs, Anthropic, Limitless, Firecrawl)
- Install ccstatusline configuration (makes Claude CLI look nicer)
- Create virtual environment and install dependencies
- Install pre-commit hooks
- Merge MCP server configurations to
~/.claude.json - Generate
id.mdwith your identity - Test configuration and verify all hooks work correctly
All configuration is managed through .env:
# Identity
ENGINEER_NAME=Your Name
[email protected]
# Logging
LOG_LEVEL=info # debug, info, warn, error
# TTS Configuration
TTS_SERVICE=elevenlabs,openai,macos,pyttsx3 # Priority chain
OPENAI_API_KEY=sk-...
OPENAI_VOICE=nova
ELEVENLABS_API_KEY=sk_...
ELEVENLABS_VOICE_ID=...
MACOS_VOICE="Samantha" # Use quotes for voices with spaces
# LLM Configuration
ANTHROPIC_API_KEY=sk-ant-...
# MCP Servers
LIMITLESS_API_KEY=sk-...
# Event Observability (disabled by default)
# Set to "true" to send hook events to observability server
# Requires: https://github.com/disler/claude-code-hooks-multi-agent-observability
SEND_EVENTS=falseConfigure multiple TTS services with automatic fallback:
# Try ElevenLabs first, fallback to macOS if unavailable
TTS_SERVICE=elevenlabs,macos
# OpenAI only (no fallback)
TTS_SERVICE=openaiServices are tried in order until one succeeds.
You can disable TTS notifications for specific hook events:
# Skip TTS for session start and end events
TTS_SKIP_HOOK_EVENTS=SessionStart,SessionEnd
# Available events: SessionStart, SessionEnd, Stop, SubagentStop, NotificationWhen TTS is skipped, a debug log entry is recorded instead.
~/.claude/
βββ bin/
β βββ install.sh # Interactive installation wizard
βββ hooks/ # Claude Code event hooks
β βββ tts.py # Unified TTS hook (--event-type flag)
β βββ send_event.py # Event dispatch to observability server
βββ utils/ # Shared utilities
β βββ tts/ # TTS service implementations
β βββ llm/ # LLM service implementations
β βββ tts_manager.py # TTS orchestration
β βββ llm_manager.py # LLM orchestration
β βββ logging_helper.py # Unified logging
β βββ tts_queue_runner.py # FIFO queue processor
βββ tests/ # Test suite
βββ mcp-servers/ # MCP server stack
βββ .env.example # Environment template
βββ id.md.example # Identity file template
βββ mcp.json # MCP server definitions
# Run tests
make test
# Format code
make format
# Lint code
make lint
# Clean build artifacts
make clean
# Test configuration (runs during install)
python scripts/test_config.pyThe installer runs an automated configuration test at the end to verify:
- β Environment variables are configured
- β TTS is set up correctly
- β All hooks execute successfully
You'll see see and hear output demonstrating each hook. If any issues are found, the installer will complete with warnings.
Hooks are triggered by Claude Code events and configured in settings.json:
SessionStart: TTS announcement when session startsSessionEnd: TTS announcement + session statisticsStop: Task completion message (with optional LLM summary)SubagentStop: Subagent completion notificationNotification: Custom notification handlingUserPromptSubmit: Pre-commit validation
The installer intelligently handles MCP servers:
- Conditional Installation: Firecrawl and Limitless only installed if API keys provided
- API Key Interpolation: Replaces template variables with actual values
- Non-Destructive: Preserves existing MCP server configurations in
~/.claude.json - Installed Servers:
- Context7 (always) - Library documentation
- Firecrawl (conditional) - Web scraping
- Limitless (conditional) - Memory enhancement
- Playwright (always) - Browser automation
GPL-3.0-only
Maurice Faber [email protected]
