Initial commit: OpenClaw Skill Collection
6 custom skills (assign-task, dispatch-webhook, daily-briefing, task-capture, qmd-brain, tts-voice) with technical documentation. Compatible with Claude Code, OpenClaw, Codex CLI, and OpenCode.
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"title": "iOS App (Node)",
|
||||
"content": "Availability: internal preview. The iOS app is not publicly distributed yet.\n\n* Connects to a Gateway over WebSocket (LAN or tailnet).\n* Exposes node capabilities: Canvas, Screen snapshot, Camera capture, Location, Talk mode, Voice wake.\n* Receives `node.invoke` commands and reports node status events.\n\n* Gateway running on another device (macOS, Linux, or Windows via WSL2).\n* Network path:\n * Same LAN via Bonjour, **or**\n * Tailnet via unicast DNS-SD (example domain: `openclaw.internal.`), **or**\n * Manual host/port (fallback).\n\n## Quick start (pair + connect)\n\n1. Start the Gateway:\n\n2. In the iOS app, open Settings and pick a discovered gateway (or enable Manual Host and enter host/port).\n\n3. Approve the pairing request on the gateway host:\n\n4. Verify connection:\n\nThe Gateway advertises `_openclaw-gw._tcp` on `local.`. The iOS app lists these automatically.\n\n### Tailnet (cross-network)\n\nIf mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example: `openclaw.internal.`) and Tailscale split DNS.\nSee [Bonjour](/gateway/bonjour) for the CoreDNS example.\n\nIn Settings, enable **Manual Host** and enter the gateway host + port (default `18789`).\n\nThe iOS node renders a WKWebView canvas. Use `node.invoke` to drive it:\n\n* The Gateway canvas host serves `/__openclaw__/canvas/` and `/__openclaw__/a2ui/`.\n* The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.\n* Return to the built-in scaffold with `canvas.navigate` and `{\"url\":\"\"}`.\n\n### Canvas eval / snapshot\n\n## Voice wake + talk mode\n\n* Voice wake and talk mode are available in Settings.\n* iOS may suspend background audio; treat voice features as best-effort when the app is not active.\n\n* `NODE_BACKGROUND_UNAVAILABLE`: bring the iOS app to the foreground (canvas/camera/screen commands require it).\n* `A2UI_HOST_NOT_CONFIGURED`: the Gateway did not advertise a canvas host URL; check `canvasHost` in [Gateway configuration](/gateway/configuration).\n* Pairing prompt never appears: run `openclaw nodes pending` and approve manually.\n* Reconnect fails after reinstall: the Keychain pairing token was cleared; re-pair the node.\n\n* [Pairing](/gateway/pairing)\n* [Discovery](/gateway/discovery)\n* [Bonjour](/gateway/bonjour)",
|
||||
"code_samples": [
|
||||
{
|
||||
"code": "2. In the iOS app, open Settings and pick a discovered gateway (or enable Manual Host and enter host/port).\n\n3. Approve the pairing request on the gateway host:",
|
||||
"language": "unknown"
|
||||
},
|
||||
{
|
||||
"code": "4. Verify connection:",
|
||||
"language": "unknown"
|
||||
},
|
||||
{
|
||||
"code": "## Discovery paths\n\n### Bonjour (LAN)\n\nThe Gateway advertises `_openclaw-gw._tcp` on `local.`. The iOS app lists these automatically.\n\n### Tailnet (cross-network)\n\nIf mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example: `openclaw.internal.`) and Tailscale split DNS.\nSee [Bonjour](/gateway/bonjour) for the CoreDNS example.\n\n### Manual host/port\n\nIn Settings, enable **Manual Host** and enter the gateway host + port (default `18789`).\n\n## Canvas + A2UI\n\nThe iOS node renders a WKWebView canvas. Use `node.invoke` to drive it:",
|
||||
"language": "unknown"
|
||||
},
|
||||
{
|
||||
"code": "Notes:\n\n* The Gateway canvas host serves `/__openclaw__/canvas/` and `/__openclaw__/a2ui/`.\n* The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.\n* Return to the built-in scaffold with `canvas.navigate` and `{\"url\":\"\"}`.\n\n### Canvas eval / snapshot",
|
||||
"language": "unknown"
|
||||
},
|
||||
{
|
||||
"code": "",
|
||||
"language": "unknown"
|
||||
}
|
||||
],
|
||||
"headings": [
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "What it does",
|
||||
"id": "what-it-does"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Requirements",
|
||||
"id": "requirements"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Quick start (pair + connect)",
|
||||
"id": "quick-start-(pair-+-connect)"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Discovery paths",
|
||||
"id": "discovery-paths"
|
||||
},
|
||||
{
|
||||
"level": "h3",
|
||||
"text": "Bonjour (LAN)",
|
||||
"id": "bonjour-(lan)"
|
||||
},
|
||||
{
|
||||
"level": "h3",
|
||||
"text": "Tailnet (cross-network)",
|
||||
"id": "tailnet-(cross-network)"
|
||||
},
|
||||
{
|
||||
"level": "h3",
|
||||
"text": "Manual host/port",
|
||||
"id": "manual-host/port"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Canvas + A2UI",
|
||||
"id": "canvas-+-a2ui"
|
||||
},
|
||||
{
|
||||
"level": "h3",
|
||||
"text": "Canvas eval / snapshot",
|
||||
"id": "canvas-eval-/-snapshot"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Voice wake + talk mode",
|
||||
"id": "voice-wake-+-talk-mode"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Common errors",
|
||||
"id": "common-errors"
|
||||
},
|
||||
{
|
||||
"level": "h2",
|
||||
"text": "Related docs",
|
||||
"id": "related-docs"
|
||||
}
|
||||
],
|
||||
"url": "llms-txt#ios-app-(node)",
|
||||
"links": []
|
||||
}
|
||||
Reference in New Issue
Block a user