Skip to content

macOS app crashes on Voice Wake / Talk Mode when no audio input device is available (Mac mini) #3529

@jlopez994

Description

@jlopez994

Bug Report

Summary

The macOS app (Clawdbot.app) crashes with SIGABRT when enabling Voice Wake or Talk Mode on a Mac mini that has no microphone or audio input device connected.

Environment

  • App version: 2026.1.23 (build 7750)
  • macOS: 26.2 (build 25C56)
  • Hardware: Mac mini (Mac16,10 / Apple Silicon)
  • Audio devices: Output only (built-in speakers + HDMI monitor). No input devices.

Steps to Reproduce

  1. Install Clawdbot.app on a Mac mini with no microphone connected
  2. Enable Voice Wake from the menu bar → app crashes immediately
  3. Relaunch (after resetting preferences) → enable Talk Mode → same crash

Crash Details

The crash occurs in AVAudioEngine when the app attempts to install an audio tap on a node without an available input device:

Exception: EXC_CRASH (SIGABRT)
Termination: Abort trap: 6

Backtrace (Voice Wake):
  +[NSException raise:format:]
  AVAudioEngineImpl::InstallTapOnNode(...)
  -[AVAudioNode installTapOnBus:bufferSize:format:block:]
  VoiceWakeRuntime.start(with:)
  VoiceWakeRuntime.refresh(state:)
  closure #2 in AppState.init(preview:)

Backtrace (Talk Mode):
  AVAudioEngineImpl::InstallTapOnNode(...)
  -[AVAudioNode installTapOnBus:bufferSize:format:block:]
  TalkModeRuntime.startRecognition()
  TalkModeRuntime.start()
  TalkModeController.setEnabled(_:)
  closure #3 in AppState.init(preview:)

Impact

  • The crash happens during AppState.init, so the app cannot relaunch once the preference is saved — it enters a crash loop.
  • Resetting preferences via defaults delete com.clawdbot.mac is required to recover.
  • Revoking the Microphone permission via tccutil reset does not prevent the crash — the app attempts to install the tap regardless of TCC status.

Expected Behavior

The app should check for the availability of an audio input device before calling installTapOnBus:bufferSize:format:block:. If no input device is present:

  • Voice Wake and Talk Mode should be disabled / greyed out in the UI
  • Or at minimum, the installTap call should be wrapped in a do/catch to prevent a crash loop

Suggested Fix

guard AVAudioSession.sharedInstance().availableInputs?.isEmpty == false else {
    // No input device — disable voice features gracefully
    return
}
// or on macOS, check AVCaptureDevice.default(for: .audio) != nil

Crash Reports

Full .ips crash reports available on request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions