openclaw/docs/platforms/android.md
webdevtodayjason 022b62a696 docs: clarify mobile and companion app availability status
Add clear availability notices to platform documentation to reduce user
confusion about app distribution:

- Android: Add notice that pre-built binaries are not yet publicly available
- iOS: Update notice to match Android format and clarify build-from-source option
- Platform index: Add structured breakdown of companion app availability

Changes address user confusion reported in Discord about missing download
links and unavailable pre-built binaries. Users can still build from source
or request early access via Discord.

Fixes #1864

Co-Authored-By: Warp <agent@warp.dev>
2026-01-26 20:28:31 -06:00

5.1 KiB
Raw Blame History

summary read_when
Android app (node): connection runbook + Canvas/Chat/Camera
Pairing or reconnecting the Android node
Debugging Android gateway discovery or auth
Verifying chat history parity across clients

Android App (Node)

Note: The Android app is currently in development and not yet publicly available. Pre-built binaries are not distributed at this time. If you're interested in building from source or participating in early testing, please reach out via Discord.

Support snapshot

System control

System control (launchd/systemd) lives on the Gateway host. See Gateway.

Connection Runbook

Android node app ⇄ (mDNS/NSD + WebSocket) ⇄ Gateway

Android connects directly to the Gateway WebSocket (default ws://<host>:18789) and uses Gateway-owned pairing.

Prerequisites

  • You can run the Gateway on the “master” machine.
  • Android device/emulator can reach the gateway WebSocket:
    • Same LAN with mDNS/NSD, or
    • Same Tailscale tailnet using Wide-Area Bonjour / unicast DNS-SD (see below), or
    • Manual gateway host/port (fallback)
  • You can run the CLI (clawdbot) on the gateway machine (or via SSH).

1) Start the Gateway

clawdbot gateway --port 18789 --verbose

Confirm in logs you see something like:

  • listening on ws://0.0.0.0:18789

For tailnet-only setups (recommended for Vienna ⇄ London), bind the gateway to the tailnet IP:

  • Set gateway.bind: "tailnet" in ~/.clawdbot/clawdbot.json on the gateway host.
  • Restart the Gateway / macOS menubar app.

2) Verify discovery (optional)

From the gateway machine:

dns-sd -B _clawdbot-gw._tcp local.

More debugging notes: Bonjour.

Tailnet (Vienna ⇄ London) discovery via unicast DNS-SD

Android NSD/mDNS discovery wont cross networks. If your Android node and the gateway are on different networks but connected via Tailscale, use Wide-Area Bonjour / unicast DNS-SD instead:

  1. Set up a DNS-SD zone (example clawdbot.internal.) on the gateway host and publish _clawdbot-gw._tcp records.
  2. Configure Tailscale split DNS for clawdbot.internal pointing at that DNS server.

Details and example CoreDNS config: Bonjour.

3) Connect from Android

In the Android app:

  • The app keeps its gateway connection alive via a foreground service (persistent notification).
  • Open Settings.
  • Under Discovered Gateways, select your gateway and hit Connect.
  • If mDNS is blocked, use Advanced → Manual Gateway (host + port) and Connect (Manual).

After the first successful pairing, Android auto-reconnects on launch:

  • Manual endpoint (if enabled), otherwise
  • The last discovered gateway (best-effort).

4) Approve pairing (CLI)

On the gateway machine:

clawdbot nodes pending
clawdbot nodes approve <requestId>

Pairing details: Gateway pairing.

5) Verify the node is connected

  • Via nodes status:
    clawdbot nodes status
    
  • Via Gateway:
    clawdbot gateway call node.list --params "{}"
    

6) Chat + history

The Android nodes Chat sheet uses the gateways primary session key (main), so history and replies are shared with WebChat and other clients:

  • History: chat.history
  • Send: chat.send
  • Push updates (best-effort): chat.subscribeevent:"chat"

7) Canvas + camera

If you want the node to show real HTML/CSS/JS that the agent can edit on disk, point the node at the Gateway canvas host.

Note: nodes use the standalone canvas host on canvasHost.port (default 18793).

  1. Create ~/clawd/canvas/index.html on the gateway host.

  2. Navigate the node to it (LAN):

clawdbot nodes invoke --node "<Android Node>" --command canvas.navigate --params '{"url":"http://<gateway-hostname>.local:18793/__clawdbot__/canvas/"}'

Tailnet (optional): if both devices are on Tailscale, use a MagicDNS name or tailnet IP instead of .local, e.g. http://<gateway-magicdns>:18793/__clawdbot__/canvas/.

This server injects a live-reload client into HTML and reloads on file changes. The A2UI host lives at http://<gateway-host>:18793/__clawdbot__/a2ui/.

Canvas commands (foreground only):

  • canvas.eval, canvas.snapshot, canvas.navigate (use {"url":""} or {"url":"/"} to return to the default scaffold). canvas.snapshot returns { format, base64 } (default format="jpeg").
  • A2UI: canvas.a2ui.push, canvas.a2ui.reset (canvas.a2ui.pushJSONL legacy alias)

Camera commands (foreground only; permission-gated):

  • camera.snap (jpg)
  • camera.clip (mp4)

See Camera node for parameters and CLI helpers.