Summary
Voice/dictation stops capturing audio mid-session after the audio input device changes (e.g. connecting or disconnecting Bluetooth headphones like AirPods). Claude Code surfaces an error — "No audio detected… Check that the correct input device is selected…" — but provides no in-session way to re-select or re-bind the input device. The only fix is fully quitting and relaunching the terminal (⌘Q, not window-close). A newly launched terminal works immediately; the already-running one stays broken.
Environment
- Claude Code: 2.1.218
- macOS: 26.5.1 (build 25F80)
- Terminal: Apple Terminal (
TERM_PROGRAM=Apple_Terminal)
- Voice mode:
voice.enabled: true, voice.mode: hold
- Microphone permission: granted to Terminal (present + authorized in the TCC microphone table)
Reproduction
- Launch the terminal + Claude Code, use voice — works.
- Mid-session, change the default audio input device — e.g. connect Bluetooth AirPods (or disconnect them / plug/unplug wired headphones).
- Try voice in the same (already-running) session → recording captures nothing and Claude Code shows: "No audio detected… Check that the correct input device is selected…." Settings are unchanged and mic permission is unchanged — but there is no way in the app to actually re-select/re-bind the input device it is pointing at.
- Launch a new terminal window/process and try voice there → works (it may prompt for mic access on first use, which is expected for a fresh process).
- Back in the original session, only ⌘Q + relaunch restores voice. Toggling
/voice off/on does not.
Likely root cause
The "No audio detected — check the input device" error is the tell: the audio input device binding is established once, when the process starts. When the default input device changes underneath a running process (a CoreAudio device change from Bluetooth connect/disconnect, headphone plug/unplug, etc.), the capture pipeline keeps reading from the now-stale device and gets no audio. The app correctly detects the silence and even advises checking the input device — but exposes no in-session control to switch/re-bind it, so only a full process restart recovers it.
Expected behavior
When "No audio detected" fires (or when the audio input device changes mid-session), Claude Code should re-bind to the current default input device — or offer an in-session way to select/re-bind the input device — instead of requiring a full terminal restart. The error already points the user at the input device; there should be a way to act on it without quitting.
Workarounds (current)
- ⌘Q (full quit, not window-close) + relaunch, then
/voice.
- Connect the intended mic (AirPods/Bluetooth) before launching the terminal, and avoid changing audio input devices during a session.
Summary
Voice/dictation stops capturing audio mid-session after the audio input device changes (e.g. connecting or disconnecting Bluetooth headphones like AirPods). Claude Code surfaces an error — "No audio detected… Check that the correct input device is selected…" — but provides no in-session way to re-select or re-bind the input device. The only fix is fully quitting and relaunching the terminal (⌘Q, not window-close). A newly launched terminal works immediately; the already-running one stays broken.
Environment
TERM_PROGRAM=Apple_Terminal)voice.enabled: true,voice.mode: holdReproduction
/voiceoff/on does not.Likely root cause
The "No audio detected — check the input device" error is the tell: the audio input device binding is established once, when the process starts. When the default input device changes underneath a running process (a CoreAudio device change from Bluetooth connect/disconnect, headphone plug/unplug, etc.), the capture pipeline keeps reading from the now-stale device and gets no audio. The app correctly detects the silence and even advises checking the input device — but exposes no in-session control to switch/re-bind it, so only a full process restart recovers it.
Expected behavior
When "No audio detected" fires (or when the audio input device changes mid-session), Claude Code should re-bind to the current default input device — or offer an in-session way to select/re-bind the input device — instead of requiring a full terminal restart. The error already points the user at the input device; there should be a way to act on it without quitting.
Workarounds (current)
/voice.