OpenClaw is a personal AI assistant you run on your own devices.
It answers you on the channels you already use. 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.
Preferred setup: run openclaw onboard in your terminal.
OpenClaw Onboard guides you step by step through setting up the gateway, workspace, channels, and skills. It is the recommended CLI setup path and works on macOS, Linux, and Windows.
Windows desktop users can start with the native Windows Hub companion app for setup, tray status, chat, node mode, and local MCP mode.
Works with npm, pnpm, or bun.
Model note: while many providers and models are supported, prefer a current flagship model from the provider you trust and already use. See Onboarding.
Send a test message or ask the assistant after either startup mode is running:
bash
1# Send a message2openclaw message send --target +1234567890 --message "Hello from OpenClaw"34# Talk to the assistant (optionally deliver back to any connected channel: WhatsApp/Telegram/Slack/Discord/Google Chat/Signal/iMessage/IRC/Microsoft Teams/Matrix/Feishu/LINE/Mattermost/Nextcloud Talk/Nostr/Synology Chat/Tlon/Twitch/Zalo/Zalo Personal/WeChat/QQ/WebChat)5openclaw agent --message "Ship checklist" --thinking high
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.
Onboarding + skills — onboarding-driven setup with bundled/managed/workspace skills.
Security model (important)
Default: tools run on the host for the main session, so the agent has full access when it is just you.
Group/channel safety: set agents.defaults.sandbox.mode: "non-main" to run non-main sessions inside sandboxes. Docker is the default sandbox backend; SSH and OpenShell backends are also available.
Use pnpm for source checkouts. The repository is a pnpm workspace, and bundled
plugins load from extensions/* during development so their package-local
dependencies and your edits are used directly. Plain npm install at the repo
root is not a supported source setup.
For the dev loop:
bash
1git clone https://github.com/openclaw/openclaw.git
2cd openclaw
34pnpminstall56# First run only (or after resetting local OpenClaw config/workspace)7pnpm openclaw setup
89# Optional: prebuild Control UI before first startup10pnpm ui:build
1112# Dev loop (auto-reload on source/config changes)13pnpm gateway:watch
If you need a built dist/ from the checkout (for Node, packaging, or release validation), run:
bash
1pnpm build
2pnpm ui:build
pnpm openclaw setup writes the local config/workspace needed for pnpm gateway:watch. It is safe to re-run, but you normally only need it on first setup or after resetting local state. pnpm gateway:watch does not rebuild dist/control-ui, so rerun pnpm ui:build after ui/ changes or use pnpm ui:dev when iterating on the Control UI. If you want this checkout to run onboarding directly, use pnpm openclaw onboard --install-daemon.
Note: pnpm openclaw ... runs TypeScript directly (via tsx). pnpm build produces dist/ for running via Node / the packaged openclaw binary, while pnpm gateway:watch rebuilds the runtime on demand during the dev loop.
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).
See CONTRIBUTING.md for guidelines, maintainers, and how to submit PRs.
Use the issue chooser for bugs, docs bugs, and feature requests;
ask setup/support questions in Discord; and report vulnerabilities through SECURITY.md.
PRs should link the relevant issue when possible and follow the PR template with problem, impact, and evidence.
AI/vibe-coded PRs welcome! 🤖
Special thanks to Mario Zechner for his support and for
pi-mono.
Special thanks to Adam Doppelt for the lobster.bot domain.