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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions