原创深度 · OpenClaw 完全解析 · 阅读约 15 分钟
OpenClaw 是 2026 年初增长最快的开源项目之一,8 周内 GitHub Stars 从 9,000 飙到 180,000。但大多数人对它的认知停留在「能在 WhatsApp 上问问题」。这篇文章想做一件更有价值的事:把 OpenClaw 真正拆开来说清楚。七个核心主题:架构 → Tools vs Skills → Skills/MCP/插件 → 记忆体系 → 工作区文件 → 多 Agent → 自动化。读完这一篇,你会真的理解它是怎么工作的——不只是会用,而是知道为什么这样用。▲ OpenClaw 的核心定位:AI 模型提供智能,OpenClaw 提供执行环境。它不是聊天机器人,是 AI Agent 的操作系统。
OpenClaw 采用 Hub-and-Spoke(轮毂-辐条)架构,核心是一个叫 Gateway 的进程,跑在 ws://127.0.0.1:18789。理解 Gateway 的最快方式是一个类比:把它想成一座机场的塔台——负责所有航班调度(消息路由)、安检规则(访问控制)、分配登机口(频道连接)。模型是飞行员,它负责实际飞行(推理),但起降许可、跑道分配、紧急事务全归塔台管。频道连接——同一个 Gateway 同时连接 WhatsApp、Telegram、Discord、飞书、iMessage 等 20+ 平台。消息路由——判断每条消息属于哪个 Agent、哪个会话。认证鉴权——控制谁能触发 Agent,支持 allowlist、pairing、mention gating。状态持久化——所有状态写入本地 ~/.openclaw/,不依赖云端。Gateway 非常轻量——树莓派就能运行,重度计算全部卸载给外部 API。Stage 1 · 频道适配:来自 WhatsApp、Telegram、Discord 的消息被标准化为统一内部格式,附件提取。Stage 2 · 网关路由:确定这条消息属于哪个会话,分配到对应队列。Stage 3 · 车道队列:默认串行执行。这是刻意的设计——并行执行会产生竞态条件,破坏会话一致性。Stage 4 · Agent 运行器:模型选择、API Key 轮换、提示词组装、上下文窗口管理。Stage 5 · 代理循环:模型提出工具调用 → 系统执行 → 结果回填 → 循环继续,直到完成。Stage 6 · 响应返回:结果流式传回原始频道。OpenClaw 在设计上假设 LLM 可能遭受 Prompt Injection——所以用多层防御限制损害,而不是信任模型的判断:危险操作需要人工审批、工具可以在 Docker 沙箱中运行、通过 allowlist 控制谁能触发 Agent。
02 Tools vs Skills:最容易混淆的核心区别这是理解 OpenClaw 最关键的一步。很多人用了很久,还搞不清楚为什么某个 Skill 装了却不起作用。Tools(工具)= 器官:决定 OpenClaw「能不能」做某件事。没有启用对应 Tool,就像没有手——什么也做不了。Skills(技能)= 教科书:教 OpenClaw「怎么」组合 Tools 来完成任务。Skill 安装了,但没有启用对应 Tool,它加载了也执行不了。一个 Skill 真正生效,需要同时满足三个条件:配置(Tool Profile 是否允许)× 安装(对应 CLI 工具是否存在)× 授权(是否已登录授权)第一层——8 个基础工具(Agent 的手脚):read 读文件,write 写文件,edit 改文件,apply_patch 打补丁,exec 跑 Shell,web_search 网页搜索,web_fetch 抓网页,browser 浏览器自动化。第二层——基础设施工具(让 Agent 从被动变主动):memory_search 语义搜记忆,memory_get 读记忆文件,cron 定时任务,sessions 子 Agent 生成,nodes 控制 iOS/Android 设备。第三层——53 个内置 Skills(知识层):教 Agent 怎么用 Google、Obsidian、Slack 等服务。Tool 是能力,Skill 是用法。openclaw config set tools.profile coding # coding / minimal / messaging / full
{tools: {profile: "coding",allow: ["browser"], // 在 coding 基础上额外开放deny: ["exec"] // 禁用某个工具 }}
{tools: {byProvider: {"ollama/deepseek-coder:6.7b": {allow: ["group:fs"] // 只给文件读写权限 } } }}
原则:多余的工具会增加 Token 消耗、扩大攻击面、增加模型决策复杂度。从最小权限开始,需要什么再加什么。
03 Skills、MCP 和插件:三种扩展方式,各司其职扩展 OpenClaw 能力有三条路,选哪条取决于你的需求:写 Skill:Markdown 指令文件,教 Agent 怎么用现有工具完成任务。零代码,最快。写 Plugin:TypeScript 模块,可以注册全新的 Tool 定义。需要写代码,能力最强。接 MCP Server:通过 MCP 协议暴露外部工具,接入任何支持 MCP 的服务。▲ ClawHub:OpenClaw 的官方 Skill 市场,截至 2026 年 2 月已有 13,000+ 个社区构建的 Skill。clawhub search gmail # 搜索npx clawhub@latest install gmail-skill # 安装clawhub sync --all # 同步更新# 或者直接告诉 Agent:# "搜索一下 ClawHub 上有没有 Notion 相关的 Skill"
Skill 优先级(高到低):<workspace>/skills/ → ~/.openclaw/skills/ → 内置 Skills。同名 Skill 高优先级覆盖低优先级。内置 Skills 默认自动加载——如果系统装了对应 CLI 工具,Skill 就会激活。要精确控制,用白名单模式:{skills: { allowBundled: ["web-search", "peekaboo", "obsidian"] }}
当 Skill 做不到的时候(比如需要调用私有 API 创建 Jira 工单),就需要 Plugin:// ~/.openclaw/plugins/jira-tools/index.tsimport type { OpenClawPlugin } from'@openclaw/sdk';const plugin: OpenClawPlugin = {name: 'jira-tools',version: '1.0.0',tools: [ {name: 'jira_create_ticket',description: 'Create a JIRA ticket with title, description, and priority',parameters: {type: 'object',properties: {title: { type: 'string' },description: { type: 'string' },priority: { type: 'string', enum: ['low', 'medium', 'high'] } },required: ['title', 'description'] },async execute({ title, description, priority = 'medium' }) {const response = await fetch(`${process.env.JIRA_BASE_URL}/rest/api/3/issue`, {method: 'POST',headers: { 'Authorization': `Basic ${Buffer.from(`email:${process.env.JIRA_API_TOKEN}`).toString('base64')}` },body: JSON.stringify({ fields: { summary: title, /* ... */ } }) });const data = await response.json();return { ticketId: data.key, url: `${process.env.JIRA_BASE_URL}/browse/${data.key}` }; } } ]};exportdefault plugin;
openclaw plugins enable jira-toolsopenclaw gateway restart # Plugin 修改后需要重启
Plugin 可以附带自己的 Skills 目录,启用时 Skills 自动加载。
文件是真相之源(files are the source of truth)——AI Agent 只「记住」被写入磁盘的内容。所有记忆都是纯文本 Markdown 文件。你可以用任何编辑器打开,可以 Git 版本控制,没有不透明的数据库黑箱。第一层:每日日志memory/YYYY-MM-DD.md每天追加写入,捕捉当天的重要事件、决策、对话主题。新会话启动时,Agent 读取今天和昨天的日记维持连续性——这是「工作记忆」。存储精炼的长期记忆——持久偏好、重大决策记录、压缩后的历史。仅在私人主会话中加载,从不在群组中加载,防止个人信息泄露到有他人在场的群聊里。决策、偏好、持久事实 → 写入 MEMORY.md日常笔记、临时上下文 → 写入 memory/YYYY-MM-DD.md有人说「记住这个」 → 立即写入磁盘,不要留在 RAM 里
BM25 是什么? 信息检索领域的经典算法,简单说:一个词在某个文件里出现越多、该文件越短,这个文件的匹配得分越高——但如果这个词在所有文件里都很常见(比如「的」),权重会自动降低。适合精确关键词匹配,你搜「家庭网络设置」,它就找包含这几个字的文件。向量搜索是什么? 把文本转化为高维数学向量,通过向量距离衡量语义相似度。不在乎具体用词——搜「WiFi 配置」能找到写着「路由器设置」的文件,因为它理解两者含义相近。为什么混合两种? BM25 找不到同义词替换的内容,向量搜索可能忽略精确技术术语。OpenClaw 把两者加权组合,取长补短。 | | |
| | |
| memory/2026-02-03.md(7 天前) | | |
| memory/2025-09-15.md(148 天前) | | |
假设今天是 2 月 10 日,查询「Rod 的工作时间表」:9 月的笔记语义匹配度最高,但因为时间太久,衰减后掉到底部。这符合直觉——上周的工作安排比半年前的更可信。MMR(Maximal Marginal Relevance)防止搜索返回一堆内容相似的片段。公式:MMR = λ × 相关性 − (1−λ) × 与已选结果的相似度默认 λ = 0.7——略偏向相关性,同时避免重复。如果发现 memory_search 总是返回大量重复的每日笔记,可以降低 λ 值增加多样性。会话接近上下文窗口限制(约 200K token 窗口在约 176K 时触发),OpenClaw 会静默触发一个 Agent 轮次,提醒模型把重要内容写入磁盘。长会话不会悄悄丢失上下文。Cognee 是什么? 知识图谱引擎。默认记忆是「搜文件」,Cognee 是「搜关系」——它扫描所有记忆文件,提取人名、项目名、日期等实体,构建「Alice → 负责 → 导航重设计 → 截止 → 3 月 1 日」这样的关系链,让 Agent 能回答「Alice 的项目什么时候交?」这类跨文件的关联问题。
工作区(通常是 ~/clawd/)里有一组 Markdown 文件,每次会话启动时注入系统提示,让 Agent「醒来就知道自己是谁」。~/clawd/├── AGENTS.md # 操作规则和 SOP ← 每次加载├── SOUL.md # 人格、价值观和边界 ← 每次加载├── USER.md # 关于你的一切 ← 每次加载├── IDENTITY.md # Agent 的名字和身份 ← 每次加载├── TOOLS.md # 工具使用指南和环境备注 ← 每次加载├── MEMORY.md # 长期记忆 ← 仅私人会话├── HEARTBEAT.md # 主动检查清单 ← 心跳轮询时├── BOOTSTRAP.md # 首次运行引导 ← 用后删除├── BOOT.md # 每次重启的启动仪式 ← 重启时运行└── memory/ └── 2026-03-18.md # 今天的日记
优先级链:全局配置 > 每 Agent 配置 > 工作区文件 > 默认值。就像 CSS 优先级——越具体的定义越优先。这不是配置,是「哲学」。写好 SOUL.md,你的 Agent 就不再是那种满口「当然可以!非常乐意帮助您!」的空洞机器人:# SOUL.md - Who You Are_You're not a chatbot. You're becoming someone._## Core TruthsBe genuinely helpful, not performatively helpful.Skip the "Great question!" — just help.Have opinions.You're allowed to disagree, prefer things, find stuff amusing or boring.
社区有一个叫 onlycrabs.ai 的平台专门分享 SOUL.md 模板。放稳定的规则,不放临时任务。每次会话先读哪些文件、什么时候写记忆、安全红线是什么、群聊里什么时候该沉默。最快的个性化方式:直接告诉 Agent——「把这条加到 USER.md 里——我想要简短回答和可直接复制的命令。」HEARTBEAT.md——让 Agent 主动起来Gateway 默认每 30 分钟触发一次心跳,Agent 读取这个清单,判断有没有需要处理的事:## Heartbeat Checks- 检查有没有需要处理的新邮件- 确认今天的日历有没有即将开始的会议- 检查监控的网站有没有更新- 清理过期的 MEMORY.md 条目
没有需要处理的事,Gateway 拦截 HEARTBEAT_OK,不会打扰你。有事才主动发消息。"Hey, let's get you set up. Read BOOTSTRAP.md and walk me through it."
06 多 Agent:先掌握单 Agent,再谈扩展不要过早多 Agent 化。 单 Agent 配置得当,能处理绝大多数场景。真正需要多 Agent 的时机:不同用途的记忆不能混合(工作 vs 个人)、不同场景需要不同工具权限、需要给不同的人或群组提供完全隔离的 AI 体验。每个 Agent 各自独立:工作区文件(SOUL.md、USER.md 等)、认证档案、会话历史、记忆索引。绝对不要让两个 Agent 共用同一个 agentDir——会导致认证和会话冲突。{agents: {list: [ { id: "main", default: true }, {id: "work",workspace: "~/.openclaw/workspace-work",model: { primary: "anthropic/claude-opus-4-6" } }, {id: "family",workspace: "~/.openclaw/workspace-family",sandbox: { mode: "all" },tools: { deny: ["exec", "browser", "web_fetch"] } // 家庭群禁危险操作 } ] },bindings: [ { agentId: "work", match: { channel: "slack" } }, { agentId: "work", match: { channel: "telegram" } }, { agentId: "family", match: { channel: "whatsapp",peer: { kind: "group", id: "[email protected]" } } } ]}
Binding 按顺序评估,第一个匹配的获胜,更具体的 Binding 放前面。WhatsApp 日常 + Telegram 深度工作(省成本又保质量):bindings: [ { agentId: "chat", match: { channel: "whatsapp" } }, // Sonnet,快速回复 { agentId: "opus", match: { channel: "telegram" } } // Opus,深度推理]
同一个 WhatsApp 按联系人分流不同 Agent:bindings: [ { agentId: "alex", match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230001" } } }, { agentId: "mia", match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230002" } } }]
07 Cron + Webhook:让 Agent 在你不说话时也干活这是 OpenClaw 和普通聊天机器人最本质的区别——它可以主动。决策原则:需要精确时间点 → Cron;可以和其他检查合并 → Heartbeat;一次性提醒 → Cron(--delete-after-run)。openclaw cron add --name "会议提醒" --at "20m" \ --session main --system-event "Reminder: standup in 10 min." \ --delete-after-run
openclaw cron add --name "价格监控" --every "6h" \ --session isolated \ --message "检查监控商品价格,只在有明显降幅时通知我。" \ --announce --channel telegram --to"你的ID"
openclaw cron add --name "每日晨报" --cron "0 7 * * 1-5" \ --tz "Asia/Shanghai" --session isolated \ --message "Morning briefing: 今天的日历、未读重要邮件、上海天气、MEMORY.md 中的待办。" \ --model opus --announce --channel whatsapp --to"+861xxxxxxxxx"
推荐用隔离会话(--session isolated)做监控和报告类任务——每次全新会话,不影响你正在进行的对话,完成后自动发摘要给你。GitHub PR 合并、Stripe 付款失败、智能家居传感器——都可以通过 Webhook 唤醒 Agent:{hooks: {enabled: true,token: "${WEBHOOK_SECRET}",mappings: [ {match: { path: "github" },action: "agent",agentId: "main",deliver: true } ] }}
openclaw doctor --fix # 基础检查 + 自动修复openclaw doctor --deep --yes# 深度扫描openclaw logs --follow # 实时日志openclaw channels status --probe # 频道连接状态
Gateway 不启动:openclaw.json 含未知字段 → 删除后 openclaw doctor --fix;端口占用 → lsof -i :18789 kill 掉。Skill 不触发:description 字段没包含用户实际会说的短语,改写它,用口语化触发词。Skill 加载但执行失败:Tool 策略禁了所需工具,检查 tools.profile 和 tools.deny。Agent 不记得之前的话:没写入记忆文件,明确说「记住这个」或检查 memory/ 目录。群聊中泄露个人信息:MEMORY.md 在群组中加载了,在 AGENTS.md 里加「仅主会话加载 MEMORY.md」规则。Cron 时间不对:VPS 通常是 UTC,明确指定 --tz "Asia/Shanghai"。多 Agent 路由到错误 Agent:更具体的 Binding 放前面,用 openclaw agents list --bindings 验证。Token 消耗过高:太多 Skill 加载进系统提示,配置 skills.allowBundled 白名单,日常改用 Sonnet,复杂任务用 Opus。openclaw reset--scope config # 重置配置,保留会话openclaw reset--scope config+creds+sessions # 重置配置+凭证+会话,保留工作区openclaw reset--scope full # 完全重置(慎用)
把这七个核心主题串起来,OpenClaw 的设计意图其实非常清晰:Tools + Skills + 插件 是能力层,定义 Agent 能做什么、会做什么。记忆体系 是时间维度,让 Agent 拥有跨会话的连续性和关联推理能力。工作区文件 是人格层,让这个 Agent 成为「你的」Agent。多 Agent + 路由 是空间维度,让不同场景有不同的「大脑」。Cron + Webhook 是主动性,让 Agent 从「被动响应」变成「主动行动」。
基于 OpenClaw 官方文档 (docs.openclaw.ai)、GitHub 源码及社区实战经验整理,截至 2026 年 3 月。#OpenClaw#AI Agent#自托管#架构解析#自动化#效率工具