* feat(gateway): proxy channel conversation avatars * feat(discord): capture conversation avatars * feat(slack): capture DM sender avatars * test(discord): bind guild avatar mock * feat(ui): render channel conversation avatars * fix(ui): align sidebar owner fixtures * fix(gateway): version channel-avatar routes by media revision A stable per-session URL let AuthenticatedAvatarRouteLoader's blob and sticky-404 caches pin a mounted row to a stale or blank avatar after the backing media changed. Append an opaque digest of the media reference so replacement and 404-recovery change the route identity. * test(ui): align sidebar owner facet * fix(ui): keep owner chip until channel avatar loads A session with a channelAvatarUrl suppressed its owner chip even while the blob was loading, auth was not ready, or the route 404ed, leaving an empty lead slot. The chip now rides as fallback content inside the avatar element and yields only to a usable image. Covers 404 and auth-pending states; avatar rows keep renderedOwnerId unset so an owner-viewer stays visible in the facepile. * perf(ui): keep channel avatar fallback within budget * perf(ui): lazy-load the channel avatar element The avatar element and its authenticated blob loader rode the startup bundle through session-leading-indicator, pushing startup JS 51 B over the CI gzip budget. Channel avatars are not startup-critical: register the element on the first avatar row; the owner-chip fallback covers the one-time upgrade window. Startup JS returns ~1 KiB under the ceiling. * build(ui): raise startup baseline for channel avatars CI-measured startup JS is 344379 B against a 343289 B baseline (+1090 B). The avatar element and blob loader are code-split out of startup (previous commit); the residual is the sidebar lead-slot render branch and row plumbing, which cannot be deferred. Baseline updated via check-control-ui-performance --update-baseline with CI bytes per the script's contract; well inside the 4096 B ratchet step and 358400 B ceiling.
OpenClaw 🦞 — Your assistant, on your devices, in your chats
OpenClaw is a personal AI assistant that runs on your devices and meets you in the channels you already use. It is designed for a single operator and connects models, tools, messaging channels, and optional companion apps through one Gateway.
Website · Docs · Getting started · Showcase · FAQ · Vision · DeepWiki
Install
The installer supports macOS, Linux, and Windows. It provisions a supported Node.js runtime when needed.
# macOS / Linux / WSL2
curl -fsSL https://openclaw.ai/install.sh | bash
# Windows PowerShell
iwr -useb https://openclaw.ai/install.ps1 | iex
Already manage Node.js? Install the published package instead (Node 22.22.3+, 24.15+, or 25.9+):
npm install -g openclaw@latest --allow-scripts=openclaw
That command is for npm 12 or npm 11.16+. On npm 11.15 and earlier, omit
--allow-scripts=openclaw. See the
installation guide for the lifecycle script
contract, Docker, Nix, and other deployment paths.
Quick start
On a fresh install, the installer scripts start onboarding automatically. Complete the wizard they open. If you installed the package directly with npm, pnpm, or Bun, run:
openclaw onboard --install-daemon
After onboarding:
openclaw gateway status
openclaw dashboard
Onboarding verifies model access, creates the workspace, and configures the Gateway. The last command opens the Control UI; send a message there to confirm the assistant is working. See the getting started guide for channel setup and troubleshooting.
How it fits together
- The Gateway is the local control plane for sessions, tools, events, and channel connections.
- The Control UI, CLI, and TUI connect to the Gateway.
- Channels bring the assistant to WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, and other messaging services.
- Companion apps and nodes add voice, Canvas, camera, screen, and device-local actions on supported platforms.
OpenClaw works with hosted and local model providers. Its tools, skills, and plugins extend what an assistant can do.
Security
Treat inbound messages as untrusted input. DM-capable channels pair unknown senders by default; approve a pairing request with openclaw pairing approve <channel> <code>.
Tools run on the host for the main session unless you configure sandboxing. Read the security guide, exposure runbook, and sandboxing guide before connecting other users or exposing the Gateway remotely.
Documentation
| Goal | Start here |
|---|---|
| Configure models and auth | Models · Model providers |
| Connect a messaging service | Channels |
| Add tools, skills, and plugins | Tools · Skills · Plugins · ClawHub |
| Run apps and device nodes | Platforms · Nodes |
| Use the CLI and chat commands | CLI reference · Slash commands |
| Configure or operate the Gateway | Configuration · Architecture · Updating · Release channels |
Development
The repository is a pnpm workspace. Plain npm install at the repository root is not supported.
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
pnpm build
pnpm ui:build
See CONTRIBUTING.md for the contribution workflow and the source setup guide for the development loop.
Community
OpenClaw is developed in the open by the OpenClaw Foundation, a non-profit. See CONTRIBUTING.md for maintainers and contribution guidelines; AI-assisted PRs are welcome.
Use the issue chooser for bugs and feature requests, ask setup questions in Discord, and report vulnerabilities through SECURITY.md. New capabilities usually belong in plugins built on the plugin SDK and shared through ClawHub.
OpenClaw was built for Molty, a space lobster AI assistant, by Peter Steinberger and the community. Explore the project lore, soul.md, Peter's site, Star History, and @openclaw.
Special thanks to Mario Zechner for his support and for pi, and to Adam Doppelt for the lobster.bot domain.
Sponsors
Contributors
Thanks to all clawtributors:
License
MIT © OpenClaw Foundation. See THIRD_PARTY_NOTICES.md for incorporated or adapted code.
