Verbative

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):

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.

Default Channel · Agent 1
Listening — any language…local
Deutsch detected→ English
Orange = your words, any languageCancelSend ↵

Speak any language — Verbative translates your prompt to English on-device before it reaches Claude.

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.)

Voice commandson-device
Listen & dictate
listenWake — start a promptstop listeningSend the prompthold onCancel listening
Approve by voice
approveAllow the pending tooldenyBlock itexplainHear what it would do firstopen queuesRe-hear the open permission cue
Stay in flow
updateLive progress recapstop claudeInterrupt the running taskrepeatReplay the last cueskipSkip the cue playing nowpausePause the cue · resume to continue
Toggles
advisory boardSix-advisor design reviewproject roadmapLive spec → build → ship board
resumerepeat review+ more

Advanced: tap ✎ to rename any phrase to whatever feels natural

Every voice command in the panel — Advanced users can rename any trigger.

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.