# Apps — Voice, Mobile, Desktop

## Voice & Desktop (Section 14)

Speech works on audio files: the `voice_output` tool (`tool_voice_output.go`) writes speech to a file in the workspace, and the `voice_input` tool (`tool_voice_input.go`) transcribes one, with the provider set by `voice.tts_provider` / `voice.stt_provider` (OpenAI, Gemini or Chimege). The same transcriber, registered in `cmd/gateway/main.go`, turns voice notes that arrive on a channel (Teams audio attachments, for example) into text. What stays disabled, because Windows Defender flagged it, is local microphone recording and speaker playback (`voice.go`) and desktop control (`desktop.go`).

| # | Feature | Status | Notes |
|---|---------|--------|-------|
| 14.1 | TTS (text-to-speech) | Done | `voice_output` tool, writes an audio file. Local playback (`voice.go`) disabled — Windows Defender |
| 14.2 | STT (speech-to-text) | Done | `voice_input` tool and channel voice notes. Local microphone recording (`voice.go`) disabled — Windows Defender |
| 14.3 | Desktop screenshot | Disabled | desktop.go — Windows Defender |
| 14.4 | Mouse/keyboard control | Disabled | desktop.go — Windows Defender |

---

## Mobile Apps — iOS / Android (Section 15)

OpenClaw has full native iOS and Android apps (~140 files each) that act as both companion UIs and remote execution nodes.

| # | Feature | OpenClaw | GoClaw | Status |
|---|---------|----------|-------|--------|
| 15.0 | API for a company's own mobile app | — | `app_api` channel: `POST /api/app/chat` (JSON or SSE), `GET /api/app/events` for agent-initiated messages. See [App API](../user-guide/channels/app-api.md) | Done |
| 15.1 | iOS app | SwiftUI — Screen, Voice, Settings tabs | — | **TODO** |
| 15.2 | Android app | Kotlin/Compose — gateway pairing, voice, node | — | **TODO** |
| 15.3 | Gateway pairing | QR scan or manual host/port/token | — | **TODO** |
| 15.4 | Voice Wake (wake word) | Background listening → trigger agent | — | **TODO** |
| 15.5 | Talk Mode (voice I/O) | STT → agent → TTS, continuous conversation | — | **TODO** |
| 15.6 | Camera node capability | Take photos on request from agent | — | **TODO** |
| 15.7 | Screen capture | Share/record screen for agent | — | **TODO** |
| 15.8 | SMS / Contacts / Calendar | Access on behalf of agent (Android) | — | **TODO** |
| 15.9 | Apple Watch extension | Quick voice/text from wrist | — | **TODO** |
| 15.10 | Share extension (iOS) | Share content to agent from any app | — | **TODO** |
| 15.11 | Foreground service (Android) | Keep node alive for background execution | — | **TODO** |

**GoClaw approach:** A company's own app can already reach agents through the `app_api` channel, usually through its backend ([Flutter + Django guide](../user-guide/channels/flutter-django-integration.md)). For a GoClaw app of its own, consider a cross-platform mobile app (Flutter / Go Mobile) or defer — mobile is the most complex area of OpenClaw.

---

## Desktop App — macOS Menubar (Section 16)

OpenClaw has a full macOS menubar app (~359 files, SwiftUI) that hosts the gateway and provides quick access.

| # | Feature | OpenClaw | GoClaw | Status |
|---|---------|----------|-------|--------|
| 16.1 | Menubar icon + status | NSStatusItem with status indicator | — | **TODO** |
| 16.2 | Hover HUD | Quick chat panel on hover | — | **TODO** |
| 16.3 | Web Chat panel | Embedded web view for Control UI | — | **TODO** |
| 16.4 | Voice Wake overlay | Full-screen overlay for voice | — | **TODO** |
| 16.5 | Push-to-talk | Hold key to speak | — | **TODO** |
| 16.6 | Exec approval prompts | Allow once / Always allow / Deny dialog | — | **TODO** |
| 16.7 | Node pairing approval | Approve new mobile devices | — | **TODO** |
| 16.8 | Gateway process management | Start/stop/restart gateway from menu | — | **TODO** |
| 16.9 | Sparkle auto-update | Signed update via appcast.xml | — | **TODO** |
| 16.10 | Onboarding wizard | First-run guided setup | — | **TODO** |

**GoClaw approach:** Consider systray (Go) for cross-platform tray icon, or Wails/Tauri for a desktop wrapper. GoClaw's strength is running as a headless binary — desktop app may be lower priority.

**Coverage: 0%**
