TaskFlow
DashboardFreewriteWhiteboardsProjectsCRMTasksNotificationsSettingsAgent TowerAPI Docs
OpenClaw Docs
?

User

Member

Caricamento in corso...

Home
Progetti
Task
Notifiche
CRM

    OpenClaw

    Documentation Mirror

    Documentation Overview

    Docs

    Auth credential semantics
    Scheduled tasks
    Hooks
    Automation & tasks
    Standing orders
    Task flow
    Background tasks
    BlueBubbles
    Broadcast groups
    Channel routing
    Discord
    Feishu
    Google Chat
    Group messages
    Groups
    iMessage
    Chat channels
    IRC
    LINE
    Channel location parsing
    Matrix
    Matrix migration
    Matrix push rules for quiet previews
    Mattermost
    Microsoft Teams
    Nextcloud Talk
    Nostr
    Pairing
    QA channel
    QQ bot
    Signal
    Slack
    Synology Chat
    Telegram
    Tlon
    Channel troubleshooting
    Twitch
    WeChat
    WhatsApp
    Yuanbao
    Zalo
    Zalo personal
    CI pipeline
    ACP
    Agent
    Agents
    Approvals
    Backup
    Browser
    Channels
    Clawbot
    `openclaw commitments`
    Completion
    Config
    Configure
    Cron
    Daemon
    Dashboard
    Devices
    Directory
    DNS
    Docs
    Doctor
    Flows (redirect)
    Gateway
    Health
    Hooks
    CLI reference
    Inference CLI
    Logs
    MCP
    Memory
    Message
    Migrate
    Models
    Node
    Nodes
    Onboard
    Pairing
    Plugins
    Proxy
    QR
    Reset
    Sandbox CLI
    Secrets
    Security
    Sessions
    Setup
    Skills
    Status
    System
    `openclaw tasks`
    TUI
    Uninstall
    Update
    Voicecall
    Webhooks
    Wiki
    Active memory
    Agent runtime
    Agent loop
    Agent runtimes
    Agent workspace
    Gateway architecture
    Channel docking
    Inferred commitments
    Compaction
    Context
    Context engine
    Delegate architecture
    Dreaming
    Experimental features
    Features
    Markdown formatting
    Memory overview
    Builtin memory engine
    Honcho memory
    QMD memory engine
    Memory search
    Messages
    Model failover
    Model providers
    Models CLI
    Multi-agent routing
    OAuth
    OpenClaw App SDK
    Presence
    QA overview
    Matrix QA
    Command queue
    Steering queue
    Retry policy
    Session management
    Session pruning
    Session tools
    SOUL.md personality guide
    Streaming and chunking
    System prompt
    Timezones
    TypeBox
    Typing indicators
    Usage tracking
    Date and time
    Node + tsx crash
    Diagnostics flags
    Authentication
    Background exec and process tool
    Bonjour discovery
    Bridge protocol
    CLI backends
    Configuration — agents
    Configuration — channels
    Configuration — tools and custom providers
    Configuration
    Configuration examples
    Configuration reference
    Diagnostics export
    Discovery and transports
    Doctor
    Gateway lock
    Health checks
    Heartbeat
    Gateway runbook
    Local models
    Gateway logging
    Multiple gateways
    Network model
    OpenAI chat completions
    OpenResponses API
    OpenShell
    OpenTelemetry export
    Gateway-owned pairing
    Prometheus metrics
    Gateway protocol
    Remote access
    Remote gateway setup
    Sandbox vs tool policy vs elevated
    Sandboxing
    Secrets management
    Secrets apply plan contract
    Security audit checks
    Security
    Tailscale
    Tools invoke API
    Troubleshooting
    Trusted proxy auth
    Debugging
    Environment variables
    FAQ
    FAQ: first-run setup
    FAQ: models and auth
    GPT-5.5 / Codex agentic parity
    GPT-5.5 / Codex parity maintainer notes
    Help
    Scripts
    Testing
    Testing: live suites
    General troubleshooting
    OpenClaw
    Ansible
    Azure
    Bun (experimental)
    ClawDock
    Release channels
    DigitalOcean
    Docker
    Docker VM runtime
    exe.dev
    Fly.io
    GCP
    Hetzner
    Hostinger
    Install
    Installer internals
    Kubernetes
    macOS VMs
    Migration guide
    Migrating from Claude
    Migrating from Hermes
    Nix
    Node.js
    Northflank
    Oracle Cloud
    Podman
    Railway
    Raspberry Pi
    Render
    Uninstall
    Updating
    Logging
    Network
    Audio and voice notes
    Camera capture
    Image and media support
    Nodes
    Location command
    Media understanding
    Talk mode
    Node troubleshooting
    Voice wake
    Pi integration architecture
    Pi development workflow
    Android app
    Platforms
    iOS app
    Linux app
    Gateway on macOS
    Canvas
    Gateway lifecycle
    macOS dev setup
    Health checks (macOS)
    Menu bar icon
    macOS logging
    Menu bar
    Peekaboo bridge
    macOS permissions
    Remote control
    macOS signing
    Skills (macOS)
    Voice overlay
    Voice wake (macOS)
    WebChat (macOS)
    macOS IPC
    macOS app
    Windows
    Plugin internals
    Plugin architecture internals
    Building plugins
    Plugin bundles
    Codex Computer Use
    Codex harness
    Community plugins
    Plugin compatibility
    Google Meet plugin
    Plugin hooks
    Plugin manifest
    Memory LanceDB
    Memory wiki
    Message presentation
    Agent harness plugins
    Building channel plugins
    Channel turn kernel
    Plugin entry points
    Plugin SDK migration
    Plugin SDK overview
    Building provider plugins
    Plugin runtime helpers
    Plugin setup and config
    Plugin SDK subpaths
    Plugin testing
    Skill workshop plugin
    Voice call plugin
    Webhooks plugin
    Zalo personal plugin
    OpenProse
    Alibaba Model Studio
    Anthropic
    Arcee AI
    Azure Speech
    Amazon Bedrock
    Amazon Bedrock Mantle
    Chutes
    Claude Max API proxy
    Cloudflare AI gateway
    ComfyUI
    Deepgram
    Deepinfra
    DeepSeek
    ElevenLabs
    Fal
    Fireworks
    GitHub Copilot
    GLM (Zhipu)
    Google (Gemini)
    Gradium
    Groq
    Hugging Face (inference)
    Provider directory
    Inferrs
    Inworld
    Kilocode
    LiteLLM
    LM Studio
    MiniMax
    Mistral
    Model provider quickstart
    Moonshot AI
    NVIDIA
    Ollama
    OpenAI
    OpenCode
    OpenCode Go
    OpenRouter
    Perplexity
    Qianfan
    Qwen
    Runway
    SGLang
    StepFun
    Synthetic
    Tencent Cloud (TokenHub)
    Together AI
    Venice AI
    Vercel AI gateway
    vLLM
    Volcengine (Doubao)
    Vydra
    xAI
    Xiaomi MiMo
    Z.AI
    Default AGENTS.md
    Release policy
    API usage and costs
    Credits
    Device model database
    Full release validation
    Memory configuration reference
    OpenClaw App SDK API design
    Prompt caching
    Rich output protocol
    RPC adapters
    SecretRef credential surface
    Session management deep dive
    AGENTS.md template
    BOOT.md template
    BOOTSTRAP.md template
    HEARTBEAT.md template
    IDENTITY template
    SOUL.md template
    TOOLS.md template
    USER template
    Tests
    Token use and costs
    Transcript hygiene
    Onboarding reference
    Contributing to the threat model
    Threat model (MITRE ATLAS)
    Formal verification (security models)
    Network proxy
    Agent bootstrapping
    Docs directory
    Getting started
    Docs hubs
    OpenClaw lore
    Onboarding (macOS app)
    Onboarding overview
    Personal assistant setup
    Setup
    Showcase
    Onboarding (CLI)
    CLI automation
    CLI setup reference
    ACP agents
    ACP agents — setup
    Agent send
    apply_patch tool
    Brave search
    Browser (OpenClaw-managed)
    Browser control API
    Browser troubleshooting
    Browser login
    WSL2 + Windows + remote Chrome CDP troubleshooting
    BTW side questions
    ClawHub
    Code execution
    Creating skills
    Diffs
    DuckDuckGo search
    Elevated mode
    Exa search
    Exec tool
    Exec approvals
    Exec approvals — advanced
    Firecrawl
    Gemini search
    Grok search
    Image generation
    Tools and plugins
    Kimi search
    LLM task
    Lobster
    Tool-loop detection
    Media overview
    MiniMax search
    Multi-agent sandbox and tools
    Music generation
    Ollama web search
    PDF tool
    Perplexity search
    Plugins
    Reactions
    SearXNG search
    Skills
    Skills config
    Slash commands
    Sub-agents
    Tavily
    Thinking levels
    Tokenjuice
    Trajectory bundles
    Text-to-speech
    Video generation
    Web search
    Web fetch
    Linux server
    Control UI
    Dashboard
    Web
    TUI
    WebChat

    OpenAPI Specs

    openapi
    TaskFlow
    docs/openclaw
    Original Docs

    Real-time Synchronized Documentation

    Last sync: 01/05/2026 07:01:49

    Note: This content is mirrored from docs.openclaw.ai and is subject to their terms and conditions.

    OpenClaw Docs

    v2.4.0 Production

    Last synced: Today, 22:00

    Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.

    Use this file to discover all available pages before exploring further.

    iOS app

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

    What it does

    • Connects to a Gateway over WebSocket (LAN or tailnet).
    • Exposes node capabilities: Canvas, Screen snapshot, Camera capture, Location, Talk mode, Voice wake.
    • Receives
      text
      node.invoke
      commands and reports node status events.

    Requirements

    • 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:
        text
        openclaw.internal.
        ), or
      • Manual host/port (fallback).

    Quick start (pair + connect)

    1. Start the Gateway:
    bash
    openclaw 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:

    bash
    openclaw devices list openclaw devices approve <requestId>

    If the app retries pairing with changed auth details (role/scopes/public key), the previous pending request is superseded and a new

    text
    requestId
    is created. Run
    text
    openclaw devices list
    again before approval.

    Optional: if the iOS node always connects from a tightly controlled subnet, you can opt in to first-time node auto-approval with explicit CIDRs or exact IPs:

    json5
    { gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, }, }

    This is disabled by default. It applies only to fresh

    text
    role: node
    pairing with no requested scopes. Operator/browser pairing and any role, scope, metadata, or public-key change still require manual approval.

    1. Verify connection:
    bash
    openclaw nodes status openclaw gateway call node.list --params "{}"

    Relay-backed push for official builds

    Official distributed iOS builds use the external push relay instead of publishing the raw APNs token to the gateway.

    Gateway-side requirement:

    json5
    { gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", }, }, }, }, }

    How the flow works:

    • The iOS app registers with the relay using App Attest and a StoreKit app transaction JWS.
    • The relay returns an opaque relay handle plus a registration-scoped send grant.
    • The iOS app fetches the paired gateway identity and includes it in relay registration, so the relay-backed registration is delegated to that specific gateway.
    • The app forwards that relay-backed registration to the paired gateway with
      text
      push.apns.register
      .
    • The gateway uses that stored relay handle for
      text
      push.test
      , background wakes, and wake nudges.
    • The gateway relay base URL must match the relay URL baked into the official/TestFlight iOS build.
    • If the app later connects to a different gateway or a build with a different relay base URL, it refreshes the relay registration instead of reusing the old binding.

    What the gateway does not need for this path:

    • No deployment-wide relay token.
    • No direct APNs key for official/TestFlight relay-backed sends.

    Expected operator flow:

    1. Install the official/TestFlight iOS build.
    2. Set
      text
      gateway.push.apns.relay.baseUrl
      on the gateway.
    3. Pair the app to the gateway and let it finish connecting.
    4. The app publishes
      text
      push.apns.register
      automatically after it has an APNs token, the operator session is connected, and relay registration succeeds.
    5. After that,
      text
      push.test
      , reconnect wakes, and wake nudges can use the stored relay-backed registration.

    Background alive beacons

    When iOS wakes the app for a silent push, background refresh, or significant-location event, the app attempts a short node reconnect and then calls

    text
    node.event
    with
    text
    event: "node.presence.alive"
    . The gateway records this as
    text
    lastSeenAtMs
    /
    text
    lastSeenReason
    on the paired node/device metadata only after the authenticated node device identity is known.

    The app treats a background wake as successfully recorded only when the gateway response includes

    text
    handled: true
    . Older gateways may acknowledge
    text
    node.event
    with
    text
    { "ok": true }
    ; that response is compatible but does not count as a durable last-seen update.

    Compatibility note:

    • text
      OPENCLAW_APNS_RELAY_BASE_URL
      still works as a temporary env override for the gateway.

    Authentication and trust flow

    The relay exists to enforce two constraints that direct APNs-on-gateway cannot provide for official iOS builds:

    • Only genuine OpenClaw iOS builds distributed through Apple can use the hosted relay.
    • A gateway can send relay-backed pushes only for iOS devices that paired with that specific gateway.

    Hop by hop:

    1. text
      iOS app -> gateway

      • The app first pairs with the gateway through the normal Gateway auth flow.
      • That gives the app an authenticated node session plus an authenticated operator session.
      • The operator session is used to call
        text
        gateway.identity.get
        .
    2. text
      iOS app -> relay

      • The app calls the relay registration endpoints over HTTPS.
      • Registration includes App Attest proof plus a StoreKit app transaction JWS.
      • The relay validates the bundle ID, App Attest proof, and Apple distribution proof, and requires the official/production distribution path.
      • This is what blocks local Xcode/dev builds from using the hosted relay. A local build may be signed, but it does not satisfy the official Apple distribution proof the relay expects.
    3. text
      gateway identity delegation

      • Before relay registration, the app fetches the paired gateway identity from
        text
        gateway.identity.get
        .
      • The app includes that gateway identity in the relay registration payload.
      • The relay returns a relay handle and a registration-scoped send grant that are delegated to that gateway identity.
    4. text
      gateway -> relay

      • The gateway stores the relay handle and send grant from
        text
        push.apns.register
        .
      • On
        text
        push.test
        , reconnect wakes, and wake nudges, the gateway signs the send request with its own device identity.
      • The relay verifies both the stored send grant and the gateway signature against the delegated gateway identity from registration.
      • Another gateway cannot reuse that stored registration, even if it somehow obtains the handle.
    5. text
      relay -> APNs

      • The relay owns the production APNs credentials and the raw APNs token for the official build.
      • The gateway never stores the raw APNs token for relay-backed official builds.
      • The relay sends the final push to APNs on behalf of the paired gateway.

    Why this design was created:

    • To keep production APNs credentials out of user gateways.
    • To avoid storing raw official-build APNs tokens on the gateway.
    • To allow hosted relay usage only for official/TestFlight OpenClaw builds.
    • To prevent one gateway from sending wake pushes to iOS devices owned by a different gateway.

    Local/manual builds remain on direct APNs. If you are testing those builds without the relay, the gateway still needs direct APNs credentials:

    bash
    export OPENCLAW_APNS_TEAM_ID="TEAMID" export OPENCLAW_APNS_KEY_ID="KEYID" export OPENCLAW_APNS_PRIVATE_KEY_P8="$(cat /path/to/AuthKey_KEYID.p8)"

    These are gateway-host runtime env vars, not Fastlane settings.

    text
    apps/ios/fastlane/.env
    only stores App Store Connect / TestFlight auth such as
    text
    ASC_KEY_ID
    and
    text
    ASC_ISSUER_ID
    ; it does not configure direct APNs delivery for local iOS builds.

    Recommended gateway-host storage:

    bash
    mkdir -p ~/.openclaw/credentials/apns chmod 700 ~/.openclaw/credentials/apns mv /path/to/AuthKey_KEYID.p8 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8 chmod 600 ~/.openclaw/credentials/apns/AuthKey_KEYID.p8 export OPENCLAW_APNS_PRIVATE_KEY_PATH="$HOME/.openclaw/credentials/apns/AuthKey_KEYID.p8"

    Do not commit the

    text
    .p8
    file or place it under the repo checkout.

    Discovery paths

    Bonjour (LAN)

    The iOS app browses

    text
    _openclaw-gw._tcp
    on
    text
    local.
    and, when configured, the same wide-area DNS-SD discovery domain. Same-LAN gateways appear automatically from
    text
    local.
    ; cross-network discovery can use the configured wide-area domain without changing the beacon type.

    Tailnet (cross-network)

    If mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example:

    text
    openclaw.internal.
    ) and Tailscale split DNS. See Bonjour for the CoreDNS example.

    Manual host/port

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

    text
    18789
    ).

    Canvas + A2UI

    The iOS node renders a WKWebView canvas. Use

    text
    node.invoke
    to drive it:

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

    Notes:

    • The Gateway canvas host serves
      text
      /__openclaw__/canvas/
      and
      text
      /__openclaw__/a2ui/
      .
    • It is served from the Gateway HTTP server (same port as
      text
      gateway.port
      , default
      text
      18789
      ).
    • The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.
    • Return to the built-in scaffold with
      text
      canvas.navigate
      and
      text
      {"url":""}
      .

    Computer Use relationship

    The iOS app is a mobile node surface, not a Codex Computer Use backend. Codex Computer Use and

    text
    cua-driver mcp
    control a local macOS desktop through MCP tools; the iOS app exposes iPhone capabilities through OpenClaw node commands such as
    text
    canvas.*
    ,
    text
    camera.*
    ,
    text
    screen.*
    ,
    text
    location.*
    , and
    text
    talk.*
    .

    Agents can still operate the iOS app through OpenClaw by invoking node commands, but those calls go through the gateway node protocol and follow iOS foreground/background limits. Use Codex Computer Use for local desktop control and this page for iOS node capabilities.

    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"}'

    Voice wake + talk mode

    • 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.

    Common errors

    • text
      NODE_BACKGROUND_UNAVAILABLE
      : bring the iOS app to the foreground (canvas/camera/screen commands require it).
    • text
      A2UI_HOST_NOT_CONFIGURED
      : the Gateway did not advertise a canvas host URL; check
      text
      canvasHost
      in Gateway configuration.
    • Pairing prompt never appears: run
      text
      openclaw devices list
      and approve manually.
    • Reconnect fails after reinstall: the Keychain pairing token was cleared; re-pair the node.

    Related docs

    • Pairing
    • Discovery
    • Bonjour

    © 2024 TaskFlow Mirror

    Powered by TaskFlow Sync Engine