跳到主要內容

Curator(技能策展人)

Curator 是針對 Agent 創建的技能 的後臺維護流程。它會跟蹤每個技能的查看、使用和修補頻率,將長期未使用的技能從 active(活躍)狀態遷移至 stale(陳舊),最終進入 archived(歸檔)狀態,並定期啟動一個短暫的輔助模型審查,以提出合併建議或修復漂移。

它的存在是為了防止通過 自我改進循環 創建的技能無限堆積。每當 Agent 解決一個新問題並保存一個技能時,該技能都會存入 ~/.hermes/skills/。如果沒有維護機制,你最終會得到數十個狹窄且近乎重複的技能,汙染技能目錄並浪費 Token。

默認情況下(prune_builtins: true),除了主要管理的 Agent 創建的技能外,Curator 還可以在 archive_after_days 天未使用後歸檔 未使用的內置捆綁技能(隨倉庫一起發佈)。從 agentskills.io 安裝的 Hub 技能始終不受影響。設置 curator.prune_builtins: false 可恢復舊的僅針對 Agent 創建技能的行為,此時內置技能永遠不會被觸及。Curator 也 絕不會自動刪除 技能——最壞的結果是歸檔到 ~/.hermes/skills/.archive/,這是可恢復的。

追蹤 issue #7816

運行方式

Curator 由空閒檢查觸發,而非 cron 守護進程。在 CLI 會話啟動時,以及在網關的 cron-ticker 線程中的週期性滴答聲中,Hermes 會檢查是否滿足以下條件:

  1. 距離上次 Curator 運行已過去足夠的時間(interval_hours,默認 7 天),且
  2. Agent 已空閒足夠長的時間(min_idle_hours,默認 2 小時)。

如果兩者均為真,它將生成 AIAgent 的後臺分支——這與內存/技能自我改進提示所使用的模式相同。該分支在其獨立的提示緩存中運行,絕不會干擾當前活動對話。

首次運行行為

在全新安裝時(或在 hermes update 後預-Curator 安裝首次觸發時),Curator 不會立即運行。第一次觀察會將 last_run_at 種子設置為“現在”,並將第一次實際運行推遲整整一個 interval_hours。這為你提供了一個完整的時間間隔來審查你的技能庫、固定任何重要內容,或在 Curator 觸及之前完全選擇退出。

如果你想在 Curator 實際運行之前查看它 做什麼,請運行 hermes curator run --dry-run——它會生成相同的審查報告,但不會變更技能庫。

一次運行包含兩個階段:

  1. 自動狀態轉換(確定性,無 LLM)。超過 stale_after_days(30 天)未使用的技能變為 stale;超過 archive_after_days(90 天)未使用的技能被移至 ~/.hermes/skills/.archive/
  2. LLM 審查(單次輔助模型運行,max_iterations=8)。分支 Agent 調查 Agent 創建的技能,可以使用 skill_view 讀取其中任何一個,並針對每個技能決定是保留、修補(通過 skill_manage)、合併重疊的技能,還是通過終端工具進行歸檔。合併將技能視為一個完整的包:如果技能包含 references/templates/scripts/assets/ 或指向這些路徑的相對鏈接,Curator 必須要麼將其保持獨立,要麼重新安置所需的支持文件並重寫路徑,要麼將整個包原樣歸檔——而不能僅將 SKILL.md 扁平化到另一個技能的 references/ 文件中。

固定技能對 Curator 的自動狀態轉換和 Agent 自身的 skill_manage 工具均不可見。請參閱下方的 固定技能

配置

所有設置都位於 config.yamlcurator: 下(不在 .env 中——這不是秘密)。默認值:

curator:
enabled: true
interval_hours: 168 # 7 days
min_idle_hours: 2
stale_after_days: 30
archive_after_days: 90
prune_builtins: true # archive unused bundled built-in skills too (hub skills always exempt)

要完全禁用,請設置 curator.enabled: false

在更便宜的輔助模型上運行審查

Curator 的 LLM 審查步驟是一個常規的輔助任務槽位——auxiliary.curator——與 Vision、Compression、Session Search 等並列。“Auto”表示“使用我的主聊天模型”;覆蓋該槽位以指定特定的提供商 + 模型用於審查步驟。

最簡單的方法——hermes model

hermes model                   # → "Auxiliary models — side-task routing"
# → pick "Curator" → pick provider → pick model

同樣的選擇器也可在 Web 儀表板的 Models 選項卡中找到。

直接配置 config.yaml(等效):

auxiliary:
curator:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 600 # generous — reviews can take several minutes

保留 provider: auto(默認值)會將審查步驟路由到你的主聊天模型,這與所有其他輔助任務的行為一致。

遺留配置

早期版本使用一次性配置的 curator.auxiliary.{provider,model} 塊。該路徑仍然有效,但會發出棄用日誌行——請遷移到上述的 auxiliary.curator,以便 Curator 與其他輔助任務共享相同的管道(hermes model、儀表板 Models 選項卡、base_urlapi_keytimeoutextra_body)。

CLI

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
hermes curator list-archived # list skills currently in ~/.hermes/skills/.archive/
hermes curator archive <skill> # manually archive a single skill now
hermes curator prune [--days N] # bulk-archive agent-created skills idle >= N days (default 90)

備份和回滾

在每次實際的 Curator 運行之前,Hermes 會在 ~/.hermes/skills/.curator_backups/<utc-iso>/skills.tar.gz 處對 ~/.hermes/skills/ 進行 tar.gz 快照。如果某次運行歸檔或合併了你不想觸及的內容,你可以使用一條命令撤銷整個運行:

hermes curator rollback        # restore newest snapshot (with confirmation)
hermes curator rollback -y # skip the prompt
hermes curator rollback --list # see all snapshots with reason + size

回滾操作本身是可逆的:在替換技能樹之前,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 可禁用自動快照功能。僅在首先設置 enabled: true 時,手動執行的 hermes curator backup 命令才能在備份禁用的情況下正常工作——該標誌對稱地控制兩條路徑,從而確保在可變運行中不會意外跳過運行前快照。

hermes curator status 還會列出最近最少使用的五個技能——這是一種快速查看哪些技能可能即將過期的方法。

在運行的會話中(CLI 或網關平臺),相同的子命令也可作為 /curator 斜槓命令使用。

“agent-created”(代理創建)的含義

Curator 僅管理在 ~/.hermes/skills/.usage.json 中明確標記為 agent-created 的技能。當滿足以下所有條件時,技能才符合資格:

  1. 其名稱不在 ~/.hermes/skills/.bundled_manifest 中(隨倉庫一起發佈的捆綁技能)。
  2. 其名稱不在 ~/.hermes/skills/.hub/lock.json 中(通過 Hub 安裝的技能)。
  3. .usage.json 條目包含 "created_by": "agent""agent_created": true

目前,只有 後臺自我改進審查分支 會設置此標記——當它在定期審查過程中(大約每 10 個代理輪次)創建新的 umbrella 技能時。後臺分支以 "background_review" 作為寫入來源運行(通過 tools/skill_provenance.py),這是觸發 skill_managemark_agent_created() 調用的唯一路徑。

前臺代理在對話期間通過 skill_manage(action="create") 創建的技能不會被標記為 agent-created——它們被視為用戶導向的,Curator 有意不干預它們。

你手寫的技能不會被 Curator 管理

如果你手動創建了 SKILL.md 或將 Hermes 指向外部技能目錄,該技能的 .usage.json 條目中的 created_by 將為 null(或缺少該字段)。Curator 不會觸碰它。同樣的規則也適用於前臺代理應你的要求創建的技能。

要查看 Curator 實際管理的技能,請運行 hermes curator status。如果 agent-created 計數為 0,則當前沒有技能處於 Curator 的管理範圍內——LLM 審查步驟將被跳過,報告將顯示 Model: (not resolved) via (not resolved)Duration: 0s

屬於 agent-created 的技能遵循完整的生命週期:

  • active →(30 天未使用)stale →(90 天未使用)archived
  • 被 pinned(鎖定)的技能會繞過所有自動轉換
  • 歸檔的技能可以通過 hermes curator restore <name> 恢復

如果你想保護特定技能免受任何干預——例如你依賴的手寫技能——請使用 hermes curator pin <name>。請參閱下一節。

鎖定(Pinning)技能

鎖定可以保護技能不被刪除——無論是 Curator 的自動歸檔流程,還是代理的 skill_manage(action="delete") 工具調用。一旦技能被鎖定:

  • Curator 會在自動轉換(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 中該技能的條目裡,因此它在會話之間持久存在。

只有 agent-created 技能可以被鎖定——如果你嘗試鎖定捆綁技能或 Hub 安裝的技能,hermes curator pin 會拒絕操作並給出解釋性消息。Hub 安裝的技能永遠不會受到 Curator 的變更影響。捆綁內置技能僅在 curator.prune_builtins: true(默認值)時才會被觸及,即便如此,也只有在 archive_after_days 天未使用後才會被歸檔——絕不會被打補丁、合併或刪除。設置 curator.prune_builtins: false 可完全豁免捆綁技能。

一小部分 受保護的內置技能 被硬編碼為永遠不可歸檔且永遠不可合併,無論 curator.prune_builtins 設置、鎖定狀態或 LLM 判斷如何。這些技能支撐著關鍵的 UX——例如,plan 支持 /plan 斜槓命令流程——因此靜默歸檔其中一個會導致其斜槓命令變成“Unknown command”錯誤,且沒有任何提示。受保護的內置技能會從 Curator 的候選列表中完全過濾掉,因此合併步驟永遠不會看到它們。

如果你想要比“不刪除”更強的保證——例如,在代理仍然讀取技能的同時完全凍結其內容——請直接使用編輯器編輯 ~/.hermes/skills/<name>/SKILL.md。鎖定機制防範的是工具驅動的刪除,而不是你對文件系統的直接訪問。

使用遙測

Curator 在 ~/.hermes/skills/.usage.json 中維護一個 sidecar 文件,每個技能對應一個條目:

{
"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:代理(agent)對技能調用 skill_view
  • use_count:技能被加載到對話的提示詞(prompt)中。
  • patch_count:對技能運行 skill_manage patch/edit/write_file/remove_file

捆綁技能和從 Hub 安裝的技能明確排除在遙測寫入之外。

每次運行的報告

每次 Curator 運行都會在 ~/.hermes/logs/curator/ 下寫入一個帶時間戳的目錄:

~/.hermes/logs/curator/
└── 20260429-111512/
├── run.json # machine-readable: full fidelity, stats, LLM output
└── REPORT.md # human-readable summary

REPORT.md 提供了一種快速查看給定運行執行情況的方法——哪些技能發生了狀態轉換、LLM 審查器的意見是什麼、它修補了哪些技能。這便於審計,而無需去 grep agent.log

沒有候選項?報告顯示 (not resolved)

當 Curator 沒有由代理創建的技能可供審查時,LLM 審查階段會被完全跳過。報告頭部將顯示 Model: (not resolved) via (not resolved),且 Duration: 0s——這並 表示配置錯誤或模型解析失敗。這僅僅意味著沒有候選項,因此從未調用過模型。自動轉換階段仍然會運行並正常報告其計數。

摘要中的重命名映射

如果一次運行將多個技能合併到一個總括技能(umbrella)下(或合併了近似重複項),則在運行結束時打印的用戶可見摘要中會包含一個明確的重命名映射,顯示 Curator 應用的每個 舊名稱 → 新名稱 對。除了每個技能的狀態轉換行之外,這樣當出現大量重命名時,你可以一目瞭然地發現它們,而無需對 JSON 報告進行差異比較。該提示也會出現在 hermes curator pin 下,以便你可以立即固定總括名稱,從而鎖定新標籤。

恢復已歸檔的技能

如果 Curator 歸檔了你仍然想要的技能:

hermes curator restore <skill-name>

這會將技能從 ~/.hermes/skills/.archive/ 移回活動樹,並將其狀態重置為 active。如果此後已安裝了同名的捆綁技能或從 Hub 安裝的技能(這會遮蔽上游版本),恢復操作將拒絕執行。

按環境禁用

Curator 默認啟用。要關閉它:

  • 僅針對某個配置文件: 編輯 ~/.hermes/config.yaml(或當前激活配置文件的配置)並設置 curator.enabled: false
  • 僅針對單次運行: hermes curator pause——暫停狀態會在會話間持續存在;使用 resume 重新啟用。

如果未經過 min_idle_hours 指定的空閒時間,Curator 也會拒絕運行,因此在活躍的開發機器上,它自然只會在安靜時段運行。

另見