{"id":30981029,"url":"https://github.com/husniadil/cc-hooks","last_synced_at":"2026-04-11T00:47:58.369Z","repository":{"id":313751195,"uuid":"1052218293","full_name":"husniadil/cc-hooks","owner":"husniadil","description":"Advanced Claude Code hooks system with contextual TTS announcements, AI-powered completion messages, multilingual translation, and event-driven automation","archived":false,"fork":false,"pushed_at":"2025-09-08T07:39:30.000Z","size":576,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-08T09:12:33.853Z","etag":null,"topics":["ai-translation","claude-code","developer-experience","elevenlabs","event-processing","fastapi","gtts","hooks","middleware","multilingual","openrouter","productivity","sqlite","text-to-speech","tts"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/husniadil.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-07T16:41:35.000Z","updated_at":"2025-09-08T07:39:34.000Z","dependencies_parsed_at":"2025-09-08T09:22:52.083Z","dependency_job_id":null,"html_url":"https://github.com/husniadil/cc-hooks","commit_stats":null,"previous_names":["husniadil/cc-hooks"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/husniadil/cc-hooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/husniadil%2Fcc-hooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/husniadil%2Fcc-hooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/husniadil%2Fcc-hooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/husniadil%2Fcc-hooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/husniadil","download_url":"https://codeload.github.com/husniadil/cc-hooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/husniadil%2Fcc-hooks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274777730,"owners_count":25347652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-translation","claude-code","developer-experience","elevenlabs","event-processing","fastapi","gtts","hooks","middleware","multilingual","openrouter","productivity","sqlite","text-to-speech","tts"],"created_at":"2025-09-12T08:07:20.435Z","updated_at":"2025-12-26T14:27:49.214Z","avatar_url":"https://github.com/husniadil.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cc-hooks\n\n![cc-hooks Banner](public/banner.png)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![DeepWiki](https://img.shields.io/badge/DeepWiki-cc--hooks-blue)](https://deepwiki.com/husniadil/cc-hooks)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Enhanced-orange)](https://www.anthropic.com/claude-code)\n[![Audio](https://img.shields.io/badge/Audio-TTS%20%2B%20Sound%20Effects-purple)]()\n\n**Give Claude Code a voice!** Transform your coding experience with intelligent audio feedback,\nmultilingual TTS announcements, and AI-powered contextual messages.\n\n## Why cc-hooks?\n\nWorking with Claude Code is powerful, but it can feel silent and disconnected. **cc-hooks** brings\nyour coding sessions to life:\n\n- 🎯 **Stay in the flow** - Audio cues keep you informed without breaking focus\n- 🔊 **Instant feedback** - Know when tools start, complete, or when Claude needs your attention\n- 🗣️ **Smart announcements** - Context-aware messages that understand what you're working on\n- 🌍 **Your language** - TTS support for multiple languages (English, Indonesian, Spanish, and more)\n- ⚡ **Zero config** - Works out of the box, customize when you need it\n- 🎛️ **Flexible control** - From complete silence to premium AI voices, you choose\n\n## Quick Demo\n\n[![ElevenLabs TTS Demo](public/thumbnail.png)](https://www.youtube.com/watch?v=VXkKhgeZ-xU)\n\n_Watch cc-hooks in action with premium ElevenLabs text-to-speech_\n\n## Features\n\n### 🎵 Audio Feedback System\n\n- **Sound effects** for different events (tool execution, notifications, completions)\n- **Voice announcements** for session lifecycle and task completions\n- **Multiple TTS providers**: Prerecorded sounds (offline), Google TTS (free), ElevenLabs (premium)\n- **Smart fallback chain** - automatically tries next provider if one fails\n\n### 🤖 AI-Powered Intelligence (Optional)\n\n- **Contextual completion messages** - \"I've successfully implemented the authentication system you\n  requested\"\n- **Smart tool announcements** - Understands what Claude is doing and why\n- **Automatic translation** - AI messages in your preferred language\n- **Cost optimized** - Disabled by default, enable per session when needed\n\n### ⚙️ Advanced Capabilities\n\n- **Multi-instance support** - Run multiple Claude sessions with different audio configs\n- **Granular silent modes** - Disable just announcements or just sound effects\n- **Per-session configuration** - Change settings without editing config files\n- **Auto-cleanup** - Smart session management prevents resource leaks\n- **Status line integration** - See current session info in Claude Code UI\n\n## Installation\n\n### Choose Your Installation Mode\n\n| Feature               | Plugin Mode ⭐ Recommended | Standalone Mode               |\n| --------------------- | -------------------------- | ----------------------------- |\n| **Setup Complexity**  | ✅ Simple (3 commands)     | ⚠️ Manual hooks configuration |\n| **Updates**           | ✅ One command             | ⚠️ Git pull + restart         |\n| **Slash Commands**    | ✅ Built-in                | ❌ Not available              |\n| **Hooks Config**      | ✅ Automatic               | ⚠️ Manual (settings.json)     |\n| **Installation Path** | Fixed location             | ✅ User-defined               |\n| **For Contributors**  | ⚠️ Limited                 | ✅ Full source access         |\n| **Recommended for**   | **Most users**             | Developers, testers           |\n\n[**→ Continue with Plugin Installation**](#plugin-installation-recommended) |\n[**→ Standalone Installation**](STANDALONE_README.md)\n\n---\n\n### Plugin Installation (Recommended)\n\n#### Prerequisites\n\n- **Python 3.12+** (recommended: 3.12.7)\n- **[uv](https://docs.astral.sh/uv/)** package manager\n- **Claude Code** CLI installed\n\n#### Quick Install\n\n**Option 1: CLI (Recommended - No REPL needed)**\n\n```bash\n# Add marketplace\nclaude plugin marketplace add https://github.com/husniadil/cc-hooks.git\n\n# Install plugin\nclaude plugin install cc-hooks-plugin@cc-hooks-plugin\n\n# Done! Start Claude to use\nclaude\n```\n\n**Option 2: Inside Claude REPL**\n\n```bash\n# Start Claude first\nclaude\n\n# Then in the REPL:\n/plugin marketplace add https://github.com/husniadil/cc-hooks.git\n/plugin install cc-hooks-plugin@cc-hooks-plugin\n\n# Restart Claude Code\n```\n\n**Start using!** Audio feedback works immediately with default prerecorded sounds. 🎉\n\n#### Post-Installation Setup (Recommended)\n\nAfter installation, use the interactive setup wizard:\n\n```bash\n# Inside Claude REPL\n/cc-hooks-plugin:setup\n```\n\nThis wizard helps you:\n\n- ✅ Check system requirements (uv installation)\n- ✅ Set up convenient shell aliases (`cld` command)\n- ✅ Configure status line\n- ✅ Set up API keys for premium features\n- ✅ Choose preset configurations\n- ✅ Test your installation\n\n**Quick setup modes:**\n\n```bash\n/cc-hooks-plugin:setup check    # Check requirements and config only\n/cc-hooks-plugin:setup apikeys  # Focus on API key setup\n/cc-hooks-plugin:setup test     # Run installation tests\n```\n\n#### Status Line Setup (Optional)\n\nThe plugin includes a status line feature that shows session info in Claude Code UI. **This is not\nconfigured automatically** and requires manual setup in `~/.claude/settings.json`:\n\n```jsonc\n{\n  \"$schema\": \"https://json.schemastore.org/claude-code-settings.json\",\n  // ...\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"uv run ~/.claude/plugins/marketplaces/cc-hooks-plugin/status-lines/status_line.py\"\n  }\n}\n```\n\n**Benefits:**\n\n- Shows current TTS provider, language, and AI mode\n- Displays session info at a glance\n- Real-time status updates\n\n## Usage\n\n### Quick Start\n\n**Automated Setup (Easiest):**\n\n```bash\n# Inside Claude REPL\n/cc-hooks-plugin:setup\n```\n\n**Manual Setup:**\n\nAdd shell alias to your `.bashrc` or `.zshrc`:\n\n```bash\nalias cld='~/.claude/plugins/marketplaces/cc-hooks-plugin/claude.sh'\n```\n\nThen reload: `source ~/.bashrc` or `source ~/.zshrc`\n\n### Usage Examples\n\n```bash\n# Default: prerecorded sounds (offline, no config needed)\ncld\n\n# Google TTS in Indonesian\ncld --audio=gtts --language=id\n\n# Premium ElevenLabs voice\ncld --audio=elevenlabs\n\n# With AI-powered contextual messages\ncld --audio=gtts --ai=full --language=id\n\n# Silent mode for meetings\ncld --silent\n```\n\n## Configuration\n\n### CLI Flags Reference\n\n#### Audio Providers\n\n```bash\ncld --audio=prerecorded  # Offline sounds (default, no API key)\ncld --audio=gtts         # Google TTS (free, requires internet)\ncld --audio=elevenlabs   # Premium quality (requires API key)\n```\n\n| Provider        | Quality | Cost | Requires Internet | API Key |\n| --------------- | ------- | ---- | ----------------- | ------- |\n| **prerecorded** | Good    | Free | ❌ No             | ❌ No   |\n| **gtts**        | Great   | Free | ✅ Yes            | ❌ No   |\n| **elevenlabs**  | Premium | Paid | ✅ Yes            | ✅ Yes  |\n\n#### Language\n\n```bash\ncld --audio=gtts --language=id  # Indonesian\ncld --audio=gtts --language=es  # Spanish\ncld --audio=gtts --language=fr  # French\n```\n\nSupports any Google TTS or ElevenLabs language: `en`, `id`, `es`, `fr`, `de`, `ja`, and many more!\n\n#### AI Features\n\n```bash\ncld --ai=basic  # Contextual completion messages only\ncld --ai=full   # Completion + intelligent tool announcements\n```\n\n**Requires**: OpenRouter API key (`export OPENROUTER_API_KEY=your_key`)\n\n**What you get:**\n\n- \"I've successfully implemented the authentication system you requested\"\n- \"Running tests to validate the changes we just made\"\n- Messages automatically translated to your language\n\n**Cost**: Very affordable (~$0.15 per 1M tokens)\n\n#### Silent Modes\n\n```bash\ncld --silent                    # Complete silence\ncld --silent=announcements      # No TTS, keep sound effects\ncld --silent=sound-effects      # No sound effects, keep TTS\n```\n\n#### Advanced Flags\n\n```bash\n--elevenlabs-voice-id=ID        # Custom ElevenLabs voice\n--elevenlabs-model=MODEL        # ElevenLabs model (default: eleven_flash_v2_5)\n--openrouter-model=MODEL        # AI model (default: openai/gpt-4o-mini)\n--no-cache                      # Disable TTS caching (for testing)\n```\n\n### API Keys Setup\n\nFor ElevenLabs or AI features, set API keys as environment variables:\n\n```bash\n# Add to your .bashrc or .zshrc\nexport ELEVENLABS_API_KEY=your_key_here\nexport OPENROUTER_API_KEY=your_key_here\n```\n\n**Get your keys:**\n\n- **ElevenLabs**:\n  [elevenlabs.io/app/developers/api-keys](https://elevenlabs.io/app/developers/api-keys)\n- **OpenRouter**: [openrouter.ai/keys](https://openrouter.ai/keys) (free credits available)\n\n### Configuration File (Recommended)\n\n**Set your defaults once** - no need to use CLI flags every time!\n\n**Location**: `~/.claude/.cc-hooks/config.yaml`\n\n**Why use it?**\n\n- ✅ **For Zed/Editors**: Only way to customize (editors can't pass CLI flags)\n- ✅ **For Terminal**: Set once, run `claude` or `cld` - your preferences auto-apply\n- ✅ **Still flexible**: CLI flags override config when needed\n\n**Create config file:**\n\n```bash\n# Inside Claude REPL\n/cc-hooks-plugin:setup\n\n# Or manually create with defaults\nuv run ~/.claude/plugins/marketplaces/cc-hooks-plugin/utils/config_loader.py --create-example\n\n# Edit to your preferences\nnano ~/.claude/.cc-hooks/config.yaml\n```\n\n**Example config** (Indonesian with Google TTS):\n\n```yaml\naudio:\n  providers: gtts,prerecorded\n  language: id\n  cache_enabled: true\n\nopenrouter:\n  enabled: false\n```\n\n**Example config** (Premium with AI):\n\n```yaml\naudio:\n  providers: elevenlabs,gtts,prerecorded\n  language: en\n  cache_enabled: true\n\nelevenlabs:\n  voice_id: 21m00Tcm4TlvDq8ikWAM\n  model_id: eleven_flash_v2_5\n\nopenrouter:\n  enabled: true\n  model: openai/gpt-4o-mini\n  contextual_stop: true\n```\n\n**Priority**: CLI flags \u003e Environment variables \u003e Config file \u003e Defaults\n\n**This means:**\n\n- Config file provides defaults for all sessions\n- Run `cld --language=es` to override for one session\n- Perfect for both Zed and terminal users!\n\n### Example Configurations\n\n```bash\n# Work setup: Indonesian TTS with Google\ncld --audio=gtts --language=id\n\n# Premium experience: ElevenLabs + AI features\ncld --audio=elevenlabs --ai=full\n\n# Meeting mode: Sound effects only\ncld --silent=announcements\n\n# Testing: Premium voice without cache\ncld --audio=elevenlabs --no-cache\n\n# Multi-session workflow\n# Terminal 1: Work project\ncd ~/work-project\ncld --audio=gtts --language=id\n\n# Terminal 2: Side project with premium\ncd ~/side-project\ncld --audio=elevenlabs --ai=full\n\n# Terminal 3: Silent for meetings\ncd ~/meeting-notes\ncld --silent\n```\n\n## Audio Event Mapping\n\n| Event            | Sound Effect | TTS Announcement               |\n| ---------------- | ------------ | ------------------------------ |\n| SessionStart     | -            | ✅ Always                      |\n| SessionEnd       | -            | ✅ Always                      |\n| PreToolUse       | tek.mp3      | ✅ With AI=full                |\n| PostToolUse      | cetek.mp3    | -                              |\n| UserPromptSubmit | klek.mp3     | -                              |\n| Notification     | tung.mp3     | -                              |\n| Stop             | -            | ✅ Always (contextual with AI) |\n| SubagentStop     | cetek.mp3    | -                              |\n| PreCompact       | -            | ✅ Always                      |\n\n**Notes:**\n\n- Sound effects play regardless of `--audio` flag (unless `--silent` or `--silent=sound-effects`)\n- TTS announcements use the configured provider (`--audio=prerecorded|gtts|elevenlabs`)\n- PreToolUse only announces with `--ai=full` (contextual tool messages)\n- Stop always announces, but uses AI contextual messages when `--ai=basic` or `--ai=full` is enabled\n\n## Updating cc-hooks\n\n### Check for Updates\n\nInside Claude REPL:\n\n```bash\n/cc-hooks-plugin:update\n```\n\nOr via CLI:\n\n```bash\nclaude plugin marketplace update cc-hooks-plugin\n```\n\n**The update command will:**\n\n- Detect your installation mode automatically\n- Check for available updates\n- Show current vs latest version\n- Install updates with your confirmation\n- Remind you to restart Claude Code\n\n**Alternative methods:**\n\n```bash\n# CLI (outside Claude REPL)\nclaude plugin marketplace update cc-hooks-plugin\n\n# Inside Claude REPL\n/plugin update cc-hooks-plugin@cc-hooks-plugin\n```\n\n**Important**: Restart Claude Code session after updating.\n\n## Troubleshooting\n\n### Quick Diagnostics\n\nRun `/cc-hooks-plugin:setup check` to verify your configuration.\n\n### Plugin Hook Metadata Error?\n\n**Error message:**\n\n```\n⎿  SessionStart:startup says: Plugin hook error: Reading inline script metadata from `~/.claude/plugins/marketplaces/cc-hooks-plugin//hooks.py`\n   Installed 28 packages in 115ms\n```\n\n**Cause:** This typically occurs when Claude CLI is being auto-updated by Anthropic in the\nbackground.\n\n**Solution:** Simply restart your Claude session. The error should disappear after the update\ncompletes.\n\n### cc-hooks not starting with `--dangerously-skip-permissions` in new folders?\n\n**Symptom:** When running Claude Code with `--dangerously-skip-permissions` flag in a new/untrusted\nfolder, cc-hooks server doesn't start and hooks don't execute.\n\n**Cause:** Claude Code shows a trust prompt for new folders that requires explicit user approval:\n\n```\n Do you trust the files in this folder?\n /path/to/your/folder\n ❯ 1. Yes, proceed\n   2. No, exit\n```\n\nWhen using `--dangerously-skip-permissions`, this prompt doesn't appear but hooks also fail to\nexecute. This appears to be a limitation in how Claude Code handles the trust flow with this flag.\n\n**Solution:** Run Claude Code **without** the flag first to accept the trust prompt:\n\n```bash\n# First run: accept trust prompt (without skip-permissions flag)\ncld  # or: claude\n\n# Select \"Yes, proceed\" when prompted\n\n# Exit Claude Code\n\n# Subsequent runs: flag works normally\ncld --dangerously-skip-permissions  # Now hooks will work\n```\n\n**Why this works:** Once the folder is trusted, the approval is cached. Future sessions (even with\n`--dangerously-skip-permissions`) will execute hooks normally.\n\n**Note:** It's unclear whether this is a Claude Code bug or expected behavior. The flag is meant to\nskip permission prompts, but doesn't seem to handle the initial folder trust flow.\n\n### No audio at all?\n\n1. Check system audio is working\n2. Verify plugin is installed: `/plugin`\n3. Run setup wizard: `/cc-hooks-plugin:setup test`\n4. Check logs: `tail -f ~/.claude/.cc-hooks/logs/*.log`\n5. Test manually: `uv run ~/.claude/plugins/marketplaces/cc-hooks-plugin/utils/sound_player.py`\n\n### Google TTS not working?\n\n1. Check internet connection\n2. Test:\n   `uv run ~/.claude/plugins/marketplaces/cc-hooks-plugin/utils/tts_announcer.py --provider gtts SessionStart`\n\n### ElevenLabs not working?\n\n1. Verify API key: `printenv ELEVENLABS_API_KEY`\n2. Check quota at [elevenlabs.io](https://elevenlabs.io)\n3. Test:\n   `uv run ~/.claude/plugins/marketplaces/cc-hooks-plugin/utils/tts_announcer.py --provider elevenlabs SessionStart`\n\n### AI contextual messages not working?\n\n1. Verify API key: `printenv OPENROUTER_API_KEY`\n2. Use `--ai=basic` or `--ai=full` flag when starting\n3. Check OpenRouter API quota at [openrouter.ai](https://openrouter.ai)\n\n### Database Issues\n\nCheck database exists:\n\n```bash\nls -la ~/.claude/.cc-hooks/events.db\n```\n\nView recent events:\n\n```bash\nsqlite3 ~/.claude/.cc-hooks/events.db \"SELECT id, hook_event_name, status FROM events ORDER BY created_at DESC LIMIT 10;\"\n```\n\n## Data Storage\n\nThe plugin uses a shared data directory for persistence:\n\n```\n~/.claude/.cc-hooks/\n├── events.db          # Event queue database\n├── logs/              # Per-session logs\n│   └── {pid}.log\n└── .tts_cache/        # Cached TTS audio (if enabled)\n```\n\n**Why shared?** This directory persists across plugin updates, allowing seamless upgrades without\nlosing data.\n\n## FAQ\n\n**Q: Do I need API keys to use cc-hooks?**\n\nNo! Default mode uses prerecorded sounds and works completely offline with no API keys required.\n\n**Q: Which TTS provider should I use?**\n\n- **Prerecorded**: Fastest, offline, no costs (great for starting)\n- **Google TTS**: Free, good quality, requires internet\n- **ElevenLabs**: Premium quality, costs money, best voices\n\n**Q: Can I use my own voice with ElevenLabs?**\n\nYes! Upload your voice at [elevenlabs.io/app/voice-lab](https://elevenlabs.io/app/voice-lab), then\nuse `--elevenlabs-voice-id=your_voice_id`\n\n**Q: How much do AI features cost?**\n\nOpenRouter has free credits to start. After that, costs vary by model. Use `--ai=basic` for minimal\ncosts (only completion messages). The default model is very cheap (~$0.15 per 1M tokens).\n\n**Q: Can I run multiple Claude sessions with different audio settings?**\n\nYes! Each session is independent. Run `cld --audio=gtts` in one terminal and `cld --silent` in\nanother.\n\n**Q: Does cc-hooks slow down Claude Code?**\n\nNo! cc-hooks uses a \"fire-and-forget\" pattern - hooks return immediately. Audio processing happens\nin the background without blocking Claude.\n\n**Q: What languages are supported?**\n\nAny language supported by Google TTS or ElevenLabs. Common ones: English (en), Indonesian (id),\nSpanish (es), French (fr), German (de), Japanese (ja), etc.\n\n**Q: Can I disable just the voice but keep sound effects?**\n\nYes! Use `--silent=announcements` to disable TTS while keeping sound effects.\n\n**Q: How do I migrate from standalone mode?**\n\nSee [MIGRATION.md](MIGRATION.md) for a comprehensive step-by-step guide.\n\n**Q: Can I use cc-hooks in CI/CD?**\n\nYes, use `--silent` mode to disable all audio in automated environments.\n\n**Q: Where are audio files cached?**\n\nTTS cache is in `~/.claude/.cc-hooks/.tts_cache/` directory. Delete it with\n`rm -rf ~/.claude/.cc-hooks/.tts_cache` to regenerate all audio.\n\n**Q: How do I contribute?**\n\nPull requests welcome! For development, use [Standalone Mode](STANDALONE_README.md). See\n[CLAUDE.md](CLAUDE.md) for development guide.\n\n## Advanced Usage\n\n### Custom ElevenLabs Voice\n\n1. Upload voice at [elevenlabs.io/app/voice-lab](https://elevenlabs.io/app/voice-lab)\n2. Get voice ID\n3. Use with flag:\n   ```bash\n   cld --audio=elevenlabs --elevenlabs-voice-id=your_voice_id\n   ```\n\n### Custom AI Model\n\nUse different AI models for contextual messages:\n\n```bash\ncld --ai=full --openrouter-model=google/gemini-2.5-flash-lite  # Faster, cheaper\ncld --ai=full --openrouter-model=anthropic/claude-3-haiku      # Better quality\n```\n\n### Multi-Instance Support\n\nRun multiple Claude sessions with different configurations simultaneously:\n\n```bash\n# Terminal 1: Work project with Indonesian TTS\ncld --audio=gtts --language=id\n\n# Terminal 2: Side project with premium voice + AI\ncld --audio=elevenlabs --ai=full\n\n# Terminal 3: Meeting mode (silent)\ncld --silent\n\n# Terminal 4: Testing with prerecorded only\ncld --audio=prerecorded\n```\n\nEach session runs independently with its own server and configuration!\n\n## Slash Commands Reference\n\ncc-hooks provides convenient slash commands for management:\n\n### Setup Command\n\nConfigure and test your installation:\n\n```bash\n/cc-hooks-plugin:setup           # Interactive setup wizard\n/cc-hooks-plugin:setup check     # Check system requirements\n/cc-hooks-plugin:setup apikeys   # Configure API keys\n/cc-hooks-plugin:setup test      # Test installation\n```\n\n### Update Command\n\nKeep cc-hooks up to date:\n\n```bash\n/cc-hooks-plugin:update          # Check and install updates\n```\n\n## Migrating from Standalone\n\nIf you previously used standalone installation, see [MIGRATION.md](MIGRATION.md) for a comprehensive\nmigration guide.\n\n**Quick summary:**\n\n1. Remove hooks from `~/.claude/settings.json`\n2. Install plugin via `claude plugin install cc-hooks-plugin@cc-hooks-plugin`\n3. Update shell alias to point to plugin path\n4. Export API keys to shell environment (if using)\n5. Test with `/cc-hooks-plugin:setup check`\n\nYour data in `~/.claude/.cc-hooks/` is automatically preserved!\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/husniadil/cc-hooks/issues)\n- **Documentation**: [Main README](README.md) (this file) | [Standalone](STANDALONE_README.md) |\n  [Migration](MIGRATION.md)\n- **Development**: [CLAUDE.md](CLAUDE.md) for technical details\n- **Updates**: Use `/cc-hooks-plugin:update` inside Claude REPL\n\n## Credits\n\n- **Sound effects**: Generated using [ElevenLabs](https://elevenlabs.io) voice synthesis\n- **TTS**: [Google TTS](https://github.com/pndurette/gTTS), [ElevenLabs](https://elevenlabs.io)\n- **AI**: [OpenRouter](https://openrouter.ai)\n\n## License\n\nMIT - see [LICENSE](LICENSE) for details.\n\n---\n\n**Made with ❤️ for the Claude Code community**\n\nEnjoy your enhanced coding experience! 🎉\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhusniadil%2Fcc-hooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhusniadil%2Fcc-hooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhusniadil%2Fcc-hooks/lists"}