skill-master — skill 全生命周期合集(路由器)
一个 skill 从装进来、看懂它、写出来到养得好,五件事各由一个子
skill 负责,全部位于本仓库 skills/ 下:
| 子 skill | 职责 |
|---|---|
| sm-manager | 盘点本机各 Agent 已装的 skill(只读) |
| sm-security | 第三方 skill 安装前的安全扫描与复核 |
| sm-analyzer | 开源 skill 的结构、工作流分析与 HTML 报告 |
| sm-writer | 从零访谈需求、起草并落盘新 skill |
| sm-optimizer | 已有 skill 的四维诊断与迭代优化 |
本文件是总协议 + 路由器(参照 cheat-on-content 模式):收到请求
只做一件事——按路由表分发到对应 skills/sm-*/SKILL.md,不重复子
skill 的工作流细节;转介规则见下文。
总协议(三原则,shared-references/skill-anatomy.md §6.2)
所有子 skill 与本路由层共同遵守:
- 脚本做确定性事:枚举、校验、渲染、统计——结果必须可复现的
操作交给
scripts/,不现场重写 - LLM 做判断事:解读数据、权衡方案、撰写分析、降误报——需要 语义理解的操作留给 Agent
- 🔴 危险操作必须确认:写文件、删文件、改配置之前,🛑 先向用户展示 将要做什么,确认后再动手;宁可多问,不可先斩后奏
路由表(触发词 → 子 skill)
触发词摘自各子 skill frontmatter 的 Use when 句,逐字一致:
| 用户说 | 路由到 | 前置条件 | 产出 |
|---|---|---|---|
| "盘点skill" / "我装了哪些skill" / "skill清单" / "skill健康检查" / "skill重复" | sm-manager | 无(默认读仓库内 shared-references/agents.yaml 注册表) | skill 清单 + 跨 Agent 重复对比 + 健康看板(只读零修改) |
| "检查这个skill安全吗" / "扫描skill" / "有没有后门" / "skill安全" / "skill恶意" | sm-security | 目标 skill 的本地路径;远程仓库 / URL 需先下载到本地 | 0-100 扫描报告 + SAFE / CAUTION / DO NOT INSTALL 安装结论 |
| "分析这个skill" / "拆解这个开源skill" / "它怎么工作的" / "skill原理" / "这个skill写得怎么样" | sm-analyzer | 被分析 skill 已在本地目录(用户已 clone / 下载),需给路径 | HTML 分析报告(功能 / 架构 / 工作流 / 反模式) |
| "帮我写个skill" / "新做一个skill" / "写个技能" / "做个skill" / "创建skill" | sm-writer | 无(从零新建;目标已存在则归 sm-optimizer) | 新 skill 目录(访谈 → 草稿 → 确认后落盘) |
| "优化这个skill" / "skill触发不准" / "改skill" / "skill不触发" / "迭代skill" | sm-optimizer | 目标 skill 已存在(不存在的归 sm-writer 新写) | 四维诊断 + 优化计划(确认后实施 + before/after 验证) |
防抢触发负例
以下请求含相似关键词但操作对象不是 skill,不路由到 skill-master, 按普通任务处理:
| 用户说 | 不路由,因为 |
|---|---|
| "优化这段 Python 代码" | 代码优化 ≠ skill 优化,对象是代码 |
| "写个文档" / "写篇周报" | 写文档 ≠ 写 skill,对象是文档 |
| "分析这个报错" | 报错分析 ≠ skill 分析,对象是报错 |
| "扫描端口" / "扫描这个网站" | 端口 / 站点扫描 ≠ skill 安全扫描,对象不是 skill 目录 |
| "盘点服务器" / "盘点库存" | 资产盘点 ≠ skill 盘点,对象不是 skill 目录 |
判别标准一句话:操作对象是否是一个 skill 目录(含 SKILL.md 的 技能目录)。是 → 按路由表分发;不是 → 本合集不接。
子 skill 间转介规则
转介由路由层执行,子 skill 不越界代办:
- sm-writer → sm-optimizer:写完落盘、验证触发后流程即结束, 不自动进优化;用户明确要求时才路由到 sm-optimizer
- sm-optimizer ↔ sm-security:优化诊断中发现疑似安全问题,只 记录类型与位置并转介 sm-security,不展开修复、不回显敏感值; 安全扫描中发现 skill 触发 / 质量问题,建议走 sm-optimizer
- sm-analyzer ↔ sm-security:analyzer 呈现扫描总分与规则命中 即止,逐条误报复核、安装结论等深度安全审查转介 sm-security; 需要完整拆解 skill 结构与质量时,sm-security 建议走 sm-analyzer
- sm-manager → sm-optimizer:盘点发现健康问题(缺 SKILL.md、 frontmatter 损坏、description 超长、name 不一致)只给修复建议、 不代改;用户要动手修已有 skill 时路由到 sm-optimizer(manager 只读)
失败分支(fallback)
| 触发条件 | 一线处理 | 仍失败兜底 |
|---|---|---|
| 目标 skill 只给远程 URL / 路径不存在 | 要求先 clone / 下载到本地再给路径(sm-security / sm-analyzer 前置条件) | 拿不到本地副本 → 拒绝对未见内容下安全结论;analyzer 同理不分析不存在的目录 |
| agents.yaml 注册表与实际目录不符(新装 Agent / 目录挪动) | sm-manager 只读盘点,如实报告差异清单 | 按只读硬约束指引用户自行编辑 agents.yaml(给出待改行),不代改 |
scripts/ 确定性脚本跑不起来(.venv 缺失 / uv 不可用) |
按 pyproject.toml 重建环境(uv sync) |
降级为 LLM 手工执行同一套检查,输出标注"未经脚本验证" |
| 目标目录没有 SKILL.md(判别标准不满足) | 询问用户是否仍按 skill 处理 | 用户确认不是 skill 目录 → 不接(防抢触发负例同款判别),按普通任务转出 |
| 路由目标子 skill 的 SKILL.md 缺失 / 损坏 | 报告缺失项与位置 | 给重装 / 修复建议;路由层不代办子 skill 工作 |
跨 Agent 兼容
本路由不依赖 slash-command:没有命令机制的 Agent(如 Codex)按
自然语言触发同一套路由表,子 skill 一律以 skills/sm-*/SKILL.md
的仓库内相对路径定位。