Hermes 与 Claude CodeHermes 与 Claude Code第 2 章 · 14 章Chapter 2 of 14
全文目录Contents
  1. 这个网页怎么用
  2. 1 · 零基础前置知识
    1. 1.1 大语言模型是什么
    2. 1.2 token 是什么
    3. 1.3 上下文与上下文窗口是什么
    4. 1.4 智能体与聊天机器人的区别
    5. 1.5 工具调用是什么,它到底怎么工作
    6. 1.6 什么是流式输出
    7. 1.7 什么是 API
    8. 1.8 提示词缓存 —— 全文最重要的技术概念
    9. 1.9 还会遇到的几个词
  3. 2 · 两个系统的宏观定位与架构总图
    1. 2.1 用一句话说清各自的定位
    2. 2.2 架构总图
    3. 2.3 关键数字对照
    4. 2.4 第一个值得记住的洞察
  4. 3 · 垂直分层与水平分区
    1. 3.1 垂直分层:六层模型
    2. 3.2 水平分区:同一层内部怎么切
    3. 3.3 一个反直觉的观察:巨型文件
    4. 3.4 分层之外:穿透所有层的四类逻辑
  5. 4 · 智能体主循环与错误恢复状态机
    1. 4.1 教科书版本的循环,以及它会死在哪
    2. 4.2 Claude Code 的做法:写成显式状态机
    3. 4.3 错误扣留:可恢复的错误不能立刻往外发
    4. 4.4 中断的正确处理姿势
    5. 4.5 切换备用模型:一个想不到的坑
    6. 4.6 Hermes 的做法:预算驱动的循环
    7. 4.7 Hermes 独有的能力:轮次中途插话
    8. 4.8 两家对照与取舍
  6. 5 · 工具抽象层与工具执行编排
    1. 5.1 Claude Code 的工具接口:一个教科书级抽象
    2. 5.2 渐进式工具加载:工具搜索机制
    3. 5.3 工具清单的装配:一个只有深度用过缓存才知道的坑
    4. 5.4 执行编排:并发分区
    5. 5.5 流式工具执行器:边流边执行
    6. 5.6 Hermes 的工具层:中心分发 + 参数强制矫正
    7. 5.7 两家对照与取舍
  7. 6 · 上下文治理阶梯 ★ 全文核心
    1. 6.1 Claude Code 的做法:五级流水线
    2. 6.2 第 ① 级:工具结果预算与落盘
    3. 6.3 第 ③ 级:缓存编辑 —— 全文最精彩的一处
    4. 6.4 第 ⑤ 级:自动摘要压缩的工程细节
    5. 6.5 上下文真的超了之后:三级恢复瀑布
    6. 6.6 Hermes 的做法:把整条阶梯抽象成一个插座
    7. 6.7 两家横向对照
  8. 7 · 权限模型与安全边界
    1. 7.1 Claude Code 的做法:十级决策级联
    2. 7.2 自动模式:用模型判断安全性,加三级快速通道
    3. 7.3 Hermes 的做法:正则红线 + 对抗性解析
    4. 7.4 Hermes 的第二道防线:执行环境隔离
    5. 7.5 一个常被忽略的攻击面:错误消息回灌
    6. 7.6 两家对照与取舍
  9. 8 · 多智能体协作编排
    1. 8.1 子智能体到底解决什么问题
    2. 8.2 Claude Code 的三种子智能体形态
    3. 8.3 分叉子智能体:把提示词缓存用到极致
    4. 8.4 子智能体的工具限制
    5. 8.5 Hermes 的做法:任务委派 + 看板协作
    6. 8.6 一个两家共同的硬约束:中断的级联
  10. 9 · 记忆系统与扩展体系
    1. 9.1 记忆:两种截然不同的答案
    2. 9.2 Hermes 的全息记忆值得单独看
    3. 9.3 Claude Code 的记忆预取:藏在流水线里的优化
    4. 9.4 扩展体系:四种扩展点
    5. 9.5 Hermes 的网关层:Claude Code 完全没有的一层
  11. 10 · 两个系统的横向对照总表
    1. 10.1 机制对照
    2. 10.2 两条架构路线各自的账本
    3. 10.3 两家一致的地方 = 事实上的行业共识
  12. 11 · 可以搬到自己项目里的实现范式
    1. 11.1 骨架一:带恢复状态机的主循环
    2. 11.2 骨架二:上下文治理阶梯
    3. 11.3 骨架三:工具抽象 + 并发分区
    4. 11.4 骨架四:按信任边界配置工具面
    5. 11.5 骨架五:不可绕过的安全底座
    6. 11.6 自建智能体的决策清单
    7. 11.7 一页纸检查清单
  13. 12 · 面试话术卡
    1. Q1 · 说说你理解的智能体架构
    2. Q2 · 上下文满了怎么办
    3. Q3 · 怎么防止智能体执行危险命令
    4. Q4 · 多工具并行怎么保证不出竞态
    5. Q5 · 智能体循环怎么防止无限循环
    6. Q6 · 什么时候该用子智能体
    7. Q7 · 智能体的长期记忆怎么做
    8. Q8 · 你怎么优化智能体的成本和延迟
    9. Q9 · 反问环节可以问的问题
    10. 最后:这份文档的正确用法
  14. 13 · 术语表
    1. 13.1 模型与调用
    2. 13.2 提示词缓存(全文最重要的概念组)
    3. 13.3 智能体与工具
    4. 13.4 上下文治理
    5. 13.5 编程与架构概念
    6. 13.6 两个系统的关键模块名

2 · 两个系统的宏观定位与架构总图

2.1 用一句话说清各自的定位

Claude Code

一个把「单次终端会话的 token 效率」压榨到极限的编程助手。

它所有那些乍看之下莫名其妙的设计 —— 缓存编辑、五级上下文治理阶梯、工具清单分区排序、错误扣留机制 —— 追根溯源都指向同一个目标:在不丢失任何上下文信息的前提下,让提示词缓存的命中率尽可能高、让每一轮要重发的输入 token 尽可能少。

(「提示词缓存」和「输入 token」这两个概念如果还不清楚,请回看第 1.8 节和第 1.2 节。)

Hermes

一个长期在线的、可以从任意聊天软件被找到的、能自我演化的自主智能体。

它的核心设计 —— 多身份隔离、统一入口网关、上下文引擎与记忆系统的插件化、全息记忆 —— 都指向另一个目标:让一个智能体实例长期活着、跨越多次会话记住事情、并且能被任何人从任何渠道叫醒。

2.2 架构总图

下面两张图分别是两个系统的整体结构。如果你没看过这类图,先读一下怎么看:

这两张图该怎么看

  • 横向的一条条虚线框叫做「层」。数据从最上面一层进来,一层一层往下穿,处理完再往上返回。每层只跟相邻的层打交道,这样改动一层不会影响其他层。
  • 框里的圆角矩形是具体的软件模块。名字通常就是源代码里真实的文件名或类名。
  • 实线箭头表示「同步调用」—— 调用方会停下来等结果。虚线箭头表示「异步返回」或「旁路」—— 不阻塞主流程。
  • 颜色不代表技术类型,代表「角色」。比如所有和数据存储有关的模块都是紫色,不管它用的是数据库还是文件。
  • 发光加粗的那个模块是整个系统的核心。图上只有一到两个。

Claude Code 的六层结构

Claude Code 六层架构
Claude Code 六层架构 — 发光的 queryLoop 是整个系统的心脏;右侧虚线是模型返回的流式响应回灌到循环层,左侧紫色虚线是把对话记录写入磁盘的旁路点击放大

逐层解释这张图上的每个名词:

模块名它负责什么
L6 入口层
把人的意图变成一次程序调用
REPL Read-Eval-Print Loop 的缩写,意思是「读取-求值-打印 循环」。就是你在终端里看到的那个可以持续对话的交互界面。
print -p「无头模式」。不显示交互界面,直接给一个问题、拿一个答案就退出。适合写在脚本里自动化调用。
Agent SDKSDK 是 Software Development Kit(软件开发工具包)的缩写。让别的程序可以把 Claude Code 当成一个库来调用。
IDE BridgeIDE 是 Integrated Development Environment(集成开发环境)的缩写,指 VS Code、JetBrains 这类编程软件。这个模块负责和它们对接。
L5 会话层
管一整场对话的状态
QueryEngine 「查询引擎」。一场对话对应一个它的实例。它持有这场对话的全部消息记录、累计花费、读过哪些文件、被拒绝过哪些操作。用户提问多少次,它就被调用多少次,但它本身只创建一次。
L4 循环层
★ 整个系统的心脏
queryLoop 智能体主循环。这里实现了第 1.5 节讲的那个「调模型 → 执行工具 → 再调模型」的往复过程,以及所有的错误恢复逻辑。它是一个状态机,有 7 条命名好的恢复路径。第 4 章整章讲它。
Context Ladder 「上下文阶梯」。每次调用模型之前,负责把上下文压缩到能塞进上下文窗口。分五级,从免费的到最贵的依次尝试。第 6 章整章讲它。
L3 工具执行层 Orchestrator 「编排器」。模型一次可能写好几张便条(工具调用),这个模块决定哪些可以同时执行、哪些必须排队一个个来。
Permissions「权限系统」。判断某个工具调用该不该被允许执行。有一条 10 步的判定链。第 7 章整章讲它。
Hooks「钩子」。让用户可以在特定时机(比如工具执行前、执行后)插入自己的脚本。
L2 供应商层 Anthropic API 负责实际的网络通信:把上下文发给 Anthropic 公司的服务器、处理网络失败重试、标记缓存分界点、在主模型过载时切换到备用模型。
L1 持久化层 Transcript 「对话记录」。把整场对话写到磁盘上的文件里,格式是 JSONL(每行一条 JSON 记录)。这样程序崩溃或用户关掉窗口后还能恢复。
memdir「记忆目录」。存放跨会话的长期记忆,都是人类可读的纯文本文件。CLAUDE.md 是其中最主要的一个,里面写项目规范和用户偏好。

Hermes 的六层结构

Hermes 分层架构
Hermes 分层架构 — 请注意最上面 22 个入口向单一个 Gateway 模块收敛的漏斗形状。这个「网关层」是 Claude Code 完全没有的一层点击放大
模块名它负责什么
入口层
22 个平台
Slack / Telegram /
Discord / 飞书 /
企业微信 / …
这些都是常见的聊天软件。Hermes 支持从其中任何一个给智能体发消息。CLI 是 Command Line Interface(命令行界面)的缩写,ACP 是它和编程软件对接用的协议。
网关层
★ Claude Code 没有这一层
Gateway 「网关」。一个长期不关闭的后台进程。它把 22 个平台的差异抹平,做统一的会话路由、用户授权、定时任务触发。

它带来的能力是:你在电脑上用 Slack 和智能体聊到一半,出门换成手机上的 Telegram 继续聊,对话上下文完全连续。因为对智能体来说,这始终是同一场会话,只是消息的进出口换了。

PlatformAdapter ABC 里的 ABC 就是第 1.9 节讲的「抽象基类」—— 它规定了「任何一个聊天平台想接进来,必须提供哪些功能」。
循环层 run_conversation Hermes 的智能体主循环,对应 Claude Code 的 queryLoop第 4 章会把两者对照着讲。
ContextEngine 「上下文引擎」。这是一个抽象基类,也就是一个可以被整体替换掉的插座。Claude Code 把上下文治理策略写死在代码里,Hermes 则把它定义成接口交给第三方去实现。这是两个系统最根本的架构差异,第 6 章详谈。
工具层 TOOLSETS 「工具集」。它不是工具的实现,而是工具的投放策略 —— 规定「在什么场景下让模型看到哪些工具」。这是 Hermes 最值得借鉴的一个设计,第 3 章详谈。
157 tools157 个工具模块的实际实现。
approval「审批」。用 59 条正则表达式拦截危险命令。第 7 章详谈。
environments「执行环境」。工具实际在哪里跑:本机、Docker 容器、云端沙箱、远程主机等 7 种可选。
供应商层 Provider Adapters 「供应商适配器」。把 Anthropic、OpenAI、Google Gemini、亚马逊 Bedrock、本地 Ollama 等十几种不同服务的接口差异抹平,让上层代码不用关心用的是哪家。
状态层 hermes_state 状态与记忆的存储。用 SQLite(一个轻量级数据库)保存,配合 FTS5(SQLite 的全文搜索功能)做检索,另外还有一套叫 HRR 的向量记忆。第 9 章详谈。

2.3 关键数字对照

维度Claude CodeHermes
编程语言 / 运行环境TypeScript / BunPython 3.11 / uv
代码总量51.2 万行 · 1,902 个文件191.8 万行 · 4,772 个文件
最大的单个文件screens/REPL.tsx 875 KBgateway/run.py 1.55 MB
内建工具数量约 40 个约 157 个模块,按工具集分组
界面形态终端文字界面,用 React Ink 框架写的 146 个界面组件22 个聊天平台适配器 + 网页版 + 终端版 + 桌面应用
工具并发上限 10 个
环境变量 CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY
10 个
常量 _DEFAULT_MAX_CONCURRENT_CHILDREN
子智能体嵌套深度 子智能体不允许再创建子智能体(只有 1 层) MAX_DEPTH = 1,默认也是扁平的一层
上下文压缩策略写死的五级流水线,不可替换定义成抽象基类,可整体替换
记忆机制 会话内消息记录 + memdir/ 纯文本文件 HRR 向量 + SQLite 全文索引 + 8 种可选的外部记忆服务
危险操作隔离 操作系统级沙箱(macOS 的 sandbox-exec)+ 权限规则 7 种可切换的执行环境 + 正则表达式红线
扩展方式 技能 / 插件 / MCP / 钩子(10 类事件) 插件(3 个发现来源)/ 技能 / MCP / 钩子 / 工具集

表格里出现的 MCP 是 Model Context Protocol(模型上下文协议)的缩写,一个让智能体接入外部工具服务的开放标准。第 9 章会讲。

2.4 第一个值得记住的洞察

Hermes 的代码量是 Claude Code 的 3.7 倍(191.8 万行 对 51.2 万行)。

但是,两个系统的智能体核心循环体量几乎相同。Claude Code 的主循环文件 query.ts 是 1,730 行;Hermes 的主循环文件 conversation_loop.py 是 8,676 行 —— 考虑到 Python 写同样的逻辑通常比 TypeScript 更啰嗦,两者其实是同一个量级。

那 3.7 倍的差距全在外围:Hermes 的 22 个聊天平台适配器、十几种模型供应商适配、插件系统、长驻网关进程 —— 这些加起来占了它体量的绝大部分。

结论:智能体的「聪明程度」不在代码量里。真正决定一个智能体好不好用的,是那一两千行的循环逻辑和上下文策略;剩下的都是集成工程量。

这句话在面试里很好用 —— 它能说明你真的读过代码,而不是数了数 GitHub 上的收藏数。