字节笔记本
2026年6月21日
hermes教程-策展人
策展人是一个后台维护过程,用于管理智能体创建的技能。它跟踪每个技能被查看、使用和修补的频率,将长期未使用的技能通过 active → stale → archived 状态进行转移,并定期启动一个简短的辅助模型审查,提出合并建议或修补漂移。
它的存在是为了防止通过自我改进循环创建的技能无限堆积。每次智能体解决一个新问题并保存一个技能时,该技能都会存放在 ~/.hermes/skills/ 中。如果没有维护,最终你会得到几十个狭窄的近似重复项,污染目录并浪费令牌。
默认情况下(prune_builtins: true),策展人可以归档未使用的捆绑内置技能(随仓库一起提供),这些技能在 archive_after_days 天内未被使用,同时也会管理它主要管理的智能体创建的技能。从中心安装的技能(来自 agentskills.io)始终不受影响。设置 curator.prune_builtins: false 可以恢复旧的仅智能体创建行为,此时捆绑技能永远不会被触及。策展人也从不自动删除——最坏的结果是归档到 ~/.hermes/skills/.archive/,这是可恢复的。
跟踪 issue #7816。
如何运行
策展人由不活动检查触发,而不是 cron 守护进程。在 CLI 会话启动时,以及在网关的 cron 滴答线程内的定期滴答中,Hermes 会检查:
- 自上次策展人运行以来是否已过去足够的时间(
interval_hours,默认 7 天),以及 - 智能体是否已空闲足够长的时间(
min_idle_hours,默认 2 小时)。
如果两者都为真,它会生成一个 AIAgent 的后台分支——与记忆/技能自我改进提示使用的模式相同。该分支在自己的提示缓存中运行,并且从不触及活动对话。
信息 — 首次运行行为
在新安装(或
hermes update后首次运行预策展人安装的滴答)时,策展人不会立即运行。第一次观察将last_run_at设置为“现在”,并将第一次实际运行推迟一个完整的interval_hours。这为你提供了一个完整的间隔来审查你的技能库,固定任何重要的内容,或者在策展人触及它之前完全选择退出。如果你想在实际运行之前查看策展人会做什么,请运行
hermes curator run --dry-run——它会生成相同的审查报告,但不会修改库。
一次运行有两个阶段:
- 自动转移(确定性,无 LLM)。未使用超过
stale_after_days(30)天的技能变为stale;未使用超过archive_after_days(90)天的技能被移动到~/.hermes/skills/.archive/。 - LLM 审查(单次辅助模型传递,
max_iterations=8)。分支智能体调查智能体创建的技能,可以使用skill_view读取其中任何一个,并针对每个技能决定是保留、修补(通过skill_manage)、合并重叠的技能,还是通过终端工具归档。合并将技能视为一个完整的包:如果一个技能有references/、templates/、scripts/、assets/或指向这些路径的相对链接,策展人必须要么保持其独立,要么重新安置所需的支持文件并重写路径,要么将整个包原封不动地归档——而不是仅将SKILL.md扁平化到另一个技能的references/文件中。
固定的技能对策展人的自动转移和智能体自己的 skill_manage 工具都是禁区。请参阅下面的固定技能。
配置
所有设置都位于 config.yaml 中的 curator: 下(不是 .env——这不是秘密)。默认值:
curator:
enabled: true
interval_hours: 168 # 7 天
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
prune_builtins: true # 也归档未使用的捆绑内置技能(中心技能始终豁免)要完全禁用,请设置 curator.enabled: false。
在更便宜的辅助模型上运行审查
策展人的 LLM 审查传递是一个常规的辅助任务槽——auxiliary.curator——与视觉、压缩、会话搜索等并列。“自动”意味着“使用我的主要聊天模型”;覆盖该槽以指定一个特定的提供者 + 模型用于审查传递。
最简单的方法——hermes model:
hermes model # → "辅助模型 — 侧任务路由"
## → 选择 "策展人" → 选择提供者 → 选择模型相同的选择器在 Web 仪表板的 模型 选项卡下也可用。
直接 config.yaml(等效):
auxiliary:
curator:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 600 # 宽松——审查可能需要几分钟将 provider: auto(默认值)保留,会将审查传递路由到你的主要聊天模型,与其他所有辅助任务的行为一致。
注意 — 旧版配置
早期版本使用了一个一次性的
curator.auxiliary.{provider,model}块。该路径仍然有效,但会输出一条弃用日志行——请迁移到上面的auxiliary.curator,以便策展人共享与其他所有辅助任务相同的管道(hermes model、仪表板模型选项卡、base_url、api_key、timeout、extra_body)。
CLI
hermes curator status # 上次运行、计数、固定列表、最近最少使用前 5 名
hermes curator run # 立即触发审查(阻塞直到 LLM 传递完成)
hermes curator run --background # 即发即忘:在后台线程中启动 LLM 传递
hermes curator run --dry-run # 仅预览——报告而不进行任何修改
hermes curator backup # 手动创建 ~/.hermes/skills/ 的快照
hermes curator rollback # 从最新快照恢复
hermes curator rollback --list # 列出可用快照
hermes curator rollback --id <ts> # 恢复特定快照
hermes curator rollback -y # 跳过确认提示
hermes curator pause # 停止运行直到恢复
hermes curator resume
hermes curator pin <skill> # 永远不要自动转移此技能
hermes curator unpin <skill>
hermes curator restore <skill> # 将归档技能移回活动状态
hermes curator list-archived # 列出当前在 ~/.hermes/skills/.archive/ 中的技能
hermes curator archive <skill> # 立即手动归档单个技能
hermes curator prune [--days N] # 批量归档空闲 >= N 天(默认 90)的智能体创建技能备份和回滚
在每次实际策展人传递之前,Hermes 会在 ~/.hermes/skills/.curator_backups/<utc-iso>/skills.tar.gz 处创建 ~/.hermes/skills/ 的 tar.gz 快照。如果一次传递归档或合并了你不想被触及的内容,你可以用一个命令撤销整个运行:
hermes curator rollback # 恢复最新快照(带确认)
hermes curator rollback -y # 跳过提示
hermes curator rollback --list # 查看所有快照,包含原因 + 大小回滚本身是可逆的:在替换技能树之前,Hermes 会创建另一个标记为 pre-rollback to <target-id> 的快照,因此可以通过使用 --id 向前滚动到该快照来撤销错误的回滚。
你也可以随时使用 hermes curator backup --reason "before-refactor" 手动创建快照。--reason 字符串会进入快照的 manifest.json 中,并在 --list 中显示。
快照会被修剪到 curator.backup.keep(默认 5)以限制磁盘使用:
curator:
backup:
enabled: true
keep: 5设置 curator.backup.enabled: false 以禁用自动快照。当备份被禁用时,手动 hermes curator backup 命令仍然有效,但前提是你先设置了 enabled: true——该标志对称地控制两条路径,因此无法在修改性运行中意外跳过运行前快照。
hermes curator status 还会列出五个最近最少使用的技能——快速查看哪些技能可能即将变得过时。
相同的子命令在运行中的会话(CLI 或网关平台)内也可作为 /curator 斜杠命令使用。
“智能体创建”的含义
策展人只管理在 ~/.hermes/skills/.usage.json 中明确标记为智能体创建的技能。一个技能在满足以下所有条件时符合资格:
- 其名称不在
~/.hermes/skills/.bundled_manifest中(随仓库提供的捆绑技能)。 - 其名称不在
~/.hermes/skills/.hub/lock.json中(中心安装的技能)。 - 其
.usage.json条目具有"created_by": "agent"或"agent_created": true。
目前,只有后台自我改进审查分支会设置此标记——当它在定期审查传递(大约每 10 个智能体轮次)期间创建新的总括技能时。后台分支以 "background_review" 的写入来源运行(通过 tools/skill_provenance.py),这是唯一触发 skill_manage 中 mark_agent_created() 调用的路径。
前台智能体在对话期间通过 skill_manage(action="create") 创建的技能不被标记为智能体创建——它们被视为用户指导的,策展人故意不碰它们。
警告 — 你手动编写的技能不会被策展
如果你手动创建了
SKILL.md或将 Hermes 指向外部技能目录,该技能将具有created_by: null(或字段缺失)的.usage.json条目。策展人不会碰它。这同样适用于前台智能体应你请求创建的技能。要查看策展人实际管理哪些技能,请运行
hermes curator status。如果智能体创建计数为 0,则当前没有技能处于策展人的管辖范围内——LLM 审查传递将被跳过,报告将显示Model: (not resolved) via (not resolved)且Duration: 0s。
被标记为智能体创建的技能遵循完整的生命周期:
active→ (30 天未使用)stale→ (90 天未使用)archived- 固定的技能绕过所有自动转移
- 归档可通过
hermes curator restore <name>恢复
如果你想保护特定技能永远不被触及——例如你依赖的手动编写的技能——请使用 hermes curator pin <name>。请参阅下一节。
固定技能
固定保护技能不被删除——无论是策展人的自动归档传递还是智能体的 skill_manage(action="delete") 工具调用。一旦技能被固定:
- 策展人在自动转移(
active → stale → archived)期间跳过它,并且其 LLM 审查传递被指示不要碰它。 - 智能体的
skill_manage工具拒绝对其执行delete,并提示用户使用hermes curator unpin <name>。修补和编辑仍然可以进行,因此智能体可以在出现陷阱时改进固定技能的内容,而无需进行固定/取消固定/重新固定的操作。
使用以下命令固定和取消固定:
hermes curator pin <skill>
hermes curator unpin <skill>该标志作为 "pinned": true 存储在技能在 ~/.hermes/skills/.usage.json 的条目中,因此在会话之间持久存在。
只有智能体创建的技能可以被固定——hermes curator pin 会拒绝捆绑和中心安装的技能,并给出解释性消息。中心安装的技能永远不会受到策展人修改的影响。捆绑的内置技能仅在 curator.prune_builtins: true(默认)时被触及,并且即使如此,也仅在 archive_after_days 天未使用后归档——从不修补、合并或删除。设置 curator.prune_builtins: false 以完全豁免捆绑技能。
一小部分受保护的内置技能被硬编码为永远不可归档且不可合并,无论 curator.prune_builtins、固定状态或 LLM 判断如何。这些技能承载用户体验——例如,plan 为 /plan 斜杠命令流程提供支持——因此静默归档一个会导致其斜杠命令变成“未知命令”错误,而不会给你任何信号。受保护的内置技能会从策展人的候选列表中完全过滤掉,因此合并传递永远不会看到它们。
如果你想要比“不删除”更强的保证——例如,在智能体仍然读取技能内容的同时完全冻结其内容——请直接用编辑器编辑 ~/.hermes/skills/<name>/SKILL.md。固定保护的是工具驱动的删除,而不是你自己的文件系统访问。
使用遥测
策展人在 ~/.hermes/skills/.usage.json 中维护一个边车文件,每个技能一个条目:
{
"my-skill": {
"use_count": 12,
"view_count": 34,
"last_used_at": "2026-04-24T18:12:03Z",
"last_viewed_at": "2026-04-23T09:44:17Z",
"patch_count": 3,
"last_patched_at": "2026-04-20T22:01:55Z",
"created_at": "2026-03-01T14:20:00Z",
"state": "active",
"pinned": false,
"archived_at": null
}
}计数器在以下情况下递增:
view_count:智能体对该技能调用skill_view。use_count:技能被加载到对话的提示中。patch_count:skill_manage patch/edit/write_file/remove_file在该技能上运行。
捆绑和中心安装的技能被明确排除在遥测写入之外。
每次运行报告
每次策展人运行都会在 ~/.hermes/logs/curator/ 下写入一个带时间戳的目录:
~/.hermes/logs/curator/
└── 20260429-111512/
├── run.json # 机器可读:完整保真度、统计信息、LLM 输出
└── REPORT.md # 人类可读摘要REPORT.md 是查看给定运行所做操作的快速方法——哪些技能发生了转移、LLM 审查者说了什么、它修补了哪些技能。适合审计,而无需 grep agent.log。
注意 — 没有候选?报告显示
(not resolved)当策展人没有智能体创建的技能需要审查时,LLM 审查传递会被完全跳过。报告标题将显示
Model: (not resolved) via (not resolved)且Duration: 0s——这不表示配置错误或模型解析失败。它仅仅意味着没有候选,因此从未调用过模型。自动转移阶段仍然运行并正常报告其计数。
摘要中的重命名映射
如果一次运行将多个技能合并到一个总括下(或合并了近似重复项),运行结束时打印的用户可见摘要会包含一个显式的重命名映射,显示策展人应用的每个 old-name → new-name 对。这是对每个技能转移行的补充,因此当一波重命名发生时,你可以一目了然地发现它们,而无需比较 JSON 报告。该提示也会在 hermes curator pin 下显示,以便你可以立即固定总括名称以锁定新标签。
恢复归档技能
如果策展人归档了你仍然想要的内容:
hermes curator restore <skill-name>这会将技能从 ~/.hermes/skills/.archive/ 移回活动树,并将其状态重置为 active。如果此后有同名的捆绑或中心安装技能被安装(会遮蔽上游),则恢复会拒绝。
按环境禁用
策展人默认开启。要关闭它:
- 仅针对一个配置文件: 编辑
~/.hermes/config.yaml(或活动配置文件的配置)并设置curator.enabled: false。 - 仅针对一次运行:
hermes curator pause——暂停在会话之间持久存在;使用resume重新启用。
如果 min_idle_hours 尚未过去,策展人也会拒绝运行,因此在活跃的开发机器上,它自然只会在安静时段运行。
另请参阅
- 技能系统 — 技能的一般工作方式以及创建它们的自我改进循环
- 记忆 — 维护长期记忆的并行后台审查
- 捆绑技能目录
- Issue #7816 — 原始提案和设计讨论