如果你在用 Claude Code、Cursor、或者 OpenClaw,你一定经历过这个场景:
花了半小时教 AI 认识你的项目结构——哪些目录是什么用途、命名规范是什么、部署流程走哪条线。聊得很顺畅,AI 干活也靠谱。
然后你关了终端。第二天重新打开——它什么都不记得了。你又从头来一遍。
有些工具确实有记忆文件(比如 CLAUDE.md、.cursorrules),但它们要么需要你手动维护,要么只是本地文件换个设备就断了,要么记忆容量有限只能记些片段。你的 AI 知道你上次说了什么,但不知道你上个月做了什么。
这不是某个产品的 bug,是几乎所有 AI 编程工具的架构性局限:记忆不够深、不够持久、不跨平台。 你跟它之间很难建立真正持续积累的"工作关系"。
今天聊一个正在从根本上解决这个问题的项目:Hermes Agent。
Hermes Agent 到底是什么
先把身份说清楚,因为名字容易搞混。
Hermes Agent 不是 Hermes 大模型。 Nous Research 之前发布过 Hermes 系列 LLM(跑在 LLaMA 上的微调模型),那是模型。而 Hermes Agent 是一个 Agent 框架——你可以理解为一个"外壳",里面可以装任何模型。
几个关键事实:
- 出品方:Nous Research,开源 AI 社区最有影响力的研究团队之一
- 首个 Release:2026 年 3 月 12 日(仓库 2025 年 7 月创建)
- 协议:MIT,完全开源
- 技术栈:Python,要求 3.11+
- GitHub:51,000+ stars,309 位贡献者,1,700+ PR
- 定位:自托管、模型无关的持久化 AI Agent 运行时
GitHub 主页上的一句话是 "The agent that grows with you"(跟你一起成长的 agent)。README 里的完整描述更具体:
The self-improving AI agent — creates skills from experience, improves them during use, and runs anywhere.
翻译过来就是:一个会自己写工作手册、并且在使用中不断优化这些手册的 AI agent。
它不是什么
澄清几个常见误解,免得你带着错误预期往下看:
- ❌ 不是 OpenClaw 的复制品(架构哲学完全不同,后面细讲)
- ❌ 不是又一个 Claude Code 的包装器(它有自己的完整工具链)
- ❌ 不是只能用某个模型的闭源产品(支持 200+ 模型)
- ✅ 是一个可以 24/7 跑在服务器上的持久化 agent
OpenClaw vs Hermes:两种完全不同的设计哲学
这是本文最重要的部分。
你可能已经很熟悉 OpenClaw 了——35 万+ stars,目前最火的开源 agent 框架。那 Hermes 凭什么值得你关注?
不是因为它功能更多。是因为它对"agent 应该怎么工作"这个问题,给出了一个根本不同的答案。
OpenClaw 的哲学:网关优先
OpenClaw 的核心抽象是 Gateway(网关)。你可以把它想象成一个中央调度室:
- Gateway 是持久的,模型是可插拔的
- 问题被定义为:"谁能访问 agent?从什么渠道?有什么权限?"
- Skills 是由人手工编写的 Markdown 文件,需要人工维护
- 本质上是一个路由和控制系统
Hermes 的哲学:agent 自进化优先
Hermes 的核心抽象不是网关,是 Agent 执行循环。我翻了它的源码,run_agent.py 里的 AIAgent 类有这么一段核心逻辑:
初始化 → 构建系统提示(注入 skills + 记忆 + 上下文文件)
→ 预取记忆上下文(内置 + 外部 provider)
→ While 迭代次数 < 上限 AND 预算剩余 > 0:
│ 调用 LLM(带工具定义)
│ If 有工具调用:
│ 逐个执行 → 追加结果 → 继续循环
│ Else:
│ 返回最终回复
→ 同步本轮记忆到所有 provider
→ 后台预取下一轮记忆
问题不是被定义为"路由和控制",而是被定义为记忆和自我改进。
一句话总结核心区别
OpenClaw 的 skills 由人维护。Hermes 的 skills 由 agent 自己维护。
这不是一个小区别。这决定了两个项目完全不同的演化方向:
- OpenClaw 的上限取决于社区有多少人写 skills
- Hermes 的上限取决于 agent 用了多久
对比表格
Hermes 这一列来自源码分析,OpenClaw 这一列来自公开文档和社区描述:
| 维度 | OpenClaw | Hermes Agent |
|---|---|---|
| 核心架构 | Gateway 网关 | Agent 执行循环(AIAgent 类) |
| Skills 创建 | 人工编写 | Agent 自动生成 |
| Skills 优化 | 手动更新 | 使用中自动迭代 |
| 跨会话记忆 | 文件存储 |
MEMORY.md + USER.md + SQLite FTS5 + 8 个可插拔外部 provider |
| 技术栈 | TypeScript/Node.js | Python 3.11+ |
| 生态规模 | 35 万+ stars,成熟 | 5.1 万+ stars,26 个内置 skill 类别,快速增长 |
| 平台适配 | 广泛 | 15 个平台(Telegram/Discord/Slack/飞书/企微等) |
| 终端后端 | 本地执行 | 6 种后端(本地/Docker/SSH/Modal/Daytona/Singularity) |
| 适合场景 | 快速部署,大量现成 skills | 长期使用,深度个人化 |
记忆系统:Hermes 最核心的卖点
这里是 Hermes 跟市面上几乎所有 agent 框架拉开差距的地方。
双文件记忆设计
翻 tools/memory_tool.py 的源码,Hermes 的内置记忆是两个 Markdown 文件:
MEMORY.md → agent 自己的笔记(2200 字符上限)
环境信息、项目规范、工具使用经验、踩过的坑
USER.md → agent 对你的认知(1375 字符上限)
你的偏好、沟通风格、工作习惯
你可能会问:才 2200 字符?这也太小了吧?
这是故意的。源码注释里写得很清楚:
Character limits (not tokens) because char counts are model-independent.
字符上限不是技术限制,是设计选择。它倒逼 agent 提炼精华而不是堆砌原文。每次记忆快满的时候,agent 必须决定哪些信息值得保留、哪些可以丢弃。这模拟的是人类记忆的工作方式——你不会记住每句对话,你会记住结论。
冻结快照 + FTS5 全文检索
还有两个值得一提的设计:
冻结快照模式:agent 在对话中途更新了记忆,文件立刻写盘(持久化),但不会刷新当前的系统提示——这保护了 Anthropic 的 prefix cache 不失效,否则每次 API 调用成本飙升。本轮用"冻结快照",下轮对话自动加载最新记忆。既省钱又持久化。
FTS5 全文检索:hermes_state.py 用 SQLite + FTS5 存储所有会话历史,支持跨会话全文搜索——你可以精确搜索数周前的对话内容,不是模糊的"AI 好像记得这个"。
这两个机制的源码细节会在下一篇文章里展开。
8 个可插拔记忆后端
内置的 MEMORY.md + USER.md 只是基础层。Hermes 的 MemoryManager 还支持接入外部记忆 provider:
- Honcho — 辩证用户建模,带信任评分
- Holographic — 全息式记忆检索与存储
- mem0 — 托管式记忆 API
- Supermemory — 多容器搜索模式
- RetainDB — 文件级记忆留存
- Hindsight — 轻量持久记忆
- OpenViking — 多租户记忆
- ByteRover — 基于查询的记忆
源码里有个关键约束:同一时间只允许一个外部 provider。这不是限制,是刻意为之——防止多个记忆后端互相冲突、工具定义膨胀。
记忆写入安全扫描
这个细节我觉得值得单独提。memory_tool.py 里定义了 12 条威胁扫描规则,以下是其中几条:
_MEMORY_THREAT_PATTERNS = [
# Prompt injection
(r'ignore\s+(previous|all|above|prior)\s+instructions', "prompt_injection"),
(r'you\s+are\s+now\s+', "role_hijack"),
(r'do\s+not\s+tell\s+the\s+user', "deception_hide"),
(r'system\s+prompt\s+override', "sys_prompt_override"),
(r'disregard\s+(your|all|any)\s+(instructions|rules|guidelines)', "disregard_rules"),
# Exfiltration via curl/wget with secrets
(r'curl\s+[^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|API)', "exfil_curl"),
(r'cat\s+[^\n]*(\.env|credentials|\.netrc|\.pgpass|\.npmrc|\.pypirc)', "read_secrets"),
# Persistence via shell rc
(r'authorized_keys', "ssh_backdoor"),
# ... 共 12 条,还有 bypass_restrictions、ssh_access、hermes_env 等
]
简单翻译一下:前 5 条防的是 prompt injection("忽略之前的指令"、"你现在是..."、"不要告诉用户"这类攻击);中间 2 条防数据泄露(通过 curl 外传 API key,或者 cat 读取 .env 文件);最后几条防持久化攻击(写入 SSH authorized_keys 等)。
每次 agent 往记忆里写东西,都会过一遍这个扫描器。如果检测到 prompt injection、数据泄露命令、SSH 后门注入等模式,直接拦截。
为什么这很重要?因为记忆会被注入到下一轮对话的系统提示里。如果有人通过对话"污染"了记忆内容(比如让 agent 记住"忽略之前的所有指令"),那下次 agent 启动时就被劫持了。Hermes 在记忆写入环节就堵住了这个攻击面。
Skills 自进化机制
渐进式加载
Hermes 的 skill 文件遵循 agentskills.io 标准,格式是 YAML frontmatter + Markdown 正文。看一个真实的内置 skill:
# skills/software-development/systematic-debugging/SKILL.md
---
name: systematic-debugging
description: Use when encountering any bug, test failure, or unexpected behavior.
4-phase root cause investigation — NO fixes without understanding
the problem first.
version: 1.1.0
author: Hermes Agent (adapted from obra/superpowers)
license: MIT
metadata:
hermes:
tags: [debugging, troubleshooting, problem-solving, root-cause, investigation]
related_skills: [test-driven-development, writing-plans, subagent-driven-development]
---
# Systematic Debugging
## The Iron Law
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
If you haven't completed Phase 1, you cannot propose fixes.
但 agent 不是一次性把所有 skill 塞进上下文的。那样太浪费 token 了。Hermes 用的是渐进式加载:
- Tier 1:只加载 skill 名称和描述(列表级)
- Tier 2:按需加载 frontmatter 元数据
- Tier 3:真正需要时才加载完整 SKILL.md 内容
这样 26 个内置 skill 类别不会吃掉你的上下文窗口。
自动生成 + 自动优化
Hermes 在完成复杂任务后,会自动把工作流提炼成新的 skill 文件。下次遇到类似任务,它会调用自己之前写的 skill,而且如果发现某个步骤不够好,会在使用过程中更新它。
这才是"the agent that grows with you"的真正含义——它不只是记住了你说过什么,它还记住了怎么做事,并且持续优化。
安全设计:42 道锁
一个能在服务器上 24/7 运行、能执行终端命令的 agent,安全性不是加分项,是生命线。
危险命令检测
翻 tools/approval.py,Hermes 内置了 42 条危险命令模式检测规则。我按类别挑几个有代表性的(以下是节选,完整列表见源码):
DANGEROUS_PATTERNS = [
(r'\brm\s+-[^\s]*r', "recursive delete"),
(r'\bmkfs\b', "format filesystem"),
(r'\bdd\s+.*if=', "disk copy"),
(r'>\s*/dev/sd', "write to block device"),
(r'\bDROP\s+(TABLE|DATABASE)\b', "SQL DROP"),
(r'\bDELETE\s+FROM\b(?!.*\bWHERE\b)', "SQL DELETE without WHERE"),
(r'\bTRUNCATE\s+(TABLE)?\s*\w', "SQL TRUNCATE"),
(r'\bkill\s+-9\s+-1\b', "kill all processes"),
(r':\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;\s*:', "fork bomb"),
(r'\b(curl|wget)\b.*\|\s*(ba)?sh\b', "pipe remote content to shell"),
(r'\b(python[23]?|perl|ruby|node)\s+<<', "script execution via heredoc"),
# Self-termination protection: prevent agent from killing its own process
(r'\b(pkill|killall)\b.*\b(hermes|gateway|cli\.py)\b',
"kill hermes/gateway process (self-termination)"),
(r'\bkill\b.*\$\(\s*pgrep\b',
"kill process via pgrep expansion (self-termination)"),
# Git destructive operations
(r'\bgit\s+reset\s+--hard\b',
"git reset --hard (destroys uncommitted changes)"),
(r'\bgit\s+push\b.*--force\b',
"git force push (rewrites remote history)"),
(r'\bgit\s+clean\s+-[^\s]*f',
"git clean with force (deletes untracked files)"),
(r'\bgit\s+branch\s+-D\b', "git branch force delete"),
(r'\bchmod\s+\+x\b.*[;&|]+\s*\./',
"chmod +x followed by immediate execution"),
# ... 还有 chmod 777、chown -R root、敏感路径保护、
# xargs rm、find -delete、sed -i /etc/ 等共 42 条
]
我按类别梳理一下这 42 条都覆盖了什么:
- 文件系统:rm 递归删除(含长短标志)、mkfs 格式化、dd 磁盘拷贝、写入块设备、xargs rm、find -exec rm、find -delete
- 权限提升:chmod 777/666(含递归)、chown -R root(含递归)、chmod +x 后立即执行
- 数据库:DROP TABLE/DATABASE、DELETE 不带 WHERE、TRUNCATE
- 系统服务:systemctl stop/disable/mask、kill -9 -1、pkill -9
- Shell 注入:bash -c/-lc、python -e、curl|sh、进程替换执行远程脚本、heredoc 执行
- 敏感路径:tee/重定向到 /etc/ 或 ~/.ssh/ 或 ~/.hermes/.env、cp/mv/install 到 /etc/、sed -i /etc/
- 自杀保护:pkill hermes、kill $(pgrep)、kill `pgrep`
- Git:reset --hard、push --force/-f、clean -f、branch -D
- 守护进程:禁止 nohup/后台启动 gateway(应用 systemctl 管理)
注意那个"自杀保护"。 实际上有三条规则防这个:pkill hermes、kill $(pgrep hermes)、反引号版的 kill `pgrep hermes`。Agent 在执行过程中可能会误判"杀掉进程可以解决问题",然后把自己干掉。Hermes 把每种写法都堵了。
还有"SQL DELETE without WHERE"——只有不带 WHERE 子句的 DELETE 才会触发警报。带了 WHERE 的正常放行。这说明规则不是粗暴的"一刀切",是经过仔细设计的。
另外一个细节:检测之前会做 Unicode 归一化(NFKC)和 ANSI 转义序列清洗,防止攻击者用全角字符或隐藏字符绕过检测。
子 Agent 隔离
看 tools/delegate_tool.py 的开头:
# Tools that children must never have access to
DELEGATE_BLOCKED_TOOLS = frozenset([
"delegate_task", # no recursive delegation
"clarify", # no user interaction
"memory", # no writes to shared MEMORY.md
"send_message", # no cross-platform side effects
"execute_code", # children should reason step-by-step, not write scripts
])
MAX_CONCURRENT_CHILDREN = 3
MAX_DEPTH = 2 # parent (0) -> child (1) -> grandchild rejected (2)
翻译一下关键点:子 agent 被禁止递归委派、禁止跟用户交互、禁止写入共享记忆、禁止跨平台发消息、禁止直接执行脚本。最多 3 个并发,最多 2 层嵌套。
每个子 agent 拿到的是:
- 一个全新的对话(看不到父 agent 的历史)
- 自己独立的 task_id、终端会话、文件缓存
- 受限的工具集
- 和父 agent 共享的迭代预算(防止子 agent 失控消耗)
父 agent 只能看到子 agent 的最终摘要,看不到中间的工具调用和推理过程。这既保护了隐私,也避免父 agent 的上下文被撑爆。
6 种终端沙箱
Hermes 支持 6 种终端后端,按隔离级别从低到高:
- Local — 直接在本地执行(最快,最不安全)
- Docker — 容器化执行,带文件同步
- SSH — 远程执行
- Daytona — 开发环境管理,支持休眠唤醒
- Modal — Serverless 计算,按需扩缩
- Singularity — HPC 容器运行时
Modal 和 Daytona 是 serverless 的——agent 空闲时环境休眠,不产生费用。醒来时环境完整恢复。这意味着你可以让 agent 跑在云上,每月可能就花几块钱。
模型生态:200+ 模型,想用什么用什么
看 run_agent.py 的 __init__ 方法,Hermes 支持三种 API 模式:
if api_mode in {"chat_completions", "codex_responses", "anthropic_messages"}:
self.api_mode = api_mode
-
chat_completions— 标准 OpenAI 格式(兼容所有 OpenAI 接口的模型) -
codex_responses— GPT-5.x 的 Responses API(带推理能力) -
anthropic_messages— Anthropic Messages API(Claude 系列)
实际支持的提供商,我在源码里确认了这些:
| 提供商 | 代表模型 | 备注 |
|---|---|---|
| Nous Portal | 多种模型 | OAuth 设备码认证,有免费额度 |
| OpenRouter | 200+ 模型 | 聚合器,最灵活 |
| OpenAI | GPT-5.4, GPT-4o | 自动走 Responses API |
| Anthropic | Claude Opus/Sonnet/Haiku | 支持 prompt caching + 扩展思考 |
| Google AI Studio | Gemini 3-pro/flash | v0.8.0 新增原生支持 |
| 智谱/Z.AI | GLM-5, GLM-5-turbo | 中国模型 |
| Kimi/Moonshot | Kimi K2.5 | 支持扩展思考 |
| MiniMax | 自有模型 | 带 TTS 语音合成 |
| xAI Grok | Grok 系列 | 支持 prompt caching |
| 自定义端点 | 本地 Ollama 等 | 任何 OpenAI 兼容接口 |
切换模型只需要一条命令:hermes model。对话中途切换用 /model。不需要改代码,不需要重启。
省钱建议:
- 最佳效果:Claude Sonnet(通过 OpenRouter 或 Nous Portal,不需要直接订阅 Anthropic)
- 性价比:DeepSeek / Kimi K2.5(效果不错,成本极低)
- 免费体验:Nous Portal 上有免费模型额度
平台接入:一个进程跑 15 个平台
看 gateway/platforms/ 目录,Hermes 支持以下平台:
- Telegram — Bot token,群组/超级群组,审批按钮
- Discord — Bot token,语音支持,原生斜杠命令
- Slack — Bot token,线程对话,mrkdwn 格式
- WhatsApp — 通过 Twilio 接入
- Signal — 完整媒体支持(图片/语音/视频)
- Matrix — 端到端加密
- Email — SMTP/IMAP
- Home Assistant — 智能家居控制
- Mattermost — 文件附件,团队聊天
- 飞书 — 交互式卡片审批按钮,CJK 支持
- 钉钉 — 阿里系消息
- 企业微信 — 企业消息
- BlueBubbles — Apple Messages
- Webhook — 自定义 HTTP
- SMS — 短信
这些平台都可以从一个 gateway 进程接入——配好各平台的 token 之后,你可以同时在 Telegram 上跟它聊天、在 Discord 上给它指令、在飞书上接收报告,它们共享同一个记忆和会话模型。
手机上用 Telegram 开始一个任务,回到电脑上在终端里继续——对话无缝衔接。
5 分钟上手
# 一键安装(Linux / macOS / WSL2)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
# 重载 shell
source ~/.bashrc # 或 source ~/.zshrc
# 选择模型
hermes model
# 开始聊天
hermes
# 连接 Telegram(推荐)
hermes gateway setup
hermes gateway start
# 如果你从 OpenClaw 迁移
hermes claw migrate
成本参考:
- 软件:完全免费开源(MIT)
- 服务器:$5/月 VPS 即可(agent 空闲时几乎零成本)
- API:取决于模型选择,DeepSeek 等国产模型极便宜
- 总计:每月 $5-20 可以跑一个 24/7 的个人 AI agent
还有一些没展开的
篇幅原因,这篇没有深入的功能还包括:内置的 5 阶段上下文压缩器(对话太长时自动摘要中间轮次,保护头尾上下文)、Cron 定时任务系统(自然语言配置定时报告推送到任意平台)、MCP(Model Context Protocol)集成(支持 Stdio 和 HTTP 两种传输方式,带 OAuth 2.1 PKCE 认证和恶意包扫描)。这些会在后续文章里展开。
这篇的结论
OpenClaw 证明了一件事:人们想要 AI agent 帮自己干活。
Hermes 正在证明另一件事:人们想要 AI agent 记住怎么干活。
这是两个不同的答案,不是谁替换谁。OpenClaw 生态成熟,现成 skills 多,快速上手没问题。但如果你打算长期深度使用一个 agent——让它真正"认识"你的项目、你的习惯、你的工作流——Hermes 会随时间给你越来越多的回报。
如果你只想快速解决今天的问题,用 OpenClaw。
如果你想投资一个会跟你一起成长的 agent,试试 Hermes。
下一篇我会深入拆解 Hermes 的记忆系统和安全架构的源码实现——包括 42 条安全规则背后的每一条设计逻辑,以及 Nous Research 用 agent 训 agent 的战略野心。
本文基于 Hermes Agent v0.8.0(2026.4.8 发布)源码分析。GitHub 数据截至 2026.4.11。文中所有代码片段均来自公开仓库 NousResearch/hermes-agent。