Skip to content

Claude Code 和 OpenClaw 功能列表高度重叠:都有记忆系统、子代理、Hooks、MCP 支持。但读完两套文档和 OpenClaw 源码之后,你会发现这两个项目从根本上服务于不同的场景。本文对比了 Memory 架构(声明式文件层级 vs 自动向量检索流水线)、子代理编排(单层委托 vs 异步 lane 推送树)、Hooks 自动化模型(确定性拦截器 vs 条件触发工具执行)三个维度,以及两个工具最适合改变你哪种工作方式。

Claude Code vs OpenClaw:两个都在改变你工作方式的工具,解决的却是完全不同的问题

2026年4月


Claude Code 是 Anthropic 的官方 AI 编程 CLI,跑在你的终端 / IDE 里,以写代码为中心。OpenClaw 是一个自托管 AI Gateway,跑在你的服务器上,把 20+ IM 渠道(WhatsApp、Telegram、飞书、iMessage...)统一接入 AI,以随时可达为中心。

它们都有记忆系统。都有子代理。都有 Hooks。都支持 MCP。如果只看功能列表,你可能觉得差距不大——选哪个都能用。

但用上一段时间之后,你会感受到一个明显的分岔:Claude Code 在改变你的编码工作流,OpenClaw 在改变你的信息接触方式。 它们真正竞争的场景很少。

本文试图解释为什么——从 Memory 架构、子代理编排、Hooks 自动化三个维度,以及最重要的:使用场景本身。

使用场景:两条根本不同的接触路径

这是两个工具最根本的差异,值得先说清楚,而不是把它藏在最后的"哪个适合你"章节里。

你用 Claude Code 的时机,是你在主动工作的时候。

打开终端,运行 claude,Claude 进入你的代码库上下文——读 git 历史、读 README、读错误堆栈,理解你正在做什么,然后帮你写代码、改 bug、重构、生成测试。整个互动发生在你已经坐在工位、专注在某个任务上的状态里。Claude Code 不会主动联系你;它等你打开它。

你用 OpenClaw 的时机,覆盖你一天的任何时刻。

你在通勤时用手机 Telegram 问它今天的任务列表;你在会议间隙用 WhatsApp 让它查一段文档;你下班后用飞书提问,第二天早上看回复。OpenClaw 的核心优势是渠道触达——不需要专门打开某个工具,在你已经在用的 IM 里就能接触到 AI。当你需要 AI 的那一刻,你已经在那个渠道里了。

这个差异决定了记忆系统的设计方向。

Memory 架构:声明式文件层级 vs 自动向量检索流水线

Claude Code:你告诉它记什么

Claude Code 的记忆分两套机制:

第一套是 CLAUDE.md 文件层级,完全人工维护。有三个作用域:

  • 项目级 CLAUDE.md(可提交到 git,整个团队共享)
  • 用户级 ~/.claude/CLAUDE.md(个人偏好,跨项目生效)
  • 企业级(/etc/C:\Program Files\,管理员统一下发)

更具体的位置优先级更高。你在 CLAUDE.md 里写什么,Claude 就记什么——没有过滤,没有自动评估,你写的就是最终输入。支持 @path/to/file 语法引入外部文件,.claude/rules/ 支持按文件路径限定规则的生效范围。

第二套是 Auto Memory(v2.1.59+),Claude 自动写入 ~/.claude/projects/<project>/memory/MEMORY.md。格式同样是 Markdown 文件,自动分主题,入口文件只加载前 200 行。你可以读这些文件,也可以手动编辑。

本质上,Claude Code 的记忆模型是声明式的:你控制信息输入,Claude 只是在上下文里读这些文件。上下文压缩(/compact)之后,记忆文件内容仍然完整保留——这是它相比直接对话历史的核心优势。

OpenClaw:它自己决定记什么值得记

OpenClaw 的记忆系统是四层混合架构,大部分细节都在 extensions/memory-core/ 里。

层 1:文件系统(Markdown)
每次用户执行 /new/reset 命令时,session-memory hook 自动把最近 15 条对话写成 memory/YYYY-MM-DD-{slug}.md,slug 由 LLM 生成,描述这段对话的主题。

层 2:SQLite + sqlite-vec(向量 + 全文搜索)
记忆文件被 chunked 之后,通过配置的 embedding provider(支持 OpenAI / Gemini / Voyage / Ollama / Bedrock / Mistral)生成向量,存入 SQLite 的 chunks 表。同时建 FTS5 全文索引,支持 BM25 关键词检索。

层 3:混合召回 + 重排
每次对话时,查询被向量化,同时走两条通道:

  • 向量通道:sqlite-vec 的余弦 ANN 查询(无扩展时退化为暴力扫描)
  • 关键词通道:FTS5 BM25 查询

两路结果通过 Reciprocal Rank Fusion 加权融合,叠加时间衰减(近期记忆权重更高),可选 MMR 多样性重排(λ=0.7,防止召回结果高度重复)。

层 4:Dreaming 流水线(自动晋升 → MEMORY.md)
这是最有意思的部分。每次记忆被成功召回,系统会在 short-term-recall.json 里累积这条记忆的"命中信号"。Cron 定时触发 Dreaming 三阶段:

阶段作用
Light对近期召回做初步筛选,写入 dream 日志
REM分析 concept tag 模式,生成"候选真相"
Deep对候选记忆做多维度打分,达标的晋升到 MEMORY.md

打分维度(加权求和):

  • 相关度 0.30(平均召回相似度)
  • 频率 0.24(召回次数对数归一化)
  • 多样性 0.15(独立查询数 / 召回天数)
  • 时间衰减 0.15(半衰期 14 天)
  • 巩固度 0.10(多天分散程度)
  • 概念覆盖 0.06(concept tag 覆盖率)

只有经过多次召回、跨越多个独立查询、在一定时间跨度内持续命中的记忆,才会晋升到 MEMORY.md。这模拟的是人类记忆的"重要性由使用频率决定"——你记住的通常是你反复用到的信息。


两种设计的根本取舍很清晰:

Claude Code 的记忆你可以完全审计、完全控制,写什么进什么,非常适合代码库上下文(项目约定、团队规范、架构决策)。但它不会主动观察你在 AI 对话里反复问什么,也不会自动提炼出"这个用户特别关心 XX 类型的问题"。

OpenClaw 的记忆系统不需要你手动维护。但你也更难预测它会记住什么——晋升标准是算法决定的,不是你决定的。如果你需要确定性地让某件事被"记住",显式地写入 memory/ 文件是更可靠的方式。

子代理编排:单层委托 vs 异步 lane 推送树

Claude Code 的子代理是单层的显式委托模型。子代理在 .claude/agents/<name>.md 里定义,有独立的系统提示、工具白名单/黑名单、专属 MCP 服务、独立上下文窗口。Claude 根据 description 字段自动判断何时委托,也可以显式文字指令或 @提及 触发。

关键约束:子代理不能生成其他子代理。调用树是平的,最多一层深度,主代理串行或并行调用多个子代理,结果统一汇回主上下文。每个子代理可以独立指定模型(haiku / sonnet / opus),这让成本路由变得精确——探索和只读任务用 Haiku,复杂推理用 Sonnet。

OpenClaw 的子代理是异步推送树(lane queue 模型,前面的 Hermes vs OpenClaw 对比文章 里有详细分析)。每个 session 有自己独立的 lane,父代理发出 spawn 指令后立即返回,子代理在自己的 lane 里独立运行,完成后通过推送事件异步通知父代理。父子代理真正并发,互不阻塞。嵌套深度不固定,通过配置控制,cron job 内部操作有专门的 nested lane 避免死锁。

两种模型的适用场景不同:Claude Code 的同步单层树在代码任务里足够用——写代码大多数时候是顺序的(先分析再改再测试);OpenClaw 的异步多层树对"我有一个任务,派出多个子 AI 同时去做不同的事,等它们完成再汇总"这类场景更自然。

Hooks 自动化:两种不同的控制模型

Claude Code 的 Hooks 是在 Claude 执行链路里插入确定性拦截器的机制。8 个生命周期节点(SessionStart / UserPromptSubmit / PreToolUse / PostToolUse / PermissionRequest / Notification / Stop / SessionEnd)覆盖 Claude 的完整执行路径。

三种 Hook 类型:

  • command:执行 shell 命令
  • prompt:让 Haiku 模型做判断(可以写自然语言条件,比用正则匹配更灵活)
  • agent:调用可使用工具的验证代理(最重型,适合复杂校验)
  • http:POST 到 HTTP 端点

退出码决定行为:0 继续、2 阻止(stderr 内容反馈给 Claude)、其他非零只记日志。这是 Claude Code 里少数"确定性"的机制——指令靠 AI 判断,Hooks 是系统级强制执行,不受 Claude 当前状态影响。

OpenClaw 的扩展/Hooks 是插件层面的能力组合。通过 api.on("before_agent_reply", ...) 等事件接口注入逻辑,可以是对每条消息的预处理、对工具结果的后处理、或者在 Gateway 启动时注册 cron job。前面提到的整个 Dreaming 流水线,本质上就是一个通过 Hooks 机制注入 Gateway 生命周期的扩展。

核心差异:Claude Code 的 Hooks 是控制 Claude 行为的工具,OpenClaw 的扩展系统是扩展 Gateway 能力的工具。前者你在限制 / 监控 / 确保 Claude 的操作;后者你在给 Gateway 本身添加新功能。

哪个改变了你的哪种工作

如果你的核心需求是:

  • 代码库级 AI 协作(代码审查、重构、生成测试)
  • 强制执行团队编码规范(通过 CLAUDE.md + Hooks 组合)
  • 在 IDE / 终端里的深度上下文感知
  • 需要明确审计 AI 记住了什么、拥有什么权限

Claude Code 是更合理的选择。

如果你的核心需求是:

  • 用已有的 IM 渠道接触 AI,而不需要专门打开工具
  • 跨越多个平台(WhatsApp / Telegram / 飞书 / iMessage...)的统一 AI 接口
  • 长期记忆自动积累,不手动维护
  • 在移动端、碎片时间里使用 AI

OpenClaw 是更合理的选择。

真正有竞争关系的场景很少。大部分用户会发现自己在编码时用 Claude Code,在其他时间用 OpenClaw——两者并不互斥。

如果你只想要一个,问自己一个问题:AI 主要帮你做的是"工作中的一件具体的事",还是"随时随地回答你的问题"? 前者选 Claude Code,后者选 OpenClaw。


FAQ

Q: Claude Code 和 OpenClaw 都支持 MCP,它们的 MCP 集成有差异吗?
A: 两者都支持 MCP 协议,但 Claude Code 支持给子代理配置专属 MCP 服务(不出现在主对话),OpenClaw 的 MCP 配置通过 Extension 层管理,可以在不同渠道的会话里共享或隔离。实际使用体验类似,配置文件语法有所不同。

Q: OpenClaw 的向量记忆系统要求部署额外的向量数据库吗?
A: 不需要。默认用 SQLite + sqlite-vec 扩展,零额外基础设施。如果需要更大规模或更高性能,有可选的 memory-lancedb 扩展支持 LanceDB 后端,但绝大多数个人用户用 SQLite 就够了。

Q: Claude Code 的 Auto Memory 和 CLAUDE.md 有什么优先级关系?
A: 两者独立加载,没有覆盖关系。CLAUDE.md 是指令(Claude 应该怎么做),Auto Memory 是笔记(Claude 自己记录的信息)。实际上下文里两者都会出现,Claude 自行判断如何使用。更具体的 CLAUDE.md(项目级 > 用户级 > 企业级)在指令优先级上更高。

Q: OpenClaw 的 Dreaming 如果不触发,记忆就永远不会晋升到 MEMORY.md 吗?
A: 是的,手动写入 memory/ 目录的 Markdown 文件会被直接索引,但自动生成的会话摘要需要经过 Dreaming 流水线评分才能晋升到 MEMORY.md 里的"持久化真相"区域。如果你想强制让某件事被记住,手动写入 memory/ 文件是更可靠的路径,不依赖算法评分。


Claude Code 版本:截至 2026-04-14 的最新文档。OpenClaw 源码:截至 2026-04-10 的 main 分支。