> Skill瘦身·提速省token — 装了一堆技能后,AI 越来越慢、越来越笨、账单还悄悄变贵?先扫一遍再说。
最快上手(30 秒)
方式一:跟 AI 说一句话(推荐,不用碰命令行)
下面这些说法都能唤起它,意思对就行,不用记原话:
帮我给技能瘦个身
技能装太多了,AI 现在好慢 / 越来越笨
帮我清理一下装的一堆技能
AI 最近老是答非所问,是不是技能太多
省点 token,看看哪些技能最占地方
给我的技能做个体检
发布前给技能做个可靠性自检(原「Skill提分」已并入本技能)
AI 会替你跑完并把结论讲给你听。
方式二:自己敲一条命令
python scripts/skill_doctor.py audit
--root 可省略,默认扫 ~/.workbuddy/skills。跑完先看报告第零节的一句话结论,再看第七节「推荐行动方案」——要执行的命令都写好了。
适用场景
- 所有人(主流):技能装多了,AI 变慢 / 答非所问 / 老调错技能。先扫一遍,看清谁重复、谁臃肿、各吃多少 token,再决定暂存谁;删错一键还原。
- 技能作者(进阶):发布前跑内置可靠性检查,拿「稳定运行 / 一致结果 / 边界输入 / 异常反馈」四项分值贴到 SkillHub 详情页当质量保证。原独立技能「Skill提分」已并入本技能:老用户直接跑
scripts/reliability_check.py all即可,能力与原来完全一致,无需再找旧技能。
核心原理
对「已装技能目录」做静态体检,全部可复现,不靠感觉:
| 探针 | 检查什么 | 怎么算 |
|---|---|---|
| 盘点 | 技能数、合计 token、目录体积 | UTF-8 字节 ÷ 4 |
| 肥胖 | 说明文件过大 / 附属文件黑洞 | 超阈值即标记,给数字 |
| 重复 | 完全重复 / 高度近似 | SHA256 + 正文 5-gram Jaccard |
| 重叠 | 功能可能重叠(弱信号) | tags / 描述关键词相似度 |
| 闲置 | 低活跃线索 | 有日志按真实时间;无日志只报修改时间并注明「无数据」 |
| 处置 | 汇成可执行清单 | 按可省 token 排序 |
关键原则(不做表面工作):
- 只读为默认:audit 不写任何东西;park 必须显式 --yes 才动文件。
- 无数据不臆断:拿不到调用日志就只报修改时间线索,绝不编「90 天没用过」。
- 暂存不删除:同盘剪切到回收区 + 还原清单,不是 rm。
- 结论带证据:每个判断附哈希 / 字节 / token 数,可核对。
执行步骤
1. 体检(只读) python scripts/skill_doctor.py audit --report 体检报告.md
先看报告第零节的一句话结论与健康分,再看下面的证据。
2. 暂存 python scripts/skill_doctor.py park --index 3,7 --yes(不加 --yes 只预览)
3. 还原 python scripts/skill_doctor.py restore --yes
4.(作者进阶) python scripts/reliability_check.py all --skill "<目标skill绝对路径>" --report 质量报告.md
参数速查
| 命令 | 参数 | 作用 |
|---|---|---|
audit |
--root <目录>(默认 ~/.workbuddy/skills)--report <md> --usage <文件> --budget <token> --include-park --sample-ext <后缀> |
体检并出报告;--include-park 把 _skill_doctor_park 目录下的技能也计入;--sample-ext 扫改名样本(如 .tpl,用于回归夹具) |
park |
--root --index <序号,逗号> --sample-ext <后缀> --yes |
暂存到回收区(不加 --yes 只预览) |
restore |
--root --manifest <json> --yes |
按清单还原(不加 --yes 只预览) |
常见问题(FAQ)
Q1:我不会用命令行,能用吗?
能,而且最推荐。这个技能的实际操作者是 AI——你说一句「帮我给技能瘦个身」,它自己跑完、讲结论、问你要不要暂存。命令行只是给想自己掌控的人留的入口。
Q2:--root 填什么?
多数情况不用填,默认 ~/.workbuddy/skills。技能装在别处(D 盘等)才显式指定。
Q3:会不会删掉我的技能?
不会。park 是同盘剪切到回收区,不是删除;每次自动生成还原清单,restore --yes 原样搬回。
Q4:暂存的东西去哪了?
在技能根目录的 _skill_doctor_park/ 里,结构完整保留,restore --yes 可全部还原。
Q5:「省 token」是真的吗?能省多少?
token 数实打实(字节 ÷ 4),可自己核对。我们的实测:16 个技能 55,230 token → 7 个 20,937 token,窗口占用 27.6%→10.5%。但具体省多少取决于你装了什么——只报你的真实数字,不给虚假承诺。
⚠️ 平台前提:上面这组数字只在「宿主仅扫描顶层目录」的实现上成立。在 WorkBuddy 这类递归扫描子目录的宿主上,park 并不省 token——暂存后技能照样被加载(实测:park 进 _skill_doctor_park 的 9 个技能 6 天后仍在宿主可用列表里)。详见 Q15 与 references/park_effectiveness.md。
Q6:用完没感觉变快,「提速」是不是夸大?
「省 token」有实测证据;「提速」是我们没有 A/B 证据的部分,所以描述里已降级为「瘦身后的预期收益」,不强加承诺。技能越多越臃肿,收益才越明显。
Q7:它说两个技能重复,但我知道是两回事?
三档请区别对待:完全重复(哈希相同,可放心清)、高度近似(正文 75%+ 相似,建议合并)、功能重叠(弱信号,仅提示人工确认,不会自动进处置清单)。只有前两档进第七节。
Q8:报告里「xxx(yyy)」两个名字?
xxx 是目录名(park 序号跟它对应),yyy 是显示名。统一格式是为了避免同一技能多个名字、按序号操作时对不上号。
Q9:健康分怎么算的?可信吗?
扣分全部来自本报告已列出的实证:完全重复 −12/组、近似 −8/组、肥胖 −6/项、重叠 −3/对、闲置 −2/项、超预算最多 −20。第零节逐条列出扣分明细,每项都能回溯到下面某一节,不是黑箱打分。
Q10:扫出「0 问题」,是不是没扫到?
造个对照:复制任一技能目录改个名再跑。能报出「完全一致」说明探针是好的、库确实干净;仍为 0 请检查 --root 指向。
Q11:装在 D 盘 / 网络盘能扫吗?
能,--root "D:\你的路径"。网络盘需先挂载;目录不存在报 E1101,无含 SKILL.md 的技能报 E1102。
Q12:我以前用「Skill提分」,现在它去哪了?
已并入本技能,功能一个没少:发布前的可靠性四维自检(稳定运行/一致结果/边界输入/异常反馈)就是原来提分做的事,现在跑 python scripts/reliability_check.py all --skill "<技能路径>" 即可,报告还能直接贴 SkillHub 详情页。以后不用同时装两个技能。
Q13:报告里技能数比我实际装的少?
默认会跳过 _skill_doctor_park 目录——它和本工具的回收区同名。如果你把技能手工放在这个目录下,默认不计入;但报告顶部会明确提示「未计入:N 个技能、约 X token」,绝不静默漏扫。想让它们计入,加 --include-park 重跑即可。
Q14:这个「瘦身工具」自己会不会把我的技能库弄脏?
v1.3.5 及之前会,而且是实打实地会:它自带的 17 个回归测试夹具每个都带 SKILL.md,被宿主当成真技能塞进每一轮上下文——正好制造了它声称要解决的「技能太多 AI 变慢」。v1.4.0 已修复:夹具全部改名为 SKILL.md.txt(仍在包里、能跑回归,但宿主扫不到),并新增 --sample-ext 让回归照常执行。自检数字:清理后活技能 36 → 19,夹具对账结果与修复前逐项一致。完整复盘见 references/self_pollution_postmortem.md。
Q15:park(暂存)之后,AI 为什么没变快?
因为在 WorkBuddy 这类递归扫描子目录的宿主上,暂存并不减少上下文占用。_skill_doctor_park 只是本工具约定的目录名,宿主不认识它、也不会为它开例外——技能照样被加载。实测:2026-09-11 park 的 9 个技能,6 天后仍在宿主的可用技能列表里(如 _skill_doctor_park\zhanger-software-migrate\SKILL.md)。结果就是「报告说你瘦了,实际一点没瘦」,还平白引入漏扫。
- 真想省 token,只有让宿主扫不到:① 把技能移出 skills 目录;② 让标识文件不叫 SKILL.md(如 SKILL.md.txt)。
- ❌ 靠 park、下划线前缀、塞进 tests / dev 子目录——均已实测无效。
- 所以 park 的正确定位是「先隔离观察、确认没影响再决定去留」的中间态,不是瘦身终点。
完整实测见 references/park_effectiveness.md。
配套脚本
scripts/skill_doctor.py:核心——audit/park/restore(纯标准库,零依赖)。scripts/reliability_check.py:给作者的 R 可靠性四维探针。references/error_codes.md:错误码字典(E0101–E0501、E1101–E1107,每个码在脚本中真实可达)。references/r_reliability_playbook.md:R 维度工程手册(作者进阶)。references/design_notes.md:设计取舍、踩坑记录与发版复盘(想深挖看这里)。tests/:replay.py+golden_cases.json+boundary/cases.json——本工具自身也先过自己的检查。
其中回归夹具(tests/fixture、dev/fixture_*)一律以SKILL.md.txt存放,不叫SKILL.md,因此不会被宿主当活技能加载;跑回归时带--sample-ext .txt。
反模式(不要这样做)
- ❌ 凭技能名字判断重复——名字像不一定重复,名字不同也可能是一个东西。
- ❌ 直接
rm -rf技能目录——回收区 + 还原清单就为防这个。 - ❌ 一次把所有可疑项全暂存——先清「完全重复」这类零风险项,跑一遍确认没影响再继续。
- ❌ 把「功能重叠」当结论直接删——它只是弱信号,必须人工确认。
- ❌ 让测试夹具以
SKILL.md实体常驻技能目录——它会被宿主当成活技能加载,等于自己制造自己要治的病。本工具 v1.3.5 之前就栽在这里(往用户库里塞了 17 个假技能),详见references/self_pollution_postmortem.md。 - ❌ 指望靠目录名躲过宿主扫描——
_xxx/tests/dev均已实测证伪,下划线前缀不免疫(本机_skill_doctor_park下的 9 个技能照样被枚举)。可靠做法只有一个:让标识文件不叫SKILL.md。