OpenClawSkills
GitHub
Platforms • TutorialHeader.readTime

iOS App

iOS node app: connect to the Gateway, pairing, Canvas, and troubleshooting.

Availability: Internal preview. iOS app is not yet publicly distributed.

Tutorial.step

What it can do

- Connect to Gateway via WebSocket (same LAN or tailnet).

- Expose node capabilities: Canvas, screenshot, camera capture, location, walkie-talkie mode, voice wake.

- Receive ''node.invoke'' commands and report node status events.

Tutorial.step

Prerequisites

- Gateway must be running on another device (macOS, Linux, or Windows via WSL2).

- Network path meets one of:

- Same LAN, discovered via Bonjour, or

- Via tailnet using unicast DNS-SD (example domain: ''openclaw.internal.''), ''or''

- Manual host/port (fallback)

Tutorial.step

Quick start (pairing + connection)

1. Start Gateway:

Bash
openclaw gateway --port 18789

2. Open Settings in iOS app, select discovered gateway (or enable Manual Host and fill in host/port).

3. Approve pairing request on gateway host:

Bash
openclaw nodes pending
openclaw nodes approve '<requestId>'

4. Verify connection:

Bash
openclaw nodes status
openclaw gateway call node.list --params "{'}"
Tutorial.step

Discovery paths

#

Tutorial.step

Bonjour (LAN)

Gateway broadcasts ''_openclaw-gw._tcp'' on ''local.'' iOS app automatically lists these gateways.

#

Tutorial.step

Tailnet (cross-network)

If mDNS is blocked, use unicast DNS-SD zone (choose a domain, e.g. ''openclaw.internal.''), and configure Tailscale split DNS.

See ''Bonjour'' for CoreDNS example.

#

Tutorial.step

Manual host/port

Enable ''Manual Host'' in Settings and enter gateway's host + port (default ''18789'').

Tutorial.step

Canvas + A2UI

iOS node uses WKWebView to render canvas. Can be driven via ''node.invoke'':

Bash
openclaw nodes invoke --node "iOS Node" --command canvas.navigate --params {"url":"http://<gateway-host>:18793/__openclaw__/canvas/"}

Notes:

- Gateway canvas host serves ''/__openclaw__/canvas/'' and ''/__openclaw__/a2ui/''.

- iOS node automatically navigates to A2UI when canvas host URL is discovered on connection.

- Use ''canvas.navigate'' with ''{"url":""}'' to return to built-in scaffold.

#

Tutorial.step

Canvas eval / snapshot

Bash
openclaw nodes invoke --node "iOS Node" --command canvas.eval --params {"javaScript":"(() => { const {ctx} = window.__openclaw; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}
Bash
openclaw nodes invoke --node "iOS Node" --command canvas.snapshot --params {"maxWidth":900,"format":"jpeg"}
Tutorial.step

Voice wake and walkie-talkie mode

- Voice wake and talk mode can be enabled in Settings.

- iOS may suspend audio in background; when app is not in foreground, voice features should be considered best-effort.

Tutorial.step

Common errors

- ''NODE_BACKGROUND_UNAVAILABLE'': Bring iOS app to foreground (canvas/camera/screen commands require foreground).

- ''A2UI_HOST_NOT_CONFIGURED'': Gateway not broadcasting canvas host URL; check ''canvasHost'' in ''Gateway configuration''.

- No pairing prompt: Run ''openclaw nodes pending'' and approve manually.

- Cannot reconnect after reinstall: Pairing token in Keychain is cleared; need to re-pair.

Tutorial.step

Related docs