乐于分享
好东西不私藏

源码级拆解:OpenClaw vs Claude Code,两种 AI Agent 设计哲学

源码级拆解:OpenClaw vs Claude Code,两种 AI Agent 设计哲学

上一篇文章我们讲了故事,这一篇我们拆引擎。我把 OpenClaw 和 Claude Code 的源码都 clone 下来,逐行阅读了核心模块。一个是 45 万行 TypeScript 的”瑞士军刀”,一个是 183 个文件、几乎全是 Markdown 的”提示词操作系统”。两个项目对”AI Agent 应该怎么造”这个问题,给出了截然相反的答案。如果你正在做 AI Agent,这篇文章可能会改变你的架构决策。

一、先看数字:两个项目到底有多不一样

在深入源码之前,先感受一下量级差异:

维度
Claude Code
OpenClaw
核心语言
Markdown + JSON + Python
TypeScript (ESM)
非测试源码文件数
~183 个文件
~2548 个 .ts 文件
非测试代码行数
~28,000 行(主要是 Markdown)
~453,000 行 TypeScript
核心运行时
闭源(Claude Code 二进制)
完全开源
插件定义方式
Markdown 文件 + YAML frontmatter
TypeScript 模块 + register() API
Agent 定义方式
一个 .md 文件
分布在 859 个文件的 agents/ 目录
支持的 LLM 提供商
仅 Anthropic Claude
20+ 提供商(OpenAI、Ollama、Bedrock、通义、Moonshot、Kimi…)
消息通道
终端 + IDE + GitHub
40+ 通道(Telegram、Discord、WhatsApp、飞书、Slack、iMessage…)

这不是”谁多谁少”的问题——这是两种完全不同的设计哲学在源码层面的体现。


二、架构总览:提示词操作系统 vs 全栈运行时

Claude Code:一切皆 Markdown

打开 Claude Code 的仓库,你会发现一个令人震惊的事实:几乎没有可执行代码

Claude Code 的核心运行时是闭源的。开源仓库里放的是插件生态的定义层——用 Markdown 描述 Agent 该做什么,用 JSON 描述权限边界,用 YAML frontmatter 声明工具白名单。

这意味着什么?Claude Code 把 Markdown 当成了编程语言。

OpenClaw:一个完整的分布式系统

OpenClaw 的源码则是另一个极端:

OpenClaw 不是一个 CLI 工具——它是一个带网关的分布式 Agent 运行时


三、Agent 定义:Markdown 声明式 vs TypeScript 命令式

这是两个项目最核心的分歧。

Claude Code:一个 Agent = 一个 Markdown 文件

来看 Claude Code 的code-reviewerAgent 定义(完整源码):

就这么多。一个 YAML 头部声明名字、描述、可用工具和模型,剩下的全是自然语言指令。

再看code-review命令的定义——它是一个 200 多行的 Markdown 文件,用自然语言描述了一个复杂的多 Agent 协作流程:

这段 Markdown 描述了一个7 步流水线,涉及 10+ 个并行子 Agent,但没有一行代码。Claude Code 的运行时会解析这段自然语言,自动编排 Agent 的调度。

设计哲学:信任模型的理解能力,用自然语言替代代码。

OpenClaw:Agent 是一个工程系统

OpenClaw 的 Agent 系统完全不同。看src/agents/agent-scope.ts(精简版):

每个 Agent 有明确的配置结构:模型选择(含 fallback 链)、工作空间隔离、子 Agent 生成深度控制、沙箱策略、工具白名单/黑名单。

再看子 Agent 的能力控制(src/agents/subagent-capabilities.ts):

OpenClaw 用代码精确控制了 Agent 的生成深度——main可以生成orchestrator,orchestrator可以生成leaf,但leaf不能再生成子 Agent。这防止了 Agent 无限递归。

设计哲学:不信任模型的自我约束能力,用代码构建确定性边界。


四、插件系统:声明式配置 vs 运行时注册

Claude Code:插件 = 文件夹约定

Claude Code 的插件结构是纯约定式的:

没有register()函数,没有生命周期钩子,没有 API 调用。运行时扫描文件夹结构,自动发现和加载。

Hook 的实现也很有意思。看security-guidance插件的 hook——它是一个 Markdown 文件,描述了 9 种安全模式(命令注入、XSS、eval 使用等),Claude Code 运行时在每次工具调用前读取这个 Markdown,让模型自己判断是否存在安全风险。

而如果你需要确定性的 hook 逻辑,可以用外部脚本。看官方示例bash_command_validator_example.py:

进程间通信,用 exit code 当 API。简单到令人发指,但确实有效。

OpenClaw:插件是一等公民的运行时模块

OpenClaw 的插件系统是一个完整的模块加载框架。看src/plugins/types.ts中的插件 API:

一个插件可以注册:工具、钩子、HTTP 路由、消息通道、网关方法、CLI 命令、后台服务、模型提供商、上下文引擎。这不是插件——这是微内核架构的扩展点

OpenClaw 定义了24 种生命周期钩子

插件加载器(src/plugins/loader.ts,600+ 行)实现了:

多来源发现(bundled / global / workspace / config)

优先级排序和去重

内存插槽互斥(同时只能有一个 memory 插件)

配置 schema 校验

安全边界检查(路径逃逸检测)

LRU 缓存(最多 32 个注册表实例)

通过 Jiti 实现 TypeScript 热加载

设计哲学:插件是系统的一部分,不是系统的附属品。


五、多模型支持:单一供应商 vs 模型路由器

Claude Code:只有 Claude

Claude Code 只支持 Anthropic 的 Claude 模型。这不是技术限制——这是产品决策。当你的 Agent 定义是自然语言时,模型的理解能力就是你的运行时。换一个模型,整个系统的行为可能完全不同。

在插件的 Agent 定义中,模型选择极其简洁:

三个选项,没有 fallback,没有路由逻辑。

OpenClaw:20+ 提供商的路由引擎

OpenClaw 的src/agents/models-config.providers.ts是一个 32,000 行的模型配置系统,支持:

Anthropic、OpenAI、Google Gemini

Ollama(本地模型)、vLLM、sglang

Amazon Bedrock、Azure

通义千问、Moonshot(Kimi)、MiniMax、字节跳动(豆包/BytePlus)、小米

OpenRouter、Together、Nvidia、Huggingface

GitHub Copilot、Vercel AI Gateway

…以及通过插件扩展的任意提供商

每个提供商有独立的能力声明(src/agents/provider-capabilities.ts):

不同提供商的工具调用格式、思考链处理、tool call ID 规范都不一样,OpenClaw 在运行时自动适配。

Agent 还支持模型 fallback 链:

主模型不可用时自动降级——这在 Claude Code 的世界里是不存在的概念。


六、消息通道:终端 vs 全平台

Claude Code:终端 + IDE + GitHub

Claude Code 的交互面是:命令行终端、VS Code/JetBrains 插件、GitHub PR 评论。全部面向开发者。

OpenClaw:40+ 消息通道的网关架构

OpenClaw 的src/gateway/目录有 341 个文件,实现了一个完整的消息网关:

每个通道是一个独立的 extension 包,通过插件 API 的registerChannel()注册。消息路由系统(src/routing/resolve-route.ts)根据通道、账号、对话类型、群组角色等维度,将消息路由到正确的 Agent 会话。

这就是为什么 OpenClaw 的代码量是 Claude Code 的 16 倍——它不只是一个 Agent,它是一个Agent 运行平台


七、安全模型:信任模型 vs 信任代码

Claude Code:分层权限 + 沙箱

Claude Code 的安全模型通过 JSON 配置实现,看官方的settings-strict.json:

三层权限(allow / ask / deny),Bash 沙箱隔离,网络域名白名单。企业管理员可以通过managed-settings.json强制覆盖用户配置。

OpenClaw:代码级的安全边界

OpenClaw 的安全是代码级的。工具策略系统(src/agents/tool-policy.ts):

因为 OpenClaw 面向多用户(通过消息通道),它必须区分 owner 和普通用户。whatsapp_login、cron、gateway、nodes这些敏感工具,非 owner 用户连工具列表里都看不到——不是”禁止调用”,而是”不知道存在”。

插件加载器还有路径逃逸检测:


八、设计哲学总结:给 Agent 开发者的启示

维度
Claude Code 的选择
OpenClaw 的选择
核心信念
模型足够聪明,自然语言即代码
模型不够可靠,代码才是边界
Agent 定义
Markdown 声明式
TypeScript 命令式
编排方式
自然语言描述流程,模型自行编排
代码定义生命周期,运行时强制执行
插件模型
文件夹约定,零代码
微内核 + register() API
模型策略
单一供应商,深度优化
多供应商,运行时适配
安全边界
配置声明式,信任模型遵守
代码强制式,不信任模型
扩展方向
垂直深耕开发者场景
水平扩展全平台全场景
复杂度
低(~28K 行 Markdown)
极高(~453K 行 TypeScript)

如果你在做 AI Agent,该怎么选?

选 Claude Code 路线(声明式/Markdown 驱动),如果:

你的 Agent 面向单一场景(比如代码审查、文档生成)

你信任底层模型的能力,愿意用提示词工程替代代码

你希望非程序员也能定义 Agent 行为

你的用户群体是开发者,交互面是终端/IDE

你追求快速迭代,不想维护复杂的运行时

选 OpenClaw 路线(命令式/代码驱动),如果:

你的 Agent 需要支持多个 LLM 提供商

你需要精确控制 Agent 的行为边界(尤其是多用户场景)

你的 Agent 需要跨平台部署(消息通道、API、原生客户端)

你需要确定性的安全保证,不能依赖模型的”自觉”

你在构建一个 Agent 平台,而不是单个 Agent

最深层的分歧

Claude Code 和 OpenClaw 的分歧,本质上是对一个问题的不同回答:

“AI 模型的理解能力,能否替代代码的确定性?”

Claude Code 说:能。自然语言足够表达意图,模型足够理解意图,代码只是不必要的中间层。当模型能力提升时,整个系统自动变强。

OpenClaw 说:不能。模型会幻觉、会越权、会在边界条件下失控。代码是唯一可审计、可测试、可证明的控制手段。安全和可靠性不能建立在概率之上。

两个答案都对,取决于你在造什么。

如果你在造一把瑞士军刀给程序员用——Claude Code 的路线更优雅。

如果你在造一个 7×24 小时运行的 Agent 平台给所有人用——OpenClaw 的路线更稳健。

而最有趣的是,这两条路线正在相向而行。Claude Code 在加强代码级的安全控制(沙箱、managed settings),OpenClaw 在引入更多声明式配置(skills、YAML 配置)。也许最终的答案,是两者的融合。


本文基于 2026 年 3 月 15 日的源码分析。Claude Code 仓库:github.com/anthropics/claude-code,OpenClaw 仓库:github.com/openclaw/openclaw。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 源码级拆解:OpenClaw vs Claude Code,两种 AI Agent 设计哲学

猜你喜欢

  • 暂无文章