OpenClaw 源码解析(三):仓库目录结构解析

1. 本期目标

前两期分别介绍了 OpenClaw 的项目定位和源码运行方式。到目前为止,我们已经知道:

复制代码
OpenClaw 不是一个简单的聊天机器人,
而是一个本地优先、多渠道、可调用工具、可扩展技能、带安全隔离机制的个人 AI 助手系统。

这一期开始正式看仓库结构。

对于 OpenClaw 这种工程规模较大的项目,一开始不要直接钻进某个文件逐行看。更合理的方式是先建立目录地图,知道每个目录大概负责什么,再逐步进入核心链路。OpenClaw 仓库根目录下包含 appsconfigdeploydocsextensionspackagesqascriptssecurityskillssrctestui 等目录。(GitHub)

本期主要解决几个问题:

复制代码
1. OpenClaw 根目录下有哪些重要目录?
2. src、extensions、skills、packages、apps、ui 分别负责什么?
3. docs、security、test、qa、scripts 这类目录如何辅助源码学习?
4. 初学者应该从哪个目录开始看?
5. 后续源码解析应该按照什么目录顺序推进?

2. 为什么要先看目录结构?

源码解析最怕一开始就陷入细节。

比如一上来就打开 src 里的某个文件,可能会看到大量命令、事件、会话、工具、配置相关代码。没有整体地图时,很容易不知道这个文件在系统中处于什么位置。

所以,这一期的目标不是把每个文件都讲完,而是先建立一个大致判断:

复制代码
哪些目录是核心运行时?
哪些目录是扩展能力?
哪些目录是技能库?
哪些目录是前端或移动端?
哪些目录是配置、部署、安全和测试?

有了这个判断,后面再读 CLI、Gateway、Channel、Agent、Tools、Skills、Sandbox,就不会迷路。


3. 根目录整体印象

从仓库根目录看,OpenClaw 至少可以分成六类内容:

复制代码
第一类:核心运行时代码
src

第二类:扩展与插件
extensions
packages

第三类:技能和能力模板
skills

第四类:应用端和界面
apps
ui

第五类:工程支持
config
deploy
scripts
docs

第六类:质量与安全
test
qa
security

这种目录结构说明 OpenClaw 不是一个"单后端 + 单前端"的简单项目,而是一个包含核心运行时、插件系统、技能系统、多端应用、控制界面、安全规则和测试体系的综合 Agent 工程。根目录也包含 openclaw.mjspackage.jsonpnpm-workspace.yaml、多个 tsconfig 文件和构建配置文件,这说明它是一个以 Node / TypeScript / pnpm workspace 为核心组织方式的项目。(GitHub)


4. src:核心运行时代码

src 是后续源码解析最重要的目录之一。

src 目录列表可以看到,它下面包含 agentschannelschatclicommandsconfigcrondaemon 等多个子目录。(GitHub)

可以先这样理解:

复制代码
src
├─ cli / commands       命令行入口和命令实现
├─ daemon              Gateway 后台运行相关逻辑
├─ config              配置加载与解析
├─ agents              Agent 相关逻辑
├─ channels            渠道接入相关逻辑
├─ chat                对话处理相关逻辑
├─ cron                定时任务相关逻辑
└─ 其他运行时模块

src 的地位类似于整个项目的"大脑和神经系统"。

后续我们分析:

复制代码
openclaw 命令如何解析?
Gateway 如何启动?
用户消息如何进入 Agent?
session 如何创建和保存?
模型如何被调用?
工具和技能如何被加入上下文?

这些问题都绕不开 src


5. 初学者如何看 src?

src 不适合一次性全部读完。

建议按照主链路来读:

复制代码
第一步:看 cli / commands
先找到 openclaw 命令从哪里进入。

第二步:看 daemon / gateway 相关代码
理解 Gateway 如何启动和常驻。

第三步:看 config
理解 openclaw.json 和默认配置如何加载。

第四步:看 agents / chat
理解 Agent 如何处理用户消息。

第五步:看 channels
理解外部消息平台如何接入。

第六步:再看 tools、skills、sessions、cron 等扩展能力。

也就是说,src 的阅读方式不是"按字母顺序看目录",而是围绕这条链路:

复制代码
CLI
  ↓
Gateway
  ↓
Config / Session
  ↓
Agent
  ↓
Model / Tools / Skills
  ↓
Response

6. extensions:插件与外部能力扩展

extensions 是 OpenClaw 很有特点的目录。

extensions 目录列表可以看到,里面包含很多扩展项,例如 active-memoryadmin-http-rpcalibabaamazon-bedrockanthropicazure-speechbrowser 等。(GitHub)

这个目录说明 OpenClaw 的很多能力不是全部硬编码在核心运行时里,而是通过 extension 的方式组织

可以先分成几类理解:

复制代码
模型提供商扩展:
anthropic
amazon-bedrock
alibaba
byteplus 等

语音或多媒体扩展:
azure-speech 等

工具或系统能力扩展:
browser
active-memory
admin-http-rpc 等

其他平台或服务扩展:
根据目录名称继续展开分析。

这种设计的好处是:

复制代码
核心运行时负责统一调度;
具体模型、工具、平台能力通过 extensions 扩展。

后续分析模型调用链路、工具系统、Channel 接入时,extensions 都会是重点目录。


7. extensions 和 src 的关系

可以这样理解二者关系:

复制代码
src:
定义 OpenClaw 的核心运行机制。

extensions:
给核心机制提供可插拔能力。

举个例子:

复制代码
src 负责说明:
模型调用需要经过什么抽象接口。

extensions 负责实现:
Anthropic 怎么调;
Amazon Bedrock 怎么调;
浏览器工具怎么用;
语音服务怎么接。

这和很多大型框架的设计类似:核心框架保持稳定,具体能力以插件或扩展形式接入。

这也解释了为什么 OpenClaw 支持很多模型、渠道和工具能力。它不是每新增一个能力就改一堆核心代码,而是通过扩展目录把能力模块化。


8. packages:共享包和 SDK

packages 目录目前可以看到 memory-host-sdkplugin-package-contractplugin-sdksdk 等子目录。(GitHub)

从命名可以看出,这个目录更偏向"可复用包"和"接口契约"。

可以先这样理解:

复制代码
packages/sdk:
可能面向外部或内部调用 OpenClaw 能力的 SDK。

packages/plugin-sdk:
插件开发相关 SDK。

packages/plugin-package-contract:
插件包的结构或协议约束。

packages/memory-host-sdk:
记忆宿主相关的 SDK 或接口。

这里暂时不需要一开始深入。

对于初学者来说,packages 的意义是:

复制代码
当你看到 src 或 extensions 中引用某些 SDK、类型、接口时,
可以回到 packages 里找这些公共抽象的定义。

所以 packages 更像是支撑其他模块的"公共基础层"。


9. skills:内置技能库

skills 是 OpenClaw 的另一个重点目录。

从目录列表可以看到,它包含很多内置技能,例如 1passwordapple-notesapple-remindersbear-notesblogwatchercanvascoding-agentdiagram-makerdiscordgh-issues 等。(GitHub)

这个目录非常值得单独分析。

因为 Skills 体现的是:

复制代码
OpenClaw 不只是调用工具,
还可以通过技能文件获得特定任务能力。

可以这样理解:

复制代码
Tool:
让 Agent 能做某个动作。

Skill:
告诉 Agent 如何完成某类任务。

例如:

复制代码
apple-notes:
可能和 Apple Notes 工作流有关。

coding-agent:
可能和代码任务有关。

diagram-maker:
可能和图表生成有关。

gh-issues:
可能和 GitHub issue 处理有关。

后续分析 Skills 系统时,要重点看每个 skill 中是否包含 SKILL.md、工具说明、配置模板、提示词或工作流说明。


10. skills 和 extensions 的区别

这两个目录容易混淆。

可以这样区分:

复制代码
extensions:
更偏程序能力扩展,通常包含 TypeScript 代码、服务接入、模型接入、工具实现。

skills:
更偏 Agent 使用层能力,通常告诉 Agent 如何完成某类任务、如何使用某些工具或如何遵守某些流程。

举个简单例子:

复制代码
browser extension:
提供浏览器能力。

web research skill:
告诉 Agent 如何用浏览器做网页调研。

也就是说:

复制代码
extension 更像底层能力;
skill 更像上层使用方法。

后续源码阅读时,不能只看工具代码,还要看技能如何把工具组织成可执行任务。


11. apps:桌面端、移动端和伴随应用

apps 目录下可以看到 androidiosmacosmacos-mlx-ttsshared/OpenClawKitswabble 等子目录。(GitHub)

这说明 OpenClaw 不只面向命令行或浏览器,还包含移动端、桌面端和共享应用组件。

可以先这样理解:

复制代码
apps/android:
Android 节点或移动端相关代码。

apps/ios:
iOS 节点或移动端相关代码。

apps/macos:
macOS 桌面端或菜单栏应用相关代码。

apps/macos-mlx-tts:
macOS 上与本地语音合成相关的能力。

apps/shared/OpenClawKit:
多端共享的基础库或组件。

apps/swabble:
独立应用或实验性应用模块,后续可单独查看。

这和 OpenClaw 的定位一致:它不是只在网页中运行,而是希望成为跨设备、跨渠道、靠近用户个人环境的助手系统。README 也提到它可以在 macOS、iOS、Android 上说话和听取语音输入。(GitHub)


12. apps 目录什么时候看?

apps 不建议一开始就深入。

原因是:

复制代码
apps 更多是端侧形态;
src 才是核心运行时;
extensions / skills 才是 Agent 能力扩展。

建议阅读顺序是:

复制代码
先看 src:
理解 Gateway 和 Agent 如何工作。

再看 extensions / skills:
理解能力如何扩展。

最后看 apps:
理解移动端和桌面端如何接入 Gateway。

也就是说,apps 更适合作为后半部分内容,尤其是在讲"移动端与 Nodes"那一期时重点分析。


13. ui:Control UI 和可视化界面

ui 目录下包含 publicsrcindex.htmlpackage.jsonvite.config.tsvitest.config.ts 等文件。(GitHub)

从这些文件可以判断,ui 是一个前端项目,使用 Vite 组织构建。

它大概率对应前面第二期提到的 Control UI。也就是当 Gateway 启动后,用户可以通过浏览器访问本地控制界面。

可以这样理解:

复制代码
Gateway:
负责后端控制平面。

ui:
负责把 Gateway 状态、会话、配置、工具或 Canvas 等内容可视化展示出来。

后续如果分析 Canvas、Control UI 或前后端交互,ui 就是重点目录。


14. ui 和 Gateway 的关系

第二期提到过,pnpm gateway:watch 不会自动重建 dist/control-ui,修改 ui/ 后需要重新执行 pnpm ui:build 或使用 pnpm ui:dev。这说明 ui 和 Gateway 虽然联动,但构建链路是分开的。(GitHub)

可以理解为:

复制代码
Gateway 提供服务和接口;
ui 负责前端页面;
构建后由 Gateway 或本地服务提供访问入口。

后续看源码时可以重点关注:

复制代码
1. ui 如何请求 Gateway?
2. Gateway 暴露了哪些接口给 Control UI?
3. Canvas 或会话状态如何在页面中展示?
4. 前端是否通过 WebSocket 和 Gateway 通信?

15. docs:官方文档和架构说明

docs 目录非常重要,尤其适合辅助源码阅读。

docs 目录可以看到,它包含 .generated.i18nannouncementsassetsautomationchannelscliconceptsdebugdiagnosticsgatewayinstallnodes 等子目录。(GitHub)

也就是说,docs 不只是普通说明文档,而是覆盖了:

复制代码
安装
CLI
Gateway
Channel
节点
调试
诊断
概念解释
自动化

这些内容和源码模块是一一对应的。

所以,在读源码时,不应该只看代码,还应该对照 docs

复制代码
读 CLI 源码前:
先看 docs/cli。

读 Gateway 源码前:
先看 docs/gateway。

读 Channel 源码前:
先看 docs/channels。

读 Nodes 源码前:
先看 docs/nodes。

遇到问题:
看 docs/debug 和 docs/diagnostics。

这样效率会高很多。


16. security:安全规则和安全工具

security 目录目前包含 opengrepREADME.md。其 README 说明,这个目录保存 OpenClaw 发布的 OpenGrep 安全规则包,以及用于验证和运行这些规则的支持工具。(GitHub)

这个目录很值得关注。

因为 OpenClaw 是一个能连接真实消息入口、调用工具、处理本地文件和设备能力的 Agent 系统。安全不是附加内容,而是架构的一部分。

从源码解析角度看,security 至少有三层意义:

复制代码
第一,项目本身需要安全扫描规则,防止代码层面的风险回归。

第二,Agent 工具调用需要安全边界,避免模型滥用高风险能力。

第三,外部消息入口可能带来 prompt injection、恶意链接、恶意指令等风险。

后续讲 Sandbox、安全模型、DM pairing、工具权限时,可以把 security 目录作为辅助材料。


17. config、deploy 和 scripts

这三个目录通常不是一开始最吸引人的地方,但它们对工程运行很重要。

可以先这样理解:

复制代码
config:
项目默认配置、模板配置或环境相关配置。

deploy:
部署相关内容,例如容器、云平台或服务部署文件。

scripts:
开发、构建、检查、生成、发布等脚本。

这些目录适合在遇到对应问题时查:

复制代码
想知道默认配置从哪里来:
看 config。

想知道如何部署:
看 deploy。

想知道 pnpm 某个命令背后跑了什么:
看 scripts 和 package.json。

对于源码解析博客来说,这些目录可以穿插讲,不必单独作为最早几期重点。


18. test 和 qa:测试与质量保障

根目录下同时有 testqa

从命名看,test 更可能保存自动化测试代码,qa 更可能保存质量检查、验收、测试场景或项目质量保障相关内容。根目录确实列出了 qatest 两个目录。(GitHub)

读源码时,测试目录非常有价值。

原因是:

复制代码
测试用例通常会告诉我们:
某个模块应该如何被调用;
输入输出是什么;
异常情况如何处理;
作者认为哪些行为必须保持稳定。

所以后续分析某个模块时,可以配合测试来看:

复制代码
看 CLI:
找 CLI 相关测试。

看 Gateway:
找 Gateway 相关测试。

看 Channel:
找 Channel 或 adapter 相关测试。

看 Skills:
找 skills 加载或解析相关测试。

测试用例常常比长篇文档更能说明代码意图。


19. 根目录关键文件

除了目录,根目录的几个文件也很重要。

可以重点关注:

复制代码
README.md
package.json
openclaw.mjs
pnpm-workspace.yaml
tsconfig*.json
Dockerfile
docker-compose.yml
SECURITY.md
CONTRIBUTING.md
AGENTS.md
CLAUDE.md

其中:

复制代码
README.md:
项目定位和快速使用入口。

package.json:
脚本、依赖、bin 命令、构建流程入口。

openclaw.mjs:
CLI 运行入口之一。

pnpm-workspace.yaml:
说明 workspace 如何组织。

tsconfig*.json:
说明 TypeScript 编译边界。

Dockerfile / docker-compose.yml:
说明容器化运行方式。

SECURITY.md:
说明安全报告和安全策略。

AGENTS.md / CLAUDE.md:
面向 Agent 或代码助手的项目说明。

根目录文件在 GitHub 页面中也可以看到,例如 openclaw.mjspackage.jsonpnpm-workspace.yaml、多个 tsconfigDockerfileSECURITY.mdAGENTS.mdCLAUDE.md。(GitHub)


20. 一张目录地图

可以用下面这张简化图理解 OpenClaw 仓库:

复制代码
openclaw/
├─ src/              核心运行时代码
│  ├─ cli/           CLI 命令入口
│  ├─ commands/      具体命令实现
│  ├─ agents/        Agent 相关逻辑
│  ├─ channels/      渠道接入逻辑
│  ├─ chat/          对话处理逻辑
│  ├─ config/        配置加载逻辑
│  ├─ daemon/        Gateway / daemon 相关逻辑
│  └─ cron/          定时任务相关逻辑
│
├─ extensions/       插件、模型、工具、平台扩展
├─ packages/         SDK、插件契约、共享包
├─ skills/           内置技能库
├─ apps/             Android / iOS / macOS 等端侧应用
├─ ui/               Control UI / 前端界面
├─ docs/             官方文档
├─ security/         安全规则和安全工具
├─ test/             自动化测试
├─ qa/               质量保障相关内容
├─ config/           配置模板或默认配置
├─ deploy/           部署相关内容
└─ scripts/          工程脚本

这张图不一定覆盖所有细节,但足够作为后续阅读路线图。


21. 对源码阅读的建议

我建议后续按照下面顺序读:

复制代码
第一阶段:入口和主链路
1. package.json
2. openclaw.mjs
3. src/cli
4. src/commands
5. src/daemon

第二阶段:核心运行机制
6. src/config
7. src/agents
8. src/chat
9. src/channels

第三阶段:能力扩展
10. extensions
11. packages
12. skills

第四阶段:安全和工程化
13. security
14. test / qa
15. docs/debug / docs/diagnostics

第五阶段:前端和多端
16. ui
17. apps

这个顺序的逻辑是:

复制代码
先知道命令怎么进来;
再知道 Gateway 怎么运行;
再知道 Agent 怎么处理消息;
再知道工具、技能和扩展怎么增强能力;
最后看 UI、移动端和安全细节。

22. 本期重点理解

这一期最重要的是建立目录层面的整体认识。

可以总结为五点:

复制代码
第一,src 是核心运行时代码,后续分析 CLI、Gateway、Agent、Channel、Config 都要从这里开始。

第二,extensions 是插件和外部能力扩展目录,模型提供商、工具能力、平台能力很可能都在这里组织。

第三,skills 是内置技能库,体现 OpenClaw 如何通过技能扩展 Agent 的任务能力。

第四,apps 和 ui 分别对应多端应用和浏览器控制界面,它们让 OpenClaw 不只停留在命令行。

第五,docs、security、test、qa、scripts 是理解工程化、安全和运行方式的重要辅助目录。

一句话概括:

复制代码
OpenClaw 的仓库结构体现了一个完整个人 AI 助手系统的组成:src 负责核心运行,extensions 和 skills 负责能力扩展,apps 和 ui 负责交互形态,security、test、qa 和 docs 负责安全、质量和工程支撑。

23. 本期小结

本期主要分析了 OpenClaw 的仓库目录结构。src 是核心运行时代码,包含 CLI、commands、agents、channels、chat、config、daemon 等关键模块;extensions 用于组织模型、工具、平台和外部服务扩展;packages 保存 SDK、插件契约和共享包;skills 保存内置技能;apps 包含 Android、iOS、macOS 等端侧应用;ui 是基于前端工程组织的控制界面;docssecuritytestqascripts 则分别承担文档、安全规则、测试、质量保障和工程脚本职责。

这一期可以用一句话总结:

复制代码
读 OpenClaw 源码时,不能只盯着某一个模型调用函数,而要先看懂 src、extensions、skills、apps、ui、security、docs 这些目录如何共同组成一个可运行、可扩展、可交互、可安全约束的 Agent 系统。

下一期可以继续分析:

OpenClaw 源码解析(四):CLI 入口与 openclaw 命令

下一期重点分析 package.jsonopenclaw.mjssrc/clisrc/commands,理解用户在终端输入 openclaw agent --message "Hello"openclaw gateway statusopenclaw onboard 后,命令是如何进入源码并分发到具体处理逻辑的。

相关推荐
godspeed_lucip5 小时前
LLM和Agent——专题3: Agentic Workflow 入门(2)
网络·人工智能·python
bloxed5 小时前
【AI大模型--NumPy-05】统计分析实战指南
人工智能·numpy
Mr数据杨5 小时前
【CanMV K210】传感器实验 烟雾传感器 AO/DO 双路检测与蜂鸣器报警
人工智能·硬件开发·canmv k210
码云骑士5 小时前
Codex 安装与 VS Code 联动:打造 AI 编程新体验
人工智能
葡萄星球5 小时前
OpenClaw通过多agent创建数字分身方法
人工智能·ai
水木流年追梦5 小时前
大模型入门-DPO 直接偏好优化
人工智能·学习·算法·机器学习·正则表达式
寻道模式5 小时前
【时间之外】私有化部署AI的3个优点和3个缺点
大数据·人工智能·ollama·私有化·genericagent
郑寿昌5 小时前
2026脑机接口与大模型融合架构解析
大数据·人工智能·架构
这是谁的博客?5 小时前
AI 领域精选新闻(2026-05-24)
人工智能·ai·大模型·agent·ai安全