Always-on macOS voice assistant that listens for "Hey Claude" and executes commands via Claude Code.
- Wake word detection ("Hey Claude") using Picovoice Porcupine
- Natural voice commands with "over" end trigger (or 2-second pause)
- Automatic Claude Code execution in new iTerm tab
- Voice responses via VoiceMode MCP (Whisper + Kokoro TTS)
- Runs as background app (no terminal window needed)
- Sound + notification when wake word detected
- Built-in mic support to avoid Bluetooth audio quality issues
- macOS with Apple Silicon (M1/M2/M3/M4)
- Python 3.10+
- Homebrew (for installing terminal-notifier)
- Claude Code CLI installed and configured
- VoiceMode MCP installed and running
- Picovoice account (free tier)
- iTerm2 (recommended) or Terminal.app
git clone https://github.com/SergeyKirk/hey-claude.git
cd hey-claude
./hey-claude.sh install- Go to console.picovoice.ai
- Sign up (free) and copy your Access Key
- Go to Porcupine > Custom Wake Word
- Type "Hey Claude", select macOS (arm64), download the
.ppnfile
mkdir -p wake-word
mv ~/Downloads/Hey-Claude_*.ppn wake-word/hey-claude.ppncp config.yaml.example config.yamlEdit config.yaml and add your Picovoice access key:
picovoice:
access_key: "your-access-key-here"./hey-claude.sh runSay "Hey Claude" - if it detects your voice, you're ready for the next step.
./hey-claude.sh build-app
./hey-claude.sh start-appOn first launch, grant microphone permission when prompted.
Option A - Via System Settings:
- Open System Settings > General > Login Items
- Click + under "Open at Login"
- Select
dist/Hey Claude.app
Option B - Via Terminal:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"'$(pwd)'/dist/Hey Claude.app", hidden:false}'- Say "Hey Claude" to activate
- Speak your command naturally
- Say "over" to finish (or pause for 2 seconds)
- Claude executes in a new iTerm tab and responds via voice
- "Hey Claude, what time is it, over"
- "Hey Claude, create a Python function to sort a list, over"
- "Hey Claude, explain this error, over"
./hey-claude.sh install # Install dependencies
./hey-claude.sh run # Run in foreground (testing)
./hey-claude.sh build-app # Build background app
./hey-claude.sh start-app # Start background app
./hey-claude.sh stop-app # Stop background app
./hey-claude.sh status # Check if running
./hey-claude.sh logs # View logsEdit config.yaml:
picovoice:
access_key: "YOUR_KEY"
wake_word_model: "wake-word/hey-claude.ppn"
command:
end_keyword: "over"
silence_timeout: 2.0
audio:
input_device: "default" # Or "MacBook Pro Microphone"
terminal:
app: "iterm"If Bluetooth headphones sound bad when Hey Claude runs, use the built-in mic:
audio:
input_device: "MacBook Pro Microphone"- Check microphone permissions in System Settings
- Verify
wake-word/hey-claude.ppnexists - Run
./hey-claude.sh runto see debug output
- Run
./hey-claude.sh build-appfirst - Check Console.app for crash logs
- Run:
pkill -f "kokoro\|tts"
MIT License - See LICENSE
Built with Picovoice Porcupine, Whisper.cpp, and Claude Code

