转载--Hermes Agent 00 | 开篇词:当 AI Agent 学会自我进化,一切都变了
—通过 OpenRouter(覆盖 200+ 模型)、Nous Portal、OpenAI、Anthropic、Google、xAI、Ollama、Kimi、MiniMax、智谱、小米、HuggingFace,以及任何 OpenAI 兼容的端点。它们不只是"回答问题",而是"完成任务"。Claude Code 和 Cursor 在各自的维度上仍然是最强的——Claude Code 的代码理解深度和
工具终将被遗忘,但会成长的伙伴会被记住。
Claude Code 有 Memory,Cursor 有 .cursorrules,各类 Agent 框架都有自己的记忆文件——2026 年的 AI Agent 都有记忆了。但"记住"和"学会"是两回事。今天我们聊一个把这条线跨过去的项目:它不只是记住你告诉它的东西,而是从工作经验中自主创建技能、持续改良技能、越用越强。当 Agent 从"有记忆的工具"变成"会进化的伙伴",游戏规则就变了。
一个让我重新思考 Agent 的瞬间
三月初的一个晚上,我在测试一个开源项目。
任务很简单:让 Agent 帮我把一个 Go 项目的日志库从 logrus 迁移到 slog。十几个文件,涉及日志格式、级别映射、上下文字段传递。对人来说大概半天的活。
我先用了 Claude Code。前几个文件改得干净利落——分析导入、替换调用、调整格式化字符串,甚至还自动处理了 WithFields 到 slog.With 的语义映射。但到第六个文件,风格开始漂移:前面统一用的 slog.String("user_id", uid) 风格,这里突然变成了 slog.Any("user_id", uid)。到第九个文件,错误日志里约定的 slog.String("trace_id", traceID) 也丢了。
公平地说,Claude Code 有 Memory 功能,我也把迁移规范钉在了 CLAUDE.md 里。它确实"记住"了这些规范——如果你问它"我们的日志迁移规范是什么",它能准确回答。但"记住规范"和"从实战中形成肌肉记忆"是两回事。
我做了上下文工程该做的一切:压缩历史对话,用摘要替代完整的修改记录,把关键约定反复强调。有改善,但问题没有根治。因为问题的本质不是"Agent 没看到规范",而是 Agent 没有能力从前面的成功经验中提炼出一套可复用的操作方法,并在后续任务中自动应用。
记忆存的是"知识"——你告诉它的事实和规则。但十几个文件的迁移任务需要的是"技能"——从实战中抽象出的模式、决策树、边界情况处理。这两者之间有一道鸿沟。
同一周,我在测试另一个项目时,遇到了一个不同的体验。
我让它做类似的迁移任务。前三个文件,它跟 Claude Code 一样,靠系统提示词和上下文来完成。但在做了几轮任务后,它做了一件我没见过的事:它自己创建了一个技能文件。
这个文件叫 logrus-to-slog-migration.md(一个 SKILL.md 技能文件),里面记录了它在前面几轮中总结出的迁移模式——字段映射表、错误处理约定、格式化风格。从下一个文件开始,它先加载这个技能文件,然后再动手改。十几个文件,风格从头到尾一致。
这个项目,就是 Hermes Agent。
那一刻我意识到:这不是一个更好的编码工具。这是一个不同类别的东西。
一个值得关注的开源项目
Hermes Agent 由 Nous Research 开源(LICENSE 文件头写明 Copyright (c) 2025 Nous Research,MIT 协议)。Nous Research 就是那个以训练 Hermes 系列开源语言模型闻名的团队。
这个项目的增速在 Agent 圈内引起了相当的关注。根据公开报道,它在开源后很短时间内就冲上了数万 GitHub Star。这个数字本身来自外部信息源,不是我们今天要验证的重点;真正值得拆开的,是它背后的产品形态和工程机制。
小声提醒:Nous 自家的 Hermes-3/4 系列语言模型并不是为 Agent 场景训练的——Hermes Agent 自己的 CLI 在加载这些模型时会主动警告你 "NOT agentic"。这是本专栏后面会详细展开的一个有趣的细节:叫 Hermes 的模型 ≠ 叫 Hermes 的 Agent 框架。Hermes Agent 本身是一个"模型无关"的框架,把任何一款 agentic 模型(Claude、GPT、Gemini、DeepSeek 等)接进来都能跑。
创始人 Teknium 在早期定位 Hermes Agent 时用过一句话:"A very good blend between coding agents like Claude Code and generalist agents." 这句话定义了 Hermes Agent 的方向——它不是一个纯粹的编码助手,也不是一个通用聊天机器人。更准确地说,它是一套既能在 CLI 中直接工作、也能通过 Gateway 长期在线接入多渠道的 Agent runtime。
但 Star 数只是表象。真正有意思的问题是:Hermes Agent 到底跟别的 Agent 不一样在哪儿?
两代 Agent 的分水岭
要理解 Hermes Agent 为什么值得深入看,你得先看清一个正在发生的范式转移。
过去两年,AI Agent 工具经历了两代:
第一代:会话型 Agent(2024-2025)
代表产品:ChatGPT、Claude。
特征:你问它答,一问一答。对话结束,什么都不留下。下次打开,从头开始。它不知道你是谁、你在做什么项目、上次聊到哪里。
本质上,它是一个无状态的函数:f(prompt) → response。
第二代:工具型 Agent(2025-2026 上半年)
代表产品:Claude Code、Cursor、Codex CLI、Devin,以及各类跨平台 Agent 框架。
巨大的进步。它们能读文件、写代码、跑测试、提 PR。它们不只是"回答问题",而是"完成任务"。而且它们都有了某种形式的记忆——Claude Code 有 Memory 和 CLAUDE.md,Cursor 有 .cursorrules,Codex CLI 有 AGENTS.md,跨平台 Agent 通常用 MEMORY.md 这类约定。
这些记忆确实有用。它们能记住你的偏好、项目规范、编码风格。其中一些已经做到了主动保存——Claude Code 的 auto memory 会在对话中自动识别值得记住的用户偏好和纠正反馈,不需要你说"请记住这个"。
但即使是最先进的第二代记忆,存的仍然是事实——"用户偏好 Python 3.12"、"项目用 pyproject.toml 管理依赖"、"用户不喜欢 verbose 输出"。Agent 不会从一次复杂的调试中提炼出一个可复用的调试策略,也不会在十次类似的日志迁移后自己形成一套标准操作流程。它记住的是"知道什么",不是"怎么做"。
用一个类比:第二代 Agent 就像一个有笔记本的高级实习生——能力很强,也会记笔记(有的甚至能自己判断该记什么),但它不会把十次类似任务的经验抽象成一套可复用的工作方法论。笔记本里写的是事实和偏好,不是从实战中提炼的操作手册。
第三代:进化型 Agent(2026-)
Hermes Agent 代表的,是第三代。
核心差异只有一个词:进化。
不是"记住用户告诉它的东西"——前两代都能做到。而是主动从工作经验中提炼可复用的技能,持久化为文件,在未来的工作中自动加载和应用,并在每次使用中持续改良。
记忆存的是"知道什么"(知识)。技能存的是"怎么做"(方法)。前两代 Agent 有记忆,但没有自动涌现的技能系统。Hermes Agent 两者都有——而且技能是Agent 主动创建、主动改良的。
这个差异听起来微妙,实际上是天壤之别。
闭环学习:Hermes Agent 的核心引擎
让我用一张图来解释 Hermes Agent 最核心的机制:
┌──────────────────────────────────────────────────────────────┐
│ 闭环学习系统 │
│ │
│ ┌──────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 执行任务 │───→│ 定期 Nudge │───→│ 后台审查 │ │
│ └────┬─────┘ │(评估会话) │ │(非阻塞) │ │
│ │ └───────────┘ └─────┬─────┘ │
│ │ │ │
│ │ ┌────────────────┐ │ │
│ └──→│ MEMORY/技能写入 │←────────────┘ │
│ └────────┬───────┘ │
│ │ │
│ ▼ │
│ 下次执行更快、更准 │
└──────────────────────────────────────────────────────────────┘
四个齿轮:
齿轮一:Agent 主动策展的记忆。 不是"自动保存一切"——那会导致记忆膨胀和噪音污染。也不是"等用户说请记住这个"——那会丢失大量有价值的信息。Hermes Agent 有一个定期 nudge 机制:run_agent.py 里的 _memory_nudge_interval = 10、_memory_flush_min_turns = 6 这类阈值,会驱动系统在合适的时机回看刚才的对话,判断**"哪些信息值得持久化"**,再把条目写入 ~/.hermes/memories/MEMORY.md 或 USER.md。
齿轮二:自主技能创建。 与记忆 nudge 并行的还有 _skill_nudge_interval = 10 的技能 nudge——系统定期提示 Agent 反思最近的工作,如果确实形成了可复用的模式,就抽象成一个技能文件(SKILL.md)。就像开头那个日志迁移的例子——Agent 把解决方案沉淀成一个技能文件。下次遇到类似任务,加载技能,直接执行。
齿轮三:技能渐进式改良。 技能不是创建了就完事了。每次使用,Agent 可以对技能做补丁式更新——优先打补丁,避免完全重写。技能在使用中越来越精确,越来越高效。
齿轮四:后台审查线程。 源码中的 _spawn_background_review() 会在命中记忆或技能 nudge 条件后,fork 出一个隔离的 **AIAgent** 实例,传入 _MEMORY_REVIEW_PROMPT / _SKILL_REVIEW_PROMPT 审查当前会话,直接写入共享的记忆/技能存储。它发生在主响应完成之后,不阻塞主会话,也不产生用户可见输出——你在干活,它在后台默默学习。
这四个齿轮咬合在一起,形成了一个正反馈循环:
-
Agent 做的任务越多 → 技能越丰富 → 下次做得越快
-
记忆越积累 → 上下文越丰富 → 决策越准确
-
技能改良次数越多 → 技能质量越高 → 出错越少
用了一个月的 Hermes Agent,和刚装上的 Hermes Agent,是两个不同的东西。
至少在我实际对比过的主流 coding agent 里,这种"把经验沉淀成技能文件,并在后续任务里持续复用和改良"的机制并不常见。也正因为如此,Hermes Agent 值得单独开一整个专栏来拆。
不只是"会学习"——全景差异
闭环学习是 Hermes Agent 最核心的差异,但不是唯一的差异。
差异一:多入口、共享状态与能力
Claude Code 是很典型的单入口体验:你在终端里启动它,当前工作主要围绕这一个入口展开。
Hermes Agent 更像两套入口共用一套 runtime:CLI 可以直接本地对话,Gateway 则适合长期在线、接入多渠道。它共享的是同一套 AIAgent 能力层、工具层、状态目录、记忆和技能机制,而不是简单的"一个终端工具加几个外壳"。
源码的 gateway/platforms/ 目录下已经落地了近二十个平台适配器:telegram、discord、slack、whatsapp、signal、matrix、mattermost、feishu、dingtalk、wecom、weixin、qqbot、bluebubbles、sms、email、homeassistant、webhook、api_server 等。README 重点强调的主打平台是 Telegram、Discord、Slack、WhatsApp、Signal + CLI,语音备忘录转写、图片理解、home channel 投递这些能力也都已经进入体系。
这里有一个很关键的工程细节:跨平台共享的不是"同一段活跃会话历史",而是状态和能力。 Gateway 的会话键会按 platform / chat / thread / user 组合隔离;但一个渠道里沉淀下来的记忆和技能,可以在另一个渠道的新会话里继续发挥作用。早上你在 CLI 里沉淀了一个技能,晚上在 Telegram 里遇到类似任务,它就可能已经会用了。这才是多渠道 Agent 从"共享配置"升级到"共享进化"的关键一步。
差异二:模型无关
Claude Code 主要围绕 Anthropic 模型设计。Codex CLI 主要围绕 OpenAI 模型设计。
Hermes Agent 支持 200+ 模型——通过 OpenRouter(覆盖 200+ 模型)、Nous Portal、OpenAI、Anthropic、Google、xAI、Ollama、Kimi、MiniMax、智谱、小米、HuggingFace,以及任何 OpenAI 兼容的端点。你可以用 Claude 做复杂推理,用 GPT 做代码生成,用免费的开源模型做辅助任务。模型之间可以实时切换,甚至可以配置故障转移——主模型限速了,自动切到备用模型,用户无感。
这不只是"支持多模型"的技术花活。这是一个经济学优势:你可以把简单任务交给便宜模型(源码 smart_model_routing 模块会按消息复杂度自动路由),只有复杂任务用旗舰模型。Token 成本可以显著下降。
第 02 讲我们会把这个机制拆到源码级。
差异三:六种执行环境
大多数 Agent 只能在本地执行命令。Hermes Agent 支持六种终端后端(源码 tools/environments/ 目录):
|
后端 |
源码文件 |
场景 |
|---|---|---|
|
Local |
local.py |
本地开发 |
|
Docker |
docker.py |
隔离沙箱 |
|
SSH |
ssh.py |
远程服务器 |
|
Daytona |
daytona.py |
无服务器开发环境 |
|
Modal |
modal.py |
无服务器 GPU 计算 |
|
Singularity |
singularity.py |
HPC 集群 |
你可以让 Agent 在本地写代码,在 Docker 里跑测试,在 Modal 上训练模型——同一次对话,不同的执行环境。Daytona 和 Modal 两个无服务器后端在空闲时自动休眠,几乎零成本。
差异四:安全深度
当 Agent 可以自主创建技能文件时,技能文件本身就成了攻击面。
想象一下:一个被提示词注入攻击的 Agent,写了一个包含后门的技能文件。如果这个文件被持久化,下次加载时——攻击就从一次性的变成了持久性的。
Hermes Agent 处理这个问题的方式,分两个维度:
安全整体架构(7 层防线)。源码文档 website/docs/user-guide/security.md 明确列出:
-
用户授权——谁能跟 Agent 对话(允许名单、DM 配对)
-
危险命令审批——destructive 操作的 human-in-the-loop
-
容器隔离——Docker / Singularity / Modal 沙箱
-
MCP 凭证过滤——MCP 子进程的环境变量隔离
-
上下文文件扫描——项目文件中的 prompt injection 检测
-
跨会话隔离——session 之间互相不可访问,cron 存储路径防穿越
-
输入净化——工作目录参数白名单校验,防 shell 注入
技能扫描专用机制。tools/skills_guard.py 针对"外部来源的技能"设计了专门的扫描器:
-
结构检查:遍历技能目录,识别可扫描文件类型
-
120 条威胁正则模式(
THREAT_PATTERNS数组)——覆盖 exfiltration、injection、destructive、persistence、network、obfuscation、execution、traversal、mining、supply_chain、privilege_escalation、credential_exposure 共 12 大类威胁 -
不可见 Unicode 检测(
INVISIBLE_CHARS集合)——识别 zero-width space、bidi override 等 17 种隐藏字符 -
基于来源的信任级别策略(
INSTALL_POLICY)——builtin/trusted(openai/skills、anthropics/skills)/community/agent-created四档,每档对 safe/caution/dangerous 裁决有不同的允许或拒绝规则
注意:这是纯静态分析,不涉及 LLM 语义审计——skills_guard.py 的模块文档明确写着 "regex-based static analysis"。好处是零额外成本、确定性结果;代价是只能覆盖已知威胁模式。
这些是其他 Agent 不太需要面对的问题——因为它们没有"Agent 自动生成可执行技能文件"这个场景。
一张表看懂竞争格局
|
维度 |
Claude Code |
Codex CLI |
Cursor |
Hermes Agent |
|---|---|---|---|---|
| 学习能力 |
auto memory(事实级) |
无自主学习 |
无自主学习 |
闭环学习(记忆 + 技能创建 + 渐进改良) |
| 跨会话记忆 |
Memory + CLAUDE.md |
AGENTS.md |
.cursorrules + 记忆 |
MEMORY.md + USER.md + FTS5 会话搜索 + 可插拔 Provider |
| 部署模式 |
本地 CLI |
本地 CLI |
桌面应用 |
CLI + Gateway 双入口,可本地也可服务化部署 |
| 访问渠道 |
终端 |
终端 |
IDE |
CLI + 近二十消息平台 |
| 模型支持 |
Anthropic |
OpenAI |
多模型 |
200+ 模型(OpenRouter 聚合 + 直连) |
| 执行环境 |
本地 |
本地 |
本地 |
6 种后端(含 Docker / SSH / Modal / Daytona / Singularity) |
| 安全架构 |
权限 + 确认 |
沙箱 |
IDE 隔离 |
7 层防线 + 技能扫描器(120+ 规则) |
| 开源协议 |
部分开源 |
开源 |
闭源 |
MIT 全开源 |
| 定时任务 |
无 |
无 |
无 |
内置 Cron 调度器( |
| 技能系统 |
无 |
无 |
无 |
自动创建 + 渐进改良 + 安全扫描 |
这张表值得仔细看。
Claude Code 和 Cursor 在各自的维度上仍然是最强的——Claude Code 的代码理解深度和 auto memory 的精准度、Cursor 的 IDE 集成体验,目前没有谁能替代。Claude Code 的 auto memory 已经能主动识别用户偏好和纠正反馈并持久化,这是"事实级"自主学习的标杆。
但 Hermes Agent 打开了一个新维度。看最后一行:技能系统——在主流编码代理里,很少有产品把"从工作经验中自动提炼可复用的操作方法"做成内建的、持续运转的机制。记忆存的是"用户喜欢什么",技能存的是"遇到这类问题该怎么做"。这不是一个"多了一个功能"的差异,而是一个层次差异——从记住事实,到提炼方法。
多层次的记忆系统:不是一个 MEMORY.md 就完事了
文章前面我说"Hermes Agent 有自己的 MEMORY.md"——准确地说,Hermes Agent 的记忆系统是由多个独立子系统组合起来的:
|
子系统 |
存储位置 |
作用 |
|---|---|---|
| MEMORY.md
(Agent 个人笔记) |
~/.hermes/memories/MEMORY.md |
环境事实、约定、学到的东西,上限 2,200 字符 |
| USER.md
(用户画像) |
~/.hermes/memories/USER.md |
用户偏好、沟通风格、期望,上限 1,375 字符 |
| 会话搜索
(FTS5 全文索引) |
SQLite 会话库 |
跨会话检索 "我们之前怎么处理这个问题的" |
| 可插拔 Memory Provider | plugins/memory/ |
8 种可选集成:Honcho、mem0、Supermemory、ByteRover、Hindsight、Holographic、OpenViking、RetainDB |
前两个是 Hermes Agent 自己的"核心记忆"——以frozen snapshot 的方式注入到 session 启动时的 system prompt 里,在 session 中由 memory 工具动态增删改查。Agent 自己是它的策展人。
会话搜索和 Memory Provider 是"长期记忆与外部脑"——解决 "我一个月前是不是讨论过这个" 这种跨会话问题,以及对接成熟的开源记忆系统。
这四个子系统加起来,才是完整的"Hermes Agent 记忆"。简化成一句"MEMORY.md"容易误导人。
更多推荐


所有评论(0)