Android App (Node)
Support snapshot
- 역할: companion node 앱(Android는 Gateway를 호스팅하지 않음)
- Gateway 필요 여부: 예(macOS, Linux 또는 WSL2를 통한 Windows에서 실행)
- 설치: Getting Started + Pairing
- Gateway: Runbook + Configuration
- 프로토콜: Gateway protocol (nodes + control plane)
System control
system control(launchd/systemd)은 Gateway 호스트에 있습니다. Gateway를 참고하세요.Connection Runbook
Android node app ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway Android는 Gateway WebSocket(기본값ws://<host>:18789)에 직접 연결하고 device pairing(role: node)을 사용합니다.
Prerequisites
- “master” 머신에서 Gateway를 실행할 수 있어야 합니다.
- Android 기기/에뮬레이터가 gateway WebSocket에 접근할 수 있어야 합니다.
- 같은 LAN에서 mDNS/NSD 사용, 또는
- 같은 Tailscale tailnet에서 Wide-Area Bonjour / unicast DNS-SD 사용(아래 참고), 또는
- 수동 gateway host/port 입력(fallback)
- gateway 머신에서 CLI(
openclaw)를 실행할 수 있어야 합니다(또는 SSH 경유).
1) Start the Gateway
listening on ws://0.0.0.0:18789
- gateway 호스트의
~/.openclaw/openclaw.json에서gateway.bind: "tailnet"을 설정합니다. - Gateway 또는 macOS menubar app을 재시작합니다.
2) Verify discovery (optional)
gateway 머신에서:Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD
Android NSD/mDNS discovery는 네트워크를 넘지 못합니다. Android node와 gateway가 서로 다른 네트워크에 있지만 Tailscale로 연결되어 있다면, Wide-Area Bonjour / unicast DNS-SD를 대신 사용하세요.- gateway 호스트에서 DNS-SD zone(예:
openclaw.internal.)을 설정하고_openclaw-gw._tcp레코드를 게시합니다. - 선택한 도메인을 그 DNS 서버로 가리키도록 Tailscale split DNS를 구성합니다.
3) Connect from Android
Android 앱에서:- 앱은 foreground service(persistent notification)를 통해 gateway 연결을 유지합니다.
- Connect 탭을 엽니다.
- Setup Code 또는 Manual 모드를 사용합니다.
- discovery가 막혀 있으면 Advanced controls에서 host/port와 필요 시 TLS/token/password를 수동 입력하세요.
- 수동 endpoint가 활성화되어 있으면 그것을 우선 사용
- 아니면 마지막으로 발견된 gateway를 best-effort로 재사용
4) Approve pairing (CLI)
gateway 머신에서:5) Verify the node is connected
-
nodes 상태로 확인:
-
Gateway를 통해 확인:
6) Chat + history
Android Chat 탭은 세션 선택을 지원합니다. 기본은main이며, 다른 기존 세션도 선택할 수 있습니다.
- History:
chat.history - Send:
chat.send - Push updates(best-effort):
chat.subscribe→event:"chat"
7) Canvas + camera
Gateway Canvas Host (recommended for web content)
node가 agent가 디스크에서 수정할 수 있는 실제 HTML/CSS/JS를 보여주게 하려면, node를 Gateway canvas host로 연결하세요. 참고: node는 Gateway HTTP server(기본값gateway.port, 즉 18789)에서 canvas를 로드합니다.
-
gateway 호스트에
~/.openclaw/workspace/canvas/index.html을 만듭니다. - node를 해당 주소로 이동시킵니다(LAN).
.local 대신 MagicDNS 이름이나 tailnet IP를 사용하세요. 예: http://<gateway-magicdns>:18789/__openclaw__/canvas/
이 서버는 HTML에 live-reload client를 주입하고 파일 변경 시 자동 새로고침합니다.
A2UI host는 http://<gateway-host>:18789/__openclaw__/a2ui/에 있습니다.
Canvas 명령(포그라운드에서만):
canvas.eval,canvas.snapshot,canvas.navigate기본 scaffold로 돌아가려면{"url":""}또는{"url":"/"}를 사용합니다.canvas.snapshot은{ format, base64 }를 반환하며 기본format="jpeg"입니다.- A2UI:
canvas.a2ui.push,canvas.a2ui.reset(canvas.a2ui.pushJSONL은 레거시 별칭)
camera.snap(jpg)camera.clip(mp4)
8) Voice + expanded Android command surface
- Voice: Android는 Voice 탭에서 단일 mic on/off 흐름을 사용하며, transcript 캡처와 TTS 재생을 지원합니다. 설정되어 있으면 ElevenLabs를 사용하고, 아니면 시스템 TTS로 fallback 합니다. 앱이 포그라운드를 벗어나면 Voice는 중지됩니다.
- Voice wake/talk-mode 토글은 현재 Android UX/runtime에서 제거되어 있습니다.
- 추가 Android 명령 계열(기기 및 permission에 따라 사용 가능):
device.status,device.info,device.permissions,device.healthnotifications.list,notifications.actionsphotos.latestcontacts.search,contacts.addcalendar.events,calendar.addmotion.activity,motion.pedometer