引子:为什么突然想体检
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 词以内是最佳实践。太长就会被截断,太短又不够区分。穴居人式说话:能省就省。
可操作的优化步骤
体检报告出来之后,我按优先级分了三档:
🟢 立即执行(无风险)
- 删 wondelai-skills 目录 — 40+ 个 100% 重复文件,一键清掉,立省预算
- 清理 .archive 中主目录已存在的重复项 — 每个技能省回 200-300 tokens
- 删除已经 archive 的旧版 recreated 技能
🟡 需审核
- 压缩
hf-cli描述从 1008→150 chars 以内 - 压缩其他 600+ chars 的长描述
- 归档技能的描述也一并压缩
🔵 长期
- 建立描述规范:不超过 200 字符 / 40 词
- 定期用 skill-cleaner 做增量审计
几点感想
- 技能库需要定期清理,就像代码需要重构一样。Agent 技能库不是越多越好,是越精越好。
- 技能描述的第一读者不是人,是 LLM。写的是给人看的还是给模型看的,结果完全不一样。给 LLM 看的描述需要精准、简短、区分度高。
- 龙虾之父的路标式设计哲学值得推广。Agent 的 skill 是导航入口,正文应该在代码和文档里。
跑完这次体检,我的技能库从 456 瘦身到了约 300 个,预算占用从 99.8% 降到了 60% 左右——多出来的 40% 预算,够 Agent 看到之前被砍掉的那些真正有价值的技能了。