2026-01-04 14:32:47 +00:00
# 🦞 CLAWDBOT — Personal AI Assistant
2025-11-25 04:44:10 +01:00
2025-11-25 14:29:21 +01:00
< p align = "center" >
2026-01-04 14:32:47 +00:00
< img src = "https://raw.githubusercontent.com/clawdbot/clawdbot/main/docs/whatsapp-clawd.jpg" alt = "CLAWDBOT" width = "400" >
2025-12-03 15:45:32 +00:00
< / p >
< p align = "center" >
< strong > EXFOLIATE! EXFOLIATE!< / strong >
2025-11-25 14:29:21 +01:00
< / p >
2025-11-25 14:42:12 +01:00
< p align = "center" >
2026-01-04 14:32:47 +00:00
< a href = "https://github.com/clawdbot/clawdbot/actions/workflows/ci.yml?branch=main" > < img src = "https://img.shields.io/github/actions/workflow/status/clawdbot/clawdbot/ci.yml?branch=main&style=for-the-badge" alt = "CI status" > < / a >
< a href = "https://github.com/clawdbot/clawdbot/releases" > < img src = "https://img.shields.io/github/v/release/clawdbot/clawdbot?include_prereleases&style=for-the-badge" alt = "GitHub release" > < / a >
2026-01-03 00:47:22 +00:00
< a href = "https://discord.gg/clawd" > < img src = "https://img.shields.io/discord/1456350064065904867?label=Discord&logo=discord&logoColor=white&color=5865F2&style=for-the-badge" alt = "Discord" > < / a >
2025-11-25 14:42:12 +01:00
< a href = "LICENSE" > < img src = "https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt = "MIT License" > < / a >
< / p >
2026-01-04 14:32:47 +00:00
**Clawdbot** is a *personal AI assistant* you run on your own devices.
2026-01-02 01:19:22 +01:00
It answers you on the surfaces you already use (WhatsApp, Telegram, Discord, iMessage, WebChat), can speak and listen on macOS/iOS, and can render a live Canvas you control. The Gateway is just the control plane — the product is the assistant.
2025-12-19 18:41:17 +01:00
2026-01-03 22:19:41 +01:00
If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.
2025-11-25 23:06:54 +01:00
2026-01-05 00:22:15 +01:00
Website: https://clawd.me · Docs: [`docs/index.md` ](docs/index.md ) · FAQ: [`docs/faq.md` ](docs/faq.md ) · Wizard: [`docs/wizard.md` ](docs/wizard.md ) · Nix: [nix-clawdbot ](https://github.com/clawdbot/nix-clawdbot ) · Docker: [`docs/docker.md` ](docs/docker.md ) · Discord: https://discord.gg/clawd
2026-01-01 21:09:24 +01:00
2026-01-04 14:32:47 +00:00
Preferred setup: run the onboarding wizard (`clawdbot onboard` ). It walks through gateway, workspace, providers, and skills. The CLI wizard is the recommended path and works on **macOS, Windows, and Linux** .
2026-01-01 20:19:00 +01:00
2025-12-31 11:35:42 +01:00
Using Claude Pro/Max subscription? See `docs/onboarding.md` for the Anthropic OAuth setup.
2026-01-04 16:36:40 +01:00
## Highlights
- **Local-first Gateway** — single control plane for sessions, providers, tools, and events.
- **Multi-surface inbox** — WhatsApp, Telegram, Discord, iMessage, WebChat, macOS, iOS/Android.
- **Voice Wake + Talk Mode** — always-on speech for macOS/iOS/Android with ElevenLabs.
- **Live Canvas** — agent-driven visual workspace with A2UI.
- **First-class tools** — browser, canvas, nodes, cron, sessions, and Discord actions.
- **Companion apps** — macOS menu bar app + iOS/Android nodes.
- **Onboarding + skills** — wizard-driven setup with bundled/managed/workspace skills.
## Everything we built so far
### Core platform
- Gateway WS control plane with sessions, presence, config, cron, webhooks, control UI, and Canvas host.
- CLI surface: gateway, agent, send, wizard, doctor/update, and TUI.
- Pi agent runtime in RPC mode with tool streaming and block streaming.
- Session model: `main` for direct chats, group isolation, activation modes, queue modes, reply-back.
- Media pipeline: images/audio/video, transcription hooks, size caps, temp file lifecycle.
### Surfaces + providers
- WhatsApp (Baileys), Telegram (grammY), Discord (discord.js), Signal (signal-cli), iMessage (imsg), WebChat.
- Group mention gating, reply tags, per-surface chunking and routing.
### Apps + nodes
- macOS app: menu bar control plane, Voice Wake/PTT, Talk Mode overlay, WebChat, Debug tools, SSH remote gateway control.
- iOS node: Canvas, Voice Wake, Talk Mode, camera, screen recording, Bonjour pairing.
- Android node: Canvas, Talk Mode, camera, screen recording, optional SMS.
- macOS node mode: system.run/notify + canvas/camera exposure.
### Tools + automation
- Browser control: dedicated clawd Chrome/Chromium, snapshots, actions, uploads, profiles.
- Canvas: A2UI push/reset, eval, snapshot.
- Nodes: camera snap/clip, screen record, location.get, notifications.
- Cron + wakeups; webhooks; Gmail Pub/Sub triggers.
- Skills platform: bundled, managed, and workspace skills with install gating + UI.
### Ops + packaging
- Control UI + WebChat served directly from the Gateway.
- Tailscale Serve/Funnel or SSH tunnels with token/password auth.
- Nix mode for declarative config; Docker-based installs.
- Health, doctor migrations, structured logging, release tooling.
2026-01-04 18:49:23 +01:00
## Changes since 2026.1.4 (2026-01-04)
2026-01-04 16:36:40 +01:00
### Highlights
- Project rename completed: CLIs, paths, bundle IDs, env vars, and docs unified on Clawdbot.
- Agent-to-agent relay: `sessions_send` ping‑ pong with `REPLY_SKIP` plus announce step with `ANNOUNCE_SKIP` .
- Gateway config hot reload, configurable port, and Control UI base-path support.
- Sandbox options: per-session Docker sandbox with hardened limits + optional sandboxed Chromium.
- New node capability: `location.get` across macOS/iOS/Android (CLI + tools).
### Fixes
- Presence beacons keep node lists fresh; Instances view stays accurate.
- Block streaming + chunking reliability (Telegram/Discord ordering, fewer duplicates).
- WhatsApp GIF playback for MP4-based GIFs.
- Onboarding/Control UI basePath handling fixes + UI polish.
- Cleaner logging + clearer tool summaries.
### Breaking
- Tool names drop the `clawdbot_` prefix (`browser` , `canvas` , `nodes` , `cron` , `gateway` ).
- Bash tool removed `stdinMode: "pty"` support (use tmux for real TTYs).
- Primary session key is fixed to `main` (or `global` for global scope).
## Project rename + changelog format
Clawdis → Clawdbot. The rename touched every surface, path, and bundle ID. To make that transition explicit, releases now use **date-based versions** (`YYYY.M.D` ), and the changelog is compressed into milestone summaries instead of long semver trains. Full detail still lives in git history and the docs.
## How it works (short)
2025-12-03 15:45:32 +00:00
```
2025-12-19 18:41:17 +01:00
Your surfaces
│
▼
┌───────────────────────────────┐
│ Gateway │ ws://127.0.0.1:18789
│ (control plane) │ tcp://0.0.0.0:18790 (optional Bridge)
└──────────────┬────────────────┘
│
├─ Pi agent (RPC)
2026-01-04 14:32:47 +00:00
├─ CLI (clawdbot …)
2025-12-19 18:41:17 +01:00
├─ WebChat (browser)
2026-01-04 14:32:47 +00:00
├─ macOS app (Clawdbot.app)
2025-12-19 18:41:17 +01:00
└─ iOS node (Canvas + voice)
2025-12-03 15:45:32 +00:00
```
2025-11-25 04:44:10 +01:00
2025-12-19 18:41:17 +01:00
## Quick start (from source)
2025-12-14 00:34:26 +00:00
2025-12-19 18:41:17 +01:00
Runtime: **Node ≥22** + **pnpm** .
2025-12-09 00:59:09 +01:00
2025-12-03 15:45:32 +00:00
```bash
2025-12-14 00:34:26 +00:00
pnpm install
pnpm build
2025-12-18 22:40:46 +00:00
pnpm ui:build
2025-11-25 04:44:10 +01:00
2026-01-01 21:09:24 +01:00
# Recommended: run the onboarding wizard
2026-01-04 14:32:47 +00:00
pnpm clawdbot onboard
2026-01-01 21:09:24 +01:00
2026-01-04 14:32:47 +00:00
# Link WhatsApp (stores creds in ~/.clawdbot/credentials)
pnpm clawdbot login
2025-12-03 15:45:32 +00:00
2025-12-19 18:41:17 +01:00
# Start the gateway
2026-01-04 14:32:47 +00:00
pnpm clawdbot gateway --port 18789 --verbose
2025-12-03 15:45:32 +00:00
2025-12-25 18:44:23 +00:00
# Dev loop (auto-reload on TS changes)
pnpm gateway:watch
2025-12-19 18:41:17 +01:00
# Send a message
2026-01-04 14:32:47 +00:00
pnpm clawdbot send --to +1234567890 --message "Hello from Clawdbot"
2025-12-18 22:40:46 +00:00
2025-12-15 10:11:18 -06:00
# Talk to the assistant (optionally deliver back to WhatsApp/Telegram/Discord)
2026-01-04 14:32:47 +00:00
pnpm clawdbot agent --message "Ship checklist" --thinking high
2025-12-03 15:45:32 +00:00
```
2026-01-04 14:32:47 +00:00
If you run from source, prefer `pnpm clawdbot …` (not global `clawdbot` ).
2025-12-19 03:38:11 +01:00
2025-12-22 20:36:34 +01:00
## Chat commands
Send these in WhatsApp/Telegram/WebChat (group commands are owner-only):
- `/status` — health + session info (group shows activation mode)
- `/new` or `/reset` — reset the session
- `/think <level>` — off|minimal|low|medium|high
- `/verbose on|off`
- `/restart` — restart the gateway (owner-only in groups)
- `/activation mention|always` — group activation toggle (groups only)
2025-12-19 18:41:17 +01:00
## Architecture
2025-12-19 03:38:11 +01:00
2025-12-19 18:41:17 +01:00
### TypeScript Gateway (src/gateway/server.ts)
- **Single HTTP+WS server** on `ws://127.0.0.1:18789` (bind policy: loopback/lan/tailnet/auto). The first frame must be `connect` ; AJV validates frames against TypeBox schemas (`src/gateway/protocol` ).
- **Single source of truth** for sessions, providers, cron, voice wake, and presence. Methods cover `send` , `agent` , `chat.*` , `sessions.*` , `config.*` , `cron.*` , `voicewake.*` , `node.*` , `system-*` , `wake` .
- **Events + snapshot**: handshake returns a snapshot (presence/health) and declares event types; runtime events include `agent` , `chat` , `presence` , `tick` , `health` , `heartbeat` , `cron` , `node.pair.*` , `voicewake.changed` , `shutdown` .
- **Idempotency & safety**: `send` /`agent` /`chat.send` require idempotency keys with a TTL cache (5 min, cap 1000) to avoid double‑ sends on reconnects; payload sizes are capped per connection.
- **Bridge for nodes**: optional TCP bridge (`src/infra/bridge/server.ts` ) is newline‑ delimited JSON frames (`hello` , pairing, RPC, `invoke` ); node connect/disconnect is surfaced into presence.
2026-01-03 17:54:52 +01:00
- **Control UI + Canvas Host**: HTTP serves Control UI assets (default `/` , optional base path) and can host a live‑ reload Canvas host for nodes (`src/canvas-host/server.ts` ), injecting the A2UI postMessage bridge.
2025-12-19 03:38:11 +01:00
2025-12-19 18:41:17 +01:00
### iOS app (apps/ios)
- **Discovery + pairing**: Bonjour discovery via `BridgeDiscoveryModel` (NWBrowser). `BridgeConnectionController` auto‑ connects using Keychain token or allows manual host/port.
- **Node runtime**: `BridgeSession` (actor) maintains the `NWConnection` , hello handshake, ping/pong, RPC requests, and `invoke` callbacks.
- **Capabilities + commands**: advertises `canvas` , `screen` , `camera` , `voiceWake` (settings‑ driven) and executes `canvas.*` , `canvas.a2ui.*` , `camera.*` , `screen.record` (`NodeAppModel.handleInvoke` ).
2026-01-04 14:32:47 +00:00
- **Canvas**: `WKWebView` with bundled Canvas scaffold + A2UI, JS eval, snapshot capture, and `clawdbot://` deep‑ link interception (`ScreenController` ).
- **Voice + deep links**: voice wake sends `voice.transcript` events; `clawdbot://agent` links emit `agent.request` . Voice wake triggers sync via `voicewake.get` + `voicewake.changed` .
2025-12-13 23:50:23 +00:00
2025-12-19 18:41:17 +01:00
## Companion apps
2025-12-06 05:24:27 +01:00
2025-12-19 18:41:17 +01:00
The **macOS app is critical** : it runs the menu‑ bar control plane, owns local permissions (TCC), hosts Voice Wake, exposes WebChat/debug tools, and coordinates local/remote gateway mode. Most “assistant” UX lives here.
2025-12-06 05:24:27 +01:00
2026-01-04 14:32:47 +00:00
### macOS (Clawdbot.app)
2025-12-12 16:42:05 +00:00
2025-12-19 18:41:17 +01:00
- Menu bar control for the Gateway and health.
- Voice Wake + push-to-talk overlay.
- WebChat + debug tools.
- Remote gateway control over SSH.
2025-12-12 16:42:05 +00:00
2025-12-19 18:41:17 +01:00
Build/run: `./scripts/restart-mac.sh` (packages + launches).
2025-12-12 16:42:05 +00:00
2025-12-19 18:41:17 +01:00
### iOS node (internal)
2025-12-12 16:42:05 +00:00
2025-12-19 18:41:17 +01:00
- Pairs as a node via the Bridge.
- Voice trigger forwarding + Canvas surface.
2026-01-04 14:32:47 +00:00
- Controlled via `clawdbot nodes …` .
2025-12-06 05:24:27 +01:00
2025-12-19 18:41:17 +01:00
Runbook: `docs/ios/connect.md` .
2025-12-13 23:50:23 +00:00
2025-12-19 18:41:17 +01:00
### Android node (internal)
2025-12-13 23:50:23 +00:00
2025-12-19 18:41:17 +01:00
- Pairs via the same Bridge + pairing flow as iOS.
- Exposes Canvas, Camera, and Screen capture commands.
- Runbook: `docs/android/connect.md` .
2025-12-13 23:50:23 +00:00
2025-12-19 18:41:17 +01:00
## Agent workspace + skills
2025-12-23 23:45:20 +00:00
- Workspace root: `~/clawd` (configurable via `agent.workspace` ).
2025-12-19 18:41:17 +01:00
- Injected prompt files: `AGENTS.md` , `SOUL.md` , `TOOLS.md` .
- Skills: `~/clawd/skills/<skill>/SKILL.md` .
2025-12-13 23:50:23 +00:00
2025-12-03 15:45:32 +00:00
## Configuration
2026-01-04 14:32:47 +00:00
Minimal `~/.clawdbot/clawdbot.json` :
2025-11-24 11:23:15 +01:00
2025-11-24 16:02:39 +01:00
```json5
{
2026-01-02 12:59:47 +01:00
whatsapp: {
2025-12-14 00:34:26 +00:00
allowFrom: ["+1234567890"]
2025-11-24 16:02:39 +01:00
}
}
```
2025-12-19 19:03:17 +01:00
### WhatsApp
2026-01-04 14:32:47 +00:00
- Link the device: `pnpm clawdbot login` (stores creds in `~/.clawdbot/credentials` ).
2026-01-02 12:59:47 +01:00
- Allowlist who can talk to the assistant via `whatsapp.allowFrom` .
2025-12-19 19:03:17 +01:00
### Telegram
- Set `TELEGRAM_BOT_TOKEN` or `telegram.botToken` (env wins).
2026-01-02 22:50:51 +01:00
- Optional: set `telegram.groups` (with `telegram.groups."*".requireMention` ), `telegram.allowFrom` , or `telegram.webhookUrl` as needed.
2025-12-19 19:03:17 +01:00
```json5
{
telegram: {
botToken: "123456:ABCDEF"
}
}
```
2025-12-15 10:11:18 -06:00
### Discord
- Set `DISCORD_BOT_TOKEN` or `discord.token` (env wins).
2026-01-02 13:33:52 +01:00
- Optional: set `discord.slashCommand` , `discord.dm.allowFrom` , `discord.guilds` , or `discord.mediaMaxMb` as needed.
2025-12-15 10:11:18 -06:00
```json5
{
discord: {
token: "1234abcd"
}
}
```
2025-12-19 18:41:17 +01:00
Browser control (optional):
2025-12-13 15:15:09 +00:00
```json5
{
browser: {
enabled: true,
2025-12-13 15:29:39 +00:00
controlUrl: "http://127.0.0.1:18791",
2025-12-13 15:15:09 +00:00
color: "#FF4500 "
}
}
```
2025-12-19 18:41:17 +01:00
## Docs
2025-12-09 20:28:10 +00:00
2025-12-20 12:27:25 +01:00
- [`docs/index.md` ](docs/index.md ) (overview)
- [`docs/configuration.md` ](docs/configuration.md )
2025-12-22 20:36:34 +01:00
- [`docs/group-messages.md` ](docs/group-messages.md )
2025-12-20 12:27:25 +01:00
- [`docs/gateway.md` ](docs/gateway.md )
- [`docs/web.md` ](docs/web.md )
- [`docs/discovery.md` ](docs/discovery.md )
- [`docs/agent.md` ](docs/agent.md )
2025-12-15 10:11:18 -06:00
- [`docs/discord.md` ](docs/discord.md )
2026-01-01 21:09:24 +01:00
- [`docs/wizard.md` ](docs/wizard.md )
2025-12-24 20:07:18 +00:00
- Webhooks + external triggers: [`docs/webhook.md` ](docs/webhook.md )
2025-12-24 22:59:09 +00:00
- Gmail hooks (email → wake): [`docs/gmail-pubsub.md` ](docs/gmail-pubsub.md )
## Email hooks (Gmail)
```bash
2026-01-04 14:32:47 +00:00
clawdbot hooks gmail setup --account you@gmail .com
clawdbot hooks gmail run
2025-12-24 22:59:09 +00:00
```
2025-12-20 12:27:25 +01:00
- [`docs/security.md` ](docs/security.md )
- [`docs/troubleshooting.md` ](docs/troubleshooting.md )
- [`docs/ios/connect.md` ](docs/ios/connect.md )
2026-01-04 14:32:47 +00:00
- [`docs/clawdbot-mac.md` ](docs/clawdbot-mac.md )
2025-12-09 20:28:10 +00:00
2026-01-02 20:31:31 +00:00
## Contributing
See [CONTRIBUTING.md ](CONTRIBUTING.md ) for guidelines, maintainers, and how to submit PRs.
AI/vibe-coded PRs welcome! 🤖
2025-12-19 18:41:17 +01:00
## Clawd
2025-12-03 15:45:32 +00:00
2026-01-04 14:32:47 +00:00
Clawdbot was built for **Clawd** , a space lobster AI assistant.
2025-12-03 15:45:32 +00:00
2025-12-19 18:41:17 +01:00
- https://clawd.me
- https://soul.md
- https://steipete.me