Claude Code Voice Not Working: Fixes by Symptom, and the Version Each Bug Was Fixed In
Almost every /voice failure falls into one of five buckets: you are signed in a way that does not include the feature, your terminal never got microphone permission, you are somewhere without a local microphone, your Linux or WSL audio backend is missing a piece, or you are running a build with a bug that a later release already fixed.
Start with the last one, because it is the cheapest to rule out. Voice dictation shipped in early March 2026 and has been touched by 32 releases since, with 56 separate entries in the public changelog. If your install is more than a couple of weeks old, update before you debug anything:
claude update
claude doctor
Everything below was checked at the source on 27 August 2026: Anthropic's voice dictation documentation, the public changelog mapped release by release, publish dates from the npm registry, and dated reports on Anthropic's issue tracker. The latest version at that moment was 2.1.247, published 26 August 2026.
One thing to clear up first, because it sends people down the wrong path. Anthropic has two different features with "voice" in the name. Voice mode is the two-way spoken conversation in the Claude apps, and its own help page says it is not compatible with Claude Code. /voice in Claude Code is dictation only: you speak, text lands in the prompt, Claude answers in text. Most of the "fix Claude voice" videos in search results are about the first one and will not help you at all.
Find your symptom
| What you see | Most likely cause | Section |
|---|---|---|
/voice returns an error or is not in the command menu | Signed in with an API key, Bedrock, Google Cloud's Agent Platform or Microsoft Foundry, or an org policy, or a build older than 4 March 2026 | 1 |
Microphone access is denied, or your terminal is not even listed in system settings | Terminal has no microphone permission, or it is a wrapper app with no microphone entitlement | 2 |
| Holding space types spaces and nothing records | Voice is off, or your terminal does not send key-repeat events | 3 |
Level meter moves, then No audio detected or No speech detected | Wrong input device, wrong dictation language, or a known capture bug | 4 |
Voice mode requires SoX, or nothing records in WSL or a container | Missing audio backend, or no capture device on the host | 5 |
| Transcript is garbled, or comes out in the wrong language | language is unset or unsupported, so dictation falls back to English | 6 |
| Worked yesterday, dead today | An update, a sleep and wake cycle, or an audio device change | 7 |
| Your third-party dictation app stopped typing into Claude Code | The terminal UI and simulated keystrokes | 9 |
1. /voice is missing or refuses to turn on
/voice is not available to every account, and Claude Code hides commands that your setup cannot use rather than showing them greyed out (changelog 2.1.84, 25 March 2026). So "the command does not exist" and "the command is not for you" look identical.
Voice dictation requires a Claude.ai account. It is unavailable when Claude Code is pointed at an Anthropic API key directly, at Amazon Bedrock, at Google Cloud's Agent Platform or at Microsoft Foundry. That is not a bug and there is no flag to flip. If you get Voice mode requires a Claude.ai account, run /login and sign in with the Claude.ai account, not the API credential.
If you see Voice mode is disabled by your organization's policy, an administrator turned it off for the whole org. Before June 2026 this case showed a generic "not available" message instead, which is why older forum answers tell people to reinstall; the specific wording arrived in 2.1.191 on 24 June 2026.
Version floor. The first changelog entry mentioning voice is 2.1.69, published on 4 March 2026. Nothing older has the feature.
If you are reading an old thread that says /voice returns Unknown skill: voice: that was the rollout, not your machine. Through March 2026 the command was gated behind a feature flag, so people on the right version and the right plan still got the error, and the startup banner cheerfully told them to run a command that did not answer (#33580, 12 March 2026; #33914, 13 March 2026). It is not a thing you can fix by editing settings, and it is not a thing you should still be hitting today.
2. Microphone permission, including the terminal that is not in the list
/voice runs a microphone check the first time you enable it. On macOS that is the moment your terminal is supposed to ask for permission.
macOS: System Settings, then Privacy & Security, then Microphone, then switch on your terminal app and run /voice again.
Windows: Settings, then Privacy & security, then Microphone, then turn on microphone access for desktop apps and run /voice again.
When your terminal is not in the macOS list at all, there is no switch to turn on, and this is the fix Anthropic documents: reset the permission state so the next run triggers a fresh prompt.
tccutil reset Microphone com.apple.Terminal # built-in Terminal
tccutil reset Microphone com.googlecode.iterm2 # iTerm2
osascript -e 'id of app "Ghostty"' # any other terminal: get its bundle id
Then quit the terminal with Cmd+Q, not just close the window, because macOS will not re-prompt a process that is already running. Reopen it and run /voice.
One warning worth repeating from the docs: running tccutil reset Microphone without a bundle id revokes microphone access from every app on the machine, Zoom and Slack included. Do not do that during a call.
The trap nobody writes about. If you run Claude Code inside a terminal wrapper or a multiplexer app rather than a normal terminal, the wrapper itself may never have declared the microphone entitlement, in which case it does not appear in the privacy list and cannot be added. Two examples are on the record: a report against the Solo terminal (soloterm/solo#114, 30 March 2026) notes that macOS offers no plus button for unsigned or non-entitled apps, and one against Superset (superset-sh/superset#5026, 1 June 2026) reports neither mode working. The workaround is the same in both: run Claude Code in Terminal.app, iTerm2 or another signed terminal and see whether voice comes back. If it does, the problem was never Claude Code.
3. Holding space does nothing
Hold mode detects a held key by watching for rapid key-repeat events from your terminal. That mechanism has two failure modes, and you can tell them apart by watching the input line while you hold.
Spaces keep piling up. Voice is off. Run /voice hold.
One or two spaces appear and then nothing. Voice is on, but key-repeat is not reaching Claude Code. Some terminals do not send repeat events, and key repeat can be switched off at the OS level. Do not fight it, switch modes:
/voice tap
Tap mode toggles: tap once to start, speak, tap again to stop. It has no warmup and does not depend on key repeat. Note that the first tap only starts recording when the prompt is empty, so if you have typed something already, tapping space just types a space.
Losing your first words is the same mechanism seen from the other side. Hold mode has a short warmup, the footer says keep holding… before listening…, and the complaint has been public since the launch week: one developer on Hacker News measured it at roughly 500 ms and said the opening words got cut (13 March 2026). Two ways out. Use tap mode, or rebind the key to a modifier combination, which starts recording on the first keypress with no warmup at all:
{
"bindings": [
{ "context": "Chat", "bindings": { "meta+k": "voice:pushToTalk" } }
]
}
That goes in ~/.claude/keybindings.json. Avoid binding a bare letter in hold mode, because the letter types into your prompt during warmup. Caps Lock cannot be bound at all: terminals do not deliver it, and since 2.1.122 you at least get an error saying so instead of silence.
In the VS Code extension, space may simply not be the trigger. The chat input is a webview, and there is an open report that space does nothing there while clicking the microphone icon works normally (#85309, 9 August 2026). Same report: typing /voice as a chat message in the extension answers /voice isn't available in this environment. Click the icon.
4. It records and nothing comes back
Three different messages, three different causes. Read the exact wording before you change anything.
No audio detected from microphone. Recording started and captured silence. Check that the right device is the system default and that its level is not near zero: Settings, System, Sound, Input on Windows; System Settings, Sound, Input on macOS. A common cause on macOS is that the default input changed after you started the session, which is covered in section 7.
Voice connection failed. The recording never reached the transcription service. Check the network. Note that this message used to be misleading: before 2.1.200, published 3 July 2026, a silent microphone reported a connection failure, sending people to debug a network that was fine.
Voice stream error: WebSocket upgrade rejected with HTTP <status>. A server refused the connection, so it is not an outage. A status in the 400 range usually means a stale sign-in or a proxy or bot-protection service answering in place of the transcription service. Run /login, and look at any VPN or corporate proxy on the path.
No speech detected. Audio arrived, no words were recognised. Speak closer, cut background noise, and check that your dictation language matches what you are speaking.
That last one has a stubborn history. A report opened on 25 March 2026 with a full reproduction, working microphone, permissions granted, correct default device, both Terminal.app and a JetBrains terminal, is still open and picked up several confirmations on macOS within days. If you have worked through everything on this page and you still get No speech detected while the level meter moves, you are probably in that report rather than in a configuration mistake. Add your version and platform to it instead of reinstalling for the fourth time.
Repeated failures pause dictation. Three capture failures inside 10 seconds and Claude Code stops trying until 10 seconds have passed since the first one: Voice input is failing repeatedly and has been paused. That is a symptom, not the disease. Fix the underlying cause and trigger voice again.
5. Linux, WSL, containers and headless hosts
Recording uses a native module. When it cannot load, Claude Code falls back to arecord from ALSA utils or rec from SoX, and if neither is there, /voice prints the install command for your package manager.
Voice mode requires SoX for audio recording. Install it, for example sudo apt-get install sox.
Voice mode requires a microphone, but SoX could not open an audio capture device. SoX is installed and the host has no capture device: a headless server, or a container with no audio passed in. No amount of installing helps. Before 2.1.195 (26 June 2026) this case wrongly asked you to install SoX that was already there, which is why so many Linux threads end in confusion.
WSL: Voice mode could not find a working audio recorder in WSL. WSLg routes audio through PulseAudio, and plain sox pulls the ALSA backend, which has no /dev/snd to record from.
sudo apt install sox libsox-fmt-pulse
You also need WSLg itself, which comes with WSL2 installed from the Microsoft Store. On WSL1 there is no path to make this work; run Claude Code in native Windows.
Transcripts that come back empty after a few dictations on Linux may be recorder processes piling up. One open report describes failed and retried captures leaving rec processes alive, which keep PulseAudio client connections open until the audio stack degrades and transcription returns nothing (#83905, 4 August 2026, in a Debian devcontainer over WSLg). Worth a look:
ps -eo pid,ppid,etime,cmd | grep '[r]ec -q'
If a stack of them is sitting there minutes after you stopped talking, kill them and restart the session.
6. The transcript is in the wrong language
Dictation uses the same language setting that controls Claude's response language, and if that setting is empty it defaults to English. Speak German into an English decoder and you do not get an error, you get plausible nonsense.
{ "language": "de" }
Set it in /config or in your settings file, by BCP 47 code or by language name. Twenty languages are supported: Czech, Danish, Dutch, English, French, German, Greek, Hindi, Indonesian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish, Ukrainian. Anything else falls back to English with a warning when you enable voice.
In the VS Code extension, an empty language falls back to VS Code's own accessibility.voice.speechLanguage before English.
Two things this does not fix. Auto-submit in tap mode counts words, and for Japanese, Chinese and Thai that only started working in 2.1.195. And mixing languages in one sentence has an open report behind it: English technical terms inside another language get translated or dropped, because the decoder is set to one language at a time (#83881, 4 August 2026).
7. It worked yesterday
Three causes, in the order worth checking.
You updated. Match your symptom against the table below. Every date is the npm publish date for that version.
| Symptom | Broken in | Fixed in | Fix published |
|---|---|---|---|
Stuck on listening… forever, then Voice connection failed after you stop | 2.1.229 to 2.1.231 | 2.1.232 | 13 Aug 2026 |
Voice connection failed when the microphone actually captured silence | before 2.1.200 | 2.1.200 | 3 Jul 2026 |
| Endless retry loop when the microphone keeps failing | before 2.1.202 | 2.1.202 | 6 Jul 2026 |
| Linux told to install SoX when SoX was already installed | before 2.1.195 | 2.1.195 | 26 Jun 2026 |
| macOS captured silence in long sessions after the default input device changed | before 2.1.195 | 2.1.195 | 26 Jun 2026 |
| Generic "not available" instead of naming an org policy | before 2.1.191 | 2.1.191 | 24 Jun 2026 |
Voice needed /login again after toggling /voice | before 2.1.166 | 2.1.166 | 5 Jun 2026 |
| Connection failed when the project folder or branch name had non-ASCII characters | before 2.1.160 | 2.1.160 | 1 Jun 2026 |
| Push-to-talk dead in the agent view reply pane | before 2.1.145 | 2.1.145 | 19 May 2026 |
Custom voice:pushToTalk binding silently ignored | before 2.1.141 | 2.1.141 | 13 May 2026 |
| Dozens of stray spaces when re-holding the key during processing | before 2.1.98 | 2.1.98 | 9 Apr 2026 |
Windows: WebSocket upgrade rejected with HTTP 101 | before 2.1.89 | 2.1.89 | 31 Mar 2026 |
| macOS Apple Silicon never asked for microphone permission | before 2.1.89 | 2.1.89 | 31 Mar 2026 |
Your Mac slept. There is an open report that voice dies permanently after a sleep and wake cycle, that /voice off and on does not help, and that the only cure is fully restarting Claude Code; the reporter traced it to the native audio handle being cached for the lifetime of the process and never re-probed after macOS tears down the audio layer (#89635, 25 August 2026, on 2.1.245). Until it is fixed, treat "closed the lid" as "restart the CLI".
Your audio devices changed. Same shape of problem, different trigger. Another open report says the input device is resolved once and never re-acquired, so switching the system default mid-session keeps recording from the old device, and connecting or disconnecting AirPods can wedge capture entirely until you restart (#88890, 22 August 2026, on 2.1.239). If you live in Bluetooth headphones, this is the one you are hitting.
8. Where it will never work, no matter what you change
Save yourself the evening. Voice dictation streams audio to Anthropic's servers, and the microphone has to be on the machine running the process, so it is unavailable in:
- SSH sessions and Claude Code on the web. The microphone is on your laptop, the process is not.
- VS Code Remote, which means Remote SSH, Dev Containers and Codespaces, for the same reason.
- Any setup authenticated with an API key, Bedrock, Google Cloud's Agent Platform or Microsoft Foundry. If your employer put Claude Code behind one of those for compliance,
/voiceis not an argument you can win. - WSL1.
- Background and agent-dispatch sessions, at least on macOS. One report with CoreAudio logs shows dictation failing 100 percent of the time from the
claude agentsdispatch line withNo audio detected from microphone, because the process that opens the microphone is reparented to launchd and macOS cannot resolve a responsible process to grant permission to (#86217, 12 August 2026).
For all of these the answer is the same: dictate into the terminal from the operating system, with a tool that types into whatever window has focus. That is the "when the fix does not help" section below.
9. Your dictation app stopped typing into Claude Code
This is a different failure with the same feeling, and it catches people who never used /voice at all. Claude Code reads the keyboard in raw mode, and dictation tools insert text by simulating keystrokes or a paste. Those two things have collided more than once.
The big one was a regression in 2.1.83 (25 March 2026): simulated paste stopped landing in the prompt while manual paste still worked, confirmed on both Windows and macOS by more than a dozen people in one thread, with several dictation tools affected (#38620). Reporters found it working again around 2.1.116 to 2.1.119 in late April, some only after a reinstall and a machine restart. On Linux there was a parallel case where spaces from virtual keyboards were swallowed, so dictated text arrived as HelloWorldTest (#43429, 4 April 2026).
What to try today, in order:
- Update Claude Code, then restart the machine. Two people in that thread only got their dictation back after a full reinstall and reboot, not from the update alone.
- Use a paste-based insertion method rather than simulated typing. If your tool exposes the choice, take it. VoiceInk, for instance, documents switching Paste Method from Default to AppleScript and raising Restore Delay when text does not land in an app.
- Try a different paste shortcut. Terminals disagree about this, and Wispr Flow's help pages say it falls back to Shift+Insert in Windows IDE terminals when Ctrl+V is unreliable.
- Send long dictations in one piece and read them before you press Enter. Wispr Flow splits long dictations into chunks specifically so a full prompt arrives cleanly in Claude Code and Codex, and documents that this chunking is Mac only, and that you should let one dictation finish pasting before starting the next. There is also an open report describing a roughly 4,000 character dictation arriving in the terminal UI with the chunks reassembled out of order, split mid-word, and submitted without any warning (#82339, 29 July 2026). Long monologues into a terminal are worth proofreading either way.
- Expect the paste to collapse. Anything past a few lines shows as
[Pasted text #1 +N lines]instead of your words, which looks like a failure and is not. Press Ctrl+G to open the prompt in your editor if you want to read it before sending.
When the fix does not help
At some point the honest answer stops being a setting. /voice is a good free feature and it is welded to one window: it works in the Claude Code prompt and nowhere else, it needs a Claude.ai login, it disappears in exactly the deployments large companies use, and it depends on your terminal forwarding key-repeat events. Meanwhile a terminal running in raw mode is a hostile target for anything that types text into it from outside. Both halves of that are on this page.
The way out of both is a dictation layer that lives in the operating system: you hold one hotkey, speak, and finished text lands in whatever has focus, whether that is Claude Code, a git commit message, a browser tab or Slack. It does not care which app you are in, so there is nothing to configure per tool and nothing to remember.
Wispr Flow is the one we point developers at first, and the reason is narrow: it is the only tool we found whose own documentation describes handling this exact case, splitting long dictations into chunks so that a several-thousand-word prompt arrives in Claude Code intact instead of truncated. Day to day it does the unglamorous thing well: filler words gone, punctuation placed, the sentence you restarted rendered as the sentence you meant, in the terminal and in the chat panel alike. Free tier is 2,000 words a week on desktop, Pro is $15 a month or $12 a month billed yearly. Fine print, because it disqualifies some readers outright: it is a cloud service, Windows support is x64 only so ARM laptops are out, virtual machines and remote desktop are not supported, and there is no Linux build. Prices checked 27 August 2026.
If the audio cannot leave your machine, or you simply want to pay once. VoiceInk runs local models on Apple Silicon Macs, is open source, and costs $29, $49 or $69 one time depending on how many Macs, with lifetime updates. It is the shortest paid route on a Mac to dictation that never sends audio anywhere, and $29 once against $144 a year for a subscription pays for itself in about ten weeks. We go deeper on it in our Mac roundup.
On Linux, where Wispr Flow does not go, Voicy ships .deb, .rpm and AppImage builds and writes into terminals and editors. Recognition runs through Groq's infrastructure, so audio does leave your machine; the vendor's policy is deletion after processing and no training, which is a policy and not the same thing as local processing. 30 free minutes, then $8.49 a month or $260 for a lifetime licence.
And the free options deserve a straight answer rather than a footnote. Handy is free, MIT licensed, runs on Windows, macOS and Linux, and transcribes entirely on your own machine; for a developer who is fine picking a model size, it is the strongest zero-cost choice on this page, and one developer on Hacker News described using it happily for a long stretch before Claude Code had voice at all. Superwhisper added a permanent free tier on 26 August 2026 that covers dictation in any app with unlimited use of the Whisper models. And if you spend your day inside VS Code rather than a terminal, the built-in dictation there recognises speech on your device, costs nothing, and comes from the same vendor as the editor.
If you came here to fix a broken feature and are now wondering what to install instead, our wider guide compares the built-in options across Claude Code, Cursor, VS Code and the terminal, including what stays on your machine.
Frequently asked questions
Why is /voice not showing up in Claude Code?
Almost always your authentication. Voice dictation needs a Claude.ai account and is unavailable when Claude Code uses an Anthropic API key directly, Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry, and Claude Code hides commands your setup cannot use rather than showing them. An organisation policy can also switch it off, and builds older than 2.1.69 from 4 March 2026 do not have the feature at all.
Claude Code says "No speech detected" but my microphone works everywhere else. What now?
Check that the correct device is your system default and that your dictation language matches what you are speaking, since an unset language defaults to English. If both are right, you may be in a long-standing open report on macOS filed on 25 March 2026 with a full reproduction and confirmations from other users; adding your version and platform there is more useful than another reinstall.
Does Claude Code voice dictation work over SSH?
No. It needs a microphone on the machine running the process, so SSH sessions, Claude Code on the web, and VS Code Remote including Dev Containers and Codespaces are all out. A system-wide dictation app on your local machine types into the terminal window instead, which works regardless of where the session is running.
Voice broke after an update. Should I downgrade?
Almost never. Pinning to an old release means losing every later fix, and the one time the community tried it at scale, in March 2026, it did not work for everyone anyway. Compare your symptom against the version table above: several of the most-reported problems were fixed between June and August 2026, so the fix is usually forward, not back.
My dictation app types into every other program but not into Claude Code.
Claude Code reads the keyboard in raw mode, and simulated keystrokes and pastes have broken against it before, notably in 2.1.83 in March 2026. Update, restart the machine, and if your tool lets you choose how it inserts text, pick the paste-based method over simulated typing. Long dictations that arrive scrambled or collapsed into a [Pasted text] placeholder are a separate quirk of the terminal UI, not a failure of your microphone.
Written from Anthropic's voice dictation documentation, the Claude Code changelog mapped release by release (56 voice entries across 32 releases), npm publish dates for every version named here, and dated reports on Anthropic's public issue tracker. We did not reproduce these bugs on our own machines and do not claim to have; each one is attributed to the report or changelog entry it comes from. Reports on a public tracker describe what users observed, which is not the same as a confirmed defect. This page ages quickly, so we recheck it quarterly.
Comments
No comments yet. Ask a question or share what worked for you.