Configure
Audio devices
Expand the Audio devices section in the Verbative panel to choose your mic and speaker. Input (microphone) is the device the wake-word listener captures from. The voice cues themselves play to your system default output via afplay.
Changing the input restarts the daemon so the new device takes effect immediately. Selections persist across VS Code reloads. If a device is unplugged, the dropdown silently falls back to the system default on next start.
Bluetooth headsets
AirPods and other Bluetooth headsets switch between two profiles: A2DP (high-quality stereo, no mic) and HFP (telephone-quality with mic). We open the mic the same way FaceTime and Zoom do, so the headset reliably switches into HFP — otherwise the mic just delivers silence.
Transcription mode
The Transcription control in the Hands-Free panel chooses how your dictated prompt is turned into text (the short commands below are always recognized on-device, regardless of this setting):
- Local (on-device)— whisper.cpp transcribes your prompt on your Mac and types it into the CLI. Nothing leaves your machine. Available on every plan (the same daily command limit applies), and the default on Advanced. The panel streams a live transcript as you talk and lets you edit it before it's sent— fix a misheard word or file name without re-recording. You can also pick the whisper model under the same control, on every plan (Large v3 Turbo is the default; lighter models are faster, heavier ones more accurate).
- Cloud— uses Claude Code's built-in dictation, sending the prompt audio to Anthropic. Default on Free.
Speak any language
Your dictated prompt is always produced in English. Speak in any language — German, Spanish, Japanese, French, whatever you think in — and Verbative translates it to English on your Mac with whisper.cpp, then types the clean English prompt into the CLI. There's no toggle and nothing to set up per language: it's always on, on every plan. As with local transcription, no audio or text ever leaves your machine.
Speak any language — Verbative translates your prompt to English on-device before it reaches Claude.
- On the full Large v3 model, Verbative also auto-detects the language you spoke and shows a “🌐 German detected → English” badge. On other models you still get an English prompt, just without the detected-language badge.
- The voice commands(“listen”, “stop listening”, “hold on”, …) always stay English — only your prompt content is translated.
- Your choice of whisper model works on every plan; the default model is used until you pick another.
Which languages? whisper's translate task covers roughly 99 languages— you don't configure anything per language, the detection is automatic. Translation quality is best for higher-resource, major languages and weaker for low-resource ones, so expect the cleanest results from the common ones. The well-supported majors include:
Spanish, French, German, Italian, Portuguese, Dutch, Russian, Polish, Ukrainian, Czech, Romanian, Hungarian, Greek, Swedish, Danish, Norwegian, Finnish, Chinese, Japanese, Korean, Hindi, Bengali, Tamil, Arabic, Hebrew, Persian, Turkish, Vietnamese, Indonesian, Malay, Thai, Catalan — and dozens more.
Voice commands
Verbative listens for a small vocabulary of trigger phrases. Each is recognized on-device with whisper.cpp. (Advanced users can rename any of these in the panel.)
Advanced: tap ✎ to rename any phrase to whatever feels natural
Every voice command in the panel — Advanced users can rename any trigger.
- “listen”— wake. Starts dictation: you hear “listening”. Speak your prompt.
- “stop listening”— submit. Ends dictation and sends your prompt to Claude. Say it explicitly — in local mode there is no auto-submit on silence.
- “hold on”— cancel a mis-fired listen and discard the dictation, without touching whatever Claude is doing.
- “approve” / “deny”— accept (Enter) or decline (Escape) a pending permission prompt. Say “explain” first to hear what Claude wants to do.
- “update”— a spoken progress recap while Claude is working (safe mid-task; never interrupts).
- “stop claude”— interrupt whatever Claude is currently running.
- “skip”, “pause” / “resume”— control the voice cue that's playing right now.
- “repeat” — replay the last spoken cue; “repeat review” replays the last Advisory Board batch.
- “open queues”— re-speak the permission request that's currently waiting, in case you missed it.
- “advisory board” / “project roadmap”— toggle those panels by voice.
Commands like “update”, “approve”, and “stop claude” work when idle, not mid-dictation — while you're dictating, only “stop listening” and “hold on” are intercepted; everything else becomes part of your prompt.
Voice output
All spoken cues use the local Kokoro neural voice — the same voice Verbative uses for the Claude Code Stop / Notification hooks it installs for you. The extension caches each cue to a WAV on first use so subsequent plays start in under 100 ms.
When the listener is off, Verbative suppresses all voice output system-wide — the rationale being that you can't respond by voice anyway. Turn it back on with Start listener.
Open the Voice & permissions dialog (the gear in the Hands-Free card) to choose the Claude voice and the mediator voice for status cues, set how spoken permission prompts are phrased, and tune mic muting while a cue plays.
Status cues you hear, not see
Three non-speech cues keep you oriented while your eyes are off the screen: a subtle working pulseevery few seconds while Claude is actively working (so you know it's still running), an attention beep when Claude is waiting on a permission decision, and a spoken permission cue that reads out what Claude wants before you answer “approve” or “deny”. The global working-pulse and attention-beep toggles live in the Channels header (above the first channel); the attention beep has four states — off, once (a single beep), limited (one beep before the cue plus up to three after), or until resolved(keep beeping until you answer). Both keep playing even when the Verbative panel isn't the visible view. With Channels, each agent also carries its own pulse, beep, and mute toggles, so you can silence or tune one agent without touching the others.
Keybindings (cloud mode only)
In cloudtranscription mode, Verbative drives Claude Code's own dictation via a control byte (0x14) so it never collides with anything you type. You don't need to set this up— Verbative handles it on install. For reference, the binding it relies on lives in your Claude Code keybindings file at ~/.claude/keybindings.json and looks like this:
{
"bindings": [
{
"context": "Chat",
"bindings": { "ctrl+t": "voice:pushToTalk" }
}
]
}Claude Code's default for voice:pushToTalk is Space, which can't be injected without colliding with your typing — so cloud mode needs a ctrl+<letter> bound. On install, Verbative adds ctrl+t only if you have no ctrl+<letter> bound to voice:pushToTalkyet; an existing binding is left untouched, and a keybindings file it can't parse is never overwritten. At runtime it reads whatever ctrl+<letter> you actually have bound and injects that, so a remap just works. In localmode this keybinding isn't used at all: Verbative transcribes on-device and types the prompt into the CLI directly.