目 录CONTENT

文章目录

午睡醒来发现 Hermes 偷跑了 90 次大模型?—— Curator 技能策展人功能详解

过客
2026-06-19 / 0 评论 / 1 点赞 / 11 阅读 / 0 字

睡一觉起来看 New-API 后台,发现 Hermes 在我睡觉时调了 90 多次 deepseek-v4-flash。查完之后发现是个好东西,值得写一篇。

事情经过

端午节在家吃了睡睡了吃,下午睡起来,习惯性打开 New-API 后台看看消耗。好家伙:

15:49 ~ 16:08,87 次调用,总输入 ~26 万 token,总缓存 ~1337万,总输出 ~5万。

我第一反应是我的Key泄漏了?查了一下New-API日志细节,发现调用IP是我本地的。第二反应是 Hermes 出 BUG 了,或者有什么循环在疯狂刷 API。于是让 Hermes 自己查日志:

15点30到16点30调用了90多次大模型,查看日志这是干了啥?

30 秒后它告诉我:不是 BUG,是 ​Curator​(技能策展人)在跑。

Curator 是什么?

Curator 是 Hermes Agent 内置的​技能库自动维护系统​。默认每周跑一次,负责对 ~/.hermes/skills/ 下的所有技能文件做整理、合并、清理。

简单说就是:​AI 版本的家政阿姨​,定期来给你的技能库做断舍离。

查日志过程

Hermes 的日志分两层:

日志 路径 用途
Gateway 日志 ~/.hermes/logs/gateway.log 网络层、消息路由、会话管理
Agent 日志 ~/.hermes/logs/agent.log LLM 调用、工具执行、会话详情

先看 gateway.log 确认时间范围内的事件:

2026-06-19 15:49:13  curator snapshot created (pre-curator-run)
2026-06-19 16:08:13  curator: auto: no changes; llm: ## Consolidation Summary

抓住 session ID 20260619_154915_d9f7b2,切到 agent.log 看详细:

$ grep "20260619_154915_d9f7b2" agent.log | grep "API call" | wc -l
87

$ grep "20260619_154915_d9f7b2" agent.log | grep "Turn ended"
Turn ended: reason=text_response(finish_reason=stop)
  api_calls=87/9999 tool_turns=36 response_len=4541

87 次调用,36 轮工具操作,19 分钟跑完。

Curator 执行完后会把完整报告写到一个独立目录:

~/.hermes/logs/curator/20260619-074912/
├── REPORT.md    # 人类可读的总结报告
└── run.json     # 机器可读的完整记录(含所有工具调用细节)

报告内容很详细——每一步做了什么工具调用、归档了哪些技能、合并了哪些、patch 了哪些文件,全部有记录。

这次执行具体做了什么

配置

来自 ~/.hermes/config.yaml

curator:
  enabled: true
  interval_hours: 168        # 每周一次
  min_idle_hours: 2          # 至少空闲 2 小时才跑
  stale_after_days: 30       # 30 天未用标记为过期
  archive_after_days: 90     # 90 天自动归档
  backup:
    enabled: true
    keep: 5                  # 保留最近 5 次备份

执行结果:72 → 53,净减 19

归档了 19 个技能

全部移到 ~/.hermes/skills/.archive/,可用 hermes curator restore <name> 恢复:

归档技能 原因
claude-code,codex,opencode AI Coding Agent,已经不再用
cocos-creator-performance,cocos-creator-resource-management 项目迁移,不需要了
plan,spike,test-driven-development,requesting-code-review等 6 个 已被 development-workflows 伞技能覆盖
kanban-orchestrator,kanban-worker 不再使用
heartmula,songsee,songwriting-and-ai-music 实验性技能,不再维护

合并了 6 个技能到伞技能下

① xitter → xurl
xurl 的 SKILL.md 明确写着 "This skill replaces the older xitter skill"。Curator 把 xitter 的命令参考转为 xurl/references/xitter.md,xurl 里加一段迁移说明,原 xitter 目录归档。

② 4 个 Himalaya 相关技能 → himalaya 主技能

  • himalaya-email-cleanup-systematic → 搜索语法和参数规则补入主 SKILL.md
  • himalaya-multi-account-fix → 降为 references/multi-account-fix.md
  • himalaya-installation(乱放在 productivity/ 下)→ 降为 references/installation.md
  • email-cleanup-systematic(与 himalaya 内容完全重复)→ 降为 reference

③ hermes-web-ui-auth-token-config → hermes-web-ui-management
两页的 AUTH_TOKEN 配置文档降为 references/auth-token-config.md

保留了 10 个独立技能

评估后认为各自有独立价值,不合并:

api-integration-failure-handlingapikey-image-gencustom_providers_env_configdogfoodgrok-image-to-videohyperframesremotionmarkdown-viewerima-skillyuanbao

为什么花了 87 次调用?

Curator 的 LLM 阶段流程是:​读取技能 → LLM 分析内容 → 决定处理方式 → 执行(patch/skill_manage)→ 更新 todo 列表​。每个技能少则 1 次、多则 3-4 次调用。

这次处理了 72 个技能(扫描)+ 6 个合并集群 + 19 个归档 + 多个 patch,66 次工具调用 + 87 次 API 调用,合理。

平均每个调用 ~10 秒延迟,一半有 cache hit(50%),实际消耗约 13 万 token/轮。

实用操作

# 查看 curator 调度配置
grep -A 8 "curator:" ~/.hermes/config.yaml

# 查看最近一次 curator 报告
cat ~/.hermes/logs/curator/$(ls -t ~/.hermes/logs/curator/ | head -1)/REPORT.md

# 恢复归档的技能
hermes curator restore <skill-name>

# 手动触发 curator 运行
# (需要重启 gateway 或等下次调度)

我的感受

好的地方

  1. 报告详细​——REPORT.md + run.json 双份记录,每一步都有日志可查
  2. 合并逻辑合理​——xitter→xurl、4 个 himalaya→1 个,确实应该整理
  3. 可恢复​——归档进 .archive/ 不是真删,一条命令就回来
  4. 自动备份​——跑之前先整库快照,不怕搞砸

槽点

  1. 87 次调用确实不少​——一周一次可以接受,如果觉得贵可以把 interval_hours 调成 336(两周一次)或者 720(一个月一次)
  2. 中间有几次 skill_view 报错​——比如 sketch 重名(本地和 external_dir 各一个)、audiocraft-audio-generation 找不到,这些小坑说明 curator 对目录结构敏感
  3. 如果是按量计费的 API​,默认用的是 DeepSeek V4 Flash模型,这 19 分钟大概花几毛到一块钱。

总结

Curator 不是一个"可有可无"的功能。如果你的技能库超过 20 个,它确实能帮你保持整洁——把分散的小技能归入伞技能、清理过期技能、修复交叉引用。每周一次、一两毛钱,换来技能库不腐烂,值。

不过它也有局限:对技能目录结构敏感,重名或路径不对会报 warning 跳过。而且它只处理技能文件,不影响你正在运行的对话或 cron 任务,这一点设计得干净。

核心建议​:默认配置就可以用。如果每周 80-90 次调用对你来说太多,把 interval_hours 改成 336 就行。技能归档后不占 token,恢复也很简单。

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区