Skip to content

iOS App

Availability: internal preview. The iOS app is not publicly distributed yet.

  • Connects to a Gateway over WebSocket (LAN or tailnet).
  • Exposes node capabilities: Canvas, Screen snapshot, Camera capture, Location, Talk mode, Voice wake.
  • Receives node.invoke commands and reports node status events.
  • Gateway running on another device (macOS, Linux, or Windows via WSL2).
  • Network path:
    • Same LAN via Bonjour, or
    • Tailnet via unicast DNS-SD (example domain: coderclaw.internal.), or
    • Manual host/port (fallback).
  1. Start the Gateway:
Terminal window
coderclaw gateway --port 18789
  1. In the iOS app, open Settings and pick a discovered gateway (or enable Manual Host and enter host/port).

  2. Approve the pairing request on the gateway host:

Terminal window
coderclaw nodes pending
coderclaw nodes approve <requestId>
  1. Verify connection:
Terminal window
coderclaw nodes status
coderclaw gateway call node.list --params "{}"

The Gateway advertises _coderclaw-gw._tcp on local.. The iOS app lists these automatically.

If mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example: coderclaw.internal.) and Tailscale split DNS. See Bonjour for the CoreDNS example.

In Settings, enable Manual Host and enter the gateway host + port (default 18789).

The iOS node renders a WKWebView canvas. Use node.invoke to drive it:

Terminal window
coderclaw nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-host>:18789/__coderclaw__/canvas/"}'

Notes:

  • The Gateway canvas host serves /__coderclaw__/canvas/ and /__coderclaw__/a2ui/.
  • It is served from the Gateway HTTP server (same port as gateway.port, default 18789).
  • The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.
  • Return to the built-in scaffold with canvas.navigate and {"url":""}.
Terminal window
coderclaw nodes invoke --node "iOS Node" --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__coderclaw; 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\"; })()"}'
Terminal window
coderclaw nodes invoke --node "iOS Node" --command canvas.snapshot --params '{"maxWidth":900,"format":"jpeg"}'
  • Voice wake and talk mode are available in Settings.
  • iOS may suspend background audio; treat voice features as best-effort when the app is not active.
  • NODE_BACKGROUND_UNAVAILABLE: bring the iOS app to the foreground (canvas/camera/screen commands require it).
  • A2UI_HOST_NOT_CONFIGURED: the Gateway did not advertise a canvas host URL; check canvasHost in Gateway configuration.
  • Pairing prompt never appears: run coderclaw nodes pending and approve manually.
  • Reconnect fails after reinstall: the Keychain pairing token was cleared; re-pair the node.