Skip to content

hermes agent Curator

Curator(策展人)是针对 代理创建的技能 的一项后台维护机制。它通过跟踪每项技能的查看、使用和修补频率,将长期未使用的技能按 “活跃(active)→ 陈旧(stale)→ 已归档(archived)” 的状态进行转换,并定期启动一个简短的辅助模型评估,以提出合并建议或修补版本偏差。

它的存在是为了防止通过 自我改进循环 创建的技能无限期堆积。每当 agent 解决一个新颖问题并保存为技能时,该技能都会存入 ~/.hermes/skills/。如果没有维护,最终会出现数十个狭隘且近乎重复的技能,从而污染目录并浪费 Token。

Curator 绝不会触碰 内置技能(随仓库附带)或 Hub 安装的技能(来自 agentskills.io。它仅评估代理自身创作的技能。此外,它也 从不自动删除 —— 最坏的情况是被归档到 ~/.hermes/skills/.archive/ 目录中,该操作是可恢复的。

跟踪 [issue #7816(https://github.com/NousResearch/hermes-agent/issues/7816)。

策展人(Curator)是由不活跃检查触发的,而不是靠 cron 守护进程。在 CLI 会话启动时,以及网关 cron 计时器线程内的循环滴答(tick)中,Hermes 会检查:

  1. 自上次策展人运行以来是否已过去足够的时间(interval_hours,默认 7 天),以及
  2. 代理是否已经闲置了足够长的时间(min_idle_hours,默认 2 小时)。

如果两者都为真,它将生成一个 AIAgent 的后台分支 —— 这与内存/技能自我改进提示所使用的模式相同。该分支在其独立的提示词缓存中运行,绝不触及当前的对话。

一次运行包含两个阶段:

  1. 自动转换(确定性,无需 LLM):超过 stale_after_days(30天)未使用的技能将变为陈旧(stale)状态;超过 archive_after_days(90天)未使用的技能将被移动到 ~/.hermes/skills/.archive/
  2. LLM 评估(单次辅助模型处理,max_iterations=8):分支出发的代理会调查由代理创建的技能,可以通过 skill_view 读取其中的任何技能,并针对每项技能决定是保留、修补(通过 skill_manage)、合并重叠的技能,还是通过终端工具进行归档。

置顶技能(Pinned skills) 对策展人的自动转换和代理自身的 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

若要完全禁用,请设置 curator.enabled: false

在更便宜的辅助模型上运行评估

Section titled “在更便宜的辅助模型上运行评估”

策展人(Curator)的 LLM 评估阶段是一个常规的辅助任务插槽 —— auxiliary.curator —— 与视觉(Vision)、压缩(Compression)、会话搜索(Session Search)等任务并列。“Auto” 表示 “使用我的主聊天模型”;您可以覆盖此插槽,为评估阶段指定特定的供应商和模型。

最简单的方法 —— hermes model

Terminal window
hermes model # → 选择 "Auxiliary models — side-task routing"
# → 选择 "Curator" → 选择供应商 → 选择模型

同样的配置选择器也可以在 Web 控制面板的 Models 选项卡中找到。

直接修改 config.yaml(等效操作):

auxiliary:
curator:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 600 # 时间充裕 —— 评估可能需要几分钟

保持 provider: auto(默认值)会将评估任务路由到您的主聊天模型,这与其他辅助任务的行为一致。

Terminal window
hermes curator status # last run, counts, pinned list, LRU top 5
hermes curator run # trigger a review now (blocks until the LLM pass finishes)
hermes curator run --background # fire-and-forget: start the LLM pass in a background thread
hermes curator run --dry-run # preview only — report without any mutations
hermes curator backup # take a manual snapshot of ~/.hermes/skills/
hermes curator rollback # restore from the newest snapshot
hermes curator rollback --list # list available snapshots
hermes curator rollback --id <ts> # restore a specific snapshot
hermes curator rollback -y # skip the confirmation prompt
hermes curator pause # stop runs until resumed
hermes curator resume
hermes curator pin <skill> # never auto-transition this skill
hermes curator unpin <skill>
hermes curator restore <skill> # move an archived skill back to active

在每次执行真正的管理(curator)操作前,Hermes 会在 ~/.hermes/skills/.curator_backups/<utc-iso>/skills.tar.gz 路径下为 ~/.hermes/skills/ 创建一个 tar.gz 快照。如果某次操作归档或合并了你不希望改动的内容,你可以用一条命令撤销整个运行过程:

Terminal window
hermes curator rollback # 恢复最近的快照(需确认)
hermes curator rollback -y # 跳过确认提示
hermes curator rollback --list # 查看所有带有原因和大小的快照

回滚本身也是可逆的:在替换技能树之前,Hermes 会将一个标记为 pre-rollback 的新快照保存至 <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 设置为 false 可禁用自动快照。即使在禁用备份的情况下,手动执行 hermes curator backup 命令依然有效,但前提是你必须先将 enabled 设置为 true —— 该标志对称地限制了两种路径,因此不会出现无意中跳过变更运行前快照的情况。

hermes curator status 还会列出五个最近最少使用的技能 —— 这是查看哪些技能即将过期的一种快捷方式。

同样的子命令也可以在运行中的会话(CLI 或网关平台)内通过 /curator 斜杠命令来使用。

“代理创建(agent-created)”的含义

Section titled ““代理创建(agent-created)”的含义”

如果一项技能的名称 在以下列表中,则被视为 “代理创建”:

  • ~/.hermes/skills/.bundled_manifest(安装时从仓库复制的技能)。
  • ~/.hermes/skills/.hub/lock.json(通过 hermes skills install 安装的技能)。

~/.hermes/skills/ 中的其他所有内容都是策展人(Curator)的处理对象。这包括:

  • 代理在对话期间通过 skill_manage(action="create") 保存的技能。
  • 您通过手写 SKILL.md 手动创建的技能。
  • 通过您指定的外部技能目录添加的技能。

如果您想保护特定的技能永远不被触碰 —— 例如您依赖的某项手写技能 —— 请使用 hermes curator pin <name>。详见下一节。

置顶功能可以保护技能不被删除 —— 无论是策展人(Curator)的自动归档操作,还是代理的 skill_manage(action="delete") 工具调用。一旦技能被置顶:

  • 策展人会在自动状态转换(active → stale → archived)中跳过它,且其 LLM 评估阶段也会收到忽略该技能的指令。
  • **代理的 skill_manage 工具 拒绝 **对其执行 delete(删除)操作,并提示用户使用 hermes curator unpin <name>。修补(Patch)和编辑操作仍可进行,因此代理可以在发现缺陷时改进置顶技能的内容,而无需反复进行 “置顶/取消置顶” 的操作。

置顶与取消置顶命令:

Terminal window
hermes curator pin <skill>
hermes curator unpin <skill>

该标志以 "pinned": true 的形式存储在 ~/.hermes/skills/.usage.json 中对应的技能条目下,因此可以跨会话持久存在。

只有代理创建的技能 可以被置顶 —— 内置技能和从 Hub 安装的技能本身就不受策展人变更的影响,如果您尝试置顶它们,hermes curator pin 会返回一条解释性的拒绝信息。

如果您需要比 “禁止删除” 更强的保障 —— 例如在代理仍可读取该技能的同时完全冻结其内容 —— 请直接使用编辑器修改 ~/.hermes/skills/<name>/SKILL.md。置顶功能防护的是由工具驱动的删除行为,而非您对文件系统的直接操作。

策展人(Curator)在 ~/.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

内置技能和从 Hub 安装的技能被明确排除在遥测写入之外。

每次策展人(Curator)运行都会在 ~/.hermes/logs/curator/ 下创建一个带有时间戳的目录:

~/.hermes/logs/curator/
└── 20260429-111512/
├── run.json # 机器可读:包含完整细节、统计数据、LLM 输出
└── REPORT.md # 人类可读:摘要报告

REPORT.md 是查看特定运行结果的快捷方式 —— 哪些技能发生了状态转换、LLM 评审员的评价、以及它修补了哪些技能。这非常适合进行审计,无需去 agent.log 中进行复杂的搜索(grep)。

如果某次运行将多个技能合并到了一个统称下(或合并了近乎重复的技能),运行结束时打印出的用户可见摘要中会包含一份明确的重命名映射表,展示 curator 所应用的所有 “旧名称 → 新名称” 对应关系。这补充在每个技能的迁移行之外,因此当出现大规模重命名时,你无需对比 JSON 报告即可一目了然。该提示也会在 hermes curator pin 下显示,以便如果你想锁定这个新标签,可以立即固定(pin)这个统称。

如果策展人归档了您仍然需要的技能:

Terminal window
hermes curator restore <skill-name>

此操作会将技能从 ~/.hermes/skills/.archive/ 移回活跃目录树,并将其状态重置为 active。如果在此期间已安装了同名的内置技能或 Hub 技能,恢复操作将被拒绝(以避免覆盖上游内容)。

策展人默认处于开启状态。若要将其关闭:

  • 仅针对特定配置方案(Profile): 编辑 ~/.hermes/config.yaml(或当前配置方案的配置)并设置 curator.enabled: false
  • 仅针对单次运行: 使用 hermes curator pause —— 该暂停状态会跨会话持久存在;使用 resume 重新启用。

此外,如果未满足 min_idle_hours(最小闲置时间),策展人也会拒绝运行。因此在活跃的开发机器上,它自然只会在空闲时段运行。

-
0:000:00