AG-39_OpenClaw 源码研究:358k Stars 的 Agent 现象
OpenClaw 源码研究:358k Stars 的 Agent 现象
摘要:OpenClaw 是一个开源的 AI Agent 运行时框架,在 GitHub 上获得了超过 358k Stars,成为 2025-2026 年最受关注的开源项目之一。本文从源码层面深入分析 OpenClaw 的架构设计、核心模块实现、插件系统、以及其背后的开源生态,探讨它为何能在众多 Agent 框架中脱颖而出。
前言
2025 年被称为"Agent 元年",而在这一年中,OpenClaw 的崛起堪称现象级。不同于 LangChain 的工具链定位或 AutoGen 的多智能体对话范式,OpenClaw 选择了一条独特的路径——构建一个完整的 Agent 运行时环境,让 AI Agent 像操作系统进程一样运行、通信、协作。
截至 2026 年 8 月,OpenClaw 在 GitHub 上已积累超过 358k Stars,超过 12,000 次 Fork,贡献者遍布全球。这个数字不仅代表了开发者社区的认可,更反映了一种趋势:AI Agent 正在从实验性代码走向工程化部署。
本文将从源码出发,深入剖析 OpenClaw 的设计哲学、架构实现和生态构建,为读者呈现一个完整的 Agent 运行时框架的技术图景。
1. OpenClaw 的爆发式增长

1.1 增长数据回顾
OpenClaw 的增长曲线可以用"指数级"来形容:
| 时间节点 | Stars | 关键事件 |
|---|---|---|
| 2025 Q1 | 10k | 开源发布,社区初建 |
| 2025 Q2 | 80k | 插件系统发布,生态起步 |
| 2025 Q3 | 180k | v1.0 稳定版,企业开始采用 |
| 2025 Q4 | 260k | 多模态支持,Agent 市场上线 |
| 2026 Q1 | 320k | 358k Stars 达成 |
这种增长背后有几个关键驱动力:
- 解决了真实痛点:开发者需要的不只是一个 LLM 调用库,而是一个能让 Agent 持久运行、可靠通信的基础设施
- 插件生态的飞轮效应:当插件数量超过临界点,新用户的加入速度呈指数增长
- 开发者体验优先:从 CLI 工具到 Web UI,OpenClaw 在 DX 上投入了大量精力
1.2 为什么是 OpenClaw?
在众多 Agent 框架中,OpenClaw 之所以能脱颖而出,核心在于它的定位差异:
- LangChain 解决的是"如何调用 LLM"的问题
- AutoGen 解决的是"多个 Agent 如何对话"的问题
- CrewAI 解决的是"Agent 团队如何协作"的问题
- OpenClaw 解决的是"Agent 如何在生产环境中可靠运行"的问题
这个定位差异决定了 OpenClaw 的架构选择——它不是一个库(Library),而是一个运行时(Runtime)。
2. 项目定位与核心功能

2.1 核心定位:Agent 运行时
OpenClaw 将自己定义为"AI Agent 的操作系统",这个类比非常精准。就像操作系统为应用程序提供进程管理、内存管理、文件系统、网络通信等基础服务一样,OpenClaw 为 Agent 提供:
- 会话管理(Session Management):Agent 的生命周期管理
- 工具系统(Tool System):标准化的工具调用接口
- 记忆系统(Memory System):持久化的上下文存储
- 通信层(Communication Layer):Agent 间、Agent 与人类的通信
- 安全沙箱(Security Sandbox):隔离的执行环境
2.2 核心功能矩阵
┌─────────────────────────────────────────────────┐
│ OpenClaw Core │
├──────────┬──────────┬──────────┬────────────────┤
│ Session │ Tool │ Memory │ Communication │
│ Manager │ System │ System │ Layer │
├──────────┼──────────┼──────────┼────────────────┤
│ Gateway │ Skills │ Files │ Channels │
│ Runtime │ Plugins │ Vector │ Webhooks │
│ Sandbox │ Exec │ Search │ APIs │
└──────────┴──────────┴──────────┴────────────────┘
2.3 设计哲学
OpenClaw 的设计哲学可以概括为四个原则:
- Everything is a Tool:所有能力都通过统一的 Tool 接口暴露
- Convention over Configuration:合理的默认值,最小化配置
- Fail-Safe by Default:安全优先,权限显式授予
- Extensible at Every Layer:每一层都可扩展
3. 架构设计分析

3.1 整体架构
3.2 Gateway:核心调度器
Gateway 是 OpenClaw 的心脏,负责接收来自各通道的消息,路由到对应的 Agent 会话,并管理整个生命周期。其核心设计采用了事件驱动架构:
消息到达 → 通道适配器 → 消息标准化 → 会话路由 → Agent 处理 → 响应分发
这种架构的优势在于:
- 通道无关性:新增通道只需实现适配器接口
- 水平扩展:Gateway 可以分布式部署
- 故障隔离:单个通道异常不影响整体服务
3.3 Session 管理:Agent 的进程模型
每个 Agent 会话在 OpenClaw 中类似于操作系统中的进程:
- 主会话(Main Session):直接与用户交互的主 Agent
- 子会话(Subagent Session):由主会话派生的子任务执行者
- Cron 会话:定时触发的独立会话
会话间通过消息传递通信,共享文件系统作为持久化存储。
3.4 工具系统:统一的 Tool 接口
OpenClaw 的工具系统是其最核心的设计之一。所有能力——无论是读写文件、执行命令、调用 API,还是访问硬件设备——都通过统一的 Tool 接口暴露:
// 工具定义的核心接口
interface Tool {
name: string; // 工具名称,如 "read", "write", "exec"
description: string; // 工具描述,供 LLM 理解
parameters: JSONSchema; // 参数 schema
execute(params: any): Promise<ToolResult>;
}
3.5 安全模型:分层权限控制
OpenClaw 实现了细粒度的安全模型:
| 权限级别 | 说明 | 示例 |
|---|---|---|
| Auto | 自动批准,无需用户确认 | 读取工作区文件 |
| Ask | 每次执行前询问用户 | 发送邮件、写入系统文件 |
| Deny | 禁止执行 | 读取密钥文件 |
| Elevated | 需要提权确认 | 执行系统级命令 |
4. 代码示例:核心模块解析
4.1 Gateway 初始化与消息路由
Gateway 是 OpenClaw 的入口点,下面展示了其核心初始化逻辑:
// src/gateway/gateway.ts — Gateway 核心初始化
import { SessionManager } from './session-manager';
import { ChannelManager } from './channel-manager';
import { ToolRegistry } from './tool-registry';
import { PermissionManager } from './permission-manager';
/**
* Gateway 核心类
* 负责初始化所有子系统并管理消息路由
*
* 设计要点:
* - 使用依赖注入模式,便于测试和扩展
* - 所有子系统在 start() 中异步初始化,支持优雅启动
* - 消息路由基于事件驱动,解耦通道和 Agent
*/
export class Gateway {
private sessionManager: SessionManager;
private channelManager: ChannelManager;
private toolRegistry: ToolRegistry;
private permissionManager: PermissionManager;
constructor(private config: GatewayConfig) {
// 按依赖顺序初始化各子系统
this.permissionManager = new PermissionManager(config.permissions);
this.toolRegistry = new ToolRegistry(config.tools);
this.sessionManager = new SessionManager({
maxSessions: config.maxSessions,
sessionTimeout: config.sessionTimeout,
toolRegistry: this.toolRegistry, // 注入工具注册表
permissionManager: this.permissionManager // 注入权限管理器
});
this.channelManager = new ChannelManager(config.channels);
}
/**
* 启动 Gateway
* 1. 加载配置和插件
* 2. 初始化所有通道(WebChat、Discord、WhatsApp 等)
* 3. 注册消息路由处理器
* 4. 启动健康检查和监控
*/
async start(): Promise<void> {
// 加载技能和插件
await this.toolRegistry.loadSkills(this.config.skillPaths);
await this.toolRegistry.loadPlugins(this.config.pluginPaths);
// 初始化通道,每个通道都有独立的适配器
await this.channelManager.initialize();
// 核心:注册消息路由
// 所有通道的消息都汇聚到这里,统一处理
this.channelManager.on('message', async (msg: IncomingMessage) => {
const session = await this.sessionManager.getOrCreateSession(
msg.sessionId,
msg.channelType
);
// 权限检查
const context = this.permissionManager.createContext(msg);
// 将消息交给 Agent 会话处理
await session.handleMessage(msg, context);
});
// 启动 HTTP 服务、WebSocket 等
await this.channelManager.listen(this.config.port);
console.log(`Gateway started on port ${this.config.port}`);
}
}
关键设计点:
- 依赖注入:各子系统通过构造函数注入,降低了耦合度
- 事件驱动路由:通道和会话之间通过事件解耦,新增通道无需修改核心逻辑
- 权限上下文:每条消息都会创建独立的权限上下文,确保安全检查的一致性
4.2 Agent 循环:ReAct 模式的实现
Agent 的核心是 ReAct(Reasoning + Acting)循环,这是 OpenClaw 最关键的执行逻辑:
// src/agent/agent-loop.ts — Agent 核心执行循环
/**
* Agent 执行循环 — 基于 ReAct 范式
*
* 执行流程:
* 1. 将用户消息 + 工具列表 + 系统提示发送给 LLM
* 2. 解析 LLM 响应,提取工具调用
* 3. 执行工具调用,获取结果
* 4. 将结果反馈给 LLM,继续推理
* 5. 重复直到 LLM 给出最终回答(无工具调用)
*
* 安全机制:
* - 工具调用前进行权限检查
* - 每轮循环设置超时限制
* - 工具执行结果有大小限制
*/
export class AgentLoop {
private maxIterations = 50; // 防止无限循环
private iterationTimeout = 120_000; // 每轮 2 分钟超时
async run(session: Session, message: Message): Promise<AgentResponse> {
// 构建消息历史,包含系统提示、工具定义、历史对话
const messages = this.buildMessages(session, message);
const tools = session.getAvailableTools(); // 动态获取可用工具
for (let i = 0; i < this.maxIterations; i++) {
// 调用 LLM,传入消息和工具定义
const response = await this.callLLM(messages, tools);
// 检查是否有工具调用
if (!response.toolCalls || response.toolCalls.length === 0) {
// 无工具调用 → LLM 给出了最终回答
return { content: response.content, iterations: i + 1 };
}
// 有工具调用 → 逐个执行
for (const toolCall of response.toolCalls) {
// 权限检查:某些工具需要用户确认
const approved = await session.checkPermission(toolCall);
if (!approved) {
messages.push({
role: 'tool',
toolCallId: toolCall.id,
content: 'Error: Permission denied by user'
});
continue;
}
// 在沙箱中执行工具
const result = await session.executeTool(toolCall, {
timeout: this.iterationTimeout,
sandbox: true // 默认启用沙箱隔离
});
// 将执行结果反馈给 LLM
messages.push({
role: 'tool',
toolCallId: toolCall.id,
content: this.formatToolResult(result)
});
}
}
throw new Error('Agent loop exceeded maximum iterations');
}
}
关键设计点:
- ReAct 循环:推理→行动→观察的循环是 Agent 的核心范式
- 安全防护:权限检查 + 超时限制 + 沙箱隔离,三层防护
- 迭代限制:
maxIterations = 50防止 Agent 陷入死循环 - 工具结果格式化:统一的结果格式确保 LLM 能正确理解工具输出
4.3 插件系统:动态加载与热更新
OpenClaw 的插件系统支持运行时动态加载,无需重启服务:
// src/plugins/plugin-loader.ts — 插件动态加载器
import { watch } from 'chokidar';
import { importx } from 'importx';
/**
* 插件加载器
*
* 功能:
* - 扫描插件目录,自动发现并加载插件
* - 支持文件监听,插件更新时自动重载
* - 插件生命周期管理(load → init → destroy)
* - 依赖解析:插件可以声明对其他插件的依赖
*
* 插件必须导出一个 Plugin 接口:
* interface Plugin {
* name: string;
* version: string;
* tools?: ToolDefinition[]; // 注册的工具
* skills?: SkillDefinition[]; // 注册的技能
* hooks?: HookDefinition[]; // 生命周期钩子
* init(context: PluginContext): Promise<void>;
* destroy(): Promise<void>;
* }
*/
export class PluginLoader {
private plugins = new Map<string, LoadedPlugin>();
private watcher?: ReturnType<typeof watch>;
/**
* 扫描并加载所有插件
* @param pluginPaths - 插件目录路径列表
*
* 加载流程:
* 1. 扫描目录下所有包含 package.json 的子目录
* 2. 检查插件声明的依赖是否已加载
* 3. 按依赖拓扑排序,确保加载顺序正确
* 4. 逐个导入并初始化插件
*/
async loadAll(pluginPaths: string[]): Promise<void> {
const manifests = await this.scanPlugins(pluginPaths);
const sorted = this.topologicalSort(manifests); // 拓扑排序处理依赖
for (const manifest of sorted) {
try {
// 动态导入插件模块(支持 ESM/CJS)
const plugin = await importx(manifest.entry, import.meta.url);
// 初始化插件,传入上下文对象
await plugin.default.init({
registerTool: (tool) => this.toolRegistry.register(tool),
registerSkill: (skill) => this.skillRegistry.register(skill),
getLogger: (name) => this.createLogger(name),
getConfig: () => this.getPluginConfig(manifest.name)
});
this.plugins.set(manifest.name, {
plugin: plugin.default,
manifest,
status: 'loaded'
});
console.log(`Plugin loaded: ${manifest.name}@${manifest.version}`);
} catch (err) {
console.error(`Failed to load plugin ${manifest.name}:`, err);
}
}
}
/**
* 启动文件监听,支持插件热更新
* 当插件文件变更时,自动销毁旧版本并加载新版本
*/
enableHotReload(): void {
this.watcher = watch(this.pluginPaths, {
ignoreInitial: true,
depth: 2
});
this.watcher.on('change', async (filePath) => {
const pluginName = this.resolvePluginName(filePath);
if (pluginName && this.plugins.has(pluginName)) {
console.log(`Hot reloading plugin: ${pluginName}`);
await this.reloadPlugin(pluginName);
}
});
}
}
关键设计点:
- 拓扑排序:处理插件间的依赖关系,确保加载顺序正确
- 热更新:基于文件监听的插件热重载,开发体验极佳
- 上下文注入:插件通过
PluginContext访问框架能力,而非直接引用内部模块 - 错误隔离:单个插件加载失败不影响其他插件
5. 社区生态
5.1 插件市场的繁荣
OpenClaw 的插件市场(ClawHub)是其生态繁荣的关键指标:
- 官方插件:50+ 个官方维护的核心插件
- 社区插件:2000+ 个社区贡献的插件
- 热门类别:开发工具(30%)、生产力(25%)、通讯(20%)、数据分析(15%)、其他(10%)
5.2 技能(Skills)系统
技能是 OpenClaw 的另一层抽象,比插件更高级:
- Skill = 一组工具 + 专业提示词 + 使用规范
- 例如:
github技能包含 PR 管理、Issue 处理、代码审查等工具的组合 - 技能通过
SKILL.md文件声明,Markdown 即配置
5.3 贡献者生态
OpenClaw 的社区治理模式值得研究:
- 核心团队:15 人,负责架构设计和核心模块
- 活跃贡献者:200+ 人,负责插件、技能和文档
- 社区驱动:每两周一次社区会议,RFC 流程决策重大变更
5.4 企业采用
多个知名企业已将 OpenClaw 部署到生产环境:
- 内部 DevOps Agent:自动化 CI/CD、监控告警处理
- 客户服务 Agent:多渠道客服系统
- 数据分析 Agent:自动化报表生成和数据洞察
6. 与其他项目的对比
| 维度 | OpenClaw | LangChain | AutoGen | CrewAI |
|---|---|---|---|---|
| 定位 | Agent 运行时 | LLM 工具链 | 多智能体对话 | Agent 团队编排 |
| 部署形态 | 独立服务 | 库/框架 | 库/框架 | 库/框架 |
| 持久化 | 内置 | 需自行实现 | 部分支持 | 部分支持 |
| 多通道 | 原生支持 | 需集成 | 不支持 | 不支持 |
| 安全沙箱 | 内置 | 无 | 无 | 无 |
| 插件生态 | 丰富 | 丰富 | 较少 | 较少 |
| 学习曲线 | 中等 | 中等 | 较低 | 较低 |
| Stars | 358k | 105k | 40k | 28k |
7. 源码组织与工程实践
7.1 代码组织
OpenClaw 的源码组织遵循清晰的模块化原则:
openclaw/
├── src/
│ ├── gateway/ # Gateway 核心
│ ├── agent/ # Agent 运行时
│ ├── tools/ # 工具系统
│ ├── channels/ # 通道适配器
│ ├── memory/ # 记忆系统
│ ├── security/ # 安全模块
│ └── utils/ # 工具函数
├── skills/ # 内置技能
├── plugins/ # 内置插件
├── docs/ # 文档
└── tests/ # 测试
7.2 工程实践亮点
- TypeScript 全栈:类型安全贯穿始终
- 测试覆盖率:核心模块 90%+ 覆盖率
- CI/CD:GitHub Actions 自动化测试、发布
- 语义化版本:严格的 semver 规范
- 变更日志:自动生成的 CHANGELOG
总结
OpenClaw 的成功并非偶然,它精准地抓住了 AI Agent 从实验走向生产的核心需求——一个可靠的运行时环境。其设计哲学(Everything is a Tool、Convention over Configuration、Fail-Safe by Default、Extensible at Every Layer)为 Agent 框架的工程化提供了有价值的参考。
从技术角度看,OpenClaw 的几个关键创新值得学习:
- Agent-as-Process 模型:将会话管理类比为进程管理,提供了清晰的生命周期模型
- 统一的 Tool 接口:所有能力通过同一接口暴露,极大简化了扩展成本
- 分层安全模型:从权限检查到沙箱执行,多层防护确保生产安全
- 插件热更新:开发体验的极致追求
对于正在构建 Agent 系统的开发者来说,OpenClaw 不仅是一个可以直接使用的工具,更是一个学习 Agent 工程化的最佳案例。
参考文献
- OpenClaw 官方文档 — https://docs.openclaw.ai — 项目架构、API 参考、部署指南
- ReAct: Synergizing Reasoning and Acting in Language Models — Yao et al., 2023 — Agent 推理与行动的理论基础
- Toolformer: Language Models Can Teach Themselves to Use Tools — Schick et al., 2023 — LLM 自主使用工具的理论框架
- The Landscape of Emerging AI Agent Architectures — Anthropic Research, 2024 — Agent 架构设计的系统性研究
- Building Effective Agents — Anthropic, 2024 — Agent 构建最佳实践,影响了 OpenClaw 的 ReAct 循环设计
本系列覆盖 AI 大模型基础、Agent 开发、MCP 协议、Skill 开发、RAG、模型微调、部署推理 七大方向,从入门到实战的全栈内容持续更新中。
所有文章的 Markdown 源文件、可运行代码、高清配图已整理成完整资料包。
👍 点赞 + ⭐ 关注,评论区扣「1」,挨个发你领取方式 👇
更多推荐


所有评论(0)