技能有效性管理器
能力简介
扫描已装技能的使用情况,识别从未使用和长期闲置的技能,生成清理建议清单。用户确认后安全备份并删除,支持有效期管理和误删恢复。
核心能力:
- 🔍 诊断扫描:扫描skills目录,分析使用情况,生成清理建议清单
- 🗑️ 清理执行:备份→删除→验证→记录,支持恢复
- 🏷️ 有效期管理:为技能打标签(长期/3个月/短期),到期提醒
- ♻️ 误删恢复:30天内可恢复,备份自动管理
- 🛡️ 安全机制:自身豁免、强制备份、用户确认后才删除
核心FAQ
Q1:扫描会删除技能吗?
不会。扫描只读取信息和分析使用情况,不做任何删除操作。删除必须用户确认后才执行。
Q2:删除后能恢复吗?
可以。删除前自动备份到.skills_backup/目录,30天内说"恢复XX技能"即可恢复。超过30天备份自动清理,需从SkillHub重新安装。
Q3:使用频率判断准吗?
综合判断:文件修改时间 + 工作区痕迹(daily notes/md文件中是否提到过该技能名)+ 有效期标签。判断结果展示给用户可自行调整。
> ⚠️ 局限性提醒:当前不依赖平台调用日志API(多数平台未开放),只能通过文件痕迹推断。可能出现"实际用过但没留下文件痕迹"被误判为"从未使用"。对不确定的技能建议选"观察"而非直接清理。
Q4:有效期标签必须打吗?
不强制。不打标签的技能默认按3个月处理。到期提醒"还在用吗?",在用续3个月,不用进清理清单。
Q5:系统级安装的技能能删吗?
不能。如AgentMore的lark-*系列是系统级安装的(在.agents/skills/目录),脚本会标注"系统级·不可删",但不影响其他技能的扫描和清理。
Q6:能跳过自身吗?
可以。scan_skills.py扫描时自动跳过skill-health-manager目录,不会把自己列入清理清单。
Q7:备份占空间吗?
备份是技能目录的完整拷贝。如果技能目录大(含示例文件等),备份会占一定空间。30天后自动清理。如需提前清理备份,删除.skills_backup/下对应日期目录即可。
Q8:周期触发多久一次?
上次扫描/清理后≥30天,AI会主动提示"距离上次清理已XX天,要不要做个技能健康检查?"
Q9:其他平台的用户能用吗?
能。SKILL.md的触发词和扫描逻辑是通用的。平台适配部分用条件分支——AgentMore可自动备份删除,其他平台降级为"仅建议"模式,告知用户手动删除。
Q10:这个技能本身会占很多资源吗?
不会。纯Python标准库实现,无外部依赖,完全离线运行。只在被触发时执行,不常驻后台。
触发词清单
| 分类 | 触发词 |
|---|---|
| 主动清理类 | "帮我清理没用的技能" / "清理技能" / "技能太多" / "整理技能" / "哪些技能没用" / "skill cleanup" / "skill cleaner" |
| 诊断类 | "系统变慢了" / "越来越慢" / "老出错" / "变笨了" / "回答质量下降" / "为什么触发不到对的技能" / "怎么总是调错技能" / "系统健康检查" / "技能健康检查" |
| 有效期类 | "这个技能还在用吗" / "技能到期了" / "技能过期了" / "技能有效期" |
| 恢复类 | "恢复技能" / "误删了技能" / "找回技能" / "撤销删除" |
执行流程
| 步骤 | 必须动作 | 禁止动作 | 脚本校验 |
|---|---|---|---|
| 1. 扫描诊断 | 运行scan_skills.py扫描所有技能 | 隐藏任何"从未用过"的技能 | scan自动豁免自身 |
| 2. 生成报告 | 列出所有技能的使用状态和建议 | 隐藏任何"建议清理"项 | - |
| 3. 用户确认 | 列出建议清理清单,等用户确认哪些要删 | 未经确认直接执行删除 | cleanup需--skills参数 |
| 4. 执行清理 | 运行cleanup_skills.py备份→删除→验证 | 跳过备份直接删 | 脚本强制备份 |
| 5. 记录结果 | 告知用户清理结果和备份位置 | 隐藏备份路径 | 自动记录last_cleanup |
| 6. 后续提醒 | 告知用户可恢复(30天内)和下次检查时间 | 不告知恢复方式 | - |
反模式清单(禁止做的事)
| 反模式 | 正确做法 |
|---|---|
| 未经确认直接删除技能 | 必须列出清单等用户确认 |
| 删除前不备份 | 强制备份到.skills_backup/ |
| 删除skill-health-manager自身 | 脚本自动豁免自身 |
| 判断"从未使用"后直接清理 | 对不确定的技能建议选"观察"而非直接清理 |
| 隐藏扫描结果中的任何技能 | 全部列出,让用户自行决定 |
| 删除系统级安装的技能 | 标注"系统级·不可删",告知用户手动处理 |
脚本调用方式
# 对话触发(推荐)
"帮我清理没用的技能"
"系统变慢了,做个技能健康检查"
# 命令行调用
python3 scripts/scan_skills.py --workspace /home/z/my-project
python3 scripts/scan_skills.py --workspace /home/z/my-project --json
python3 scripts/cleanup_skills.py --skills "skill1,skill2" --workspace /home/z/my-project
python3 scripts/cleanup_skills.py --restore "技能名" --workspace /home/z/my-project
python3 scripts/cleanup_skills.py --list-backups --workspace /home/z/my-project
python3 scripts/manage_labels.py --skill 技能名 --validity long --workspace /home/z/my-project
python3 scripts/manage_labels.py --list --workspace /home/z/my-project
平台适配
- AgentMore:完整执行(扫描→备份→删除→恢复)
- Coze/Dify/其他:仅扫描+建议,告知"请在平台设置界面手动卸载"
- 未识别平台:仅扫描+建议,告知局限
详细平台兼容说明见 references/platform_compat.md
错误处理
| 错误码 | 场景 | 处理 |
|---|---|---|
| E001 | workspace路径不存在 | 提示"工作区路径不存在,请确认路径" |
| E002 | skills目录不存在 | 提示"未检测到skills目录,当前平台可能不使用目录方式管理技能" |
| E003 | 技能目录不存在 | 提示"技能XX不存在,请检查技能名" |
| E004 | 备份目录已存在 | 提示"今日已备份过,如需重新备份请先删除备份目录" |
| E005 | 删除失败(权限) | 提示"权限不足,可能需要管理员权限" |
| E006 | 恢复时目标已存在 | 提示"技能已存在,如确认覆盖请先手动删除" |
| E007 | 备份不存在 | 提示"未找到备份,可能已超30天自动清理,需从SkillHub重新安装" |
| E008 | 超时(扫描超60秒) | 提示"扫描超时,可能技能过多或目录过大,建议分批扫描" |
| E009 | meta文件损坏 | 提示"技能XX的.meta.json格式错误,已忽略" |
| E010 | 自身豁免拦截 | 提示"不能删除skill-health-manager自身,已自动排除" |
感谢"小熊肖恩"对本技能包的技术贡献