feat(skill): 技能治理 v0.2 —— 分桶/调用模式/校验/安全/清单/安装矩阵
- 新增 SCOPE.md 收录门槛 + .out-of-scope/ 拒绝档案 - 生命周期分桶 promoted/beta/deprecated,marketplace 只发布 promoted - 调用模式 model-invoked/user-invoked(user-invoked 不占模型目录) - 新增脚本 validate-skills.py / generate-catalog.py / scan-skill.sh(+allowlist) - 新增 beta 技能 skill-creator、ai-proj-helper-entry、verification-before-completion(各带 evals) - install-skills.sh: --agent dsh / --link / --audit / --include-beta / --no-validate - 融合:dev-review 接收评审意见、req-design 依赖边、agent-swarm 并行编排、dev-test TDD - catalog.json 61 个技能(58 promoted / 3 beta);validate 0 错误;scan 0 高危;现有测试通过
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "ai-proj-helper-entry-plugin",
|
||||
"description": "技能库路由:列出技能、什么任务用哪个、交付终点口径。由人主动调用,不占模型目录 token。",
|
||||
"version": "0.1.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "ai-proj-helper-entry",
|
||||
"install_type": "skill",
|
||||
"dir_category": "core",
|
||||
"status": "beta",
|
||||
"invocation": "user-invoked"
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: ai-proj-helper-entry
|
||||
description: ai-proj-helper 技能库路由:告诉你有哪些技能、什么任务用哪个、以及「REQ released + PDV 通过才算交付」的强制口径。人在开始需求/开发/评审/发布任务前主动调用。
|
||||
metadata:
|
||||
invocation: user-invoked
|
||||
owner: qiudl
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# ai-proj-helper 入口(路由器)
|
||||
|
||||
## 0. 这个技能是什么
|
||||
|
||||
一个**纯人触发**的路由器:人问「该用哪个技能 / 从哪开始」,就读这里。它不进模型目录,所以不占每次会话的目录 token;代价是必须由人主动喊。
|
||||
|
||||
> 路由规则:**任何技能增、删、改名、改行为后,必须回改本文件**。一个没提到新技能、或还指向已删技能的路由器,就是假的路由器(见 `skill-creator` §9)。
|
||||
|
||||
## 1. 交付终点(强制,优先于路由)
|
||||
|
||||
开发任务的交付终点是:需求按 REQ 流程推进到具备发布条件并完成上线(`delivery_stage=released` + PDV 验收通过)。
|
||||
|
||||
- 写代码、过单测、提 PR、过 internal gate、合并代码,都是过程节点,**不得当作交付终点**;
|
||||
- 任务 `completed` ≠ 需求完成;REQ 未 `released` 不得报完成;
|
||||
- 汇报格式:**当前 REQ 阶段 + 下一个要做的节点**;
|
||||
- 只有必须由人拍板/授权的阻塞(生产发布授权、密钥权限、需求变更、无法自动修复的失败)才停下来问,并写清卡点与下一步。
|
||||
|
||||
## 2. 主流程:需求 → 上线
|
||||
|
||||
```
|
||||
讨论(req) → PRD(req-prd) → 评审(req-review) → 设计(req-design)
|
||||
→ 开发(dev-coding / karpathy-guidelines) → 测试(dev-test + req-test-gate)
|
||||
→ 代码评审(dev-review) → 发布(publish / slark-cicd / slark-dsh-cicd) → PDV 验收 → released
|
||||
```
|
||||
|
||||
| 阶段 | 技能 |
|
||||
| --- | --- |
|
||||
| 讨论/调研 | `req`、`req-research`、`req-compare` |
|
||||
| PRD | `req-prd`、`req-prototype` |
|
||||
| 评审 | `req-review` |
|
||||
| 设计/拆任务 | `req-design`、`dev-arch`、`db-migration` |
|
||||
| 编码 | `dev-coding`、`karpathy-guidelines` |
|
||||
| 测试 | `dev-test`、`req-test-gate` |
|
||||
| 代码评审 | `dev-review`、`review-checklist` |
|
||||
| 发布 | `publish`、`slark-cicd`、`slark-dsh-cicd`、`deploy-rollback` |
|
||||
| 部署后 | `req-audit`、`req-lookback` |
|
||||
| 复盘 | `req-retro` |
|
||||
| 项目管理 | `project-management`、`pm-risk`、`pm-ask` |
|
||||
| 建/改技能 | `skill-creator` |
|
||||
| 汇报完成前 | `verification-before-completion` |
|
||||
|
||||
## 3. 按任务类型的旁路
|
||||
|
||||
- 「这个 bug 很难查」→ `diagnosing-bugs`(先建红循环再推理)
|
||||
- 「帮我审这个 PR」→ `dev-review`
|
||||
- 「发版」→ 对应 `*-cicd` runbook,不是通用 `dev-deploy`
|
||||
- 「不确定该用哪个」→ 读到这里就够了,别猜
|
||||
|
||||
## 4. 红线
|
||||
|
||||
- 不得自审批(提交人不能批自己的 REQ)
|
||||
- 不得绕过门禁(测试 Gate、发布 Gate、归档 Gate)
|
||||
- 不得把「某步骤完成」当结束
|
||||
- 不得无证据声称完成(见 `verification-before-completion`)
|
||||
- 不得把凭据/内网地址/绝对路径写进技能或文档
|
||||
|
||||
## 5. 技能从哪来
|
||||
|
||||
- 用户级:`~/.agents/skills/`(Codex)、`$DSH_HOME/skills/`(DSH)
|
||||
- 项目级:项目根 `.agents/skills/`
|
||||
- **真相源**:`ai-proj-helper` 仓库;本机目录是安装产物,不要直接改
|
||||
- 个人技能:`skills-personal/`(不入库、不发布)
|
||||
|
||||
## 6. 维护检查
|
||||
|
||||
- `./install-skills.sh --audit` 漂移数 > 0 → 先同步再干活
|
||||
- 技能有增删改 → 本文件 + `catalog.json` 必须同 PR 回改
|
||||
- 每季度人工过一遍本路由,删掉不再用的技能引用
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"skill_name": "ai-proj-helper-entry",
|
||||
"skill_version": "0.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "我要给 qiu-slark 做个新功能,从哪开始",
|
||||
"expected_output": "给出 req → req-prd → req-review → req-design 的路径,并声明交付终点是 released + PDV,不是写完代码"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "我已经把单测跑过了,这个需求可以算完成了吗",
|
||||
"expected_output": "否定:单测只是过程节点,REQ 未 released 不算完成;给出当前阶段与下一节点"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "你说的那个技能我机器上没装,怎么办",
|
||||
"expected_output": "说明技能真相源在 ai-proj-helper 仓库、本机目录是安装产物;给出 install-skills.sh 安装/审计命令"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "skill-creator-plugin",
|
||||
"description": "团队技能创建与维护的标准流程:收录门槛、分桶生命周期、调用模式、evals、四段式文档、路由回改。",
|
||||
"version": "0.1.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "skill-creator",
|
||||
"install_type": "skill",
|
||||
"dir_category": "core",
|
||||
"status": "beta",
|
||||
"invocation": "user-invoked"
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
---
|
||||
name: skill-creator
|
||||
description: 团队技能的标准流程:收录门槛、分桶生命周期、调用模式、SKILL.md 规范、evals 全量、四段式文档、路由回改。当要新建技能、大改现有技能、或评审一个技能是否合格时使用。
|
||||
metadata:
|
||||
invocation: user-invoked
|
||||
owner: qiudl
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# 技能创建(团队标准流程)
|
||||
|
||||
## 0. 一句话
|
||||
|
||||
先有真实失败,再写技能;没有 evals 的技能不算完成;**技能目录是预算,不是收藏夹**。
|
||||
|
||||
## 1. 何时用
|
||||
|
||||
- 新建技能
|
||||
- 大改现有技能(改 description、改核心流程、改门禁)
|
||||
- 评审别人提上来的技能
|
||||
- 判断某个想法「该不该做成技能」
|
||||
|
||||
何时不用:只改错别字/格式 → 直接改;一次性个人偏好 → 放个人技能,不进团队。
|
||||
|
||||
## 2. 收录门槛(先过这一关,再谈怎么写)
|
||||
|
||||
新技能**默认拒绝**,只有同时满足两条才立项:
|
||||
|
||||
1. **真实失败**:能说出在哪个真实任务/会话里出了问题——跑了什么、期望什么、实际什么。假想改进(「这样会更好」)不算。
|
||||
2. **组合不出来**:用现有技能组合做不到;能组合的,就改现有技能,不新增。
|
||||
|
||||
被拒的想法记进仓库 `.out-of-scope/<概念>.md`,写清理由,避免下次重复讨论。
|
||||
|
||||
## 3. 分桶与生命周期
|
||||
|
||||
| 桶 | 含义 | 是否安装 | 是否进 README / plugin.json |
|
||||
| --- | --- | --- | --- |
|
||||
| `promoted` | 已验证、日常在用 | 默认安装 | 必须出现 |
|
||||
| `beta` | 公开试跑,收反馈 | 需 `--include-beta` | 不进默认清单 |
|
||||
| `deprecated` | 不再用 | 不安装 | 留文档,标弃用 |
|
||||
|
||||
- 新技能一律先进 `beta`,跑够真实使用 + evals 通过才 `promoted`。
|
||||
- 只有 `promoted` 能进模型目录;beta 不占目录预算。
|
||||
|
||||
## 4. 调用模式(省目录 token 的关键)
|
||||
|
||||
每个技能二选一,写进 frontmatter:
|
||||
|
||||
- **`model-invoked`**(默认):进模型目录,agent 自己判断何时用。
|
||||
- **`user-invoked`**:只由人下命令触发,**不进模型目录**;必须同时写 `disable-model-invocation: true` 和 `metadata.invocation: user-invoked`。
|
||||
|
||||
判定口径:这件事是不是「人下命令才开始」?是 → user-invoked。典型:publish、retro、triage、发布 runbook、建技能。
|
||||
|
||||
## 5. SKILL.md 硬约束(Agent Skills 规范)
|
||||
|
||||
- 目录:`SKILL.md` + 可选 `scripts/`、`references/`、`assets/`
|
||||
- frontmatter 必填:`name`(小写字母/数字/连字符,≤64)、`description`(≤1024,写清「做什么 + 何时用」)
|
||||
- 可选:`license`、`compatibility`、`metadata`、`allowed-tools`
|
||||
- **非标准字段**一律进 `metadata`
|
||||
- 正文 ≤20KB(约 5000 token),细节拆 `references/`
|
||||
- 只写 agent 不知道的东西:项目约定、边界、坑;不写通用常识
|
||||
|
||||
## 6. 正文结构模板
|
||||
|
||||
```
|
||||
# 名称
|
||||
## 0. 一句话
|
||||
## 1. 何时用 / 何时不用
|
||||
## 2. 步骤(可执行、有顺序)
|
||||
## 3. 硬约束与红线
|
||||
## 4. 常见坑(gotchas)
|
||||
## 5. 验证清单
|
||||
## 6. 参考(references/ 链接)
|
||||
```
|
||||
|
||||
## 7. evals(强制、全量)
|
||||
|
||||
- 路径:`evals/evals.json`;至少 3 条:正常路径 / 边界输入 / 失败恢复
|
||||
- 跑「有技能 / 无技能」对比,结果存 `iteration-<N>/`,按 rubric 打分,PR 附结果
|
||||
|
||||
## 8. 四段式文档(每个 promoted 技能一篇)
|
||||
|
||||
`docs/skills/<name>.md`,四节固定顺序:
|
||||
|
||||
1. **What it does**
|
||||
2. **When to reach for it**
|
||||
3. **Common questions**
|
||||
4. **It's working if**(必须给可验证证据,不许写「感觉对了」)
|
||||
|
||||
beta 不写文档;弃用保留文档并标 archived。
|
||||
|
||||
## 9. 路由回改(硬规则)
|
||||
|
||||
所有技能增、删、改名、改行为后,**必须同步回改入口技能 `ai-proj-helper-entry` 和 `catalog.json`**。一个没提到新技能、或还在路由到已删技能的路由器,就是假的路由器。
|
||||
|
||||
## 10. 质量门禁(提 PR 前逐条打勾)
|
||||
|
||||
- [ ] 过了收录门槛(真实失败 + 组合不出来)
|
||||
- [ ] 桶与调用模式已标,`beta` 不得出现在默认清单
|
||||
- [ ] `name`/`description` 合规,description 含「何时用」
|
||||
- [ ] 正文 ≤20KB,细节已拆 references
|
||||
- [ ] evals ≥3 条,有「有/无技能」对比
|
||||
- [ ] 四段式文档已写(promoted 才需要)
|
||||
- [ ] 入口路由与 `catalog.json` 已回改
|
||||
- [ ] `plugin.json` 已登记 `install_name`/`install_type`/`dir_category`/`status`/版本号
|
||||
- [ ] `python3 scripts/validate-skills.py` 通过
|
||||
- [ ] `./scripts/scan-skill.sh` 无高危项
|
||||
- [ ] 版本号与 CHANGELOG 已更新
|
||||
- [ ] 无绝对路径、无凭据、无内网地址
|
||||
|
||||
## 11. 反模式
|
||||
|
||||
- 一次写 800 行「大全」,什么都想覆盖
|
||||
- description 写成「各种任务都能用」
|
||||
- 没有 evals 就提 PR;没有四段式文档就 promoted
|
||||
- 直接复制外部技能,不改写成我们的 REQ/ai-proj 语境
|
||||
- 把临时排障步骤固化成团队技能(这类放 personal)
|
||||
- 技能改名后忘了回改路由
|
||||
|
||||
## 12. 评审别人技能时看什么
|
||||
|
||||
1. 收录门槛过没过(有没有真实失败)
|
||||
2. description 能不能让模型判断「何时用」
|
||||
3. 桶与调用模式是否正确(该 user-invoked 的别占目录)
|
||||
4. 和现有技能是否重复(先查 `catalog.json`)
|
||||
5. evals 是否覆盖失败路径、文档是否有「It's working if」
|
||||
6. 是否触碰红线(自审批、绕过门禁、绝对路径、凭据)
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"skill_name": "skill-creator",
|
||||
"skill_version": "0.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "我想加一个新技能,用来在每次部署后自动跑一遍冒烟",
|
||||
"expected_output": "先问真实失败场景(哪次部署出过问题、跑了什么、期望什么),再判断现有 req-lookback/req-audit 能否组合;给出 bucket/调用模式/evals 计划"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接帮我把这个想法写成 SKILL.md:一个能自动优化代码风格的技能",
|
||||
"expected_output": "拒绝直接写,指出没有真实失败证据,要求先给案例;若无证据则建议放个人技能"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "技能有 evals 但 validate-skills.py 报了 name 不合规,怎么处理",
|
||||
"expected_output": "说明 name 规则(小写/数字/连字符、≤64),给出改名步骤,并提示要同步 install_name、catalog、入口路由"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user