[BUG] Dictation (record button) does nothing when the default audio output device cannot start

Status Open
Reported on v2.1.284
Maintainer reply None cached
Activity 0 comments · opened Oct 6, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Summary

In Claude desktop for macOS, the dictation/record button silently does nothing when
the default audio output device fails to start. The microphone permission is
granted and the microphone works in other apps. The recorder never captures audio
because its Web Audio graph is clocked by the output device.

Environment

  • Claude desktop 2.16120.0 (a staged update, 2.19675.0, had not been applied yet, was later applied and the bug persisted.)
  • Claude Code 2.1.284 (bundled)
  • macOS 26.6.2, MacBookPro18,2
  • Default input: MacBook Pro Microphone (works in other apps)
  • Default output: MacBook Pro Speakers (hardware fault; cannot start)

Steps to reproduce

  1. Have a default output device that cannot start (here: failed built-in speakers).
  2. Click the record button in a Code session.

Expected

Recording starts. A broken output device should not matter for capturing mic audio.

Actual

Nothing happens. No error is shown in the UI.

Evidence

  • TCC allowed the request: AUTHREQ_RESULT ... service=kTCCServiceMicrophone, authValue=2.
  • App log: Media permission probe { result: 'granted', captureKind: 'audio', ... }.
  • coreaudiod: built-in mic _StartIO ... succeeded; built-in speaker fails every time:

IOA2UCDevice::StartIO: got an error when telling the hardware to start, Error: 0xE00002E9

  • Any app that plays sound also fails on this Mac (afplay → AudioQueueStart failed ('what')).
  • claude.ai-web.log at each attempt:

The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead.
then The AudioContext encountered an error from the audio device or the WebAudio renderer.

Diagnosis

Test page in the app's own browser pane (Web Audio, ScriptProcessorNode fed by a
ConstantSourceNode, run for 2 s):

| AudioContext option | state | onaudioprocess callbacks |
|---|---|---|
| default output (broken speaker) | suspended | 0 |
| { sinkId: { type: 'none' } } | running | 23 |

The recorder's audio graph is clocked by the output sink. When the sink cannot
start, the graph never runs and no mic samples are delivered.

Suggested fix

Do not depend on an output device to capture mic audio. Use MediaRecorder, or an
AudioWorkletNode in a context created with sinkId: { type: 'none' }. Also show
an error in the UI when recording cannot start.

Related

  • #65471 (closed as stale, never diagnosed): macOS desktop, dictation "captures audio but never

transcribes". It shows the same burst of ~10 kTCCServiceMicrophone requests in ~100 ms, and no
output-device check was recorded. It may share this root cause.

  • No existing issue found that names the output device, AudioContext or sinkId as the cause.

Workaround

Select a working output device (headphones, AirPods, a virtual device) in
System Settings → Sound → Output.

What Should Happen?

Recording starts. A broken output device should not matter for capturing mic audio.

Error Messages/Logs

## Evidence
- TCC allowed the request: `AUTHREQ_RESULT ... service=kTCCServiceMicrophone, authValue=2`.
- App log: `Media permission probe { result: 'granted', captureKind: 'audio', ... }`.
- `coreaudiod`: built-in mic `_StartIO ... succeeded`; built-in speaker fails every time:
  `IOA2UCDevice::StartIO: got an error when telling the hardware to start, Error: 0xE00002E9`
- Any app that plays sound also fails on this Mac (`afplay` → `AudioQueueStart failed ('what')`).
- `claude.ai-web.log` at each attempt:
  `The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead.`
  then `The AudioContext encountered an error from the audio device or the WebAudio renderer.`

Steps to Reproduce

Steps to reproduce

  1. Have a default output device that cannot start (here: failed built-in speakers).
  2. Click the record button in a Code session.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.284

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

_No response_

View original on GitHub ↗