docs/platforms/mac/voicewake.md
Voice Wake and push-to-talk require macOS 26 or newer. On older macOS the controls are hidden from the Voice settings page, which shows the macOS 26 requirement instead.
swabbleTriggerWords). On match it starts capture, shows the overlay with partial text, and auto-sends after silence.VoiceWakeRuntime.triggerPauseWindow = 0.55s). The overlay/chime can start on the pause even before the command begins.silenceWindow) when speech is flowing, 5.0s (triggerOnlySilenceWindow) if only the trigger was heard.captureHardStop) to prevent runaway sessions.debounceAfterSend) after a send.VoiceWakeOverlayController, with committed/volatile text coloring.VoiceSessionCoordinator.overlayDidDismiss calls VoiceWakeRuntime.refresh(state:) on every dismiss path. See Voice overlay for the session/token model..flagsChanged monitor for right Option (keyCode 61 + .option). It only observes events, never swallows them.VoicePushToTalk: starts Speech immediately, streams partials to the overlay, and calls VoiceWakeForwarder on release.NSSound-loadable file (e.g. MP3/WAV/AIFF) per event, or choose No Sound.VoiceWakeForwarder.selectedSessionOptions picks the active WebChat session key if one is set, otherwise the gateway's main session key.sessions.list and derives the delivery channel and target from the session's delivery context (falling back to its last channel/target, then to a parsed session key), defaulting to WebChat if nothing resolves.voicewake.forward category) and the run is still visible via WebChat/session logs.VoiceWakeForwarder.prefixedTranscript(_:) prepends a machine-hint line (resolved host name, falling back to "this Mac") before the transcript, shared between wake-word and push-to-talk paths.triggerVoiceEars(ttl: nil)); they drop after release.