Skip to content

[Bug]: [macOS] Voice Wakeup settings toggle causes immediate crash (SIGABRT) #13808

@DyingSecret

Description

@DyingSecret

[macOS] Voice Wakeup settings toggle causes immediate crash (SIGABRT)
Environment
OpenClaw: 2026.2.9 (build 9194)
macOS: 26.2 (25C56)
Architecture: arm64 (Apple Silicon)
Bundle ID: bot.molt.mac
Bug Description
Toggling the Voice Wakeup option in the OpenClaw macOS menu bar app causes an immediate crash (SIGABRT). The app disappears from the menu bar and must be manually relaunched. This is 100% reproducible.

Steps to Reproduce
Launch OpenClaw.app (menu bar icon appears)
Click the menu bar icon → open Settings
Toggle Voice Wakeup on
App crashes instantly
Crash Analysis
Exception: EXC_CRASH (SIGABRT)
Signal: SIGABRT
Crashed Thread: 16

Root Cause
VoiceWakeSettings.restartMeter() calls MicLevelMonitor.start(onLevel:), which calls AVAudioNode.installTapOnBus:bufferSize:format:block:. This AVFAudio call throws an unhandled NSException, causing the app to abort.

Likely causes:

Audio engine not started before installing tap
Microphone permission not requested/granted before accessing audio node
Invalid audio format passed to installTapOnBus
Tap already installed on the bus (duplicate tap)
Crash Stack Trace
Thread 16 Crashed:
libsystem_kernel.dylib __pthread_kill
libsystem_c.dylib abort
libc++abi.dylib __abort_message
libc++abi.dylib demangling_terminate_handler()
libobjc.A.dylib objc_exception_throw
CoreFoundation +[NSException raise:format:]
AVFAudio AVAudioEngineImpl::InstallTapOnNode(...)
AVFAudio -[AVAudioNode installTapOnBus:bufferSize:format:block:]
OpenClaw MicLevelMonitor.start(onLevel:)
OpenClaw VoiceWakeSettings.restartMeter()
OpenClaw closure #4 in VoiceWakeSettings.body.getter
Last Exception Backtrace
CoreFoundation __exceptionPreprocess
libobjc.A.dylib objc_exception_throw
CoreFoundation -[NSException initWithCoder:]
AVFAudio AVAudioEngineImpl::InstallTapOnNode(...)
AVFAudio -[AVAudioNode installTapOnBus:bufferSize:format:block:]
OpenClaw MicLevelMonitor.start(onLevel:)
OpenClaw VoiceWakeSettings.restartMeter()
Suggested Fix
Wrap the installTapOnBus call in MicLevelMonitor.start() with a do/catch or check preconditions:

swift
// Pseudo-fix
func start(onLevel: @escaping (Float) -> Void) {
// 1. Check microphone permission first
guard AVCaptureDevice.authorizationStatus(for: .audio) == .authorized else {
// Request permission or show alert
return
}

// 2. Ensure engine is running
guard engine.isRunning else {
    try? engine.start()
    return
}

// 3. Remove existing tap before installing new one
inputNode.removeTap(onBus: 0)

// 4. Safely install tap
inputNode.installTap(onBus: 0, bufferSize: bufferSize, format: format) { buffer, time in
    // ...
}

}
Additional Context
Crash is 100% reproducible across fresh installs
5 crash reports generated in a single day from this issue
All other app features work normally
Crash occurs on both fresh install and reinstall
macOS microphone permission may not have been requested before the audio tap is installed
Crash Report
Incident ID: E31363F6-8D25-4473-ABB9-CFF74353CDE9
Full .ips file 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