Skip to content

项目概览

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.jsCLI 框架
wsWebSocket 实现
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-tag latest
  • beta — 预发布 (vYYYY.M.D-beta.N),dist-tag beta
  • 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) => { /* ... */ });
}

入口做了几件关键事情:

  1. 安装 Node.js 实验性警告过滤器
  2. 规范化环境变量
  3. 如果未抑制实验性警告,会重新 spawn 一个子进程并添加 --disable-warning=ExperimentalWarning 标志
  4. 解析 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
  • 本教程关注源码实现细节,而非使用指南

下一章:整体架构

OpenClaw 源码学习教程