> ## Documentation Index
> Fetch the complete documentation index at: https://openclawdoc.org/llms.txt
> Use this file to discover all available pages before exploring further.

> OpenClaw에서 voice wake trigger 목록이 gateway host에 저장되고 macOS, iOS, Android node로 어떻게 동기화되는지 설명합니다.

# 음성 깨우기

# Voice Wake (전역 Wake Words)

OpenClaw는 **wake words를 Gateway가 소유하는 단일 전역 목록**으로 취급합니다.

* **노드별 커스텀 wake word는 없습니다.**
* **어느 노드/앱 UI에서든** 목록을 수정할 수 있으며, 변경 사항은 Gateway가 저장하고 모두에게 브로드캐스트합니다.
* macOS와 iOS는 로컬 **Voice Wake enabled/disabled** 토글을 유지합니다(로컬 UX와 권한이 다름).
* Android는 현재 Voice Wake를 끄고 Voice 탭의 수동 마이크 흐름을 사용합니다.

## 저장 위치(Gateway host)

Wake words는 gateway 머신의 다음 위치에 저장됩니다.

* `~/.openclaw/settings/voicewake.json`

형식:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "triggers": ["openclaw", "claude", "computer"], "updatedAtMs": 1730000000000 }
```

## 프로토콜

### 메서드

* `voicewake.get` → `{ triggers: string[] }`
* `voicewake.set` with params `{ triggers: string[] }` → `{ triggers: string[] }`

참고:

* Triggers는 정규화됩니다(trim, 빈 항목 제거). 빈 목록이면 기본값으로 fallback합니다.
* 안전을 위해 개수/길이 제한이 적용됩니다.

### 이벤트

* `voicewake.changed` payload `{ triggers: string[] }`

수신 대상:

* 모든 WebSocket client(macOS app, WebChat 등)
* 모든 연결된 node(iOS/Android), 그리고 node connect 시 초기 “현재 상태” push

## 클라이언트 동작

### macOS app

* 전역 목록을 사용해 `VoiceWakeRuntime` trigger를 제어합니다.
* Voice Wake settings의 “Trigger words”를 수정하면 `voicewake.set`을 호출하고, 이후 브로드캐스트를 통해 다른 client와 동기화합니다.

### iOS node

* 전역 목록을 사용해 `VoiceWakeManager` trigger detection을 수행합니다.
* Settings에서 Wake Words를 수정하면(Gateway WS 경유) `voicewake.set`을 호출하고, 로컬 wake-word detection도 계속 반응성을 유지합니다.

### Android node

* 현재 Android runtime / Settings에서는 Voice Wake가 비활성화되어 있습니다.
* Android 음성은 wake-word trigger 대신 Voice 탭의 수동 마이크 캡처를 사용합니다.
