skill-diet:用评测给 Agent Skill 减重(更瘦但不更差)

Agent 每次用 Skill,都会把整份 SKILL.md 读进上下文。Skill 一胖,每次任务都多付一截 token,还容易夹进过期命令。开源项目 skill-diet(GitHub:nicobailon/skill-diet)把「给 Skill 减重」做成一套可评测的流程:按层级安置事实、改完跑对比评测,再给后续更新定防反弹规则。本文按仓库 README 整理成概论,安装命令可照抄;作者宣称真实 Skill 上可少 70%–80% token 且评测不掉——属作者自报,本站未实测。
说明:事实与命令来自 nicobailon/skill-diet 仓库 README(截至查阅日)。本文未在本机跑 observe.mjs / eval.mjs,也未复现作者给出的 70%–80% token 降幅;凡涉及效果数字均标「作者宣称 / 未实测」。
Skill 为什么越写越胖
README 里列了几类常见赘肉:只有部分任务才用到的细节、模型本来就会的常识、写给人看的故事、本可用一条规则概括的清单。教 CLI / API / SDK / MCP 的 Skill 还会把工具手册整段抄进来——工具一变,副本就过期。你让 Agent「更新一下 Skill」,它往往只加不减,体积只会往上走。
skill-diet 干两件事。一是把已经臃肿的 Skill 送上「减肥」流程,修掉和真实工具对不上的地方,并且只有评测不更差才保留瘦版。二是给以后每一次改动定规矩,避免马上反弹。
事实放在哪一层:渐进披露
核心原则:每条事实放在「Agent 用得上之前刚好能读到」的最低一层。
| 层级 | 放什么 | 何时被读 |
|---|---|---|
| Skill 的 description | 每个场景一条触发语 | 每个会话都会扫到 |
SKILL.md | 所有任务都需要的内容 | Skill 被启用时 |
| reference 文件 | 只有部分任务才需要的细节 | 碰到那种任务再打开 |
| 工具自己的 help | flags、合法取值、示例 | Agent 选定那条命令时 |
| 工具的返回、报错、检查器 | 正确名字、修复办法、下一步 | 调用出错或猜错时 |
某个 Skill 几乎只靠人主动唤起时,可以标成 user-only,description 就不必每个会话都占上下文。
瘦下来不算完:旧版、新版、无 Skill 三组跑同一批任务,新版至少不更差才留下。
一次 diet 怎么走
- 量一下 Skill 体积,以及典型任务实际会加载多少。
- 若 Skill 是教某个工具的,再做「工具类」额外步骤(见下节)。
- 把每块内容放到对应层级;纯人手动触发的标 user-only。
- 砍掉模型已知、只给人看的部分,其余改写得更紧。
- 用同一批任务分别跑旧 Skill、新 Skill、无 Skill;新版至少不更差才保留。README 称评测可无人值守:任务在动手砍之前就写好;有争议的答案由全新会话裁定,且看不到出自哪一版;新版差到超出随机波动时,scorer 直接判 diet 失败。
命令写法优先用「usage 行」(Agent 实际会敲的样子)。README 给同一批真实 CLI 命令的相对 token 对比(相对 usage 行):markdown 表约 1.5×,TypeScript 类型约 1.6×,JSON Schema 约 2.8×,OpenAPI 约 4.7×。能用 usage 行就别上 Schema。
教工具的 Skill 还要多做几步
README 要求 diet 额外完成:用跑通或指向源码行,证明 Skill 与工具之间的每处不一致;从会话日志里找出 Agent 最常调用的命令,只把那些写全;看 Agent 实际打开 Skill 的频率,很少打开却又必需的规则,尽量挪进工具的返回和报错;检查工具 help / 错误信息是否足以替代 Skill 正文,不够就列修补清单;若工具是你自己的,把 schema 裁到 Agent 真正用到的字段(schema 会随每次请求发送);并留下提交后的检查,Skill 与工具再对不上时会警告。
仓库自带脚本:scripts/observe.mjs 包一层 CLI,记录评测时 Agent 的每次调用;scripts/eval.mjs 校验你的 agent adapter,再跑前后对比并打分,顺带检查 Skill 链接、打印体积。公平评测依赖「每轮只看到自己那份 Skill、计量方式一致」——scoring 写成代码统一跑;适配你所用 Agent 的小脚本由 Agent 自己根据 CLI help 写进评测目录。README 称校准会先跑三轮短测(只能看到自己的副本、无 Skill 时承认没有、能跑 shell),不过关就停评测。日志体积大时,Agent 只读脚本打印的摘要表,不把整份日志塞进上下文(README 举例:约 2 MB 日志 → 约 600 字节摘要表)。以上脚本流程本站未实测。
装上之后怎么防反弹
Agent 往 Skill 里加内容前,按顺序停在第一条能处理改动的闸门:
- 能改工具(更清楚的报错或检查)就改工具,别往 Skill 塞。
- 模型不提醒也会做的事,不加。
- 已有一行能覆盖,就改那一行,别再加一行。
- 新规则放在「刚好能及时读到」的最低层。
- 写规则本身,不写背后故事;故事放进 commit message。
代码改了 Skill 里提到的名字或行为,Skill 要在同一次变更里改掉。每次提交 Skill 应记录改前改后体积;相对上次 diet 大约涨了 10%,就该再开一轮。
怎么装
Pi:
pi install npm:skill-diet
/plugin install skill-diet --marketplace nicobailon/skill-diet
Codex、Cursor 等其它 Agent:
npx skills add nicobailon/skill-diet -g
npx skills 会在 ~/.agents/skills 留一份,再链到你选中的各 Agent;同一 Agent 不要两条路径都装,否则会加载两份。也可手工克隆到 ~/.agents/skills/skill-diet,Claude Code 再链到 ~/.claude/skills/skill-diet。更新分别用 pi update --extensions、claude plugin update skill-diet@skill-diet、npx skills update。
口头可让 Agent 执行的例子:put the deploy skill on a diet、is this skill still accurate for the current CLI?、add this lesson to the deploy skill。
常见坑
- 砍完不评测就上线。前后对比要跑真实 Agent 会话,费时间和 token;README 建议在发布瘦版前跑,而不是每次小改都跑。
- 评测任务没盖住你的真实用法。检查覆盖的是评测任务和旧 Skill 写过的内容;想覆盖自己的场景,要么刚用完就 diet,要么提问时点名那个场景。
- adapter 没校准。漏进磁盘上另一份 Skill、token 统计不准,数字看起来「还行」其实无效;校准失败应直接停。
- 命令用 Schema / OpenAPI 大段粘贴。相对 usage 行可贵到数倍,还更容易过期。
完成标准
- 说得出 description / SKILL.md / reference / 工具 help / 工具报错各自该放什么。
- 能按「量 → 分层 → 砍 → 三组评测 → 只留不更差」走完一轮(效果数字以你自己跑分为准)。
- 后续更新走五条闸门;体积相对上次 diet 涨约 10% 时安排下一轮。
- 清楚作者宣称的 70%–80% token 降幅未经本站复现,落地前要自己评测。
最后
Skill 不必堆厚。触发语和每任务必读的写进 SKILL.md,其余下沉到 reference 和工具自己的 help;改完用旧版/新版/无 Skill 比一把,再谈「省了多少 token」。还在写第一份 Skill 的话,可先看站内 写你的第一份 Agent Skill,再回来给它做 diet。