🎓 OpenClaw 源码学习计划
30天深入理解 OpenClaw 架构与源码
✅ 执行情况说明
已完成:Day 1-11 + Day 15-21 + Day 24(Browser 工具 CDP 集成 2026-04-20 完成)
下一步:Day 12 - 飞书通道(Feishu API 集成)
📋 学习目标
学完这30天,你将获得:
- ✅ 深度理解 OpenClaw 架构 - 能独立阅读和修改源码
- ✅ 掌握多 Agent 系统设计 - 能配置复杂的路由规则
- ✅ 能开发 Skills 和 Plugins - 实战开发能力
- ✅ 掌握最佳实践 - 避免社区常见的踩坑
- ✅ 具备企业级部署能力 - 安全、合规、稳定
📚 学习周安排
| 周次 | 主题 | 内容 | 状态 |
|---|---|---|---|
| 第1周 | 架构概览 + Gateway | 源码结构、启动流程、认证安全 | ✅ Day 1-7 完成 |
| 第2周 | Channels 通道系统 | Extensions 结构、通道选择策略 | ✅ Day 8 进行中 |
| 第2周 | Channels 通道 | WhatsApp/Telegram/Discord/飞书集成 | ✅ Day 8-11 完成 |
| 第3周 | Agents + Sessions | 多Agent协作、Session管理、Compaction | ✅ Day 15-21 完成 |
| 第4周 | Tools + Skills + Memory | 工具系统、技能开发、记忆增强 | ✅ Day 24 进行中 |
| 第5周 | 高级主题 | Subagents、总结 | ⏳ 待更新 |
📖 已完成的课程
✅ Day 1:项目结构总览
2026-03-28
核心主题:理解 OpenClaw 的三层架构
- 三层架构:Channels → Gateway → Agent
- Gateway 四职责:监听/路由/会话/认证
- Agent 结构:workspace + sessions + auth
- 源码入口链:openclaw.mjs → entry.js → subsystem.js
✅ Day 2:文档体系 + Skills 规范
2026-03-29
核心主题:文档架构、Skills 加载机制、Gating 机制
Skills 加载优先级:
workspace/skills (最高) → ~/.openclaw/skills → bundled skills (最低)
与 Agent Skills 的联系:Skills 可以是 Library、Framework、Generator、Wrapper
查看日记 →✅ Day 3:Gateway 架构
2026-03-30
核心主题:API Gateway、MCP Gateway、A2A Agent Gateway
Gateway 类型:
- Proxy Server (AI Gateway) - 统一 API 端点 + 虚拟密钥管理
- A2A Agent Gateway - 支持 LangGraph, Vertex AI, Azure AI Foundry
- MCP Gateway - 连接 MCP servers 到任何 LLM
✅ Day 4:Gateway 协议
2026-03-31
核心主题:WebSocket Wire Protocol、调试技巧
核心概念:
- 协议设计:WebSocket 文本帧 + JSON payload
- 三种帧类型:req(请求)、res(响应)、event(事件)
- 角色分离:operator(控制端)vs node(能力端)
握手流程:
Gateway → Client: connect.challenge {nonce, ts}
Client → Gateway: connect {签名nonce, 角色, 权限}
Gateway → Client: hello-ok {快照, policy}
调试命令:
openclaw gateway status openclaw status openclaw logs --follow
笔记位置:memory/openclaw-learning/day4-gateway-protocol.md
✅ Day 5:服务环境 + 多 Agent 架构
2026-04-01
核心主题:Multi-Agent 四种模式、Skills vs Subagents
LangChain 四种 Multi-Agent 架构:
| 模式 | 特点 |
|---|---|
| Subagents | 主 Agent 调用子 Agent |
| Skills | 共享技能,单 Agent |
| Handoffs | Agent 之间移交 |
| Router | 路由器分派 |
支持平台:Claude Code、Cursor、Aider、Windsurf、OpenClaw
查看日记 →✅ Day 6:认证与安全(深度版)
2026-04-14
核心主题:信任模型、Token机制、Pairing流程、Allowlist、安全审计、Prompt Injection
十大核心知识点:
- 信任模型:个人助手模型,不是多租户边界
- Gateway 认证:四种模式 +
timingSafeEqual防时间攻击 - Device Pairing:源码流程 + TTL(300秒)+ 签名机制(v3)
- DM Pairing:8字符配对码 + 1小时过期
- Scope 权限:operator 层级(admin > write > read)
- Allowlist:两层(DM + Group)+ 大小写不敏感
- 安全审计:
openclaw security audit+ 20+ checkId - Prompt Injection:三层防护 + content 也是威胁面
- 凭证存储:8种凭证位置 + Auth Credential Semantics
- 事件响应:Contain → Rotate → Audit
关键发现:
- SHA256 +
timingSafeEqual+ base64url 防时间攻击 - Loopback 和 Gateway host tailnet 自动批准
sessionKey是路由选择器,不是授权 token
笔记位置:
memory/openclaw-learning/day6-auth-security-deep.md(深度版 14.9KB)memory/openclaw-learning/day6-auth-security.md(基础版 9.9KB)
✅ Day 7:Gateway 调试实践
2026-04-15 & 2026-04-16
核心主题:Gateway 周总结 + 启动调试 + 日志分析 + 常见踩坑
Gateway 核心定位:
- AI 与世界的连接中心
- 所有消息的收发枢纽
- 安全认证与权限控制
- 定时任务与 cron 调度
启动流程(5步):
- 解析环境变量 → 构建 PATH → 创建 systemd 服务 → 启动进程 → 监听端口
常见踩坑汇总:
- 端口冲突:配置自定义端口 `--port 18789`
- 多进程问题:用 `systemctl --user` 管理,不用 `openclaw gateway start`
- PATH 缺失:确保 PATH 包含版本管理器路径
- Token 认证失败:检查 `~/.openclaw/config.json` 的 gateway.token
调试命令:
openclaw gateway status systemctl --user status openclaw-gateway tail -f /tmp/openclaw/openclaw-*.log
笔记位置:memory/openclaw-learning-plan.md(Day 7 学习笔记 158 行)
✅ Day 8:Channels 通道系统概述
2026-04-16 21:30
核心主题:Extensions 目录结构 + Plugin Registry + 通道选择策略
Extensions 分类(82 个):
- CHANNEL:21 个消息通道(telegram, whatsapp, discord, feishu, slack...)
- LLM:37 个语言模型提供商(anthropic, openai, google, mistral, groq...)
- OTHER:24 个其他工具(browser, elevenlabs, memory-core...)
通道选择策略:
CHAT_CHANNEL_ORDER:telegram → whatsapp → discord → irc → googlechat → slack → signal → imessage → linedirect → normalized → parent → wildcard:多级匹配流程
核心洞察:
- 所有通道都是插件,统一管理(Plugin Registry 模式)
- 缓存机制:registryVersion 检测变化
- 去重机制:防止重复插件注册
✅ Day 9:WhatsApp 通道
2026-04-17 21:02
核心主题:Baileys 集成 + QR Login + 访问控制 + Session Key
核心依赖:
- Baileys:@whiskeysockets/baileys 7.0.0-rc.9(WhatsApp Web 协议实现)
- Extension 结构:index/api/runtime-api/login-qr/action-runtime
访问控制层级:
- DM Policy:pairing/allowlist/open/disabled
- Group Policy:groups + groupPolicy + groupAllowFrom
- Mention Activation:explicit/pattern/reply-to-bot
Session Key 映射:
- Direct:agent:
: - Group:agent:
:whatsapp:group:
✅ Day 10:Telegram 通道
2026-04-18 18:50
核心主题:grammY 框架集成 + Bot Token + 访问控制 + 特色功能
核心依赖:
- grammY:grammy@1.41.1(TypeScript Bot API 框架)
- Runner:@grammyjs/runner@2.0.3(自动运行 bot)
- Throttler:@grammyjs/transformer-throttler@1.2.1(速率限制)
设置流程:
- Step 1:@BotFather → /newbot → 保存 token
- Step 2:配置 token + dmPolicy(不用 channels login!)
- Step 3:Gateway + pairing approve
- Step 4:添加群组 + 配置 groups
访问控制:
- DM Policy:pairing/allowlist/open/disabled
- Group Policy:groups(negative ID)+ groupAllowFrom(user ID)
- Privacy Mode:关闭后需 remove + re-add bot
特色功能:
- Forum Topics:Session Key 隔离 + Per-Topic Agent Routing
- Polls:完整投票功能支持
- Stickers:Cache + Search(Static WEBP)
- Reactions:ackReaction + reactionNotifications
- Inline Buttons:完整 keyboard 支持
- Exec Approvals:企业级审批流程
- Live Streaming:preview + editMessageText
与 WhatsApp 对比:
| 维度 | Telegram | |
|---|---|---|
| 设置难度 | QR Code(复杂) | Bot Token(简单) |
| 功能丰富度 | 基础 | Polls/Stickers/Forum |
| 群组支持 | JID | Chat ID(negative) |
| 企业级 | ❌ | ✅ Exec Approvals |
✅ Day 11:Discord 通道
2026-04-19 21:55
核心主题:@buape/carbon 框架集成 + Thread Bindings + 权限系统
核心依赖:
- @buape/carbon:Discord.js 封装(Gateway + Components)
- Gateway:WebSocket 连接 + Intents
- Components:Button/Modal/Select Menu/Container
入口文件结构:
- defineBundledChannelEntry:id/name/plugin/runtime/registerFull
- registerFull 钩子:subagent_spawning/ended/delivery_target
Thread Bindings(独特特性):
- 自动绑定:Subagent spawning → 自动创建 Thread
- 持久化:threadBindings.idleHours/maxAgeHours 配置
- 解绑通知:Thread archived → Session reset
权限系统:
- Guild/Channel Allowlist:users/roles/toolsBySender
- requireMention:channel > guild > true(默认)
- Prefix 格式:discord:/user:/pk: + @username
事件监听器:
- MessageCreateListener:消息入站
- ReactionAdd/RemoveListener:表情反应
- PresenceUpdateListener:在线状态
- ThreadUpdateListener:Thread 状态变更
与 Telegram 对比:
| 维度 | Discord | Telegram |
|---|---|---|
| 框架 | @buape/carbon | grammY |
| Thread | Thread Bindings(独特) | 无原生绑定 |
| 权限 | Guild/Channel/Roles | Chat Allowlist |
| 组件 | Button/Modal/Container | Inline Keyboard |
| 状态 | Presence Update | 无 |
✅ Day 21:多 Agent 实战(第三周总结)
2026-04-17 20:55
核心主题:验证多 Agent 配置 + Jason Zhu 12 核心技巧验证
验证结果:
- 7 个 Agent:main/tech/writer/scout/duty/worknote/news
- 32 个活跃 Sessions
- Jason Zhu 12/12:完美通过!
Jason Zhu 12 核心技巧:
| 技巧 | 验证 |
|---|---|
| 1. Soul 文件 | ✅ 每个 Agent 有完整 SOUL.md |
| 2. Identity | ✅ 名字 + emoji + 身份定义 |
| 3. Users | ✅ 汇报对象 + 团队关系 |
| 4. Agents | ✅ 7 个隔离 Agent + subagents |
| 5. Tools | ✅ 工作职责对应工具需求 |
| 6. 记忆增强 | ✅ HEARTBEAT.md + memory/ |
| 7. Errors 文档 | ✅ AGENTS.md 中的铁律 |
| 8. 自主权限 | ✅ bindings 路由 + cron |
| 9. 技能加载 | ✅ skills 目录 + cron jobs |
| 10. 多实例运行 | ✅ 7 个隔离 workspace |
| 11. Session 管理 | ✅ JSONL 转录 + dmScope |
| 12. Compaction | ✅ compaction.mode: "safeguard" |
笔记位置:memory/openclaw-learning-plan.md(Day 21 学习笔记)
✅ Day 24:Browser 工具
2026-04-20 16:26
核心主题:CDP 协议 + Profile 管理 + Snapshot + Act 操作
核心依赖:
- CDP:Chrome DevTools Protocol(浏览器自动化核心协议)
- Chromium Detection:多浏览器支持(Chrome、Brave、Edge、Chromium 等)
- Session Tab Tracking:每个 Session 追踪其打开的 Tab
Browser Profile 管理:
- openclaw:自动管理的隔离浏览器(测试、Web Scraping)
- user:连接到已登录的浏览器(使用已有登录状态)
Snapshot 核心实现:
- refs:"aria" | "role”(引用模式)
- ref=eN:用于后续 act 操作定位元素
- maxChars:最大字符数限制
- interactive:只显示可交互元素
Act 操作类型:
- click/type/press/hover/drag/select/fill/wait/evaluate/close
SSRF 安全防护:
- 导航 URL 校验:只允许 http/https
- DNS Pinning:防止 DNS Rebinding
- 代理绕过:自动添加 NO_PROXY=localhost,127.0.0.1,[::1]
Browser vs Selenium/Playwright:
| 维度 | Browser 工具 | Selenium/Playwright |
|---|---|---|
| 协议 | CDP(原生) | WebDriver(中间层) |
| Snapshot | 结构化内容 | 截图 + OCR |
| Profile | 多 Profile 支持 | 单一浏览器 |
| 集成 | OpenClaw 内置 | 需额外安装 |
| 安全 | SSRF 校验 | 无内置安全 |
踩坑汇总:
- 代理导致 CDP 失败:OpenClaw 自动绕过(NO_PROXY)
- 浏览器版本过旧:Chrome MCP 需要 v144+
- 内存不足:及时 close,监控内存
- Snapshot 不完整:wait + 滚动 4-5 次
- 截图太大:使用 ref 截取特定元素
笔记位置:memory/openclaw-learning-plan.md(Day 24 学习笔记 120 行)