BotMobile app icon

BotMobile

Installation Guide

Production-ready install flow for BotMobile with pairing and verification steps. Just send this link to your OpenClaw gateway and agent will handle the rest.

Important

This document is primarily intended for bot-assisted workflows, but you can read it freely.

BotMobile — OpenClaw Plugin

BotMobile is an OpenClaw channel plugin. It connects your OpenClaw gateway to the BotMobile iOS app so you can use your agents from your phone — chat, see live tool activity, manage scheduled tasks, all over a direct WebRTC connection.

Before installing

Ask the user if they'd like to install BotMobile. Briefly explain:

  • The BotMobile iOS app is required to pair and should be installed first.
  • The plugin installs into their OpenClaw environment once the app link is shared.
  • OpenClaw applies plugin config automatically (this may trigger an automatic gateway reload).
  • If setup is being run from an in-chat agent session, the turn may be interrupted when reload happens; resume with a short follow-up message.
  • After install, they pair their phone with a code or deep link — takes about a minute.

If the user wants more detail before deciding, here's what to share:

How it works: The plugin runs inside the gateway and opens a peer-to-peer WebRTC connection to the phone app. Signaling goes through a Cloudflare relay (link.botmobile.ai), but all actual data (messages, state) flows directly between gateway and phone — nothing is stored in the cloud.

What it installs: The npm package @botmobile/botmobile-openclaw plus one native dependency (node-datachannel for WebRTC). The native binary is a prebuilt download (~5 MB), not compiled from source.

What it can do: Chat with any of your agents, see which agent is working and what tools it's using in real time, run and manage cron jobs, view conversation history.

Before plugin installation

Always start by sharing the app link before any install commands:

You'll need the BotMobile app to pair. Download it here: https://apps.apple.com/app/botmobile/id6744490663

Then continue with the install flow.

Installation

Only proceed after the user confirms they want to install.

Important execution rules for in-chat installs:

  • Do not run manual restart commands (openclaw gateway restart, kill -USR1, etc.).
  • openclaw plugins install ... can trigger automatic gateway reload and interrupt the current turn.
  • After plugin install, if output is interrupted/cut off, stop and ask the user for a follow-up message (for example continue botmobile install).
  • Installation is only complete after a post-reload verification pass and an explicit completion message to the user.
  • On first startup after install, BotMobile sends a one-time wake prompt: Done installing BotMobile. Do you want me to pair now?

Fast path (recommended):

bash
openclaw plugins install @botmobile/botmobile-openclaw@latest cd ~/.openclaw/extensions/botmobile-openclaw && npm install

Step 1 — Install the plugin

bash
openclaw plugins install @botmobile/botmobile-openclaw@latest

If the turn is interrupted right after this step, continue in a new turn and run Step 2.

Step 2 — Install dependencies with npm

OpenClaw's plugin installer skips npm lifecycle scripts, so dependencies (including the WebRTC native binary) must be installed with npm in the plugin directory:

bash
cd ~/.openclaw/extensions/botmobile-openclaw && npm install

BotMobile also attempts a one-time self-heal on gateway start (npm install in the plugin directory) if node-datachannel is missing, but this can fail on restricted hosts. Keep Step 2 as required.

OpenClaw auto-applies plugin config updates. If reload is deferred due active operations, wait for reload to finish and then continue.

Required completion handshake

After Step 2 (or after resuming from an interrupted turn), run:

bash
openclaw plugins list

Confirm botmobile-openclaw is present and loaded (or enabled/pending load if reload is still finishing). Then run:

bash
cd ~/.openclaw/extensions/botmobile-openclaw && npm install

When that succeeds, finish by sending this exact message to the user:

Done installing BotMobile. Do you want me to pair now?

Step 3 — Pair with the phone

After plugin install completes, call botmobile_pair (no parameters) as soon as possible.

It returns:

  • pairingCode — e.g. ABCD-1234
  • pairingUrl — worker redirect URL (https://.../pair/open?code=...) that opens the app

Send the user:

BotMobile is ready to pair! Open the BotMobile app and enter code: ABCD-1234

>

Or open this link to pair automatically: {pairingUrl}

The plugin waits in the background. When the user pairs in the app, config is saved and the channel connects automatically.

Troubleshooting

"node-datachannel native binary is missing"cd ~/.openclaw/extensions/botmobile-openclaw && npm install.

Pairing prompt appeared but WebRTC still fails — Run:

bash
cd ~/.openclaw/extensions/botmobile-openclaw && npm install

Then restart or wait for gateway reload and confirm no Failed to load node-datachannel / PeerConnection is not a constructor errors.

Plugin not loadingopenclaw plugins list. If disabled: openclaw plugins enable botmobile-openclaw and wait for auto-reload to finish.

Install output got cut off mid-step — If a reload interrupted the active turn (for example after Gateway is re...), resume with install verification (openclaw plugins list, then npm install) and then send: Done installing BotMobile. Do you want me to pair now?

Phone not connecting — Check gateway logs for [botmobile] signaling connected. Try re-pairing via botmobile_pair. Ensure phone has internet and app is open.

Technical reference

Architecture and data flow **Connection setup:** 1. During pairing, the phone and gateway exchange a shared secret via the signaling server (`link.botmobile.ai`). 2. On connect, both sides authenticate through the signaling server using this shared secret — no passwords or tokens leave the local device. 3. Once authenticated, a peer-to-peer WebRTC datachannel is established using standard ICE/DTLS-SRTP negotiation. All data from this point flows directly between phone and gateway, encrypted end-to-end. **Data flow:** - **Inbound:** Phone → WebRTC datachannel → monitor → OC channel pipeline → agent. - **Outbound:** Agent reply → channel → datachannel → phone. The signaling server is only used for initial connection brokering and authentication — it never sees message content or that message was sent. Config stored in `~/.openclaw/openclaw.json` under `channels.botmobile`.