Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
De Android-app is nog niet openbaar uitgebracht. De broncode is beschikbaar in de OpenClaw-repository onder
apps/android. Je kunt deze zelf bouwen met Java 17 en de Android SDK (./gradlew :app:assemblePlayDebug). Zie apps/android/README.md voor buildinstructies.Ondersteuningssnapshot
- Rol: begeleidende Node-app (Android host de Gateway niet).
- Gateway vereist: ja (voer deze uit op macOS, Linux of Windows via WSL2).
- Installatie: Aan de slag + Koppelen.
- Gateway: Runbook + Configuratie.
- Protocollen: Gateway-protocol (Nodes + control plane).
Systeembeheer
Systeembeheer (launchd/systemd) bevindt zich op de Gateway-host. Zie Gateway.Verbindingsrunbook
Android-Node-app ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway Android maakt rechtstreeks verbinding met de Gateway-WebSocket en gebruikt apparaatkoppeling (role: node).
Voor Tailscale of openbare hosts vereist Android een beveiligd endpoint:
- Voorkeur: Tailscale Serve / Funnel met
https://<magicdns>/wss://<magicdns> - Ook ondersteund: elke andere
wss://Gateway-URL met een echt TLS-endpoint - Cleartext
ws://blijft ondersteund op privé-LAN-adressen /.local-hosts, pluslocalhost,127.0.0.1en de Android-emulatorbrug (10.0.2.2)
Vereisten
- Je kunt de Gateway uitvoeren op de “master”-machine.
- Android-apparaat/emulator kan de Gateway-WebSocket bereiken:
- Zelfde LAN met mDNS/NSD, of
- Zelfde Tailscale-tailnet met Wide-Area Bonjour / unicast DNS-SD (zie hieronder), of
- Handmatige Gateway-host/poort (fallback)
- Mobiele koppeling via tailnet/openbaar gebruikt geen ruwe tailnet-IP-
ws://-endpoints. Gebruik in plaats daarvan Tailscale Serve of een anderewss://-URL. - Je kunt de CLI (
openclaw) uitvoeren op de Gateway-machine (of via SSH).
1) Start de Gateway
listening on ws://0.0.0.0:18789
wss://- / https://-endpoint. Een eenvoudige gateway.bind: "tailnet"-configuratie is niet genoeg voor eerste externe Android-koppeling, tenzij je TLS ook afzonderlijk termineert.
2) Controleer discovery (optioneel)
Vanaf de Gateway-machine:local. plus het geconfigureerde wide-area domein in één stap en gebruikt het opgeloste service-endpoint in plaats van alleen TXT-hints.
Tailnet-discovery (Wenen ⇄ Londen) via unicast DNS-SD
Android NSD/mDNS-discovery gaat niet over netwerkgrenzen heen. Als je Android-Node en de Gateway zich op verschillende netwerken bevinden maar verbonden zijn via Tailscale, gebruik dan in plaats daarvan Wide-Area Bonjour / unicast DNS-SD. Discovery alleen is niet voldoende voor Android-koppeling via tailnet/openbaar. De gevonden route heeft nog steeds een beveiligd endpoint nodig (wss:// of Tailscale Serve):
- Stel een DNS-SD-zone in (voorbeeld
openclaw.internal.) op de Gateway-host en publiceer_openclaw-gw._tcp-records. - Configureer Tailscale split DNS voor je gekozen domein dat naar die DNS-server wijst.
3) Verbinden vanaf Android
In de Android-app:- De app houdt de Gateway-verbinding actief via een foreground service (blijvende melding).
- Open het tabblad Verbinden.
- Gebruik de modus Setupcode of Handmatig.
- Als discovery is geblokkeerd, gebruik dan handmatige host/poort in Geavanceerde bediening. Voor privé-LAN-hosts werkt
ws://nog steeds. Voor Tailscale/openbare hosts schakel je TLS in en gebruik je eenwss://- / Tailscale Serve-endpoint.
- Handmatig endpoint (indien ingeschakeld), anders
- De laatst gevonden Gateway (best-effort).
Aanwezigheidsalive-beacons
Nadat de geauthenticeerde Node-sessie verbinding maakt, en wanneer de app naar de achtergrond gaat terwijl de foreground service nog steeds verbonden is, roept Androidnode.event aan met event: "node.presence.alive". De Gateway registreert dit als lastSeenAtMs/lastSeenReason op de gekoppelde Node-/apparaatmetadata, maar pas nadat de geauthenticeerde Node-apparaatidentiteit bekend is.
De app telt de beacon alleen als succesvol geregistreerd wanneer het Gateway-antwoord handled: true bevat. Oudere Gateways kunnen node.event bevestigen met { "ok": true }; dat antwoord is compatibel maar telt niet als duurzame last-seen-update.
4) Koppeling goedkeuren (CLI)
Op de Gateway-machine:role: node-koppeling zonder aangevraagde scopes. Operator-/browserkoppeling en elke wijziging in rol, scope, metadata of publieke sleutel vereist nog steeds handmatige goedkeuring.
5) Controleer of de Node is verbonden
-
Via Nodes-status:
-
Via Gateway:
6) Chat + geschiedenis
Het Android-tabblad Chat ondersteunt sessieselectie (standaardmain, plus andere bestaande sessies):
- Geschiedenis:
chat.history(weergavegenormaliseerd; inline directivetags worden uit zichtbare tekst gestript, plaintext XML-payloads voor toolcalls (waaronder<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>en afgekapt toolcall-blokken) en gelekte ASCII-/full-width modelcontroletokens worden gestript, pure silent-token-assistentrijen zoals exactNO_REPLY/no_replyworden weggelaten, en te grote rijen kunnen worden vervangen door placeholders) - Verzenden:
chat.send - Pushupdates (best-effort):
chat.subscribe→event:"chat"
7) Canvas + camera
Gateway Canvas Host (aanbevolen voor webinhoud)
Als je wilt dat de Node echte HTML/CSS/JS toont die de agent op schijf kan bewerken, wijs de Node dan naar de Gateway canvas host.Nodes laden canvas vanaf de Gateway-HTTP-server (dezelfde poort als
gateway.port, standaard 18789).-
Maak
~/.openclaw/workspace/canvas/index.htmlaan op de Gateway-host. - Navigeer de Node ernaartoe (LAN):
.local, bijvoorbeeld http://<gateway-magicdns>:18789/__openclaw__/canvas/.
Deze server injecteert een live-reload-client in HTML en herlaadt bij bestandswijzigingen.
De A2UI-host bevindt zich op http://<gateway-host>:18789/__openclaw__/a2ui/.
Canvas-commando’s (alleen foreground):
canvas.eval,canvas.snapshot,canvas.navigate(gebruik{"url":""}of{"url":"/"}om terug te keren naar de standaard scaffold).canvas.snapshotretourneert{ format, base64 }(standaardformat="jpeg").- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONLlegacy alias)
camera.snap(jpg)camera.clip(mp4)
8) Spraak + uitgebreid Android-commandosurface
- Spraaktabblad: Android heeft twee expliciete opnamemodi. Mic is een handmatige sessie op het spraaktabblad die elke pauze als chatbeurt verzendt en stopt wanneer de app de foreground verlaat of de gebruiker het spraaktabblad verlaat. Talk is continue Talk Mode en blijft luisteren totdat deze wordt uitgeschakeld of de Node de verbinding verbreekt.
- Talk Mode promoveert de bestaande foreground service van
dataSyncnaardataSync|microphonevoordat opname begint, en degradeert deze weer wanneer Talk Mode stopt. Android 14+ vereist deFOREGROUND_SERVICE_MICROPHONE-declaratie, de runtime-toekenningRECORD_AUDIOen het microfoonservicetype tijdens runtime. - Gesproken antwoorden gebruiken
talk.speakvia de geconfigureerde Gateway Talk-provider. Lokale systeem-TTS wordt alleen gebruikt wanneertalk.speakniet beschikbaar is. - Voice wake blijft uitgeschakeld in de Android-UX/runtime.
- Extra Android-commandofamilies (beschikbaarheid hangt af van apparaat + permissies):
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actions(zie Meldingen doorsturen hieronder)photos.latestcontacts.search,contacts.addcalendar.events,calendar.addcallLog.searchsms.searchmotion.activity,motion.pedometer
Assistent-entrypoints
Android ondersteunt het starten van OpenClaw via de systeemassistent-trigger (Google Assistant). Wanneer dit is geconfigureerd, opent het ingedrukt houden van de homeknop of het zeggen van “Hey Google, ask OpenClaw…” de app en geeft de prompt door aan de chatcomposer. Dit gebruikt Android App Actions-metadata die in het appmanifest is gedeclareerd. Er is geen extra configuratie nodig aan de Gateway-kant — de assistent-intent wordt volledig door de Android-app afgehandeld en doorgestuurd als een normaal chatbericht.De beschikbaarheid van App Actions hangt af van het apparaat, de versie van Google Play Services en of de gebruiker OpenClaw als standaardassistent-app heeft ingesteld.
Meldingen doorsturen
Android kan apparaatmeldingen als events doorsturen naar de Gateway. Met verschillende instellingen kun je bepalen welke meldingen worden doorgestuurd en wanneer.| Sleutel | Type | Beschrijving |
|---|---|---|
notifications.allowPackages | string[] | Stuur alleen meldingen van deze pakketnamen door. Als dit is ingesteld, worden alle andere pakketten genegeerd. |
notifications.denyPackages | string[] | Stuur nooit meldingen van deze pakketnamen door. Toegepast na allowPackages. |
notifications.quietHours.start | string (HH:mm) | Begin van het venster voor stille uren (lokale apparaattijd). Meldingen worden tijdens dit venster onderdrukt. |
notifications.quietHours.end | string (HH:mm) | Einde van het venster voor stille uren. |
notifications.rateLimit | number | Maximum aantal doorgestuurde meldingen per pakket per minuut. Overtollige meldingen worden gedropt. |
Voor het doorsturen van meldingen is de Android Notification Listener-permissie vereist. De app vraagt hier tijdens de setup om.