Claude Code vs OpenClaw:51 万行 vs 53 万行源码对决
Claude Code 源码泄露暴露了 51.2 万行 TypeScript,我们终于能与 OpenClaw 做一次真正对等的逐行比较——架构、Agent 定义、安全模型与设计哲学。
最新数据:两个 50 万行级别的 TypeScript 巨兽
上一次我们只能拿 OpenClaw 的完整源码去对比 Claude Code 的配置层。如今我们终于能看到完整的全貌:
| 维度 | Claude Code(泄露版) | OpenClaw(最新 main) |
|---|---|---|
| 源文件 | 1,884 个 .ts/.tsx(不含测试) | 3,044 个 .ts(不含测试) |
| 代码行数 | 约 512,000 | 约 530,000 |
| 核心语言 | TypeScript + React (Ink) | TypeScript (ESM) |
| 构建工具 | Bun bundler | tsdown + pnpm workspace |
| UI 框架 | Ink(React 终端渲染) | TUI(自研终端 UI) |
| 内置工具 | 42 个工具目录 | 插件动态注册 |
| 斜杠命令 | 86 个命令目录 | 通过 commands/ 注册 |
| 多 Agent | Swarm(Tmux/iTerm/进程内) | 子 Agent 注册表 + ACP |
| LLM 支持 | 仅 Anthropic Claude | 30+ 家供应商 |
| 接入方式 | CLI + IDE + Web + Mobile | 40+ 渠道 + TUI + Web |
OpenClaw 也没闲着——自上次分析以来从 45 万行增长到 53 万行,新增了 ACP(Agent Control Plane)、TUI 终端界面、Canvas Host、图像生成、媒体理解、TTS 语音合成、设备配对、密钥管理等等。两个项目都在以惊人的速度演进。
Agent 循环:单线程极简主义 vs 分布式运行时
Claude Code:代号 nO 的主循环
泄露的源码揭示了 Claude Code 的核心——QueryEngine.ts 中一个单线程的 Agent 循环。其设计哲学是激进的极简主义:while(tool_call) → 执行工具 → 将结果回喂 → 重复。当模型返回不含工具调用的纯文本时,循环便自然终止。
一个异步双缓冲队列(h2A)允许用户在 Agent 工作过程中实时注入新指令。上下文压缩器(wU2)会在上下文窗口使用率约 92% 时自动触发摘要。一个 token 预算追踪器以 90% 阈值控制续跑,当连续 3 次增量低于 500 token(收益递减)时停止。
// Task.ts — 7 task types hint at ambitions far beyond a CLI tool
export type TaskType =
| 'local_bash' // Local shell
| 'local_agent' // Local sub-agent
| 'remote_agent' // Remote agent
| 'in_process_teammate' // In-process teammate
| 'local_workflow' // Local workflow
| 'monitor_mcp' // MCP monitoring
| 'dream' // Dream mode (autonomous background execution)
OpenClaw:全新的 ACP(Agent Control Plane)
OpenClaw 的最新版本引入了 src/acp/——一个包含审批分类器、会话映射器、策略引擎和事件转换器的 Agent Control Plane。OpenClaw 正在从「Agent 运行时」演化为「Agent 管理平台」。
src/acp/
├── approval-classifier.ts # Approval classifier
├── policy.ts # Policy engine
├── session-mapper.ts # Session mapping
├── translator.ts # Event translator
├── control-plane/ # Control plane core
└── runtime/ # ACP runtime
分歧依然清晰:Claude Code 选择单线程 + 激进极简,OpenClaw 选择分布式 + 激进灵活。但 OpenClaw 的 ACP 模块预示着它正朝企业级 Agent 编排发力。
工具系统:42 个手工打造的工具 vs 基于插件的无限扩展
Claude Code:BashTool 才是皇冠上的明珠
42 个工具,每个都有独立目录。仅 BashTool 就横跨 18 个文件,实现了 7 层安全机制:分段命令权限、注入检测、危险命令识别、模式校验、沙箱隔离、分类器审批,以及子进程环境变量清洗。
// Tool.ts — The tool base class interface is remarkably rich
interface Tool<Input, Output> {
call(input, context): Promise<Output>
isReadOnly(input): boolean
isDestructive?(input): boolean
checkPermissions(input, context): PermissionResult
toAutoClassifierInput(input): unknown // Input for auto-classifier
renderToolUseMessage(input): ReactNode // Terminal UI rendering
// ... 20+ methods
}
OpenClaw:新增图像生成、媒体理解、TTS
OpenClaw 的最新工具生态大幅扩张:
src/image-generation/— 图像生成供应商注册表,多模型支持src/media-understanding/— 音频转写、视频理解、图像分析src/tts/— 文本转语音,支持多家 TTS 供应商src/web-search/— 独立的网页搜索运行时src/link-understanding/— 链接内容理解
OpenClaw 的工具不是 42 个手工打造的内置项,而是一个可扩展的能力框架。每个能力模块都有自己的供应商注册表,支持基于插件的扩展。
多 Agent:可视化 Swarm vs 结构化子 Agent 注册表
Claude Code:一套完整的 Swarm 系统
这是泄露源码中最大的惊喜。22 个文件实现了完整的多 Agent 协作:
- Team Lead 编排任务,将工作委派给多个 Teammate
- 三种后端:Tmux 分屏、iTerm2 分屏、进程内
SendMessageTool实现了 Agent 之间的点对点消息传递coordinator/coordinatorMode.ts实现了协调者模式dream任务类型暗示了自主的后台执行能力
OpenClaw:子 Agent 注册表 + 孤儿恢复
OpenClaw 的子 Agent 系统也在演进。最新代码中有 20 多个与 subagent-registry 相关的文件,新增了:
subagent-orphan-recovery.ts— 孤儿子 Agent 恢复subagent-registry-cleanup.ts— 注册表清理subagent-registry-persistence.ts— 持久化subagent-announce-queue.ts— 公告队列
差异在于:Claude Code 的 Swarm 是可视化的(你能看到多个终端面板同时工作),而 OpenClaw 的多 Agent 是结构化的(代码定义了严格的层级与生命周期)。
Agent 定义:声明式 Markdown vs 命令式 TypeScript
即便两边源码如今都已完全可见,这里仍是两个项目分歧最尖锐的地方——分歧不在规模,而在于它们各自认为 Agent 究竟是什么。
Claude Code:一个 Agent = 一份意图文件
Claude Code 插件层的 Agent 是声明式定义的。一个完整的 code-reviewer Agent 只不过是一段 YAML 头加一段自然语言提示词:
---
name: code-reviewer
description: Reviews code for bugs, logic errors, security vulnerabilities...
tools: Glob, Grep, LS, Read, WebFetch, WebSearch
model: sonnet
---
You are a code reviewer. Your job is to...
(the rest is pure natural-language system prompt)
它的 code-review 命令走得更远:一个约 200 行的 Markdown 文件描述了一条编排 10 多个并行子 Agent 的 7 步流水线——全用纯英文写就,零行代码。运行时解析这段散文,并调度这些 Agent。
设计哲学:信任模型的理解力。自然语言就是代码。
OpenClaw:Agent 是一套工程化系统
OpenClaw 通过显式的配置结构(src/agents/agent-scope.ts)来解析 Agent——带回退链的模型、工作区隔离、沙箱策略、工具允许/拒绝清单。子 Agent 的派生控制最能说明问题:
export function resolveSubagentCapabilities(params: {
depth: number; maxSpawnDepth?: number;
}) {
const role = resolveSubagentRoleForDepth(params); // "main" | "orchestrator" | "leaf"
return {
role,
canSpawn: role === "main" || role === "orchestrator",
canControlChildren: role !== "leaf",
};
}
一个 leaf Agent 无法派生子 Agent——这是在代码中结构性地强制的,而不是靠提示词请求模型「别再递归了」。
设计哲学:不要信任模型的自我克制。用代码构建确定性的边界。
正是这一组对比——声明式意图 vs 命令式强制——构成了下文所有其他差异的根源。
提示词编排:Claude Code 真正的护城河
泄露的源码证实了:**Claude Code 的所有「智能」都源自精心编排的提示词。**没有特殊 API,没有专有协议——CLAUDE.md、Skills、Memories 全都是以纯文本形式注入到上下文窗口的。
prompts.ts 包含 20 多个 section 生成函数,动态组装系统提示词,并配有缓存机制(systemPromptSection() 只计算一次,DANGEROUS_uncachedSystemPromptSection() 每轮都重新计算,但要求给出明确理由)。
最具爆炸性的发现是控制未发布能力的 feature() 函数——我们在源码中找到了 89 个不同的功能开关,涵盖了一大批已开发但未上线的功能:
- PROACTIVE / KAIROS:主动模式,Agent 自主发起行动
- COORDINATOR_MODE:一个 Claude 编排多个 Claude
- TRANSCRIPT_CLASSIFIER:AFK 模式,用户离开时 Agent 继续工作
- ant-only internal tools:仅 Anthropic 员工可用
- VOICE_MODE:语音指令模式
- WEB_BROWSER_TOOL:通过 Playwright 实现真实浏览器控制
- KAIROS_DREAM:自主后台执行 + 自我唤醒
- KAIROS_GITHUB_WEBHOOKS:GitHub webhook 触发 Agent
- 此外还有 BUDDY(陪伴精灵)、ULTRAPLAN、ULTRATHINK、VERIFICATION_AGENT 等数十个
这些代码都已经写好了——只是在编译期被排除掉。Anthropic 每两周推出一个新功能的节奏并不是因为他们开发得快,而是因为一切早已完成。
安全模型:分类器审批 vs 代码强制
Claude Code 的 Auto 模式使用一个独立的分类器来审批每一步操作(分类器输入会剥离工具结果以防注入),底层辅以操作系统级的沙箱。三种权限层级:Plan(只读)、Default(每步确认)、Auto(分类器审批,标注为「research preview」)。
OpenClaw 采用代码强制——工具画像(minimal/coding/messaging/full)、仅所有者过滤、路径穿越检测,以及一套执行审批系统(src/infra/exec-approvals.ts,涉及 20 多个相关文件)。
两者都不信任模型的自我克制。Claude Code 用另一个 AI 去监督 AI,OpenClaw 用代码去约束 AI。
彩蛋
- 187 个 Spinner 动词:从
Clauding到Flibbertigibbeting再到Whatchamacalliting——用户甚至可以自定义 - Buddy 陪伴精灵:
src/buddy/里藏着一个终端陪伴角色,有自己的提示词和精灵图形 - 完整的 Vim 引擎:motion、operator、text object、状态转换——不只是键位绑定,而是一个完整的 Vim 实现
- Bridge 远程控制:30 个文件实现了用手机/浏览器控制本地 Claude Code 会话,带 JWT 鉴权和可信设备管理
泄露的影响与个人思考
对 Anthropic 的影响
这已经是 Claude Code 第二次通过 source map 泄露了(第一次是 2025 年 2 月)。同一个错误犯两次,说明 Anthropic 的 CI/CD 流水线在构建产物校验上存在系统性缺口。话虽如此,这次泄露涉及的是客户端实现代码——没有模型权重,没有用户数据——所以直接的安全风险有限。
真正的影响在于竞争情报。51 万行精心打磨的 TypeScript,包含完整的提示词编排策略、安全模型实现、多 Agent 协作架构,以及控制未发布能力的 89 个功能开关——Anthropic 来之不易的全部工程 know-how 如今都公开了。
对中国技术生态的影响:一波 Claude Code 克隆潮即将到来
这是我最想说的一点。
Claude Code 源码泄露对中国 AI 编程工具生态的冲击,可能比对 Anthropic 自身更大。原因很简单:51 万行经过实战检验的 TypeScript 代码,就是一份现成的产品蓝图。
可以预见的是:
- 大厂会快速跟进。 Claude Code 的架构(单线程主循环 + 提示词编排 + 工具系统 + 多 Agent Swarm)如今已是一套被验证过的产品范式。中国的 AI 编程工具(通义灵码、豆包 MarsCode、百度 Comate 等)现在有了一份详尽的参考实现。
- 开源「致敬」项目会大量涌现。 已经有人在 GitHub 上整理反混淆后的源码了,各种语言的重新实现会随之而来。
- 提示词编排方法论会被广泛采用。 Claude Code 的 20 多个动态 section 组装、缓存策略、功能开关控制——这套提示词工程方法论,比任何研究论文都更实用。
- 安全模型会被研究并改进。 BashTool 的 7 层安全检查、Auto 模式的分类器审批——这些实现细节对整个行业的 Agent 安全实践都是宝贵的参考资料。
但我也要泼点冷水:抄架构容易,抄经验难。 Claude Code 那 51 万行代码里,有相当大一部分花在 Ink 终端渲染、Vim 模式、主题、Buddy 精灵、187 个 spinner 动词——这些「没用」的细节上。恰恰是这些细节让 Claude Code 用起来对味。这种产品手感,不是 fork 一个仓库就能复制的。
对 OpenClaw 的影响
作为一个开源项目,OpenClaw 反而可能从这次泄露中受益。两个原因:
- 设计方向得到验证。 OpenClaw 的许多架构决策(基于插件的工具系统、多模型回退、子 Agent 深度控制)在 Claude Code 源码中都有对应物。两个团队独立思考,却得出了相似的结论。
- 差异化定位如今一目了然。 Claude Code 是一款单厂商、面向开发者的精雕细琢的工具;OpenClaw 是一个多厂商、多平台的 Agent 运行时。这次泄露把这一定位差异从「猜测」变成了「确证」。
OpenClaw 的最新新增功能——ACP(Agent Control Plane)、TUI、设备配对、密钥管理——显示它正朝着企业级 Agent 平台的领域推进,而这正是 Claude Code 当前尚未覆盖的方向。
个人观点
这次泄露带来的最大启示不是某个技术细节,而是对一种产品哲学的确认:
AI Agent 的核心竞争优势不在模型,而在工程。
Claude Code 和 OpenClaw 都是 50 万行级别的 TypeScript 工程成果。它们的「智能」来自精心编排的提示词、精确控制的安全边界,以及大量的 UX 打磨——而不是来自某种神秘的模型能力。
这意味着,AI Agent 的竞争,本质上是一场工程能力的竞争。谁能把提示词编排做得更精确、安全模型做得更深入、用户体验打磨得更细致——谁就赢。
模型是基础设施,工程才是护城河。
你该基于哪种方案来构建?
两个项目的分歧归结为一个问题:AI 模型的理解力能否取代代码的确定性? Claude Code 的答案是能,OpenClaw 的答案是不能。两者都没错——取决于你要交付的是什么。
在以下情况选择 Claude Code 路线(声明式 / Markdown 驱动):
- 你的 Agent 面向单一、定义明确的场景(代码评审、文档生成、功能开发)
- 你信任底层模型,愿意用提示词工程替代代码
- 你希望非程序员也能定义 Agent 行为
- 你的用户是开发者,你的界面是终端或 IDE
- 你把快速迭代看得比运行时控制更重要
在以下情况选择 OpenClaw 路线(命令式 / 代码驱动):
- 你的 Agent 必须支持多家 LLM 供应商
- 你需要对行为边界做精确控制,尤其是在多用户场景下
- 你必须跨平台部署(消息渠道、API、原生客户端)
- 你需要不能依赖模型「自律」的确定性安全保证
- 你在构建的是一个 Agent 平台,而非单个 Agent
融合正在到来
最有意思的观察是,这两种架构正在从相反方向彼此靠拢。 Claude Code 不断加入代码级的控制——沙箱、托管设置、通过外部脚本实现的确定性 hook。OpenClaw 则不断加入声明式配置——YAML 技能、Markdown 知识库、约定优于配置的模式。
最终答案很可能是一种混合形态:在模型可被信任的地方用声明式(创意任务、知识综合、代码生成),在不可信任的地方用命令式(安全边界、多租户隔离、金融交易)。谁能想清楚这条界线该画在哪里,谁就将定义下一代 AI 基础设施。
本文基于 2026 年 3 月 31 日泄露的 Claude Code v2.1.88 源码(1,884 个 TypeScript 文件,512,664 行代码)与 OpenClaw 最新的 main 分支(3,044 个非测试 TypeScript 文件,约 530,000 行代码)撰写。
免责声明:本文仅用于技术分析与学术讨论。对泄露的 Claude Code 源码的分析均基于公开可得的信息。
参考资料
- Claude Code repository — GitHub
- OpenClaw repository — GitHub
- Claude Code documentation — Anthropic
- OpenClaw documentation — OpenClaw