【持续更新】关于我给Hermes Agent提的PR以及经验分享

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

  • 我的帖子已经打上 开源推广 标签: 是
  • 我的开源项目完整开源,无未开源部分: 是
  • 我的开源项目已链接认可 LINUX DO 社区: 是
  • 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
  • 以上选择我承诺是永久有效的,接受社区和佬友监督: 是

以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出


【v5 更新】补丁仓库大瘦身——从 60 个散装补丁到 1 个整合包

好消息:上次 v4 有 60 个补丁散装在仓库里,装起来一堆依赖关系,有人反馈冲突。这次做了一次彻底清理——删掉了 121 个冗余文件,把所有功能合并到一个 combined-final.patch,零冲突安装。

这次改了什么:

  • 合并成 1 个 combined-final.patch(79 个文件,~34K 行),不再有依赖顺序问题
  • 删掉了 patches/ 和 individual/ 两个目录(50+ 个历史补丁,要么已合进 combined,要么在最新版上游已无法单独 apply)
  • install.sh 简化:只做 combined-final.patch apply + 复制 disclosure_router.py,一行搞定
  • 清理了 patch 里的 3 个垃圾文件(调试时误打进去的)
  • PR #21869(media file paths)和 #22437(reverse proxy domains)已关闭——上游自己修了,不需要我们了
  • 新开 PR #25680 - Session Memory Compaction(872 行,长对话上下文压缩模块)

装完即生效,不需要额外配置。已安装的佬友重新跑一遍即可,脚本会自动跳过已应用的补丁。上游 PR #22516 已提交,如果官方合并了 install.sh 会自动跳过。

当前 PR 状态:

PR 状态 说明
#22516 等待合并 记忆元认知框架
#18316 等待合并 混合模式技能检索 + Skill Evaluation Gate
#17989 等待合并 多用户记忆/会话隔离
#18849 等待合并 合规检查插件
#19064 等待合并 credential pool 轮换修复
#19163 等待合并 跨渠道记忆统一
#25680 新开 Session Memory Compaction
#21869 已关闭 上游已自行修复
#22437 已关闭 上游已自行修复

为什么要做这次清理:之前的仓库有 60 个 .patch 文件散装在 3 个目录里,有些互相依赖(A 必须在 B 之前 apply),有些跟上游冲突(上游改了同一个文件),新用户装起来经常踩坑。这次把所有功能压成一个 combined-final.patch,对最新版上游零冲突(测试通过 upstream/main commit db84a78e6)。装完自动生效,不需要管顺序。

仓库结构现在很干净:

combined-final.patch      — 核心补丁(79 文件)
agent/disclosure_router.py — 记忆主动注入路由(独立文件)
memory_policy.default.yaml — 元认知策略配置
install.sh                 — 一键安装

【v4 更新】补丁增至 49 个,新增记忆元认知框架——模型不再反复犯同一个错

好消息:上次 v3 精简到 35 个补丁后,又新增了 14 个,其中包括一个重量级功能:记忆元认知框架。

先说痛点:你有没有遇到过这种情况?明明上次踩过的坑,教训千叮万嘱记下来了,模型也口口声声说"再也不会犯了,已经修复"——结果下次换个说法问,同样的错再犯一遍。根本原因是它有记忆,但不知道自己记得什么,也不知道什么时候该查,更不会在执行前检查自己有没有违反。

这次新增的框架从工程层强制约束,补上了三层防护:

  • 不再失忆:session 启动时自动注入记忆库摘要,不用等用户问才想起来
  • 搜得更准:你说"改一下配置",它会自动搜 config.yaml、provider、gateway;你说"做个 patch",它会搜 branch、PR、四端同步。实测召回率提升 3-5 倍
  • 拦得住:rm -rf / git push --force 直接 block;发消息方法不对 → block;缺必要参数 → block。不是靠模型"自觉",是系统在工具调用前强制检查参数。你也可以自定义规则

装完即生效,不需要额外配置。~/.hermes/memory_policy.yaml 可自定义或删除关闭。上游 PR #22516 已提交,如果官方合并了 install.sh 会自动跳过。


用Hermes Agent的佬友们有福了,这几周用mimo模型深度体验hermes agent遇到了不少bug和特性,目前总结了,提了PR,但是官方的动作貌似很慢,半个多月了尚未合并,因此有需要的佬友可以提前用我这的。

一句话总结: 使用agent会更加省token、记得自己记得什么、知道什么时候该查记忆、高风险操作被强制拦截、多个用户一起用记忆不会串味、安全补丁防泄露。


GitHub 仓库: Cyrene963/hermes-patches


终端一键补丁:

bash <(curl -sL https://raw.githubusercontent.com/Cyrene963/hermes-patches/main/install.sh)

核心功能补丁(我提的PR)

PR #22516 - 记忆元认知框架

链接: feat: add configurable memory metacognition framework
改了什么: 新增 agent/memory_metacognition.py,修改 prompt_builder.py、run_agent.py,新增 43 个测试
核心功能:

  • Memory Index:session 启动时注入记忆库摘要(“我大概记得什么”)
  • Query Expansion:自动扩展用户消息为更好的 hindsight 搜索词
  • Preflight Gate:高风险工具调用前的结构化参数校验(field_required / field_equals / field_not_contains 等)
  • 默认 no-op,不影响现有行为,本地 policy 文件启用
  • 体验提升: 模型不再反复犯同一个错,危险操作被系统性拦截而非靠"自觉"

PR #18316 - 混合模式技能检索 + Skill Evaluation Gate

链接: feat: semantic skill retrieval with FTS5 + hybrid selector + skill enforcement
改了什么: 新增 agent/hybrid_skill_selector.py,修改 prompt_builder.py,新增 FTS5 全文索引
核心功能:

  • 根据用户消息语义自动选择相关skills注入system prompt
  • 3层筛选(快速规则→任务模式→FTS5),25种任务类型
  • Skill Evaluation Gate:代码强制agent在第一次action前评估skill
  • 以前: 全部130+个skills一股脑打包注入(浪费token)
  • 现在: 平均每条消息只注入1-2个相关skills
  • 体验提升: token节省93-99%,回复速度提升,不再被无关skills干扰

PR #17989 - 多用户记忆/会话隔离

链接: fix: enforce per-user memory/session isolation for multi-user gateway
改了什么: hermes_state.py, session_search_tool.py, run_agent.py 等5个文件
核心功能:

  • 不同用户(Telegram/CLI/Discord)的记忆和会话完全隔离
  • session_search 按 user_id 过滤,搜"我的密码"只返回自己的记录
  • Hindsight memory bank 按用户分隔
  • CJK 中文搜索也已修复隔离(trigram路径)
  • 体验提升: 多人共用一个bot时隐私安全,不会串数据

PR #18849 - 合规检查插件 + 技能执行纪律框架

链接: feat(plugins): add skill-enforcer plugin for periodic compliance checkpoints
改了什么: 新增 plugins/skill-enforcer/ 目录
核心功能:

  • 每 25 个action tool call触发一次合规检查站(已从8调整为25)
  • 长session中间被迫做自检(调skill_view/hindsight_recall确认合规)
  • 体验提升: 长任务中减少"跑着跑着就跑偏"的情况

PR #19064 - 修复 credential pool 轮换池丢弃

链接: fix: preserve credential pool through /model session override
核心功能: /model 切换不再丢弃 credential pool,轮换机制正常工作

PR #19163 - 跨渠道记忆统一

链接: feat: add auto-setup for owner detection & cross-channel memory
核心功能:

  • 同用户 Telegram/CLI/Discord 记忆自动互通
  • 支持自动检测 owner,一键设置 symlink

PR #19682 - credential pool key 歧义修复

链接: fix: credential pool key ambiguity
核心功能: custom provider 按名称匹配,解决轮换池混乱

PR #19683 - Gateway /model api_key 修复

链接: fix: gateway model api_key
核心功能: /model 切换时正确读取 model config 中的 api_key

PR #19685 - CLI base_url env 查找

链接: fix: cli base_url env lookup
核心功能: 使用 get_env_value 正确解析环境变量中的 base_url

PR #19686 - Custom provider max_tokens 默认值

链接: fix: custom provider max_tokens
核心功能: Anthropic 后端的自定义代理自动设置 max_tokens,防止 400 错误


上游已合并的功能(不再需要补丁)

以下功能已内置在最新版 Hermes 中,无需额外安装:

  • :white_check_mark: Pre-flight thinking block(预飞思考块)
  • :white_check_mark: Auto-context retrieval(自动上下文检索)
  • :white_check_mark: 14 个社区 PR(KV cache、secret redaction、emergency compression 等)
  • :white_check_mark: Custom provider slugs
  • :white_check_mark: MCP reconnect
  • :white_check_mark: Backup 0600 permissions
  • :white_check_mark: Terminal fence stripping
  • :white_check_mark: Memory 权威性保护

安全补丁系列

这批是扫描 GitHub 上的安全相关 issue 后针对性修复的:

  • #19 - 保护 Hermes 控制面板文件不被 prompt injection 修改
  • #20 - 代码级防护 bundled_hermes 目录不被 agent 覆写
  • #22 - 阻断 IPv4-mapped IPv6 地址的 SSRF 绕过
  • #23 - 阻止 agent 写入 _hermes_config.yaml
  • #25 - 在 request_dump_json 文件中自动 redact secrets
  • #28 - 从 ACP 子进程环境中清除 provider credentials
  • #29 - WebSocket localhost 检查失败时 fail-closed
  • #30 - per-process UUID 防止跨会话状态泄露
  • #31 - 修复 context compressor 的字符串消息处理
  • #32 - Gateway 媒体路径安全边界单元测试
  • #33 - Discord DISCORD_ALLOWED_ROLES 限定到发起 guild
  • #34 - restore_quick 中验证 snapshot_id 和文件路径

社区精选 PR

稳定性:

  • #18547 - 稳定system prompt前缀,提升KV cache命中率
  • #18650 - 修复畸形tool消息导致的API 400错误
  • #18607 - 迭代预算耗尽前触发紧急压缩
  • #18603 - 压缩遇到413限流时自动fallback
  • #18614 - 补丁重复循环的幂等保护
  • #18600 - HERMES_HOME未设置时抛明确错误

兼容性:

  • #18663 - 为严格API清理tool_calls中的extra_content
  • #18618 - 正确传递explicit_api_key到OpenRouter
  • #18616 - 允许context文件中的ZWJ emoji
  • #18582 - /restart时重新加载.env文件
  • #18692 - session搜索截断时去除FTS5操作符
  • #18596 - 默认启用secret redaction
  • #18638 - 模型切换时正确传递threshold_percent
  • #18632 - /insights命令显示cache tokens明细
  • #5447 - session_search FTS 匹配内容加载优化
  • #7701 - 非阻塞后台 delegation

觉得不错,好用的话别忘了给我个star哦~꒰ ´͈ ᵕ `͈ ꒱

164 个赞

借楼问一下,佬友对hermes的看法是什么样的呢?和openclaw相比实现起来会更高效吗

1 个赞

Hermes Agent比Openclaw主要是整体架构,回复速度,token消耗这一块优秀很多。个人看法,目前OpenClaw有的Hermes Agent都有,但是OpenClaw想要有的,它就没有。OpenClaw还有屎山代码呢。

建议,可以全力换成Hermes Agent,经过我这些PR的优化,目前已经很像一个,你的数字替身,以及外置大脑了。问题就是很烧token,日常的话可能只有每天5千万,稍微上点强度干活的话,每天2亿token都是简简单单。

8 个赞

佬 为什么提示:cross_mark: 未找到 hermes-agent 仓库: /root/.hermes/hermes-agent
请先安装 Hermes Agent: pip install hermes-agent

2 个赞

佬,你要先部署hermes agent才能装我的补丁哈。这是一键安装hermes agent的脚本:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

l佬 我肯定部署了才会给你说呀 哈哈哈哈哈哈哈 但是还是提示这个

1 个赞

好东西,回去部署下,谢谢佬!看到省token,我就很心动

2 个赞

哈哈哈哈哈是我的锅,现在再试试呢?
脚本现在支持 pip 安装方式了。
pip 安装的没有 .git 目录,之前的脚本没考虑到这种情况。

现在脚本会自动:
1. 先通过 pip 的 hermes_cli 模块路径查找源码
2. 找不到就自动克隆仓库
1 个赞

嘿嘿,感谢支持,等我再进一步使用,实测收集下数据,把token前后消耗对比图发出来。

佬,我很需要这个,谢谢你的布丁,希望我的马吃得少跑得快 :rofl:

2 个赞

哈哈,马就得吃得少还跑得快,之前token烧的太快,一天好几亿,让我不得已主动寻求路子,没想到真给我找到一个代码缺陷。这几天我会进一步实测token消耗前后对比,到时候把对比图发出来

2 个赞

嗯呢,已经给了star,等你的对比图哈!

2 个赞

这个估计很难合并进去,通过 user_id 来识别不合适,举个最简单的例子,我一个人有多个 message channel 的配置,按照你这个 user_id 那么每个都是隔离的。

目前的 Hermes 应该还没做多用户隔离的设计,只能通过创建 profile 来解决。

2 个赞

跟这个有什么区别呢,官网的这个好像是对低频的skill进行归档

1 个赞

skill是skill。你再看看呢?我这是PR,代码级别的改动。

2 个赞

Profile 确实能解决跨 channel 统一身份,但它是重量级方案
(每人一个独立实例)。我的 PR 解决的是轻量级场景:
多人共用一个 bot 时的基础隐私隔离。两者互补,不冲突。
跨 channel 记忆统一可以后续通过 user_id mapping 解决。

1 个赞

先用着佬的,等官方更新。我就自己用,总觉得每次加载很多skill

感谢 @Minemine 指出多用户隔离的跨渠道盲区。

  新增补丁 #8:跨渠道记忆统一(user_mapper.py)
  
  问题:同一个用户在 Telegram 和 CLI 上聊天,记忆是分裂的。
  解决:通过 symlink 将同一用户的多个渠道映射到同一份记忆目录。
  
  支持两种模式:
  1. 自动检测 owner(读 config.yaml 的 home channel)
  2. 手动映射任何用户(帮朋友统一记忆)
  
  bash
自动设置(owner 一键搞定)
  python3 user_mapper.py auto-setup
  
手动映射(帮其他用户)
  python3 user_mapper.py map --chat-id XXX --user steven
  
  
  与 #9308(Honcho owner identity)的区别:
  - #9308 只覆盖 bot owner,且仅限 Honcho provider
  - 我们的方案覆盖任何用户,不限 memory provider
  - 两者可以共存
  
  PR: #19163
  补丁已更新: https://github.com/Cyrene963/hermes-patches
  
  现在的补丁合集覆盖 21 个功能,包括:
  - 多用户隔离(#17989)
  - 跨渠道记忆统一(#19163)← 新
  - 语义技能检索(#18316)
  - 凭证池修复(#19064)
  - 16 个社区精选 PR
1 个赞

哈哈,我先提前搞好一个补丁,就是等不及官方合并了。等了半个月都。只是给我的PR,打了P1之类的标签。社区其他PR也是。

1 个赞

深度用的话其实里面的bug和问题其实还是不少的,零零星星总能碰见几个