Skip to main content

什么是 OpenClaw

OpenClaw 是一款开源的自托管个人 AI 助手网关,项目主页地址为 https://openclaw.aiGitHub地址为 https://github.com/openclaw/openclaw。它允许你在自己的设备上运行一个统一的Gateway进程,将WhatsAppTelegramDiscordiMessageSlackSignal20余款主流即时通讯应用与 AI 编码代理(内置Pi agent)连接起来,让你随时随地都能与自己的AI助手对话。

简言之,OpenClaw做的事情是:一次部署,多端可用。你无需为每款App单独配置AI Bot,只需启动一个Gateway进程,所有已配置的渠道就都能接入同一个AI后端。

解决的核心问题

痛点OpenClaw 的解法
AI服务依赖云厂商,数据出境不可控自托管,数据不离境,规则自己定
多款消息App各需单独集成AI Bot单一Gateway同时服务所有渠道
缺乏工具调用与长上下文记忆能力内置Pi agent支持工具调用、会话记忆、多代理路由
移动端无法灵活触发AI工作流配套iOS/Android node,支持语音唤醒和实时Canvas
安装配置门槛高交互式openclaw onboard向导引导完成全流程

架构设计

OpenClaw采用分层架构设计,核心控制平面是Gateway,负责管理会话、路由、工具和事件。

核心组件

Gateway(控制平面)

GatewayOpenClaw的控制中枢,默认监听在18789端口,对外提供:

  • WebSocket 控制接口:所有Channel连接以及Web Control UIGateway之间均通过 WebSocket通信。
  • REST API:供CLI和远程管理调用。
  • 配置热重载Gateway监视openclaw.json文件变化,配置修改后立即生效,无需重启。
  • 守护进程管理:在macOS上使用launchd、在Linux上使用systemd,以用户服务方式常驻后台。

Channel Adapters(渠道适配器)

每个渠道通过独立的适配器实现,同一Gateway可以同时连接多个渠道:

渠道库/协议典型用途
WhatsAppBaileysWeb协议)个人最常用的移动端入口
TelegramgrammYBot 生态最完善,推荐首选
Discorddiscord.js社区协作和开发团队
SlackBolt SDK企业内部AI助手
Signalsignal-cli高隐私场景
iMessage/BlueBubblesBlueBubbles(推荐)/ imsgApple设备用户
IRC内置协议极客社区
Microsoft TeamsTeams API企业Office场景
Matrix内置适配去中心化通信
Feishu飞书 API中国企业用户
WebChat内置 WebSocket网页端直接聊天

此外还支持LINEMattermostNextcloud TalkNostrSynology ChatTlonTwitchZaloWeChat等平台(部分通过扩展包提供)。

Agent Runtime(智能体运行时)

OpenClaw内置Pi agent作为默认智能体运行时,通过RPC模式调用。它负责:

  • 工具调用exec(代码执行)、browser(网页浏览)、canvas(画布渲染)等
  • 跨对话记忆:会话TranscriptJSONL格式持久化存储于~/.openclaw/agents/<agentId>/sessions/
  • Bootstrap 文件注入:每次新会话开始时,自动将AGENTS.mdSOUL.mdUSER.md等文件注入上下文,赋予智能体持久「个性」和「记忆」
  • 多代理路由:可配置多个Agent实例,通过bindings规则将不同渠道、账号或用户路由到不同代理

Web Control UI(管理面板)

浏览器控制台,默认地址为http://127.0.0.1:18789,提供以下功能:

  • 实时聊天,与AI助手直接对话
  • 可视化配置编辑(表单模式和Raw JSON模式)
  • 会话列表与历史查看
  • 节点管理(配对macOS/iOS/Android

CLI(命令行工具)

openclaw命令行提供完整的管理能力:

# 启动/查看 Gateway 状态
openclaw gateway start
openclaw gateway status

# 交互式引导配置
openclaw onboard

# 配置管理
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.model.primary "anthropic/claude-sonnet-4-6"

# 发送消息
openclaw message send --to +1234567890 --message "Hello"

# 诊断
openclaw doctor
openclaw doctor --fix

# 更新
openclaw update --channel stable

Skills 与 Plugins

OpenClaw通过SkillsPlugins提供可扩展能力:

  • Skills:轻量级技能包,可以是Bundled(内置)、Managed~/.openclaw/skills)或 Workspace级别(<workspace>/skills),用于扩展智能体的专项能力(如图片生成、搜索等)。
  • Plugins:通过npm包发布,挂载到Gateway生命周期,可提供新渠道适配、工具或后端能力。
  • MCP:通过mcporter桥接MCP协议服务,不需要内置到核心就能灵活扩展工具。

配置详解

OpenClaw的配置文件为~/.openclaw/openclaw.json,使用JSON5格式(支持注释和尾随逗号)。所有字段均为可选,缺省时使用安全默认值。

提示:修改配置后Gateway会自动热重载,无需手动重启;openclaw doctor可检测配置合法性并在必要时自动修复。

顶层结构总览

顶层字段类型说明
authobject认证配置
gatewayobjectGateway 绑定、TLS、端口等
agentsobject智能体列表与默认值
bindingsarray渠道路由绑定规则
channelsobject各渠道连接配置
modelsobject模型提供商与模型定义
toolsobject工具开关与参数
skillsobjectSkill 条目配置
pluginsobject插件配置
sessionobject会话范围与重置策略
cronobject定时任务
hooksobject事件钩子
webobjectWebSocket/WhatsApp 连接参数
loggingobject日志级别与文件配置
secretsobject密钥引用(支持环境变量和文件)
envobject内联环境变量注入
uiobject控制台主题和AI助手名称
updateobject自动更新策略
discoveryobjectmDNS/Bonjour 和广域发现
canvasHostobjectCanvas 画布服务器配置
talkobjectTTS(文字转语音)配置
nodeHostobject移动端节点主机配置

Gateway 配置

// ~/.openclaw/openclaw.json
{
gateway: {
port: 18789, // 监听端口(默认 18789)
bind: "loopback", // 绑定模式:loopback | lan | auto | custom | tailnet
host: "127.0.0.1", // bind=custom 时的主机地址
tls: {
enabled: false, // 是否启用 TLS
autoGenerate: true, // 缺少证书时自动生成自签名
certPath: "/path/to/cert.pem",
keyPath: "/path/to/key.pem",
},
auth: {
mode: "token", // none | token | password | trusted-proxy
token: "your-long-random-token",
},
controlUi: {
enabled: true,
basePath: "/", // 控制台 URL 前缀
allowedOrigins: [], // 允许跨域访问的域名列表
},
tailscale: {
mode: "off", // off | serve | funnel
resetOnExit: false,
},
healthMonitor: {
enabled: true,
},
},
}

gateway.bind绑定模式说明:

说明
loopback仅监听127.0.0.1(最安全,默认值)
lan监听所有本地网络接口0.0.0.0
auto自动选择(通常等同于lan
custom使用gateway.host指定的地址
tailnet通过Tailscale网络暴露

模型配置

OpenClaw支持多种模型提供商,通过models.providers进行配置:

{
models: {
mode: "merge", // merge | replace(是否合并内置模型列表)
providers: {
// 自定义或自建模型服务(如 NewAPI / One-API)
"my-provider": {
baseUrl: "https://api.example.com/v1",
apiKey: { env: "MY_API_KEY" },
api: "openai-completions", // 使用的 API 协议
models: [
{
id: "my-model",
name: "My Custom Model",
api: "openai-completions",
reasoning: false,
input: ["text", "image"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 128000,
maxTokens: 4096,
},
],
},
},
},
}

支持的api协议类型:

协议标识说明
openai-completionsOpenAI Chat Completions格式
openai-responsesOpenAI Responses API
anthropic-messagesAnthropic Messages API
google-generative-aiGoogle Gemini API
bedrock-converse-streamAWS Bedrock Converse
ollama本地Ollama服务
azure-openai-responsesAzure OpenAI服务

在智能体默认值中设置主模型和降级模型:

{
agents: {
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-4.1"],
},
},
},
}

智能体(Agent)配置

{
agents: {
defaults: {
workspace: "~/.openclaw/workspace", // 工作目录
thinkingDefault: "low", // 默认思考级别:off | minimal | low | medium | high | xhigh | adaptive
blockStreamingDefault: "off", // 流式块传输:off | on
heartbeat: {
every: "2h", // 心跳检测间隔
model: "openai/gpt-4.1-mini", // 心跳使用的轻量模型
},
sandbox: {
enabled: false, // 沙盒隔离开关
workspaceRoot: "~/.openclaw/sandboxes",
},
},
list: [
{
id: "main",
default: true,
name: "Assistant",
workspace: "~/.openclaw/workspace",
model: { primary: "anthropic/claude-sonnet-4-6" },
},
{
id: "code-agent",
name: "Code Agent",
workspace: "~/.openclaw/workspace-code",
model: { primary: "openai/o3" },
skills: ["exec", "browser"], // 只允许使用指定技能
},
],
},
}

渠道路由绑定

通过bindings数组将不同渠道路由到指定智能体:

{
bindings: [
{
type: "route",
agentId: "code-agent",
comment: "Discord 中的 #coding 频道路由到专属代码代理",
match: {
channel: "discord",
peer: { kind: "channel", id: "123456789012345678" },
},
},
{
type: "route",
agentId: "main",
match: {
channel: "telegram",
},
},
],
}

渠道(Channels)配置

所有渠道共享DM访问策略:

策略值说明
pairing(默认)陌生人发来消息时,要求对方输入配对码方可通过
allowlist仅允许allowFrom白名单中的用户
open开放所有入站DM(需同时设置allowFrom: ["*"]
disabled忽略所有 DM

Telegram 渠道示例

{
channels: {
telegram: {
enabled: true,
botToken: "123456:ABCDEF...", // Bot Token
dmPolicy: "pairing",
allowFrom: ["tg:123456789"], // 白名单(tg:<用户 ID>)
groups: {
"*": { requireMention: true }, // 群组中需要 @ 机器人才回复
},
streaming: "partial", // 流式消息:off | partial | block | progress
historyLimit: 50, // 拉取历史消息条数
proxy: "socks5://localhost:9050", // 代理设置(国内必备)
},
},
}

Discord 渠道示例

{
channels: {
discord: {
enabled: true,
token: "your-bot-token",
dmPolicy: "pairing",
allowFrom: ["1234567890"],
guilds: {
"123456789012345678": {
requireMention: false,
channels: {
general: { allow: true },
},
},
},
textChunkLimit: 2000,
streaming: "off",
actions: {
reactions: true,
threads: true,
polls: true,
},
},
},
}

WhatsApp 渠道示例

{
channels: {
whatsapp: {
dmPolicy: "pairing",
allowFrom: ["+8613900001234"], // 国际格式手机号
groupPolicy: "allowlist",
groups: {
"*": { requireMention: true },
},
sendReadReceipts: true,
textChunkLimit: 4000,
},
},
web: {
enabled: true,
heartbeatSeconds: 60,
},
}

会话(Session)配置

{
session: {
scope: "per-sender", // per-sender | global
dmScope: "main", // main | per-peer | per-channel-peer
typingMode: "thinking", // never | instant | thinking | message
reset: {
mode: "daily", // daily | idle
atHour: 3, // 每天 3 点重置会话
},
resetByType: {
direct: { mode: "idle", idleMinutes: 60 },
group: { mode: "daily", atHour: 0 },
},
maintenance: {
pruneAfter: "30d", // 清理 30 天前的会话
maxEntries: 500,
},
},
}

定时任务(Cron)

{
cron: {
jobs: [
{
id: "daily-summary",
schedule: "0 8 * * *", // 每天 8:00 触发
agentId: "main",
message: "请总结今天的待办事项",
deliverTo: "tg:123456789", // 结果发送到 Telegram
},
],
},
}

工具(Tools)配置

{
tools: {
exec: {
enabled: true,
applyPatch: false, // 是否开启 apply_patch 工具
safeBinProfile: "default", // 安全白名单 profile
},
browser: {
enabled: true,
sandbox: true,
},
webSearch: {
enabled: true,
provider: "brave", // brave | perplexity | firecrawl
},
},
}

密钥(Secrets)管理

OpenClaw支持多种密钥引入方式,避免明文写入配置文件:

{
secrets: {
// 定义密钥引用
refs: {
"openai-key": { env: "OPENAI_API_KEY" }, // 从环境变量读取
"telegram-token": { file: "~/.secrets/tg.txt" }, // 从文件读取
},
},
// 使用密钥引用
channels: {
telegram: {
botToken: { secretRef: "telegram-token" },
},
},
}

也可以直接使用环境变量简写方式:

{
channels: {
telegram: {
botToken: { env: "TELEGRAM_BOT_TOKEN" },
},
},
}

快速入门

安装

# macOS / Linux(推荐)
curl -fsSL https://openclaw.ai/install.sh | bash

# 或通过 npm
npm install -g openclaw@latest

运行时要求:Node.js 24(推荐)或Node 22.14+

运行向导

openclaw onboard --install-daemon

交互式向导会引导你完成以下步骤:

  1. 选择模型提供商并填入API Key
  2. 配置Gateway绑定和认证
  3. 连接第一个渠道(推荐Telegram,上手最快)
  4. 安装后台守护进程(launchd/systemd

验证运行

openclaw gateway status       # 查看 Gateway 状态
openclaw doctor # 检测配置问题
openclaw dashboard # 在浏览器打开控制台

最小化配置示例

以下是一个连接Telegram并限制访问白名单的最小配置:

// ~/.openclaw/openclaw.json
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
model: {
primary: "anthropic/claude-sonnet-4-6",
},
},
},
channels: {
telegram: {
enabled: true,
botToken: { env: "TELEGRAM_BOT_TOKEN" },
dmPolicy: "pairing",
},
},
}

安全说明

OpenClaw的安全设计遵循以下原则:

  • 最小权限默认值:陌生人发来的消息默认触发配对流程(dmPolicy: "pairing"),不直接处理;
  • 认证保护Gateway在绑定非本地接口时强烈建议配置gateway.auth.token
  • 提示注入防御:建议使用最新一代强模型(如claude-opusgpt-4),以降低提示注入风险;
  • 沙盒隔离:通过agents.defaults.sandbox.enabled: true为非主会话启用工作区隔离;
  • openclaw doctor检测:运行openclaw doctor可扫描出危险的配置组合(如dmPolicy: "open"同时缺少认证)。