Clawket is an open-source mobile app for managing your AI agents on the go. It currently supports OpenClaw and Hermes, and is available on iOS and Android.
Scan to open the App Store on your iPhone.
- 📱 Mobile control for OpenClaw — Chat, manage agents, configure models, schedule cron jobs, and monitor sessions — all from your phone
- 🔒 Secure by default — Token-based authentication + TLS encryption for both relay and direct connections
- 🌐 Flexible connectivity — Connect via cloud relay, local network, or Tailscale — no port forwarding needed
- 🖥️ Full remote console — Manage agents, channels, skills, files, devices, and logs without touching a terminal
- 🏗️ Self-hostable — Run your own relay infrastructure, or skip it entirely with direct LAN/Tailscale connections
- 📦 Open source monorepo — Mobile app (Expo/React Native), relay workers (Cloudflare), and bridge CLI — all in one repo, build from source
┌──────────────┐ pairing / control ┌──────────────────┐
│ mobile app │ ◄──────────────────────────────► │ bridge CLI/runtime│
└──────────────┘ └──────────────────┘
│ │
│ pair / claim / verify │ local gateway control
▼ ▼
┌──────────────────┐ route / auth / websocket ┌──────────────┐
│ relay-registry │ ◄─────────────────────────────► │ relay-worker │
└──────────────────┘ └──────────────┘
Clawket supports two connection paths:
- Relay mode — Use
relay-registry+relay-workerfor a cloud-backed connection with automatic pairing. - Direct mode — Connect directly via LAN IP, Tailscale IP, or any custom gateway URL — no relay infrastructure needed.
- Run
clawket pairon your Mac/PC — the bridge auto-detects which local backends are available and prints one or more time-limited QR codes. - Run
clawket pair --localif you want direct local pairing instead of relay-backed pairing. - Scan the QR with the Clawket mobile app to trust that machine.
- In relay mode, the registry verifies the pairing and the relay worker carries real-time WebSocket traffic between your phone and the bridge.
- In direct mode, the app connects straight to your backend bridge over LAN, Tailscale, or another direct URL — no relay needed.
- After the first pairing, reconnection is automatic.
Current pairing behavior:
- If the machine only has OpenClaw,
clawket pairandclawket pair --localbehave the same as before. - If the machine only has Hermes,
clawket pairandclawket pair --localgenerate a Hermes local bridge QR. - If the machine has both OpenClaw and Hermes, Clawket prints one QR per backend and clearly labels them.
| Path | Description |
|---|---|
apps/mobile |
Expo / React Native mobile app |
apps/relay-registry |
Cloudflare registry worker |
apps/relay-worker |
Cloudflare relay worker |
apps/bridge-cli |
Publishable @p697/clawket bridge CLI |
packages/bridge-core |
Pairing / config / service helpers |
packages/bridge-runtime |
Bridge runtime |
packages/relay-shared |
Shared relay protocol & types |
If you only want to run the mobile app locally, start here. You do not need to understand Relay, Registry, or build the bridge from source first.
For iOS development on macOS:
npm install
npm run mobile:sync:native
npm run mobile:dev:iosThis command prepares the embedded Office web assets and launches the iOS dev build.
For Android development:
npm install
npm run mobile:sync:native
npm run mobile:dev:androidIf you already installed the published bridge CLI from npm, pair it separately:
npm install -g @p697/clawket
clawket pairThis command auto-detects OpenClaw and Hermes on the machine:
- OpenClaw uses relay pairing by default
- Hermes uses local bridge pairing for now
- If both are available, you get one QR code per backend
For direct local pairing without relay infrastructure:
clawket pair --localTo force a specific backend:
clawket pair --backend hermes
clawket pair --local --backend hermesThen scan the generated QR code in the app.
- If you only want to run the mobile app, the commands above are enough.
- If you want to self-host Relay / Registry or build the bridge from source, continue with the self-hosting docs below.
- Copy local Cloudflare templates:
cp apps/relay-registry/wrangler.local.example.toml apps/relay-registry/wrangler.local.toml
cp apps/relay-worker/wrangler.local.example.toml apps/relay-worker/wrangler.local.toml- Fill in your own account-bound values.
- Start local workers:
npm run relay:dev:registry
npm run relay:dev:workerFor relay mode, pair against your own registry:
npm run bridge:pair -- --server https://registry.example.comOr:
CLAWKET_REGISTRY_URL=https://registry.example.com npm run bridge:pairFor direct local pairing without relay infrastructure:
npm run bridge:pair:localFor explicit Hermes pairing:
npm run bridge:pair:hermes
npm run bridge:pair:local:hermesFor an explicit local, Tailscale, or custom gateway URL:
npm run bridge:pair -- --local --url ws://100.x.x.x:18789You can ignore this section if you only want to run the app locally with the default open-source settings.
Optional app configuration lives in apps/mobile/.env.example. Copy it to .env.local only if you want to customize your own build with public settings such as docs links, support links, legal links, or optional integrations.
If you leave these values unset, the app keeps the open-source-safe defaults and hides optional integrations that are not configured.
Inspect or validate your config:
npm run mobile:config:show
npm run mobile:config:checkFor direct Xcode iOS builds, the bundling phase sources .env, .env.local, ios/.xcode.env, and ios/.xcode.env.local automatically, so EXPO_PUBLIC_* values are available without a wrapper command.
Choose the prerequisites that match what you want to do:
- To run the iOS app locally: macOS, Xcode, Node.js 20+, and npm
- To run the Android app locally: Node.js 20+, npm, and Android Studio
- To use the published bridge CLI: Node.js 20+ and npm
- To run relay infrastructure: a Cloudflare account
Clawket is designed so the public repository can be cloned and run without depending on an official hosted backend. You can use either a relay-backed setup that you operate yourself, or a pure local/direct setup over LAN, Tailscale, or another custom gateway URL.
Key defaults for self-hosters:
clawket pairrequires--serverorCLAWKET_REGISTRY_URL— no hardcoded registryclawket pair --localworks without any Cloudflare infrastructure- OpenClaw pairing state remains in its legacy config, while Hermes pairing state is stored separately, so upgrading the bridge does not break existing OpenClaw pairings
- Checked-in
wrangler.tomlfiles use placeholder bindings andexample.comendpoints only - If analytics, support, or legal links are unset, the app disables or hides those integrations
- If RevenueCat is unset, the app skips subscription billing and defaults to unlocked Pro access
For the full distribution model, read SELF_HOSTING_MODEL.md.
- docs/self-hosting.md
- docs/relay/CONFIGURATION.md
- docs/relay/LOCAL-DEVELOPMENT.md
- docs/relay/ARCHITECTURE.md
If you are only checking that the mobile app can run locally, start with:
npm run mobile:config:check:ios
npm run mobile:test -- --runInBandIf you are working on the full repository or preparing an open-source release, run the broader checks:
npm run typecheck
npm run testIf you are validating the real connection flow end to end:
npm run mobile:config:check:ios
npm run relay:test
npm run bridge:testThen verify the real flow manually: pair the bridge, launch the app, scan pairing data, and confirm the session uses your own endpoints.
See CONTRIBUTING.md.
See SECURITY.md.
Unless a subdirectory states otherwise, this repository is licensed under AGPL-3.0-only.
The directory apps/mobile/modules/clawket-speech-recognition is excluded from the root AGPL grant and remains proprietary under its own local license notice.
