Voice dictation: persistent "No audio detected" in agent overview and resumed sessions — tap toggle double-fires (start + stop within ~330 ms); fresh session works fine

Status Open
Reported on v2.1.226
Maintainer reply None cached
Activity 0 comments · opened Aug 10, 2026

Environment

  • Claude Code version: 2.1.226 (latest at time of writing, installed via Homebrew npm package)
  • OS: macOS 26.5.2 (build 25F84), Apple Silicon (MacBook Air, arm64)
  • Terminal: Terminal.app
  • Voice mode: /voice tap, dictation language de
  • SoX installed (/opt/homebrew/bin/rec), but the native module is used: debug log shows audio-capture-napi loaded

Problem

Voice dictation consistently fails with:

No audio detected from microphone. Check that the correct input device is selected and that Claude Code has microphone access.

The message is misleading — microphone, permission, and input level are all fine (verified below). The failure occurs:

  1. Always when triggering voice from the agent overview (multiple background agents running, voice key pressed in the overview screen).
  2. Also inside a single agent session entered from that overview, and in the long-running main session resumed via claude --continue. Restarting via /exit + claude --continue and fully quitting Terminal (Cmd+Q) did not help.
  3. Not in a freshly started claude --debug session in a new Terminal tab — there, voice works end-to-end (transcript assembled and injected).

Debug log evidence

From ~/.claude/debug/<session-id>.txt of the working fresh session, the first tap shows the suspected mechanism — the toggle fires twice, stopping the recording ~330 ms after start with an empty transcript:

21:51:57.928Z [DEBUG] [voice] toggle: starting recording
21:51:57.933Z [DEBUG] [voice] Starting recording session, connecting voice stream
21:51:57.933Z [DEBUG] [voice] startRecording called, platform=darwin
21:51:58.038Z [DEBUG] [voice_stream] Connecting to wss://api.anthropic.com/api/ws/speech_to_text/voice_stream?...
21:51:58.254Z [DEBUG] [voice] toggle: finishing recording        <-- 326 ms after start, no second tap intended
21:51:58.254Z [DEBUG] [voice] finishRecording: stopping recording, transitioning to processing
21:51:58.258Z [DEBUG] [voice] Recording stopped
21:51:58.259Z [DEBUG] [voice] Final transcript assembled (0 chars)

A recording that ends after ~330 ms with 0 chars is exactly what surfaces as "No audio detected" (hadAudioSignal: false).

The immediately following second attempt in the same session worked normally:

21:51:58.770Z [DEBUG] [voice] toggle: starting recording
...
21:51:59.690Z [DEBUG] [voice] onReady: flushing 75 buffered chunks (25576 bytes) as 1 coalesced frame(s)
21:52:01.149Z [DEBUG] [voice] onTranscript: isFinal=false (5 chars)
...
21:52:02.540Z [DEBUG] [voice] Accumulated final transcript (37 chars)
21:52:06.410Z [DEBUG] [voice] Final transcript assembled (37 chars)
21:52:06.411Z [DEBUG] [voice] Injecting transcript (37 chars)

Ruled out

  • Microphone permission: granted for Terminal.app (System Settings shows it enabled; recordings from the same shell succeed).
  • Recording chain: rec -q /tmp/t.wav trim 0 3 while speaking, from the same Terminal, captures a healthy signal (sox … stat: Maximum amplitude 0.569, RMS 0.105).
  • Input device / level: system default input is the built-in MacBook Air microphone, input volume 100. (Virtual devices from Teams/Zoom exist but are not the default.)
  • Stale process: full Terminal quit (Cmd+Q) and restart did not change the behavior in the affected session.

Steps to reproduce

  1. Run a session with several background agents and open the agent overview.
  2. Enable /voice tap.
  3. Tap the voice key once in the overview (or in an agent session entered from the overview) and speak.
  4. Error "No audio detected from microphone" appears; debug log shows the recording was stopped a few hundred ms after start without user input.

Expected

A single tap starts recording and keeps recording until the user taps again; voice works the same in the agent overview and in resumed sessions as it does in a fresh session.

View original on GitHub ↗