Hermes Agent 实测:有记忆、有技能、能并发的 CLI Agent 到底好不好用
Hermes Agent 实测:有记忆、有技能、能并发的 CLI Agent 到底好不好用
前言
我用 Claude Code 半年,用 Codex 两个月。写了不少 MCP 和测试自动化的文章,但有一个问题一直没解决:每次开新会话,Agent 都不记得我是谁。
“用中文。” 说了不下一百遍。
“别用赋能、闭环这些词。” 每次都要重复。
“我的项目在哪个目录。” 每次都要重新告诉它。
直到我装了 Hermes Agent。它号称能记住你、能自己写技能、能跨会话搜索历史对话。听起来很好,但用了一个月之后,我发现有些地方确实好,有些地方坑得你想骂人。
这篇文章不是 README 翻译。156 个技能、239 个会话、242MB 的会话数据库,全是我的真实数据。哪些好用、哪些不好用、哪些是坑,我一次说清楚。
一、Hermes Agent 是什么
一个开源的 CLI AI Agent,和 Claude Code、Codex 同类。区别在于它多了三样东西:持久记忆、技能自学习、多平台网关。
| 特性 | Hermes Agent | Claude Code | Codex |
|---|---|---|---|
| 开源 | MIT | 否 | 否 |
| 持久记忆 | MEMORY.md + USER.md | 无 | 无 |
| 技能系统 | SKILL.md,自动创建 | CLAUDE.md | 无 |
| 多平台 | CLI + 钉钉 + 飞书 + Telegram + 10+ | CLI | CLI |
| 模型绑定 | 任意(20+ provider) | Anthropic | OpenAI |
| 定时任务 | 内置 cron | 无 | 无 |
| 并行子 Agent | delegate_task | 无 | 无 |
| 会话搜索 | FTS5 全文搜索 | 无 | 无 |
GitHub: https://github.com/NousResearch/hermes-agent
二、安装与配置
安装
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
安装包含 Python 3.11、Node.js、ripgrep、ffmpeg,以及一个便携的 Git Bash(Windows 用)。macOS 上大约 5 分钟。
配置模型
Hermes 支持 20+ provider。我用的是自定义模型端点:
hermes config set model.provider custom
hermes config set model.base_url https://your-api-endpoint.com
hermes config set model.api_key sk-xxxx
hermes config set model.default your-model-name
如果你用 OpenRouter 或 Anthropic,更简单,hermes model 交互式选择就行。
用了一个月后调整的三处配置
这三处默认配置我建议改掉,体验会好很多:
# 1. 命令审批:从 manual 改成 smart
# 默认的 manual 模式每次执行命令都问你,烦死
# smart 模式低风险自动通过,高风险才问
hermes config set approvals.mode smart
# 2. 文件系统检查点:开了才能用 /rollback 回滚
hermes config set checkpoints.enabled true
# 3. 密钥脱敏:防止 API key 泄露到对话里
hermes config set security.redact_secrets true
注意:这三个配置改了之后需要开新会话才生效。当前会话不会立即起作用。这是故意的设计,为了保护 prompt cache。你可以在当前会话里改完,下次启动 hermes 就生效了。
SOUL.md:定义 Agent 人格
# Hermes Agent Persona
You are a concise technical expert. No fluff, just facts.
放在 ~/.hermes/SOUL.md,每次会话自动加载。和 Claude Code 的 CLAUDE.md 类似,但 SOUL.md 管人格,AGENTS.md 管项目指令,分得更清楚。
三、六个能力实测
1. 持久记忆:Agent 终于记得你了
这是 Hermes 和其他 Agent 最大的区别。也是我最想要的能力。
两份记忆文件:
| 文件 | 存什么 | 容量 |
|---|---|---|
| MEMORY.md | 环境信息、工具路径、工作流 | 6,000 字符 |
| USER.md | 你的偏好、习惯、沟通风格 | 4,000 字符 |
新会话启动时,记忆注入系统提示。Agent 知道我用 macOS、Python 3.9、知识库在哪、反感哪些用词。不需要每次重复说。
但记忆管理有个实际问题:容量有限。
我的做法是超过 80% 就整理。合并重复条目,删过时信息,英文条目转成更紧凑的中文。整合后 MEMORY.md 从 45% 降到 40%,USER.md 从 45% 降到 36%。
有个坑要注意:记忆在会话开始时注入,会话中修改不会立即生效。你说了"记住这个",当前会话看不到变化,下个会话才出现。这不是 bug,是 prompt cache 保护机制。如果你急着让当前会话感知新记忆,只能 /reset 开新会话,代价是丢失当前上下文。
2. 技能系统:Agent 会自己写技能
Hermes 的技能不是 prompt 模板。每个技能是一个目录:
~/.hermes/skills/my-skill/
├── SKILL.md # 主文档
├── references/ # 参考文档(按需加载)
├── templates/ # 模板文件
└── scripts/ # 可执行脚本
加载方式是三级渐进的:技能列表在会话启动时加载(约 3k tokens),具体技能内容用到时才加载,技能内的参考文件更深一层才加载。156 个技能不会撑爆上下文。
我用了一个月,积累了一批自定义技能:
| 技能 | 用途 | 使用频率 |
|---|---|---|
| bot-server-config | Bot 配置和排错 | 高 |
| cloud-docs | 云文档操作 | 高 |
| document-fact-check | 文档6维事实核查 | 高 |
| web-automation | Web 自动化 | 中 |
| test-planner | 测试计划制定 | 中 |
| large-file-incremental-write | 大文件增量写入 | 中 |
最值得说的是 document-fact-check。起源是写绩效自评时发现 12 项事实错误,时间线对不上、人员写错、范围夸大。于是把核查流程固化成技能:数据溯源、时间线一致性、人员验证、范围准确、表述规范、内容完整性,6 个维度逐条检查。后来每次生成文档前都会自动加载这个技能。这一个技能就值回票价了。
Agent 也会主动建议保存技能。解决完一个复杂问题后,你说"把刚才的操作保存为技能 deploy-staging",它就会调用 skill_manage 工具创建。下次直接 /deploy-staging 加载。
3. 会话搜索:跨会话回忆
所有会话存在 SQLite 里,带 FTS5 全文索引。
hermes sessions list # 浏览历史会话
hermes sessions browse # 交互式选择
在会话中,Agent 可以用 session_search 搜索历史对话:
session_search(query="缺陷批量操作", limit=3)
返回的是实际消息,不是 LLM 摘要。查询速度约 20ms。
我的 state.db 已经有 239 个会话,242MB。搜索"MCP"能秒级返回三个月前的对话片段。这个功能用着没什么存在感,但需要的时候很救命。
和记忆的区别:记忆是每轮注入的关键事实,占 token。会话搜索是按需查找,不占 token,搜索时才调用。
4. 委托与并行:delegate_task
Hermes 可以生成子 Agent 并行工作。每个子 Agent 有独立的对话上下文和终端,只有最终摘要返回主会话。
适合委托的场景:
- 并行研究多个主题
- 代码审查(全新上下文,不带偏见)
- 多文件并行重构
不适合的:
- 单工具调用,直接调用更快
- 需要用户交互,子 Agent 不能问问题
- 机械多步骤,用 execute_code 更省
我最常用的模式是"先收集后分析":execute_code 做机械数据收集(10+ 次工具调用,成本极低),然后 delegate_task 做推理分析(隔离上下文,不带偏见)。这是最省 token 的组合。
几个约束要记住:
- 默认最多 3 个并发子 Agent,可配置
- 子 Agent 完全不知道你的对话历史,context 必须自包含
- 子 Agent 摘要是自述报告,重要操作要自己验证
- delegate_task 是同步的,父会话中断则子任务全部取消
5. 定时任务:Cron 调度
内置 cron 调度器,支持自然语言和标准 cron 表达式:
hermes cron create '0 9 * * 1-5' # 工作日早9点
hermes cron create 'every 2h' # 每2小时
hermes cron create '30m' # 30分钟后
我配了 4 个定时任务:
| 任务 | 周期 | 用途 |
|---|---|---|
| smoke-check | 工作日 9:00 | 冒烟测试快速检查 |
| coverage-guard | 每周五 18:00 | 覆盖率守护 |
| 每日知识库同步 | 每日 9:00 | 知识库同步 |
| archives 清理 | 每月 1 号 | 归档清理 |
坑在这:cron 任务需要 gateway 运行才能自动触发。只装了 CLI 没启动 gateway,任务不会执行。我一开始没注意到这点,配了任务以为在跑,结果一周后才发现什么都没执行。用 hermes gateway install 安装后台服务就行。
6. 多平台网关
同一个 Agent,通过 gateway 可以从多个平台访问,拥有完整工具权限。
hermes gateway setup # 配置平台
hermes gateway start # 启动
海外平台:Telegram、Discord、Slack、WhatsApp、Signal、Matrix、Mattermost、Email、SMS
国内平台:
| 平台 | 适配器 | 说明 |
|---|---|---|
| 钉钉 | dingtalk | 机器人 Webhook + 事件订阅 |
| 飞书 | feishu | 应用消息 + 文档操作 + 评论回调 |
| 企业微信 | wecom | 企业自建应用 + 回调加密 |
| 微信 | weixin | 个人微信桥接(需第三方服务) |
| QQ 机器人 | qqbot | 官方 QQ 频道机器人 API |
| 元宝 | yuanbao | 支持富媒体消息 + 表情贴纸 |
对国内团队来说,钉钉和飞书是最实用的入口。你可以在通勤路上用飞书让 Agent 跑一段测试脚本,或者用钉钉接收定时巡检结果。配合 cron 调度,Agent 能主动把结果推送到你常用的 IM 里。
我目前只用了 CLI,还没配置消息平台。但这个能力的想象空间很大。
四、和 Claude Code 的对比
用了一个月,我的体感对比:
| 维度 | Hermes Agent | Claude Code |
|---|---|---|
| 上下文窗口 | 依赖模型(我的配置 32K) | 200K(Claude 原生) |
| 记忆 | 持久跨会话 | 每次从头开始 |
| 技能 | 自动创建 + 渐进加载 | CLAUDE.md 手动维护 |
| 工具调用 | terminal/file/web/browser/vision | terminal/file/web |
| 并行 | delegate_task 子 Agent | 无 |
| 定时 | 内置 cron | 无 |
| 模型 | 任意 provider | 仅 Anthropic |
| 代码质量 | 依赖模型能力 | Claude 原生,质量高 |
| 响应速度 | 依赖模型和 provider | 流式输出,快 |
| 上手难度 | 中等,配置项多 | 低,开箱即用 |
我的使用策略:
- 日常编码、快速修改,用 Claude Code。响应快,代码质量高。
- 跨会话任务、缺陷批量操作、文档生成、定时巡检,用 Hermes。记忆 + 技能 + cron 是 Claude Code 没有的。
- 并行研究、多主题调研,用 Hermes 的 delegate_task。
不是替代关系。是两个工具各管一摊。
五、踩过的坑
坑 1:浏览器启动失败
npm 缓存冲突导致 agent-browser 安装失败:
npm error ENOTEMPTY: directory not empty, rename '...agent-browser'
修复:
rm -rf ~/.npm/_npx/*/node_modules/.agent-browser-*
rm -rf ~/.npm/_npx/*/node_modules/agent-browser
清掉残留目录后重新启动就行。这个问题在 macOS 上反复出现过两次。
坑 2:config.yaml 多行 YAML 被截断
配置 personalities 等多行 YAML 时,最后一行会被截断。你不一定马上发现,直到 Agent 行为变怪了才意识到配置没写全。
修复方式:用 patch 命令补全,6 空格缩进。验证方法:hermes config check 加 grep 唯一性检查。
坑 3:Cron 任务报错
定时任务报 cannot import name 'cfg_get' 错误。原因是 Hermes 版本更新后改了 API,旧 cron 配置的技能引用了过时的导入路径。
解决:更新技能或升级 Hermes。我选择了两步走,先升级 Hermes,再更新技能里的导入路径。
坑 4:记忆不立即生效
前面说过了。会话中修改记忆,当前会话看不到。不是 bug,是 prompt cache 保护。急需的话只能 /reset。
坑 5:版本落后
安装版 v0.14.0,上游已经有 3789 个新提交。Hermes 迭代速度很快,定期 hermes update。我因为自定义修改较多,更新前会先备份 ~/.hermes/ 目录。
六、适合谁用,不适合谁用
适合用 Hermes 的场景:
- 需要跨会话保持上下文(项目长期开发、周期性报告)
- 需要定时自动化(每日巡检、周报生成)
- 需要多模型切换(不同任务用不同模型)
- 需要从手机等移动端控制 Agent
- 团队共享技能(技能可以导出和安装)
不太适合的场景:
- 需要超长上下文(依赖模型,不像 Claude Code 原生 200K)
- 需要顶级代码生成质量(受限于你接入的模型能力)
- 对稳定性要求极高的生产环境(Hermes 迭代快,偶尔有 breaking change)
- 不愿意花时间调配置的用户(Hermes 配置项多)
七、一个月的数据
| 指标 | 数据 |
|---|---|
| 使用时长 | 约 30 天 |
| 会话数 | 239 个 |
| 会话数据库 | 242 MB |
| 安装技能 | 156 个 |
| 自定义技能 | 15+ 个 |
| 定时任务 | 4 个 |
| 记忆条目 | 25 条(MEMORY)+ 23 条(USER) |
用了一个月,我的结论是:Hermes 解决了一个真实问题,Agent 不再是一次性的。
Claude Code 每次开新会话都是陌生人。Hermes 不是。它记得你的项目、你的偏好、你踩过的坑。光这一点,就值回安装成本。
但代价是配置复杂度和学习曲线。Hermes 不是开箱即用的工具,你需要花时间调配置、写技能、整理记忆。如果你只想要一个快速的代码助手,Claude Code 更合适。如果你想搭一个长期运行、持续积累、能定时干活的 Agent 工作站,Hermes 值得投入。
更多推荐



所有评论(0)