Skill Audit — 本地 Skill 审计与清理
对本地已安装的 WorkBuddy skill 做全量盘点:名称、主要功能、安装时间、安装来源、最后使用时间、未使用天数、删除建议(彩色状态)、skill 间依赖关系。扫描只读;删除必须经用户明确指令并确认,且一律移入回收站。
流程一:触发即扫描(默认动作)
用户触发本技能后,立即执行扫描,不要先寒暄或反问。
- 打印开始横幅:
🔍 开始本地 Skill 审计扫描...,并告知将依次执行:目录扫描 → 元数据解析 → 使用记录匹配 → 依赖分析 → 生成报告。 - 确定本 skill 所在目录(即加载本技能时显示的 Base directory,记为
<SKILL_DIR>)。 - 使用环境中列出的 managed Python 运行扫描脚本(若无则回退
python):
bash
"<managed-python>" "<SKILL_DIR>\scripts\scan.py" --project-dir "<当前工作区根目录>"
脚本自带实时进度输出([1/5]...[5/5] 及每个 skill 的检查行),将输出原样呈现给用户,让用户看到检查动作。
4. 脚本会输出 Markdown 审计表格。完整转发表格,并在表格后附上:
- 图例与两轨判定规则(见「状态判定规则」)
- 数据口径说明(见「数据源与限制」)
- 一句引导:如需删除,请明确点名 skill 或说"删除所有🔴/🟠"。
5. 脚本同时在 ~/.workbuddy/skills-audit-history/ 保存了 JSON 快照,后续删除流程用最新快照做依赖核查。
流程二:删除(必须严格按序执行)
触发条件:用户明确指令,如"删除 xxx""删掉 a 和 b""删除所有🔴"。扫描表格本身不构成删除授权。
- 列出待删清单:从最新快照(
~/.workbuddy/skills-audit-history/中时间最新的 JSON)取每个待删 skill 的名称、路径、大小、状态、依赖,以表格展示。 - 依赖核查(三种情形之一命中即视为"有关联"):
- 该 skill 的deps非空(它依赖别的 skill);
- 快照中任何其他 skill 的deps包含该 skill 名(它被别的 skill 依赖);
- 该 skill 内含子 skill(nested非空,删除会连带删除子 skill)。 - 确认:
- 无关联:向用户确认一次(明确列出名称与路径)。
- 有关联:第一次确认后,必须再次明确警告——列出受影响的关联 skill 名称及影响方向("X 被 Y 依赖"/"删除 X 将连带删除 N 个子 skill"),要求用户第二次确认(如"确认删除")。两次确认都收到后才执行。 - 硬性保护(无论用户如何指令都拒绝,并说明原因):
-skill-audit自身;
- 内置 skill(路径含builtin-skills或位于应用安装目录);
- 不在扫描结果中的路径。 - 执行删除:每批最多 10 个,使用 PowerShell 工具调用回收站脚本(不要从 bash/Git Bash 转调
powershell.exe,会被安全策略拦截;不要在 PowerShell 工具中直接&调用 .ps1,系统执行策略禁止运行脚本文件,必须加-ExecutionPolicy Bypass):
powershell
powershell -NoProfile -ExecutionPolicy Bypass -File "<SKILL_DIR>\scripts\remove-skills.ps1" -Paths "路径1;路径2"
多个路径用英文分号连接为一个字符串传入。脚本对每个路径输出 OK / REFUSED / MISSING / FAIL。脚本内置路径护栏,只允许删除 .workbuddy\skills\ 下的目录。
6. 输出完整删除列表:表格列出每个 skill 的名称、原路径、释放空间、结果(成功/失败及原因),并提示:已移入回收站,误删可从回收站恢复。
7. 建议用户可再次触发本技能重新扫描验证。
状态判定规则(两轨制)
使用过的 skill(usage-log 有记录,按最后使用日期起算):
| 未使用天数 | 状态 | 含义 |
|---|---|---|
| < 30 天 | 🟢 | 保留 |
| 30 ~ 89 天 | 🟠 | 可以删除 |
| ≥ 90 天 | 🔴 | 建议删除 |
从未使用的 skill(usage-log 无记录,按安装日期起算,阈值更严格):
| 未使用天数 | 状态 | 含义 |
|---|---|---|
| < 14 天 | 🟢 | 保留(新装观察期) |
| ≥ 14 天 | 🔴 | 建议删除(状态显示为"建议删除·未使用") |
表格中的「使用次数」列取自 usage-log 的 recentDates 长度,0 即从未使用——它是区分某行适用哪条判定轨道的直观指示器。
数据源与限制(回答用户疑问时如实说明)
- 最后使用时间:来自官方
~/.workbuddy/usage-log.json(该日志约自 2026-07-03 起记录);无记录的 skill 显示"从未使用"。 - 安装时间:取目录的文件系统创建时间;skill 若被整体重装/迁移,该时间会被刷新。
- 安装来源:启发式推断(
__skillhub后缀或_skillhub_meta.json→ SkillHub 市场;_knot_meta.json→ Knot 市场;frontmatter 含agent_created: true→ 本机自建;其余 → 手动/第三方安装),可能有偏差。 - 依赖列:启发式文本匹配(扫描 skill 目录内文本是否提及其他已安装 skill 的名字),可能误报或漏报,标注为"疑似"。
- 扫描范围:用户级
~/.workbuddy/skills/+ 当前工作区.workbuddy/skills/;内置 skill 不在范围内。