Skip to content
Β 
Β 

Latest commit

Β 

History

15,468 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🦞 OpenClaw β€” Personal AI Assistant

OpenClaw

EXFOLIATE! EXFOLIATE!

CI status GitHub release Discord MIT License

OpenClaw is a personal AI assistant you run on your own devices. It answers you on the channels you already use (WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, Microsoft Teams, WebChat), plus extension channels like BlueBubbles, Matrix, Zalo, and Zalo Personal. It can speak and listen on macOS/iOS/Android, and can render a live Canvas you control. The Gateway is just the control plane β€” the product is the assistant.

If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.

Website Β· Docs Β· Vision Β· DeepWiki Β· Getting Started Β· Updating Β· Showcase Β· FAQ Β· Wizard Β· Nix Β· Docker Β· Discord

Preferred setup: run the onboarding wizard (openclaw onboard) in your terminal. The wizard guides you step by step through setting up the gateway, workspace, channels, and skills. The CLI wizard is the recommended path and works on macOS, Linux, and Windows (via WSL2; strongly recommended). Works with npm, pnpm, or bun. New install? Start here: Getting started

Sponsors

OpenAI Blacksmith Convex
OpenAI Blacksmith Convex

Subscriptions (OAuth):

Model note: while any model is supported, I strongly recommend Anthropic Pro/Max (100/200) + Opus 4.6 for long‑context strength and better prompt‑injection resistance. See Onboarding.

Models (selection + auth)

Install (recommended)

Runtime: Node β‰₯22.

npm install -g openclaw@latest
# or: pnpm add -g openclaw@latest

openclaw onboard --install-daemon

The wizard installs the Gateway daemon (launchd/systemd user service) so it stays running.

Quick start (TL;DR)

Runtime: Node β‰₯22.

Full beginner guide (auth, pairing, channels): Getting started

openclaw onboard --install-daemon

openclaw gateway --port 18789 --verbose

# Send a message
openclaw message send --to +1234567890 --message "Hello from OpenClaw"

# Talk to the assistant (optionally deliver back to any connected channel: WhatsApp/Telegram/Slack/Discord/Google Chat/Signal/iMessage/BlueBubbles/Microsoft Teams/Matrix/Zalo/Zalo Personal/WebChat)
openclaw agent --message "Ship checklist" --thinking high

Upgrading? Updating guide (and run openclaw doctor).

Development channels

  • stable: tagged releases (vYYYY.M.D or vYYYY.M.D-<patch>), npm dist-tag latest.
  • beta: prerelease tags (vYYYY.M.D-beta.N), npm dist-tag beta (macOS app may be missing).
  • dev: moving head of main, npm dist-tag dev (when published).

Switch channels (git + npm): openclaw update --channel stable|beta|dev. Details: Development channels.

From source (development)

Prefer pnpm for builds from source. Bun is optional for running TypeScript directly.

git clone https://github.com/openclaw/openclaw.git
cd openclaw

pnpm install
pnpm ui:build # auto-installs UI deps on first run
pnpm build

pnpm openclaw onboard --install-daemon

# Dev loop (auto-reload on TS changes)
pnpm gateway:watch

Note: pnpm openclaw ... runs TypeScript directly (via tsx). pnpm build produces dist/ for running via Node / the packaged openclaw binary.

Security defaults (DM access)

OpenClaw connects to real messaging surfaces. Treat inbound DMs as untrusted input.

Full security guide: Security

Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:

  • DM pairing (dmPolicy="pairing" / channels.discord.dmPolicy="pairing" / channels.slack.dmPolicy="pairing"; legacy: channels.discord.dm.policy, channels.slack.dm.policy): unknown senders receive a short pairing code and the bot does not process their message.
  • Approve with: openclaw pairing approve <channel> <code> (then the sender is added to a local allowlist store).
  • Public inbound DMs require an explicit opt-in: set dmPolicy="open" and include "*" in the channel allowlist (allowFrom / channels.discord.allowFrom / channels.slack.allowFrom; legacy: channels.discord.dm.allowFrom, channels.slack.dm.allowFrom).

Run openclaw doctor to surface risky/misconfigured DM policies.

Highlights

  • Local-first Gateway β€” single control plane for sessions, channels, tools, and events.
  • Multi-channel inbox β€” WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, BlueBubbles (iMessage), iMessage (legacy), Microsoft Teams, Matrix, Zalo, Zalo Personal, WebChat, macOS, iOS/Android.
  • Multi-agent routing β€” route inbound channels/accounts/peers to isolated agents (workspaces + per-agent sessions).
  • 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/Slack actions.
  • Companion apps β€” macOS menu bar app + iOS/Android nodes.
  • Onboarding + skills β€” wizard-driven setup with bundled/managed/workspace skills.

Star History

Star History Chart

Everything we built so far

Core platform

Channels

Apps + nodes

Tools + automation

Runtime + safety

Ops + packaging

How it works (short)

WhatsApp / Telegram / Slack / Discord / Google Chat / Signal / iMessage / BlueBubbles / Microsoft Teams / Matrix / Zalo / Zalo Personal / WebChat
               β”‚
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Gateway            β”‚
β”‚       (control plane)         β”‚
β”‚     ws://127.0.0.1:18789      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
               β”œβ”€ Pi agent (RPC)
               β”œβ”€ CLI (openclaw …)
               β”œβ”€ WebChat UI
               β”œβ”€ macOS app
               └─ iOS / Android nodes

Key subsystems

Tailscale access (Gateway dashboard)

OpenClaw can auto-configure Tailscale Serve (tailnet-only) or Funnel (public) while the Gateway stays bound to loopback. Configure gateway.tailscale.mode:

  • off: no Tailscale automation (default).
  • serve: tailnet-only HTTPS via tailscale serve (uses Tailscale identity headers by default).
  • funnel: public HTTPS via tailscale funnel (requires shared password auth).

Notes:

  • gateway.bind must stay loopback when Serve/Funnel is enabled (OpenClaw enforces this).
  • Serve can be forced to require a password by setting gateway.auth.mode: "password" or gateway.auth.allowTailscale: false.
  • Funnel refuses to start unless gateway.auth.mode: "password" is set.
  • Optional: gateway.tailscale.resetOnExit to undo Serve/Funnel on shutdown.

Details: Tailscale guide Β· Web surfaces

Remote Gateway (Linux is great)

It’s perfectly fine to run the Gateway on a small Linux instance. Clients (macOS app, CLI, WebChat) can connect over Tailscale Serve/Funnel or SSH tunnels, and you can still pair device nodes (macOS/iOS/Android) to execute device‑local actions when needed.

  • Gateway host runs the exec tool and channel connections by default.
  • Device nodes run device‑local actions (system.run, camera, screen recording, notifications) via node.invoke. In short: exec runs where the Gateway lives; device actions run where the device lives.

Details: Remote access Β· Nodes Β· Security

macOS permissions via the Gateway protocol

The macOS app can run in node mode and advertises its capabilities + permission map over the Gateway WebSocket (node.list / node.describe). Clients can then execute local actions via node.invoke:

  • system.run runs a local command and returns stdout/stderr/exit code; set needsScreenRecording: true to require screen-recording permission (otherwise you’ll get PERMISSION_MISSING).
  • system.notify posts a user notification and fails if notifications are denied.
  • canvas.*, camera.*, screen.record, and location.get are also routed via node.invoke and follow TCC permission status.

Elevated bash (host permissions) is separate from macOS TCC:

  • Use /elevated on|off to toggle per‑session elevated access when enabled + allowlisted.
  • Gateway persists the per‑session toggle via sessions.patch (WS method) alongside thinkingLevel, verboseLevel, model, sendPolicy, and groupActivation.

Details: Nodes Β· macOS app Β· Gateway protocol

Agent to Agent (sessions_* tools)

  • Use these to coordinate work across sessions without jumping between chat surfaces.
  • sessions_list β€” discover active sessions (agents) and their metadata.
  • sessions_history β€” fetch transcript logs for a session.
  • sessions_send β€” message another session; optional reply‑back ping‑pong + announce step (REPLY_SKIP, ANNOUNCE_SKIP).

Details: Session tools

Skills registry (ClawHub)

ClawHub is a minimal skill registry. With ClawHub enabled, the agent can search for skills automatically and pull in new ones as needed.

ClawHub

Chat commands

Send these in WhatsApp/Telegram/Slack/Google Chat/Microsoft Teams/WebChat (group commands are owner-only):

  • /status β€” compact session status (model + tokens, cost when available)
  • /new or /reset β€” reset the session
  • /compact β€” compact session context (summary)
  • /think <level> β€” off|minimal|low|medium|high|xhigh (GPT-5.2 + Codex models only)
  • /verbose on|off
  • /usage off|tokens|full β€” per-response usage footer
  • /restart β€” restart the gateway (owner-only in groups)
  • /activation mention|always β€” group activation toggle (groups only)

Apps (optional)

The Gateway alone delivers a great experience. All apps are optional and add extra features.

If you plan to build/run companion apps, follow the platform runbooks below.

macOS (OpenClaw.app) (optional)

  • Menu bar control for the Gateway and health.
  • Voice Wake + push-to-talk overlay.
  • WebChat + debug tools.
  • Remote gateway control over SSH.

Note: signed builds required for macOS permissions to stick across rebuilds (see docs/mac/permissions.md).

iOS node (optional)

  • Pairs as a node via the Bridge.
  • Voice trigger forwarding + Canvas surface.
  • Controlled via openclaw nodes ….

Runbook: iOS connect.

Android node (optional)

  • Pairs via the same Bridge + pairing flow as iOS.
  • Exposes Canvas, Camera, and Screen capture commands.
  • Runbook: Android connect.

Agent workspace + skills

  • Workspace root: ~/.openclaw/workspace (configurable via agents.defaults.workspace).
  • Injected prompt files: AGENTS.md, SOUL.md, TOOLS.md.
  • Skills: ~/.openclaw/workspace/skills/<skill>/SKILL.md.

Configuration

Minimal ~/.openclaw/openclaw.json (model + defaults):

{
  agent: {
    model: "anthropic/claude-opus-4-6",
  },
}

Full configuration reference (all keys + examples).

Security model (important)

  • Default: tools run on the host for the main session, so the agent has full access when it’s just you.
  • Group/channel safety: set agents.defaults.sandbox.mode: "non-main" to run non‑main sessions (groups/channels) inside per‑session Docker sandboxes; bash then runs in Docker for those sessions.
  • Sandbox defaults: allowlist bash, process, read, write, edit, sessions_list, sessions_history, sessions_send, sessions_spawn; denylist browser, canvas, nodes, cron, discord, gateway.

Details: Security guide Β· Docker + sandboxing Β· Sandbox config

  • Link the device: pnpm openclaw channels login (stores creds in ~/.openclaw/credentials).
  • Allowlist who can talk to the assistant via channels.whatsapp.allowFrom.
  • If channels.whatsapp.groups is set, it becomes a group allowlist; include "*" to allow all.
  • Set TELEGRAM_BOT_TOKEN or channels.telegram.botToken (env wins).
  • Optional: set channels.telegram.groups (with channels.telegram.groups."*".requireMention); when set, it is a group allowlist (include "*" to allow all). Also channels.telegram.allowFrom or channels.telegram.webhookUrl + channels.telegram.webhookSecret as needed.
{
  channels: {
    telegram: {
      botToken: "123456:ABCDEF",
    },
  },
}
  • Set SLACK_BOT_TOKEN + SLACK_APP_TOKEN (or channels.slack.botToken + channels.slack.appToken).
  • Set DISCORD_BOT_TOKEN or channels.discord.token (env wins).
  • Optional: set commands.native, commands.text, or commands.useAccessGroups, plus channels.discord.allowFrom, channels.discord.guilds, or channels.discord.mediaMaxMb as needed.
{
  channels: {
    discord: {
      token: "1234abcd",
    },
  },
}
  • Requires signal-cli and a channels.signal config section.
  • Recommended iMessage integration.
  • Configure channels.bluebubbles.serverUrl + channels.bluebubbles.password and a webhook (channels.bluebubbles.webhookPath).
  • The BlueBubbles server runs on macOS; the Gateway can run on macOS or elsewhere.
  • Legacy macOS-only integration via imsg (Messages must be signed in).
  • If channels.imessage.groups is set, it becomes a group allowlist; include "*" to allow all.
  • Configure a Teams app + Bot Framework, then add a msteams config section.
  • Allowlist who can talk via msteams.allowFrom; group access via msteams.groupAllowFrom or msteams.groupPolicy: "open".
  • Uses the Gateway WebSocket; no separate WebChat port/config.

Browser control (optional):

{
  browser: {
    enabled: true,
    color: "#FF4500",
  },
}

Docs

Use these when you’re past the onboarding flow and want the deeper reference.

Advanced docs (discovery + control)

Operations & troubleshooting

Deep dives

Workspace & skills

Platform internals

Email hooks (Gmail)

Developer Guide β€” Source Code Map

Use this section to find where to look when you want to make a specific change.

Quick Reference: "I want to change X β€” where do I look?"

If you want to… Look in Key files to start with
Add a new chat channel src/channels/, extensions/ dock.ts, registry.ts, plugins/
Add a CLI command src/commands/, src/cli/ program.ts, individual command files
Change message routing src/routing/ resolve-route.ts, session-key.ts, bindings.ts
Modify agent config/behavior src/agents/ agent-scope.ts, models-config.ts, agent-paths.ts
Change gateway protocol/WS server src/gateway/ client.ts, protocol/, auth.ts, server/
Add/change config options src/config/ io.ts, validation.ts, types.*.ts
Modify auto-reply logic src/auto-reply/ dispatch.ts, reply/reply-dispatcher.ts
Add a TTS provider src/tts/ tts.ts, tts-core.ts, prepare-text.ts
Change browser automation src/browser/ client.ts, cdp.ts, chrome.ts
Add an embedding/memory provider src/memory/ embeddings.ts, embeddings-openai.ts, etc.
Modify security audits src/security/ audit.ts, audit-*.ts, dangerous-tools.ts
Change plugin system src/plugins/ loader.ts, hooks.ts, commands.ts
Add scheduled jobs / cron src/cron/ normalize.ts, schedule.ts, delivery.ts
Modify terminal UI src/tui/ tui.ts, gateway-chat.ts, theme/
Change Canvas host src/canvas-host/ server.ts, a2ui.ts, file-resolver.ts
Modify session handling src/sessions/ send-policy.ts, model-overrides.ts
Work on macOS / iOS / Android apps apps/ macos/, ios/, android/, shared/
Add or modify skills skills/ SKILL.md in each skill directory
Work on extensions extensions/ Extension package.json + handler files
Change media handling src/media/ parse.ts, mime.ts, input-files.ts
Work on Control UI (web) ui/ Lit web components, ui/src/
Change infrastructure / env loading src/infra/ env.ts, binaries.ts, ports.ts
Modify logging src/logging/ Subsystem loggers, file output, levels
Change hooks / Gmail triggers src/hooks/ hooks.ts, internal-hooks.ts, Gmail watchers
Modify ACP (Agent Protocol) src/acp/ client.ts, event-mapper.ts, translator.ts

Project Structure

openclaw/
β”œβ”€β”€ apps/                           # Native platform apps
β”‚   β”œβ”€β”€ macos/                      #   macOS menu bar app (Swift)
β”‚   β”œβ”€β”€ ios/                        #   iOS node app
β”‚   β”œβ”€β”€ android/                    #   Android node app (Gradle)
β”‚   └── shared/                     #   Shared SDK (OpenClawKit)
β”‚
β”œβ”€β”€ src/                            # Core source code (~2,990 TS files)
β”‚   β”œβ”€β”€ entry.ts                    #   CLI bootstrap (process init, respawn, Node flags)
β”‚   β”œβ”€β”€ index.ts                    #   Main exports + global error handlers
β”‚   β”œβ”€β”€ globals.ts                  #   Global flags (verbose, yes) + theme
β”‚   β”œβ”€β”€ runtime.ts                  #   Abstract runtime env (log, exit, test stubs)
β”‚   β”œβ”€β”€ utils.ts                    #   Shared utilities (paths, E164, JID conversion)
β”‚   β”‚
β”‚   β”œβ”€β”€ agents/                     #   Agent config, scope, models, sandbox, skills
β”‚   β”œβ”€β”€ gateway/                    #   WebSocket control plane + RPC protocol
β”‚   β”œβ”€β”€ auto-reply/                 #   Inbound message dispatch + reply queue
β”‚   β”œβ”€β”€ cli/                        #   Commander.js CLI program builder
β”‚   β”œβ”€β”€ commands/                   #   CLI command implementations (~197 files)
β”‚   β”œβ”€β”€ config/                     #   Config loading, validation, types (~148 files)
β”‚   β”œβ”€β”€ infra/                      #   Low-level: env, binaries, ports, TLS, device ID
β”‚   β”œβ”€β”€ channels/                   #   Channel adapters, allowlists, plugins, mentions
β”‚   β”œβ”€β”€ routing/                    #   Session + agent routing (resolve-route, bindings)
β”‚   β”œβ”€β”€ security/                   #   Security audits, dangerous tools, permissions
β”‚   β”‚
β”‚   β”œβ”€β”€ telegram/                   #   Telegram bot (grammY)
β”‚   β”œβ”€β”€ discord/                    #   Discord bot (discord.js)
β”‚   β”œβ”€β”€ slack/                      #   Slack bot (Bolt)
β”‚   β”œβ”€β”€ signal/                     #   Signal integration (signal-cli)
β”‚   β”œβ”€β”€ imessage/                   #   iMessage (legacy macOS-only)
β”‚   β”œβ”€β”€ web/                        #   WhatsApp Web client (Baileys)
β”‚   β”‚
β”‚   β”œβ”€β”€ browser/                    #   Browser automation (CDP, Chrome, profiles)
β”‚   β”œβ”€β”€ memory/                     #   Vector embeddings + semantic search
β”‚   β”œβ”€β”€ plugins/                    #   Plugin discovery, loading, hooks, commands
β”‚   β”œβ”€β”€ security/                   #   Audit orchestrator + checks
β”‚   β”œβ”€β”€ tts/                        #   Text-to-speech (OpenAI, ElevenLabs, Edge)
β”‚   β”œβ”€β”€ cron/                       #   Scheduled jobs (at/every/cron formats)
β”‚   β”œβ”€β”€ media/                      #   Media pipeline (parse, MIME, images, audio)
β”‚   β”œβ”€β”€ sessions/                   #   Session metadata, send policy, model overrides
β”‚   β”œβ”€β”€ hooks/                      #   Event hooks (Gmail, webhooks, triggers)
β”‚   β”œβ”€β”€ tui/                        #   Terminal UI (interactive chat, slash commands)
β”‚   β”œβ”€β”€ canvas-host/                #   Canvas HTTP/WS server + A2UI protocol
β”‚   β”œβ”€β”€ acp/                        #   Anthropic Agent Protocol client
β”‚   β”œβ”€β”€ logging/                    #   Structured logging subsystem
β”‚   β”œβ”€β”€ terminal/                   #   Terminal helpers (progress, colors, state)
β”‚   β”œβ”€β”€ process/                    #   Child process spawning, exec wrappers
β”‚   β”œβ”€β”€ providers/                  #   Model provider registry
β”‚   β”œβ”€β”€ shared/                     #   Shared interfaces
β”‚   β”œβ”€β”€ types/                      #   Central type exports
β”‚   └── test-utils/                 #   Test helpers + fixtures
β”‚
β”œβ”€β”€ extensions/                     # Channel extensions (36 total)
β”‚   β”œβ”€β”€ discord/                    #   Discord extension
β”‚   β”œβ”€β”€ telegram/                   #   Telegram extension
β”‚   β”œβ”€β”€ slack/                      #   Slack extension
β”‚   β”œβ”€β”€ msteams/                    #   Microsoft Teams
β”‚   β”œβ”€β”€ matrix/                     #   Matrix
β”‚   β”œβ”€β”€ signal/                     #   Signal
β”‚   β”œβ”€β”€ whatsapp/                   #   WhatsApp
β”‚   β”œβ”€β”€ zalo/                       #   Zalo
β”‚   β”œβ”€β”€ voice-call/                 #   Voice call
β”‚   └── ...                         #   (+ 27 more)
β”‚
β”œβ”€β”€ skills/                         # Agent skills (51 total)
β”‚   β”œβ”€β”€ github/                     #   GitHub integration
β”‚   β”œβ”€β”€ slack/                      #   Slack actions
β”‚   β”œβ”€β”€ obsidian/                   #   Obsidian notes
β”‚   β”œβ”€β”€ weather/                    #   Weather lookups
β”‚   β”œβ”€β”€ coding-agent/               #   Code generation
β”‚   └── ...                         #   (+ 46 more)
β”‚
β”œβ”€β”€ ui/                             # Control UI (Lit web components)
β”œβ”€β”€ docs/                           # Documentation (Mintlify β†’ docs.openclaw.ai)
β”œβ”€β”€ packages/                       # pnpm workspace packages
β”œβ”€β”€ vendor/                         # Vendored dependencies
β”œβ”€β”€ scripts/                        # Build, test, deploy scripts
β”œβ”€β”€ test/                           # Integration / e2e tests
β”‚
β”œβ”€β”€ openclaw.mjs                    # CLI entry point (executable)
β”œβ”€β”€ package.json                    # Root manifest (version: YYYY.M.D)
β”œβ”€β”€ tsconfig.json                   # TypeScript config
β”œβ”€β”€ tsdown.config.ts                # Build config
β”œβ”€β”€ vitest.config.ts                # Test config
β”œβ”€β”€ .env.example                    # Environment variable template
β”œβ”€β”€ Dockerfile                      # Production container
β”œβ”€β”€ docker-compose.yml              # Docker orchestration
β”œβ”€β”€ fly.toml                        # Fly.io deployment
└── render.yaml                     # Render.com deployment

Module Descriptions

Core Runtime

Module Files Description
src/agents/ ~337 Agent orchestration: config resolution, model selection, workspace dirs, sandbox settings, skill loading, auth profiles, sub-agent registry
src/gateway/ ~145 WebSocket control plane: RPC protocol, server methods, authentication, config reload, event broadcasting, presence tracking
src/auto-reply/ ~80 Inbound message pipeline: command detection, permission checks, reply queue, typing indicators, buffered dispatch
src/cli/ ~110 CLI framework: Commander.js program builder, profile selection, argument parsing, browser/channel setup
src/commands/ ~197 CLI command implementations: agent, auth, browser, channels, config, doctor, gateway, message, models, nodes, onboard, pairing, send, skills
src/config/ ~148 Configuration system: JSON5 loading, Zod validation, session storage, 32+ type modules defining every config key
src/infra/ ~170 Infrastructure: environment variable loading, binary management, port checking, TLS fingerprints, device identity, home dir resolution
src/routing/ ~30 Message routing: maps inbound messages to agents based on channel, account, peer, guild/team ID, and role bindings

Channels

Module Files Description
src/channels/ ~60 Shared channel infrastructure: dock (capabilities), registry, allowlists, plugins, mention handling, threading
src/telegram/ ~40 Telegram bot via grammY: polling, webhooks, group handling, media
src/discord/ ~50 Discord bot via discord.js: slash commands, threads, reactions, media
src/slack/ ~35 Slack bot via Bolt: socket mode, app tokens, channels, threads
src/signal/ ~25 Signal integration via signal-cli
src/imessage/ ~20 iMessage (legacy macOS-only, see BlueBubbles extension for recommended path)
src/web/ ~40 WhatsApp Web via Baileys: QR auth, message monitoring, auto-reply

Features

Module Files Description
src/browser/ ~84 Browser automation: Chrome DevTools Protocol (CDP), profile management, snapshots, page interactions, screenshot labels
src/memory/ ~58 Vector memory: embeddings (OpenAI, Gemini, Voyage, llama.cpp), semantic search, QMD memory system
src/plugins/ ~44 Plugin system: discovery, loading, CLI registration, hook system, tool/command registry
src/security/ ~30 Security: audit orchestrator, channel/plugin/filesystem/tool checks, dangerous tool denylist
src/tts/ ~20 Text-to-speech: OpenAI, ElevenLabs, Edge TTS providers; voice selection, text preprocessing
src/cron/ ~30 Scheduled jobs: at/every/cron format parsing, delivery tracking, isolated agent turns
src/media/ ~25 Media pipeline: MEDIA token parsing, MIME detection, image ops, file input validation
src/sessions/ ~15 Session metadata: send policy, model overrides, log level overrides, input provenance
src/hooks/ ~20 Event hooks: Gmail Pub/Sub, webhook triggers, custom agent wake actions
src/tui/ ~25 Terminal UI: interactive chat via pi-tui, slash commands, gateway integration, themes
src/canvas-host/ ~15 Canvas server: HTTP/WS for agent-driven UI, A2UI protocol, sandboxed file serving, live reload
src/acp/ ~10 Agent Communication Protocol: SDK client, permission flows, session management, message translation

Root Source Files

File Purpose
src/entry.ts CLI bootstrap β€” process initialization, Node flag injection, respawn for experimental warnings, profile parsing
src/index.ts Main export β€” public API, global error handlers, unhandled rejection handling, console capture
src/globals.ts Global state β€” verbose/yes flags, theme exports, logVerbose(), setVerbose(), isYes()
src/runtime.ts Runtime abstraction β€” log/error/exit functions with default and non-exiting (test) implementations
src/utils.ts Shared utilities β€” path handling, E164 normalization, WhatsApp JID conversion, UTF-16 safety, config dir resolution

Build & Test Config Files

File Controls
tsconfig.json TypeScript: ES2023 target, NodeNext modules, strict mode, legacy decorators, path aliases for plugin SDK
tsdown.config.ts Build: entry points, platform=node, production env, plugin SDK + hooks bundling
vitest.config.ts Tests: V8 coverage (70% threshold), forks pool, 2min timeout, auto-scaling workers
vitest.unit.config.ts Unit tests only (excludes gateway + extensions)
vitest.e2e.config.ts E2E tests: vmForks pool, configurable workers via OPENCLAW_E2E_WORKERS
vitest.gateway.config.ts Gateway-specific tests
vitest.extensions.config.ts Extension/plugin tests
vitest.live.config.ts Live integration tests (real credentials, sequential, LIVE=1)
.oxlintrc.json Linting: unicorn + typescript + oxc plugins, no-explicit-any: error, curly: error
.oxfmtrc.jsonc Formatting: import sorting, package.json script sorting
.pre-commit-config.yaml Pre-commit hooks: trailing whitespace, secret detection, shellcheck, actionlint, oxlint, oxfmt

Deployment Config Files

File Purpose
Dockerfile Production build: Node 22, pnpm install, pnpm build, runs as non-root node user
Dockerfile.sandbox Agent sandbox: Debian slim, bash/curl/git/jq/python3/ripgrep, runs as sandbox user
Dockerfile.sandbox-browser Browser sandbox: Chromium + Xvfb + VNC + noVNC, ports 9222/5900/6080
docker-compose.yml Orchestration: gateway + CLI services, port 18789/18790, volume mounts for config
fly.toml Fly.io: IAD region, shared-cpu-2x, 2GB RAM, persistent volume, auto HTTPS, force-start
fly.private.toml Fly.io (private): no public IP, access via fly proxy or WireGuard
render.yaml Render.com: starter plan, /health check, 1GB disk, auto-generated gateway token

Molty

OpenClaw was built for Molty, a space lobster AI assistant. 🦞 by Peter Steinberger and the community.

Community

See CONTRIBUTING.md for guidelines, maintainers, and how to submit PRs. AI/vibe-coded PRs welcome! πŸ€–

Special thanks to Mario Zechner for his support and for pi-mono. Special thanks to Adam Doppelt for lobster.bot.

Thanks to all clawtributors:

steipete sktbrd cpojer joshp123 Mariano Belinky Takhoffman sebslight tyler6204 quotentiroler Verite Igiraneza gumadeiras bohdanpodvirnyi vincentkoc iHildy jaydenfyi Glucksberg joaohlisboa rodrigouroz mneves75 BunsDev MatthieuBizien MaudeBot vignesh07 smartprogrammer93 advaitpaliwal HenryLoenwind rahthakor vrknetha abdelsfane radek-paclt joshavant christianklotz mudrii zerone0x ranausmanai Tobias Bischoff heyhudson czekaj ethanpalm yinghaosang nabbilkhan mukhtharcm aether-ai-agent coygeek Mrseenz maxsumrall xadenryan VACInc juanpablodlc conroywhitney Harald Buerbaumer akoscz Bridgerz hsrvc magimetal openclaw-bot meaningfool JustasM Phineas1500 ENCHIGO Hiren Patel NicholasSpisak claude jonisjongithub theonejvo abhisekbasu1 Ryan Haines Blakeshannon jamesgroat Marvae arosstale shakkernerd gejifeng divanoli ryan-crabbe nyanjou Sam Padilla dantelex SocialNerd42069 solstead natefikru daveonkels LeftX Yida-Dev Masataka Shinohara Lewis riccardogiorato lc0rp adam91holt mousberg BillChirico shadril238 CharlieGreenman hougangdev Mars orlyjamie McRolly NWANGWU LI SHANXIN Simone Macario durenzidu JustYannicc Minidoracat magendary Jessy LANGE mteam88 brandonwise hirefrank M00N7682 dbhurley Eng. Juan Combetto Harrington-bot TSavo Lalit Singh julianengel Jay Caldwell Kirill Shchetynin nachx639 bradleypriest TsekaLuk benithors Shailesh thewilloftheshadow jackheuberger loiie45e El-Fitz benostein pvtclawn 0xRaini ruypang xinhuagu Taylor Asplund adhitShet Paul van Oorschot sreekaransrinath buddyh gupsammy AI-Reviewer-QS Stefan Galescu WalterSumbon nachoiacovino rodbland2021 Vasanth Rao Naik Sabavat fagemx petter-b omair445 dorukardahan leszekszpunar Clawborn davidrudduck scald Igor Markelov rrenamed Parker Todd Brooks AnonO6 Tanwa Arpornthip andranik-sahakyan davidguttman sleontenko denysvitali Tom Ron popomore Patrick Barletta shayan919293 δΈεšδΊ†η‘ε€§θ§‰ Luis Conde Harry Cui Kepler SidQin-cyber Lucky Michael Lee sircrumpet peschee dakshaymehta davidiach nonggia.liang seheepeak obviyus danielwanwx osolmaz minupla misterdas Shuai-DaiDai dominicnunez lploc94 sfo2001 lutr0 dirbalak cathrynlavery Joly0 kiranjd niceysam danielz1z Iranb carrotRakko Oceanswave cdorsey AdeboyeDN j2h4u Alg0rix Skyler Miao peetzweg/ TideFinder CornBrother0x DukeDeSouth emanuelst bsormagec Diaspar4u evanotero Nate OscarMinjarez webvijayi garnetlyx miloudbelarebia Jeremiah Lowin liebertar Max rhuanssauro joshrad-dev adityashaw2 CashWilliams taw0002 asklee-klawd h0tp-ftw constansino mcaxtr onutc ryan unisone artuskg Solvely-Colin pahdo Kimitaka Watanabe Lilo Rajat Joshi Yuting Lin Neo wu-tian807 ngutman crimeacs manuelhettich mcinteerj bjesuiter Manik Vahsith alexgleason Nicholas Stephen Brian King justinhuangcode mahanandhi andreesg connorshea dinakars777 Flash-LHR JINNYEONG KIM Protocol Zero kyleok Limitless grp06 robbyczgw-cla slonce70 JayMishra-source ide-rea lailoo badlogic echoVic amitbiswal007 azade-c John Rood dddabtc Jonathan Works roshanasingh4 tosh-hamburg dlauer ezhikkk Shivam Kumar Raut Mykyta Bozhenko YuriNachos Josh Phillips ThomsenDrake Wangnov akramcodez jadilson12 Whoaa512 clawdinator[bot] emonty kaizen403 chriseidhof Lukavyi wangai-studio ysqander aj47 google-labs-jules[bot] hyf0-agent Jeremy Mumford Kenny Lee superman32432432 widingmarcus-cyber DylanWoodAkers antons austinm911 boris721 damoahdominic dan-dr doodlewind GHesericsu HeimdallStrategy imfing jalehman jarvis-medmatic kkarimi mahmoudashraf93 pkrmf Randy Torres sumleo Yeom-JinHo akyourowngames aldoeliacim Dithilli dougvk erikpr1994 fal3 jonasjancarik koala73 mitschabaude-bot mkbehr Oren shtse8 sibbl thesomewhatyou zats chrisrodz frankekn gabriel-trigo ghsmc iamadig ibrahimq21 irtiq7 jeann2013 jogelin Jonathan D. Rhyne (DJ-D) Justin Ling kelvinCB manmal Matthew MattQ Milofax mitsuhiko neist pejmanjohn ProspectOre rmorse rubyrunsstuff rybnikov santiagomed Steve (OpenClaw) suminhthanh svkozak wes-davis 24601 AkashKobal ameno- awkoy battman21 BinHPdev bonald dashed dawondyifraw dguido Django Navarro evalexpr henrino3 humanwritten hyojin joeykrug larlyssa liuy Mark Liu natedenh odysseus0 pcty-nextgen-service-account pi0 Syhids tmchow uli-will-code aaronveklabs andreabadesso BinaryMuse cash-echo-bot CJWTRUST cordx56 danballance Elarwei001 EnzeD erik-agens Evizero fcatuhe gildo Grynn huntharo hydro13 itsjaydesu ivanrvpereira jverdi kentaro loeclos longmaba MarvinCui MisterGuy420 mjrussell odnxe optimikelabs oswalpalash p6l-richard philipp-spiess RamiNoodle733 Raymond Berger Rob Axelsen sauerdaniel SleuthCo T5-AndyML TaKO8Ki thejhinvirtuoso travisp yudshj zknicker 0oAstro 8BlT Abdul535 abhaymundhara aduk059 afurm aisling404 akari-musubi Alex-Alaniz alexanderatallah alexstyl andrewting19 araa47 Asleep123 Ayush10 bennewton999 bguidolim caelum0x championswimmer Chloe-VP dario-github DarwinsBuddy David-Marsh-Photo dcantu96 dndodson dvrshil dxd5001 dylanneve1 EmberCF ephraimm ereid7 eternauta1337 foeken gtsifrikas HazAT iamEvanYT ikari-pl kesor knocte MackDing nobrainer-tech Noctivoro Olshansk Pratham Dubey Raikan10 SecondThread Swader testingabc321 0xJonHoldsCrypto aaronn Alphonse-arianee atalovesyou carlulsoe hrdwdmrbl hugobarauna jayhickey jiulingyun kitze latitudeki5223 loukotal minghinmatthewlam MSch odrobnik rafaelreis-r ratulsarna reeltimeapps rhjoh ronak-guliani snopoke thesash timkrase

About

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages