Claude Whisper
Voice-controlled interface for Claude Code using Apple MLX Whisper for speech recognition.
Overview
Claude Whisper enables voice interaction with Claude Code through push-to-talk functionality. Hold a configurable key (default: ESC), speak your wake word followed by a command, and Claude Whisper will transcribe and execute it using the Claude Agent SDK.
Features
- Push-to-talk interface with configurable hotkey
- Real-time speech recognition using MLX Whisper (optimized for Apple Silicon)
- Desktop notifications for task status
- Direct integration with Claude Agent SDK
- Configurable wake word to trigger Claude commands
- TOML-based configuration with environment variable overrides
Requirements
- macOS with Apple Silicon (for MLX acceleration)
- Python 3.10+
- PortAudio (for microphone input)
- Anthropic API key (for Claude Agent SDK)
macOS Permissions
Your terminal application needs the following permissions enabled in System Settings > Security & Privacy:
- Input Monitoring - Required for detecting push-to-talk key presses
- Accessibility - Required for keyboard event monitoring
- Screen Recording - Required for the screenshot tool to capture your screen
Installation
Prerequisites
Install PortAudio (required for microphone input):
brew install portaudio
Using uvx (Recommended)
uvx claude-whisper /path/to/your/project
Using pipx
pipx install claude-whisper
claude-whisper /path/to/your/project
Using pip
pip install claude-whisper
claude-whisper /path/to/your/project
From Source
- Install system dependencies:
make install-deps
- Install the package:
uv sync
Usage
Audio Mode (Push-to-Talk)
Run Claude Whisper with a working directory:
claude-whisper /path/to/your/project
Once running:
- Hold the push-to-talk key (default: ESC)
- Say your wake word followed by your command (e.g., "Jarvis, create a README for this project")
- Release the key when done speaking
- The audio will be transcribed and sent to Claude
- Desktop notifications will alert you when tasks start and finish
Configuration
Configure Claude Whisper using environment variables with the CLAUDE_WHISPER_ prefix or a TOML config file at ~/.config/claude-whisper/config.toml:
Configuration Options
| Variable | Default | Description |
|---|---|---|
CLAUDE_WHISPER_MODEL_NAME |
mlx-community/whisper-medium-mlx-8bit |
Whisper model for transcription |
CLAUDE_WHISPER_FORMAT |
paInt16 |
Audio format (16-bit int) |
CLAUDE_WHISPER_CHANNELS |
1 |
Number of audio channels (mono) |
CLAUDE_WHISPER_RATE |
16000 |
Sampling rate in Hz |
CLAUDE_WHISPER_CHUNK |
1024 |
Audio buffer size |
CLAUDE_WHISPER_SILENCE_THRESHOLD |
500 |
Amplitude threshold for detecting silence |
CLAUDE_WHISPER_SILENCE_CHUNKS |
30 |
Consecutive silent chunks before stopping |
CLAUDE_WHISPER_COMMAND |
jarvis |
Wake word to trigger Claude |
CLAUDE_WHISPER_PERMISSION_MODE |
acceptEdits |
Claude permission mode |
CLAUDE_WHISPER_PUSH_TO_TALK_KEY |
esc |
Key to hold for recording |
Example TOML Configuration
Create ~/.config/claude-whisper/config.toml:
model_name = "mlx-community/whisper-medium-mlx-8bit"
command = "jarvis"
push_to_talk_key = "esc"
permission_mode = "acceptEdits"
Available Push-to-Talk Keys
esc,escape- Escape keyspace- Space barenter- Enter keytab- Tab keyctrl,shift,alt,cmd- Modifier keys- Any single character (e.g.,
a,z,1)
Development
Testing
Run the test suite:
make test
Run tests with coverage:
pytest --cov=src/claude_whisper --cov-report=term-missing
Run specific test files:
pytest tests/test_config.py
pytest tests/test_main.py
pytest tests/test_integration.py
Code Quality
Format code:
make format
Run linter:
make lint
Fix linting issues:
make lint-fix
Check formatting and linting:
make check
License
See LICENSE file for details.
Author
Ashton Sidhu (ashton@sidhulabs.ca)
Metadata
Release files for claude-whisper 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| claude_whisper-0.1.3.tar.gz | 11.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| claude_whisper-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.7 kB
Release files / claude_whisper-0.1.3.tar.gz
| Download URL | claude_whisper-0.1.3.tar.gz |
|---|---|
| Size | 11.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c9bdf19a6ee596e0915d43a38fdad2f47d74450446e88494cf0f0a76dee37dff
|
|
BLAKE2b-256 checksum How to use checksums |
38997120b2c7956b0f9c998b76b198f8805575001e9bd0cd365b42c905e79f87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.
Transparency logRelease files / claude_whisper-0.1.3-py3-none-any.whl
| Download URL | claude_whisper-0.1.3-py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0c96bd1485d47b7010513be415a86a1ec84afb3c72d5efb1b9b61aa0a7590792
|
|
BLAKE2b-256 checksum How to use checksums |
2faadc9c26ce94bd2fef47f6529dff51657b7d3075919703a677646cca579047
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.
Transparency log