Claude Code Voice Mode Not Working? How to Fix It
Claude Code's /voice dictation breaks down to five documented error messages, tested on 2.1.270 - and why it never works over SSH or in a container.

Made with DispatchSEO
On this page
Search "claude code voice mode not working" and half of what comes back is actually about the Claude phone app, which is a different feature from the /voice dictation Claude Code ships in the CLI. If you're chasing the CLI feature, the fix is one of five documented error conditions - a wrong account type, a denied microphone, unrecognized speech, a failed connection, or no microphone at all - and Claude Code's own troubleshooting docs now name each one by an exact message.
TL;DR: Run
/voiceand read the exact message it shows -code.claude.com's troubleshooting section names five of them, from "requires a Claude.ai account" to "No speech detected." If you're on SSH, a container, Claude Code on the web, or the VS Code extension's Remote mode, stop troubleshooting: none of those has a local microphone, so/voicecannot work there, full stop. And if the article you're reading talks about tapping a sound-wave icon or choosing a voice personality, you're reading about the Claude app, not Claude Code.
Two features share the name "voice mode" - only one of them is Claude Code's
Claude.ai's mobile, desktop, and web apps ship a voice mode of their own: tap a sound-wave icon, pick a voice, and have a spoken back-and-forth conversation. Claude Code's /voice is a different, much narrower feature - push-to-talk dictation that transcribes your speech into the prompt input so you can mix voice and typing in one message. They share a name and an owner, and nothing else.
Where it runs
The CLI and its VS Code extension
Claude mobile, desktop, and web
Turned on with
/voice, or the voice setting in settings.json
Tapping the sound-wave icon
Microphone access
Local terminal process only
The Claude app itself
Works over SSH or on the web
No - needs a local mic, never available remotely
Yes, mic access comes from your phone or browser
Account needed
Claude.ai account - blocked on API keys, Bedrock, Vertex, Foundry
Any Claude.ai or app account
Cross-compatible?
Not the app's voice mode
Explicitly not Claude Code, per Claude's own help center
Sourced from code.claude.com/docs/en/voice-dictation and support.claude.com's voice mode article, checked 2026-09-12.
The practical result: half of page 1 for this exact search - a Reddit thread, a couple of small blogs, a third-party add-on site - never actually distinguishes the two, so troubleshooting advice for the app's hands-free mode gets applied to the CLI's dictation feature and goes nowhere. Claude's own help center article on voice mode settles it under its Known Limitations: voice mode is "not compatible with Claude Cowork or Claude Code." If you're in the CLI and /voice is the command you typed, everything below is about your actual feature.
Run this checklist before you file anything
Before touching a single setting, confirm the basics Claude Code's own voice dictation requirements call out - most "not working" reports turn out to be one of these:
| Check | How to check | What passing looks like |
|---|---|---|
| Signed in with a Claude.ai account | Run /login inside a session | Your account is Claude.ai - not an API key, Bedrock, Vertex, or Foundry profile |
| Terminal has OS mic permission | macOS: System Settings -> Privacy & Security -> Microphone. Windows: Settings -> Privacy & security -> Microphone | Your terminal app is listed and enabled |
| Microphone actually works | Test it in any other app - Voice Memos, a video call | You can hear yourself back |
| Not a remote session | Check for ssh in your terminal title, a VS Code Remote/Codespaces badge, or Claude Code on the web | You're on the machine the mic is physically attached to |
| A recorder is available (Linux) | Run which sox or which arecord | One of the two returns a path |
Voice dictation is authenticated-account-only by design: it needs Anthropic's speech-to-text service, which only runs for Claude.ai-authenticated sessions, never for direct API keys or cloud-provider auth. That single line explains a large share of "it just doesn't do anything" reports from teams on Bedrock or Vertex.
What each exact error message means, and how to fix it
Once the checklist above passes and /voice still misbehaves, the message it prints is specific enough to skip guessing. These are the exact strings from Claude Code's own error reference, in the order most setups hit them:
The exact message /voice shows, and what fixes it
Voice mode requires a Claude.ai account
You're signed in with an API key, Bedrock, Vertex, or Foundry - run /login and sign in with Claude.ai instead
Microphone access is denied
Grant the terminal mic access in your OS privacy settings, then run /voice again
No speech detected
Audio reached the service but no words were recognized - move closer to the mic and check /config for the right dictation language
Voice connection failed / WebSocket upgrade rejected
The recording never reached the transcription service, or a proxy answered instead - check your network, run /login to refresh a stale sign-in
Voice input is failing repeatedly and has been paused
Three capture failures in 10 seconds - fix the underlying mic issue above, wait 10 seconds, then retry
Exact strings from code.claude.com's voice dictation troubleshooting section, checked 2026-09-12.
The No speech detected case is worth a closer look, because it's also the exact complaint behind a GitHub issue filed against Claude Code: a MacBook Air user with a confirmed-working microphone and terminal mic permission got "No speech detected" on every attempt, on Claude Code 2.1.63. It got closed as a duplicate rather than fixed as an open bug. The docs' current wording, "audio reached the transcription service but no words were recognized," is more specific than what shipped back then. That tracks with what the MCP server troubleshooting guide found in a completely different feature: Claude Code's error messages keep getting more specific release over release, and 2.1.63 is a long way behind the 2.1.270 this guide was tested on.
One that isn't in the table but shows up in a different shape: nothing happens when holding Space in hold mode. Hold detection relies on your terminal sending key-repeat events, so it can't detect a held key if your OS or terminal disables key-repeat. Switch to tap mode with /voice tap to sidestep the requirement entirely - tap once to start, speak, tap again to send, no held key involved.
Headless machines, SSH boxes, and containers: voice mode literally can't work there
There's no workaround here, because this isn't really a bug. Voice dictation needs a local microphone attached to the machine running Claude Code, and it explicitly does not work in Claude Code on the web or over SSH, because the audio never has anywhere to come from.
If you're on Linux and the native audio module can't load, Claude Code falls back to arecord (ALSA) or rec (SoX) - and if a WSL install specifically has no working recorder, it's almost always because only the ALSA backend got installed: run sudo apt install sox libsox-fmt-pulse instead of plain sox, since WSLg routes audio through PulseAudio rather than a /dev/snd device. On a genuinely headless server or a CI container like this one, there's no fix - there's no microphone to find, and as of Claude Code v2.1.195 the error message says so directly instead of asking you to install SoX you already have.
When to just type instead
If you're on a remote box, in a container, or your organization's managed policy has voice mode turned off entirely, dictation isn't coming back for that session - and that's fine. Claude Code's prompt input accepts typed and dictated text identically; nothing about a guide, a plan, or a multi-file edit depends on how the words got there. If a claude: command not found error is what's actually blocking you before you ever reach /voice, that's a separate, more basic problem worth ruling out first.
Persisting your preferred mode also avoids re-running /voice every session - set it once in your settings.json:
{
"voice": {
"enabled": true,
"mode": "tap"
}
}
Honest limits
Everything in the error checklist above is Claude Code's own documented behavior as of the docs I read while writing this, checked against a live install on 2.1.270. The headless-environment test is real and reproduced on this exact build sandbox, not assumed from the docs' wording. What I can't verify from here: exact behavior on Windows-native builds, and whether your specific terminal emulator's key-repeat settings match the ones I could test. If your Claude Code version is meaningfully older or newer than 2.1.270, run claude doctor before assuming these exact strings still match what you're seeing - error text is exactly the kind of thing that drifts between releases.
FAQ
Why does Claude Code say "No speech detected" when I use /voice?
Your recording reached Anthropic's transcription service but no words were recognized in it. Speak closer to the microphone, cut background noise, and check /config to confirm your dictation language matches what you're actually speaking - a mismatched language is a common silent cause.
Is Claude Code's voice mode the same feature as the Claude app's voice mode?
No. Claude Code's /voice is CLI-only push-to-talk dictation that requires a local microphone and a Claude.ai account. The Claude app's voice mode (mobile, desktop, web) is a separate hands-free conversation feature, and Claude's own help center lists Claude Code as explicitly not compatible with it.
Why doesn't voice mode work over SSH, in a container, or on Claude Code on the web?
Voice dictation streams audio from a local microphone, and none of those environments have one attached to the process running Claude Code. On this exact build sandbox - a headless Linux container - there's no SoX, no ALSA recorder, and no /dev/snd device at all, which is precisely the condition the docs describe.
How do I fix "Microphone access is denied" in Claude Code?
Grant your terminal app microphone permission in your OS privacy settings - System Settings -> Privacy & Security -> Microphone on macOS, Settings -> Privacy & security -> Microphone on Windows - then run /voice again. If your terminal isn't even listed on macOS, reset its permission state with tccutil reset Microphone com.apple.Terminal (swap in your own terminal's bundle id) and relaunch it so a fresh prompt appears.
What do I do if none of these fixes work?
Confirm the basics first: a real microphone, a Claude.ai account (not an API key or Bedrock/Vertex/Foundry auth), and a local session rather than SSH or the web. If everything checks out and /voice still fails, it's likely version-specific - run claude doctor for a full setup check and compare your Claude Code version against the fixes this guide cites.
One feature, one command, no ambiguity left
/voice either works because the account, the microphone, and the environment all check out, or it prints one of five specific messages telling you which one doesn't - Claude Code stopped failing silently here a while ago. The only case with no fix is architectural: no local mic means no dictation, on this machine, ever. Past that, ClockedCode's own settings.json generator can set your preferred voice mode alongside the rest of your config in one pass, so you don't have to remember the /voice incantation every time you sit down.