Claude Code vs OpenClaw:51 万行 vs 53 万行源码对决

Claude Code 源码泄露暴露了 51.2 万行 TypeScript,我们终于能与 OpenClaw 做一次真正对等的逐行比较——架构、Agent 定义、安全模型与设计哲学。

zhuermu·· 更新于 2026年4月1日·25 分钟
OpenClawClaude CodeAI 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 bundlertsdown + pnpm workspace
UI 框架Ink(React 终端渲染)TUI(自研终端 UI)
内置工具42 个工具目录插件动态注册
斜杠命令86 个命令目录通过 commands/ 注册
多 AgentSwarm(Tmux/iTerm/进程内)子 Agent 注册表 + ACP
LLM 支持仅 Anthropic Claude30+ 家供应商
接入方式CLI + IDE + Web + Mobile40+ 渠道 + 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 动词:从 ClaudingFlibbertigibbeting 再到 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 代码,就是一份现成的产品蓝图。

可以预见的是:

  1. 大厂会快速跟进。 Claude Code 的架构(单线程主循环 + 提示词编排 + 工具系统 + 多 Agent Swarm)如今已是一套被验证过的产品范式。中国的 AI 编程工具(通义灵码、豆包 MarsCode、百度 Comate 等)现在有了一份详尽的参考实现。
  2. 开源「致敬」项目会大量涌现。 已经有人在 GitHub 上整理反混淆后的源码了,各种语言的重新实现会随之而来。
  3. 提示词编排方法论会被广泛采用。 Claude Code 的 20 多个动态 section 组装、缓存策略、功能开关控制——这套提示词工程方法论,比任何研究论文都更实用。
  4. 安全模型会被研究并改进。 BashTool 的 7 层安全检查、Auto 模式的分类器审批——这些实现细节对整个行业的 Agent 安全实践都是宝贵的参考资料。

但我也要泼点冷水:抄架构容易,抄经验难。 Claude Code 那 51 万行代码里,有相当大一部分花在 Ink 终端渲染、Vim 模式、主题、Buddy 精灵、187 个 spinner 动词——这些「没用」的细节上。恰恰是这些细节让 Claude Code 用起来对味。这种产品手感,不是 fork 一个仓库就能复制的。

对 OpenClaw 的影响

作为一个开源项目,OpenClaw 反而可能从这次泄露中受益。两个原因:

  1. 设计方向得到验证。 OpenClaw 的许多架构决策(基于插件的工具系统、多模型回退、子 Agent 深度控制)在 Claude Code 源码中都有对应物。两个团队独立思考,却得出了相似的结论。
  2. 差异化定位如今一目了然。 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 源码的分析均基于公开可得的信息。

参考资料

  1. Claude Code repository — GitHub
  2. OpenClaw repository — GitHub
  3. Claude Code documentation — Anthropic
  4. OpenClaw documentation — OpenClaw