项目概览
OpenClaw 是一个运行在个人设备上的 AI 助手网关,它将多个即时通讯平台(Telegram、Discord、WhatsApp、Slack、Signal 等)统一接入同一个 AI Agent,让你在任何设备、任何平台上都能与自己的 AI 助手对话。
核心定位
与传统的 chatbot 框架不同,OpenClaw 的设计目标不是"做一个 bot",而是做你的个人 AI 助手。所有通道都连接到同一个会话系统,AI 能记住上下文、执行工具、管理日程,甚至控制你的浏览器。
技术栈
| 技术 | 用途 |
|---|---|
| TypeScript (ESM) | 核心语言,严格模式 |
| Node.js ≥22 | 运行时基线 |
| pnpm | 包管理器 + monorepo workspace |
| Vitest | 测试框架,70% 覆盖率阈值 |
| Oxlint / Oxfmt | 代码检查与格式化 |
| Commander.js | CLI 框架 |
| ws | WebSocket 实现 |
| grammy / discord.js / @slack/bolt | 通道 SDK |
| Swift / Kotlin | 原生应用 (macOS, iOS, Android) |
版本策略
OpenClaw 使用基于日期的版本号:YYYY.M.D-patch,例如 2026.2.6-3。
发布通道:
- stable — 标记发布 (
vYYYY.M.D),npm dist-taglatest - beta — 预发布 (
vYYYY.M.D-beta.N),dist-tagbeta - dev — main 分支 HEAD,dist-tag
dev
项目入口
OpenClaw 有两个主要入口文件:
src/entry.ts — CLI 启动入口
typescript
// src/entry.ts
process.title = "openclaw";
installProcessWarningFilter();
normalizeEnv();
// Respawn to suppress ExperimentalWarning
if (!ensureExperimentalWarningSuppressed()) {
import("./cli/run-main.js")
.then(({ runCli }) => runCli(process.argv))
.catch((error) => { /* ... */ });
}入口做了几件关键事情:
- 安装 Node.js 实验性警告过滤器
- 规范化环境变量
- 如果未抑制实验性警告,会重新 spawn 一个子进程并添加
--disable-warning=ExperimentalWarning标志 - 解析 CLI profile 参数,最终调用
runCli()
src/index.ts — 程序入口 + 公共 API
typescript
// src/index.ts
loadDotEnv({ quiet: true });
normalizeEnv();
ensureOpenClawCliOnPath();
enableConsoleCapture();
assertSupportedRuntime();
const program = buildProgram();
if (isMain) {
installUnhandledRejectionHandler();
void program.parseAsync(process.argv);
}这个文件既是 CLI 的 buildProgram() 调用入口,也导出了公共 API(config loader、session utilities、channel senders 等),供其他包或 plugin 使用。
本教程的目标
本教程聚焦于源码实现——不是教你怎么用 OpenClaw,而是帮你理解它是怎么构建的:
- Gateway 如何管理 WebSocket 连接和会话?
- 通道抽象层如何统一不同平台的消息格式?
- Agent 运行时如何处理工具调用和流式输出?
- 插件系统如何实现热加载和生命周期管理?
- CLI 如何组织命令和依赖注入?
小结
- OpenClaw 是一个个人 AI 助手网关,统一多通道消息接入
- 使用 TypeScript + Node.js 构建,monorepo 架构
- 核心组件:Gateway、Channels、Agent、Plugins、CLI
- 本教程关注源码实现细节,而非使用指南
下一章:整体架构