用 skill-cleaner 给 Hermes Agent 技能库做了次体检,结果吓我一跳

2026-07-05

引子:为什么突然想体检

Hermes Agent 用久了,技能库不知不觉长到了几百个——每天装新技能,很少回头清理。直到发现最近 Agent 对某些技能的响应越来越慢,有些甚至像完全不知道一样。

直到看到龙虾之父(steipete)开源了 skill-cleaner——一个专门给 Agent 技能库做体检的工具。描述里写着:「每次对话 208 个技能被直接砍掉,Agent 根本看不到它们。」

这个数字太具体了,像在说我。

skill-cleaner 是什么

skill-cleaner 是 Peter(龙虾之父)开源的 Agent 技能体检工具,托管在 steipete/agent-scripts 仓库(5.2k Star)。核心功能是审计技能库的预算占用、检测重复、发现僵尸技能、压缩描述。

它的设计风格很特别——SKILL.md 只有 56 行,是一个路标,目的就是让 Agent 找到路,不是把整本说明书挂在路标上。代码才是说明书。

5 大核心功能速览

功能 一句话
预算审计 每个技能占多少 token,还剩多少预算
重复检测 扫描所有目录,找出同名/同内容的冗余技能
僵尸筛查 基于历史日志找出长期未被调用的技能
根目录审计 统计技能来源,梳理加载链路
描述优化 识别长描述并给出压缩建议

实操:在 Hermes 上跑一次

拉取和运行很简单:

git clone https://github.com/steipete/agent-scripts.git /tmp/agent-scripts

node --experimental-strip-types \
  /tmp/agent-scripts/skills/skill-cleaner/scripts/skill-cleaner.ts \
  --root-only --root ~/.hermes/skills --no-logs --months 6

核心参数就四个:

  • --root ~/.hermes/skills:指定技能目录
  • --root-only:只查指定目录,不包含系统内置库
  • --no-logs:不读日志(如果不需要僵尸筛查可以省很多时间)
  • --months 6:只看最近 6 个月的数据

体检结果

预算:99.8% 已用满

这项最扎眼:

指标 数值 含义
技能总数 456 我的技能库总规模
模型上下文 272,000 tokens 默认上下文窗口
2% 预算线 5,440 tokens 技能列表最大允许 token 数
已用预算 5,430 tokens(99.8%) 几乎用满
剩余预算 仅 10 tokens 完全没有余量
完整展开需要 39,314 tokens 预算的 722%
被直接砍掉的技能 208 个 Agent 完全看不到它们
实际能装入的 248 个 不到 55%

简单说——我装了 456 个技能,但每次对话只有不到 55% 能进入 Agent 的视野。剩下 208 个纯粹是心理安慰,Agent 根本不知道它们存在。

描述过长 Top 5

技能 描述字符数 问题
hf-cli 1,008 chars 严重超标,一个当 15 个用
hyperframes(已归档) 860 / 722 chars 归档了还占这么多
qianwen-image-generation 758 chars 可压缩到 200 以内
html-ppt 646 chars 可压缩
30+ 个技能 600-700 chars 全部超标

最夸张的是 hf-cli,描述写了 1008 个字符——相当于 15 个正常技能的预算。

重复技能:同一技能三副本

.archive/wondelai-skills/ 目录下发现 40+ 个技能.archive/ 中的版本 100% 完全相同。每个技能存在 3 个副本(主目录 + .archive/ + .archive/wondelai-skills/),包括:

blue-ocean-strategy、clean-architecture、clean-code、crossing-the-chasm、design-sprint、jobs-to-be-done、lean-startup、mom-test、system-design……一共约 45 组。

这些技能我可能只打开过一两次,但每次对话它们都在吃预算。

精简方法论:龙虾之父的写哲学

skill-cleaner 内置了一套描述压缩逻辑,核心思想就三条:

1. 预处理

统一格式,全部小写,剔除标点,去掉冗余修饰词。

2. 场景识别

内置预设场景关键词词库,自动识别技能的业务领域。

3. 标准化替换

场景 替换示例
调试类 debug, inspect, fix
部署类 deploy, release, verify
检索类 search, sync, summarize

Peter 的理念概括成一句话:「技能描述要像路标——目的是让 Agent 找到路,不是把整本说明书挂在路标上。」

40 词以内是最佳实践。太长就会被截断,太短又不够区分。穴居人式说话:能省就省。

可操作的优化步骤

体检报告出来之后,我按优先级分了三档:

🟢 立即执行(无风险)

  1. 删 wondelai-skills 目录 — 40+ 个 100% 重复文件,一键清掉,立省预算
  2. 清理 .archive 中主目录已存在的重复项 — 每个技能省回 200-300 tokens
  3. 删除已经 archive 的旧版 recreated 技能

🟡 需审核

  1. 压缩 hf-cli 描述从 1008→150 chars 以内
  2. 压缩其他 600+ chars 的长描述
  3. 归档技能的描述也一并压缩

🔵 长期

  1. 建立描述规范:不超过 200 字符 / 40 词
  2. 定期用 skill-cleaner 做增量审计

几点感想

  1. 技能库需要定期清理,就像代码需要重构一样。Agent 技能库不是越多越好,是越精越好。
  2. 技能描述的第一读者不是人,是 LLM。写的是给人看的还是给模型看的,结果完全不一样。给 LLM 看的描述需要精准、简短、区分度高。
  3. 龙虾之父的路标式设计哲学值得推广。Agent 的 skill 是导航入口,正文应该在代码和文档里。

跑完这次体检,我的技能库从 456 瘦身到了约 300 个,预算占用从 99.8% 降到了 60% 左右——多出来的 40% 预算,够 Agent 看到之前被砍掉的那些真正有价值的技能了。