Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6ef6820e4 | ||
|
|
175c612d35 | ||
|
|
1566e2d3eb | ||
|
|
f7810ec3d9 | ||
|
|
6b338895d7 | ||
|
|
7b221cc767 | ||
|
|
8bc3300928 | ||
|
|
6f5151fcb5 | ||
|
|
e6ebfd6b9f | ||
|
|
26b8fd04b9 | ||
|
|
04e20babc1 | ||
|
|
748ea68aa0 | ||
|
|
26352c4c69 | ||
|
|
6321a8528a |
@@ -0,0 +1,2 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links: []
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
name: 新技能提案
|
||||
about: 提新技能或技能改动前先过 SCOPE.md 门槛(默认拒绝,能组合就不新增)
|
||||
title: "[技能] "
|
||||
labels: skill
|
||||
---
|
||||
|
||||
## 1. 真实失败(必填)
|
||||
|
||||
在哪个真实任务/会话里出了问题?跑了什么、期望什么、实际什么。
|
||||
|
||||
> 假设性的「这样会更好」不算。说不清就说明还不到提的时候。
|
||||
|
||||
## 2. 为什么组合不出来(必填)
|
||||
|
||||
用现有哪个技能组合试过?为什么做不到?
|
||||
|
||||
> 能组合出来的,改现有技能,不新增。
|
||||
|
||||
## 3. 是否重复提案
|
||||
|
||||
- [ ] 已读 `.out-of-scope/` 三份拒绝档案,不是重复提案
|
||||
|
||||
## 4. 分桶与调用模式
|
||||
|
||||
- 初始分桶:`beta`(新技能一律先 beta)
|
||||
- 调用模式:`model-invoked` / `user-invoked`
|
||||
- 判定:这件事是不是「人下命令才开始」?是 → `user-invoked`(同时写 `disable-model-invocation: true`)
|
||||
|
||||
## 5. 最低交付
|
||||
|
||||
- [ ] `evals/evals.json` 3 条:正常路径 / 边界 / 失败恢复
|
||||
- [ ] `docs/skills/<name>.md` 四段式:What it does / When to reach for it / Common questions / It's working if
|
||||
- [ ] `docs/skill-routing.md` 已回改
|
||||
- [ ] `catalog.json` 已 regenerate
|
||||
- [ ] `CHANGELOG.md` + `plugin.json` 版本号
|
||||
@@ -0,0 +1,24 @@
|
||||
## 这个 PR 做了什么
|
||||
|
||||
<!-- 一句话,说明改的是哪个技能 / 哪套流程 -->
|
||||
|
||||
## SCOPE 门槛
|
||||
|
||||
- [ ] 真实失败:说清了在哪个真实任务里出的问题
|
||||
- [ ] 组合不出来:说明用现有技能组合为什么做不到
|
||||
- [ ] 已查 `.out-of-scope/`,不是重复提案
|
||||
|
||||
## 改动检查
|
||||
|
||||
- [ ] 分桶正确(新技能一律 `beta`;`promoted` 需要真实使用记录 + evals 通过)
|
||||
- [ ] 调用模式正确(`user-invoked` 必须写 `disable-model-invocation: true`)
|
||||
- [ ] `evals/evals.json` 3 条(正常 / 边界 / 失败恢复)
|
||||
- [ ] `docs/skills/<name>.md` 四段式
|
||||
- [ ] `docs/skill-routing.md` 已回改
|
||||
- [ ] `catalog.json` 已 regenerate(`python3 scripts/generate-catalog.py`)
|
||||
- [ ] `CHANGELOG.md` + `plugin.json` 版本号已更新
|
||||
- [ ] 四道门禁通过:`validate-skills.py --strict`、`scan-skill.sh`、`generate-catalog.py --check`、`tests/install-skills.test.sh`
|
||||
|
||||
## 人工拍板项(有则写明)
|
||||
|
||||
<!-- deprecated 删除、路由变更、promoted 晋升,需要人确认 -->
|
||||
@@ -25,3 +25,9 @@ __pycache__/
|
||||
|
||||
# Node
|
||||
node_modules/
|
||||
|
||||
# 定时任务产出(本机运行产物,不回写仓库;evals 结果报告除外)
|
||||
reports/skill-health/
|
||||
reports/monthly/
|
||||
reports/_scheduler/
|
||||
reports/evals/queue-*.md
|
||||
|
||||
@@ -38,3 +38,33 @@
|
||||
- 允许清单登记 6 类运维环境地址与示例占位符(非凭据),附理由。
|
||||
- 安全扫描:57 个警告 → **0 个警告、0 个高危**。
|
||||
- 新增 `.gitea/workflows/skill-gate.yml`:PR/main 跑 `validate --strict` + `scan` + `catalog --check` + 安装器测试。
|
||||
|
||||
- 新增 `MAINTENANCE.md`:技能维护节奏(每日漂移、每周 evals 抽样、每月目录审阅、每季度治理复核)。
|
||||
|
||||
### 治理增强(2026-11-01)
|
||||
|
||||
- 新增 git 门禁:`hooks/git/pre-commit`(validate --strict / scan / catalog --check)+ `pre-push`(安装器测试),`scripts/install-git-hooks.sh` 一键安装(Gitea Actions 无 runner,本地兜底)。
|
||||
- `install-skills.sh` 支持 `--scope project --project-dir <根>`:装到项目 `.agents/skills`,独立状态文件。
|
||||
- 新增 `scripts/scan-installed.sh`:扫描已装但非本仓库管理的第三方技能(当前 33 个,0 高危)。
|
||||
- `generate-catalog.py` 增加 `has_evals` / `has_docs` 与 `coverage` 汇总;`validate-skills.py` 增加 `--coverage` 报告与路由表一致性检查。
|
||||
- `SCOPE.md` 增加覆盖率路线图(3–4 周补齐 40 个技能的 evals 与文档);`MAINTENANCE.md` 同步。
|
||||
|
||||
### 覆盖率阶段 2(2026-11-01)
|
||||
|
||||
- 补齐剩余 24 个技能(dev 类为主)的 `evals/evals.json`(各 3 条)与 `docs/skills/<name>.md`(四段式)。
|
||||
- `--coverage`:40 个 promoted+model-invoked 技能的 evals 与文档缺口 **24 → 0**。
|
||||
|
||||
### 继续推进(2026-11-01)
|
||||
|
||||
- 新增 beta 技能 `diagnosing-bugs`(难查 bug 诊断纪律:先建红循环再推理),补齐 evals 与四段式文档;路由表同步。
|
||||
- 新增 `scripts/monthly-review.sh`:一条命令跑月度审阅(覆盖率 / 扫描 / 第三方 / catalog / description 异常)。
|
||||
|
||||
### 治理落地:定时任务与提案入口(2026-11-01)
|
||||
|
||||
- 新增 `scripts/scheduled-task.sh`:`daily` / `weekly` / `monthly` 三个确定性任务,只跑门禁、扫漂移、生成队列;需要模型判断的部分(真跑 evals、审阅 routing)生成 queue 文件交 agent。
|
||||
- 新增 `scripts/install-schedulers.sh`:把节拍装成 macOS 用户级 launchd(`com.pipexerp.ai-proj-skill-{daily,weekly,monthly}`),不再依赖会话提醒;支持 `--status` / `--run` / `--uninstall`。
|
||||
- 新增 `.gitea/issue_template/new-skill.md`、`.gitea/issue_template/config.yaml`、`.gitea/pull_request_template.md`:提案与 PR 走同一套 SCOPE 门槛问题。
|
||||
- `README.md` 一键部署从 2 步改为 4 步(补 git hooks 与定时任务);`MAINTENANCE.md` 增加「定时任务」一节,写明脚本只做确定性动作的边界。
|
||||
- `.gitignore` 排除定时任务产出(`reports/skill-health/`、`reports/monthly/`、`reports/_scheduler/`、`reports/evals/queue-*.md`)。
|
||||
- 新增 `scripts/evals-status.py` 与 `reports/evals/TEMPLATE.md`:evals 覆盖率与回归报告模板。
|
||||
- `skill-creator` 实战记录 #1:用标准流程新建 `diagnosing-bugs`(beta,待观察后晋升)。
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# 技能维护节奏
|
||||
|
||||
> 配套 `SCOPE.md`(收不收)、`skill-creator`(怎么建)、`docs/skill-routing.md`(用哪个)。
|
||||
> 本文件管「多久做一次什么」。
|
||||
|
||||
## 每次改动(任何分支)
|
||||
|
||||
> **批量提交前先建分支**:`git checkout -b <branch>`,再提交、推分支、开 PR。不要直接 commit 到 main(2026-11-01 阶段 2 漏建分支直接进 main,少了 PR 记录)。
|
||||
|
||||
|
||||
1. 过 `SCOPE.md` 收录门槛(真实失败 + 组合不出来),新技能默认先 `beta`。
|
||||
2. 跑四道门禁:`validate-skills.py --strict`、`scan-skill.sh`、`generate-catalog.py --check`、`tests/install-skills.test.sh`。
|
||||
- 本机已用 `./scripts/install-git-hooks.sh` 装好 pre-commit / pre-push,commit/push 时自动执行;Gitea Actions 暂无 runner,不能依赖 CI。
|
||||
- 跳过单次:`SKILL_GATE_SKIP=1 git commit ...`,提交信息里写原因。
|
||||
3. 技能有增删改 → **同步回改** `docs/skill-routing.md` 与 `catalog.json`。
|
||||
4. 更新 `plugin.json` 版本号与 `CHANGELOG.md`。
|
||||
|
||||
## 每日(随 7:30 项目日报)
|
||||
|
||||
- 两台机器跑 `install-skills.sh --audit`:**drift > 0 就要报**,并注明是「未安装 / 版本落后 / 本地改动」。
|
||||
- 门禁失败或扫描出高危:立即处理,不等到日报。
|
||||
- 例外:`beta` 与 `deprecated` 不计入 drift。
|
||||
|
||||
## 每周一 10:00 — evals 抽样回归
|
||||
|
||||
- 范围:上周改过的技能 + 3 个高风险技能(`dev-coding`、`dev-review`、`req-design`)。
|
||||
- 每技能取 1 条关键用例,做「有技能 / 无技能」对比,按 rubric 打分。
|
||||
- 结果记录到 `reports/evals/YYYY-Www.md`(模板 `reports/evals/TEMPLATE.md`),进周报。
|
||||
- 用 `python3 scripts/evals-status.py` 看哪些技能已有 evals、哪些已有回归报告。
|
||||
- 连续两次无增量的技能 → 按 `SCOPE.md` 评估降级。
|
||||
- 不做全量(61 技能 × 3 用例成本过高);全量只在治理大改时做。
|
||||
|
||||
## 每月 1 日 10:00 — 漂移与目录审阅
|
||||
|
||||
- 两台机器 `--audit` 漂移必须为 0(beta/deprecated 除外)。
|
||||
- 审 `catalog.json`:`description` 长度 <80 或 >600 的标黄;含「各种 / 等等 / 相关」这类泛化词的标出。
|
||||
- 第三方技能(arkcli 等)有变动时,评估是否影响团队技能;跑一次 `./scripts/scan-installed.sh`。
|
||||
- 跑 `./scripts/monthly-review.sh` 一次出齐:覆盖率、本仓库扫描、第三方扫描、catalog 一致性、description 异常项。
|
||||
|
||||
## 每季度首月 1 日 10:30 — 治理复核
|
||||
|
||||
- 人工过一遍 `docs/skill-routing.md`:删掉不再用的引用、补上新技能。
|
||||
- 清理 `deprecated`:满 3 个月且无回滚需求 → 删除插件目录。
|
||||
- 复核分桶与调用模式:还有没有命令型技能占着 `model-invoked`。
|
||||
- 复核覆盖率:`--coverage` 的两项缺口是否按路线图收敛。
|
||||
- 更新本文件与 `CHANGELOG.md`。
|
||||
|
||||
## 定时任务(launchd,2026-11-01 起)
|
||||
|
||||
节拍不再挂在「会话提醒」上(会话一断就失效),改成宿主级 launchd:
|
||||
|
||||
```bash
|
||||
./scripts/install-schedulers.sh # 安装(幂等;换机器重跑一次即可复现)
|
||||
./scripts/install-schedulers.sh --status # 看状态与最近产出
|
||||
./scripts/install-schedulers.sh --run daily # 立刻跑一次(调试)
|
||||
./scripts/install-schedulers.sh --uninstall
|
||||
```
|
||||
|
||||
| 任务 | 时间 | 脚本做什么 | 产出 |
|
||||
| --- | --- | --- | --- |
|
||||
| `daily` | 每天 07:20 | 漂移 audit + 入库安全扫描 + 覆盖率 | `reports/skill-health/daily-YYYY-MM-DD.md`(`latest.md` 供 7:30 日报直接读) |
|
||||
| `weekly` | 每周一 10:00 | 算上周改动技能 + 3 个高风险项,生成 evals 抽样队列 | `reports/evals/queue-YYYY-MM-DD.md` |
|
||||
| `monthly` | 每月 1 日 10:00 | 一条命令跑完月度审阅;1/4/7/10 月附季度治理清单 | `reports/monthly/review-YYYY-MM.md`、`quarterly-YYYY-Qn.md` |
|
||||
|
||||
**边界**:脚本只做确定性动作。真跑 evals、审阅 routing 这类需要模型判断的部分,脚本只生成队列文件,由项目经理 Bot 在 7:30 日报里接手执行——分工不写在脚本里就会漏。
|
||||
|
||||
日志:`reports/_scheduler/<job>.log`。
|
||||
|
||||
## 责任分工
|
||||
|
||||
- 项目经理 Bot:执行节奏、出周/月报、盯漂移与门禁。
|
||||
- 改技能的 agent:负责门禁四件套与路由回改。
|
||||
- 人工拍板项:废弃技能、路由变更、`promoted` 晋升。
|
||||
@@ -69,7 +69,7 @@ PRD 文档存储在思源笔记中,可以导出发送到飞书群,通过飞
|
||||
- **Codex**([Skills 文档](https://developers.openai.com/codex/skills))或 **Claude Code** 已安装
|
||||
- **ai-proj 账号 + MCP API Key**:联系管理员获取(Key 格式: `aiproj_pk_xxx`)
|
||||
|
||||
### 一键部署(2 步搞定)
|
||||
### 一键部署(4 步搞定)
|
||||
|
||||
```bash
|
||||
# 1. 克隆仓库
|
||||
@@ -78,8 +78,16 @@ cd ai-proj-helper
|
||||
|
||||
# 2. 默认安装到 Codex 的用户级标准目录 ~/.agents/skills
|
||||
./install-skills.sh
|
||||
|
||||
# 3. 装本地门禁(Gitea Actions 无 runner,commit/push 靠 git hook 兜底)
|
||||
./scripts/install-git-hooks.sh
|
||||
|
||||
# 4. 装技能治理定时任务(macOS launchd:每日漂移检查 / 每周 evals 队列 / 每月审阅)
|
||||
./scripts/install-schedulers.sh
|
||||
```
|
||||
|
||||
第 3、4 步只对「本仓库的维护者」需要——只装技能给别人用的,跑完第 2 步就可以停。
|
||||
|
||||
安装器会复制完整技能目录,包括 `SKILL.md`、references、scripts 和 assets。Codex 会自动发现 `~/.agents/skills` 中的技能;若没有出现,重启 Codex。
|
||||
|
||||
Claude Code 用户显式选择 Claude 目标;需要同时配置 MCP 和 marketplace 时运行 `init.sh`:
|
||||
@@ -208,5 +216,9 @@ A: SSE 模式直连远程服务器,零依赖开箱即用(推荐)。stdio
|
||||
- Claude(兼容):`./install-skills.sh --agent claude`
|
||||
- 看漂移:`./install-skills.sh --audit`
|
||||
- **校验 / 安全 / 清单**:`python3 scripts/validate-skills.py`、`./scripts/scan-skill.sh`、`python3 scripts/generate-catalog.py`
|
||||
- **本地门禁(Gitea Actions 无 runner,用 git hook 兜底)**:`./scripts/install-git-hooks.sh` 后,每次 commit 自动跑 `validate --strict` + `scan` + `catalog --check`,push 前跑安装器测试。跳过单次:`SKILL_GATE_SKIP=1`。
|
||||
- **项目级安装**:`./install-skills.sh --agent codex --scope project --project-dir <项目根>` → 装到 `<项目根>/.agents/skills`。
|
||||
- **第三方技能风险扫描**:`./scripts/scan-installed.sh`(扫已装但非本仓库管理的技能)。
|
||||
- **建技能**:走 `skill-creator` 技能(收录门槛、分桶、调用模式、evals、四段式文档、路由回改),不要手写。
|
||||
- **路由表**:`docs/skill-routing.md`(什么任务用哪个技能,人读;由原 `ai-proj-helper-entry` 技能降级而来)。
|
||||
- **维护节奏**:`MAINTENANCE.md`(每次改动 / 每日 / 每周 / 每月 / 每季度各做什么)。
|
||||
|
||||
@@ -43,3 +43,17 @@
|
||||
3. `./scripts/scan-skill.sh` 无高危项。
|
||||
4. `python3 scripts/generate-catalog.py` 更新 `catalog.json`。
|
||||
5. 版本号 + CHANGELOG 更新,走 PR。
|
||||
|
||||
## 覆盖率路线图(evals 与四段式文档)
|
||||
|
||||
目标集合:`promoted` 且 `model-invoked` 的技能(当前 40 个)。用户级命令技能(`user-invoked`)只要求四段式文档,不强制 evals。
|
||||
|
||||
| 阶段 | 范围 | 验收 |
|
||||
| --- | --- | --- |
|
||||
| 第 1 周 | `core/` + `req/` 类(约 15 个) | `--coverage` 里这些类目缺口为 0 |
|
||||
| 第 2 周 | `dev/` 类(约 20 个) | 同上 |
|
||||
| 第 3–4 周 | 其余(`integration/`、`biz/` 里仍 model-invoked 的) | 全量缺口为 0 |
|
||||
|
||||
每个技能的最低要求:`evals/evals.json` 3 条(正常 / 边界 / 失败恢复)+ `docs/skills/<name>.md` 四段式(What it does / When to reach for it / Common questions / It's working if)。
|
||||
|
||||
先用 `python3 scripts/validate-skills.py --coverage` 看当前缺口,再按阶段补。
|
||||
|
||||
+206
-63
@@ -1,12 +1,20 @@
|
||||
{
|
||||
"repo": "ai-proj-helper",
|
||||
"generated_at": "2026-10-31T14:24:05Z",
|
||||
"total": 61,
|
||||
"coverage": {
|
||||
"required": 40,
|
||||
"with_evals": 40,
|
||||
"with_docs": 40,
|
||||
"missing_evals": [],
|
||||
"missing_docs": []
|
||||
},
|
||||
"generated_at": "2026-10-31T21:33:50Z",
|
||||
"total": 62,
|
||||
"counts": {
|
||||
"promoted/user-invoked": 18,
|
||||
"deprecated/user-invoked": 1,
|
||||
"promoted/model-invoked": 40,
|
||||
"beta/user-invoked": 1,
|
||||
"beta/model-invoked": 1,
|
||||
"deprecated/model-invoked": 1
|
||||
},
|
||||
"skills": [
|
||||
@@ -19,7 +27,9 @@
|
||||
"description": "商务合同撰写。支持多种合同类型:软件订阅合同、软件定制开发合同、物流合同、销售服务合同、贸易合同等。当用户提到合同、协议、签约、合作协议相关任务时自动激活。",
|
||||
"description_len": 78,
|
||||
"path": "skills-biz/biz-contract-plugin/skills/SKILL.md",
|
||||
"digest": "3c17cae1380d82a4"
|
||||
"digest": "3c17cae1380d82a4",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "biz-ops",
|
||||
@@ -30,7 +40,9 @@
|
||||
"description": "商务运营技能。支持商业计划书(BP)撰写和商务合同起草。当用户提到商业计划书、BP、融资计划、商业模式、合同、协议、签约等相关任务时自动激活。",
|
||||
"description_len": 71,
|
||||
"path": "skills-biz/biz-ops-plugin/skills/SKILL.md",
|
||||
"digest": "aa5433074ba277d6"
|
||||
"digest": "aa5433074ba277d6",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "biz-plan",
|
||||
@@ -41,7 +53,9 @@
|
||||
"description": "商业计划书撰写。支持融资BP、战略规划、商业模式设计等。当用户提到商业计划书、BP、融资计划、商业模式、战略规划相关任务时自动激活。",
|
||||
"description_len": 66,
|
||||
"path": "skills-biz/biz-plan-plugin/skills/SKILL.md",
|
||||
"digest": "b6f43a914b2f7b45"
|
||||
"digest": "b6f43a914b2f7b45",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "finance",
|
||||
@@ -52,7 +66,9 @@
|
||||
"description": "财务对账技能。支持银行对账、应收对账、应付对账、内部往来对账等。通过自然语言实现账单导入、差异分析、对账报告生成。当用户提到对账、银行流水、应收应付、账单核对、财务核销相关任务时自动激活。",
|
||||
"description_len": 94,
|
||||
"path": "skills-biz/finance-plugin/skills/SKILL.md",
|
||||
"digest": "0a9209bc4bf4db3a"
|
||||
"digest": "0a9209bc4bf4db3a",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "ai-proj-helper-entry",
|
||||
@@ -63,7 +79,9 @@
|
||||
"description": "ai-proj-helper 技能库路由:告诉你有哪些技能、什么任务用哪个、以及「REQ released + PDV 通过才算交付」的强制口径。人在开始需求/开发/评审/发布任务前主动调用。",
|
||||
"description_len": 96,
|
||||
"path": "skills-core/ai-proj-helper-entry-plugin/skills/SKILL.md",
|
||||
"digest": "41d39b76d4c71dbf"
|
||||
"digest": "41d39b76d4c71dbf",
|
||||
"has_evals": true,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "ai-proj",
|
||||
@@ -74,7 +92,9 @@
|
||||
"description": "ai-proj 任务与需求管理。用于创建/查询/更新需求、任务、文档。当用户提到 ai-proj、任务管理、需求管理、REQ-XXX 相关操作时自动激活。",
|
||||
"description_len": 77,
|
||||
"path": "skills-core/ai-proj-plugin/skills/SKILL.md",
|
||||
"digest": "77ce4d2eb10e1d29"
|
||||
"digest": "77ce4d2eb10e1d29",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "pm-ask",
|
||||
@@ -85,7 +105,9 @@
|
||||
"description": "基于 ai-proj MCP + git log 真实数据的项目问答。禁止编造。当用户说\"/ask\"、\"问一下\"、\"统计一下\"、\"最近多少\"、\"谁做了多少\"、\"本月进度\"等项目相关问题时自动激活。",
|
||||
"description_len": 98,
|
||||
"path": "skills-core/pm-ask-plugin/skills/SKILL.md",
|
||||
"digest": "e5b69a0b56985472"
|
||||
"digest": "e5b69a0b56985472",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "pm-risk",
|
||||
@@ -96,7 +118,9 @@
|
||||
"description": "三维度项目风险扫描(需求层/代码层/流程层)。当用户说\"/risk\"、\"风险扫描\"、\"有什么风险\"、\"哪些需求停滞了\"、\"分支健康\"时自动激活。",
|
||||
"description_len": 72,
|
||||
"path": "skills-core/pm-risk-plugin/skills/SKILL.md",
|
||||
"digest": "928cfec76018329f"
|
||||
"digest": "928cfec76018329f",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "publish",
|
||||
@@ -107,7 +131,9 @@
|
||||
"description": "发布 ai-proj-helper 技能市场更新并通知飞书群。用户说 /publish 时激活。",
|
||||
"description_len": 48,
|
||||
"path": "skills-core/publish-plugin/skills/SKILL.md",
|
||||
"digest": "48bfbb4149baddcc"
|
||||
"digest": "48bfbb4149baddcc",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
@@ -118,7 +144,9 @@
|
||||
"description": "团队技能的标准流程:收录门槛、分桶生命周期、调用模式、SKILL.md 规范、evals 全量、四段式文档、路由回改。当要新建技能、大改现有技能、或评审一个技能是否合格时使用。",
|
||||
"description_len": 88,
|
||||
"path": "skills-core/skill-creator-plugin/skills/SKILL.md",
|
||||
"digest": "18f18c43c3fa56a6"
|
||||
"digest": "18f18c43c3fa56a6",
|
||||
"has_evals": true,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "agent-browser",
|
||||
@@ -129,7 +157,9 @@
|
||||
"description": "浏览器自动化技能。用于网页交互、E2E冒烟测试、需求验收验证、前端开发验证、截图对比。基于 Vercel agent-browser CLI。",
|
||||
"description_len": 71,
|
||||
"path": "skills-dev/agent-browser-plugin/skills/SKILL.md",
|
||||
"digest": "f382bffe3d1c84b2"
|
||||
"digest": "f382bffe3d1c84b2",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "agent-swarm",
|
||||
@@ -140,7 +170,9 @@
|
||||
"description": "Multi-agent orchestration using OpenAI Swarm patterns. Coordinate specialized agents for complex development workflows with handoffs and context sharing.",
|
||||
"description_len": 153,
|
||||
"path": "skills-dev/agent-swarm-plugin/skills/SKILL.md",
|
||||
"digest": "4164f82025a421bb"
|
||||
"digest": "4164f82025a421bb",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "ai-chat",
|
||||
@@ -151,7 +183,9 @@
|
||||
"description": "AI Chat 测试与管理。发送消息测试 AI Chat 工具调用链路,管理工具开关和 Provider 配置,支持 local/staging 环境切换。",
|
||||
"description_len": 78,
|
||||
"path": "skills-dev/ai-chat-plugin/skills/SKILL.md",
|
||||
"digest": "81193de50b43d95c"
|
||||
"digest": "81193de50b43d95c",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "ai-proj-cicd-release",
|
||||
@@ -162,7 +196,9 @@
|
||||
"description": "Execute and audit the AI-Proj service CI/CD flow across Gitea gates, immutable image builds, staging verification, approved production release, rollback, and evidence capture. Use for AI-Proj CI status, release PRs, staging or production deployments, failed-release diagnosis, deployed commit/schema verification, and delivery-chain repair. Do not use for unrelated repositories or macOS application packaging.",
|
||||
"description_len": 410,
|
||||
"path": "skills-dev/ai-proj-cicd-release-plugin/skills/SKILL.md",
|
||||
"digest": "49ef1b6865c2f1b3"
|
||||
"digest": "49ef1b6865c2f1b3",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "ai-proj-macos-release",
|
||||
@@ -173,7 +209,9 @@
|
||||
"description": "Build, sign, notarize, publish, and verify the AI-Proj macOS Apple Silicon package through the repository's release chain. Use when asked to release, republish, update, or repair the downloadable macOS application, including Gatekeeper failures and download-manifest updates. Do not use for service deployments or unrelated applications.",
|
||||
"description_len": 337,
|
||||
"path": "skills-dev/ai-proj-macos-release-plugin/skills/SKILL.md",
|
||||
"digest": "6f2496b941706137"
|
||||
"digest": "6f2496b941706137",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "db-migration",
|
||||
@@ -184,7 +222,9 @@
|
||||
"description": "数据库变更方案插件。Migration 脚本生成、数据迁移策略、回滚方案。挂载在 design 阶段,涉及数据库变更时由 req-design 推荐激活。",
|
||||
"description_len": 77,
|
||||
"path": "skills-dev/db-migration-plugin/skills/SKILL.md",
|
||||
"digest": "f8d6ebbddbbf7a71"
|
||||
"digest": "f8d6ebbddbbf7a71",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "defect-analysis",
|
||||
@@ -195,7 +235,9 @@
|
||||
"description": "系统性设计缺陷分析。对需求方案/代码架构进行多维度检查,发现隐藏的技术风险和设计漏洞。当用户提到缺陷检查、方案审查、设计审计时自动激活。",
|
||||
"description_len": 68,
|
||||
"path": "skills-dev/defect-analysis-plugin/skills/SKILL.md",
|
||||
"digest": "23dfafda92d0c622"
|
||||
"digest": "23dfafda92d0c622",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "deploy-rollback",
|
||||
@@ -206,7 +248,9 @@
|
||||
"description": "回滚方案插件。部署后发现问题时的回滚策略和执行步骤。挂载在 deploy 阶段,部署出问题时激活。",
|
||||
"description_len": 49,
|
||||
"path": "skills-dev/deploy-rollback-plugin/skills/SKILL.md",
|
||||
"digest": "75ebf66a3f74195a"
|
||||
"digest": "75ebf66a3f74195a",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-android",
|
||||
@@ -217,7 +261,9 @@
|
||||
"description": "Android 开发插件。Kotlin + Jetpack Compose + Hilt 依赖注入。当涉及 Android 开发任务时按需加载。",
|
||||
"description_len": 72,
|
||||
"path": "skills-dev/dev-android-plugin/skills/SKILL.md",
|
||||
"digest": "fb058d1059b56cdd"
|
||||
"digest": "fb058d1059b56cdd",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "dev-arch",
|
||||
@@ -228,7 +274,9 @@
|
||||
"description": "软件架构设计技能。用于系统设计、技术选型、架构评审、设计文档编写。当用户提到架构设计、系统设计、技术方案、API 设计相关任务时自动激活。",
|
||||
"description_len": 69,
|
||||
"path": "skills-dev/dev-arch-plugin/skills/SKILL.md",
|
||||
"digest": "c9a419c83a307a11"
|
||||
"digest": "c9a419c83a307a11",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-cicd",
|
||||
@@ -239,7 +287,9 @@
|
||||
"description": "CI/CD 流水线设计、优化与排查。适配 Gitea Actions + Go/Swift/Next.js/Docker 栈。当用户提到 CI、CD、流水线、pipeline、workflow、构建失败、runner 相关任务时自动激活。",
|
||||
"description_len": 119,
|
||||
"path": "skills-dev/dev-cicd-plugin/skills/SKILL.md",
|
||||
"digest": "a763f0f140516411"
|
||||
"digest": "a763f0f140516411",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-coding",
|
||||
@@ -250,7 +300,9 @@
|
||||
"description": "软件编码开发技能。用于代码编写、功能实现、重构优化。集成 ai-proj CLI 进行任务管理和进度跟踪。核心支持 Go 后端 + Vue/React 前端开发。",
|
||||
"description_len": 81,
|
||||
"path": "skills-dev/dev-coding-plugin/skills/SKILL.md",
|
||||
"digest": "cc43720aa12bb8f6"
|
||||
"digest": "cc43720aa12bb8f6",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-commit",
|
||||
@@ -261,7 +313,9 @@
|
||||
"description": "智能 git commit — 分支保护 + 自动建功能分支 + Conventional Commits 生成。当用户说\"提交代码\"、\"commit\"、\"/commit\"、\"保存修改\"时自动激活。",
|
||||
"description_len": 99,
|
||||
"path": "skills-dev/dev-commit-plugin/skills/SKILL.md",
|
||||
"digest": "1560658c4a30df45"
|
||||
"digest": "1560658c4a30df45",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-deploy",
|
||||
@@ -272,7 +326,9 @@
|
||||
"description": "应用部署技能。支持 iOS TestFlight、Docker 容器等多平台部署。当用户提到部署、发布、TestFlight、上架、build、archive 相关任务时自动激活。",
|
||||
"description_len": 90,
|
||||
"path": "skills-dev/dev-deploy-plugin/skills/SKILL.md",
|
||||
"digest": "fd15a9e9135bcc49"
|
||||
"digest": "fd15a9e9135bcc49",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-integration",
|
||||
@@ -283,7 +339,9 @@
|
||||
"description": "前后端联调技能。API 契约验证、接口对接、联调报告生成。对应 req 流程 integration 阶段。纯后端需求自动跳过。",
|
||||
"description_len": 64,
|
||||
"path": "skills-dev/dev-integration-plugin/skills/SKILL.md",
|
||||
"digest": "eff6be8eb57b7fef"
|
||||
"digest": "eff6be8eb57b7fef",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-ios",
|
||||
@@ -294,7 +352,9 @@
|
||||
"description": "iOS 开发插件。Swift/SwiftUI + MVVM 架构,TestFlight 部署。当涉及 iOS 开发任务时按需加载。",
|
||||
"description_len": 65,
|
||||
"path": "skills-dev/dev-ios-plugin/skills/SKILL.md",
|
||||
"digest": "44499e31f1abd5e2"
|
||||
"digest": "44499e31f1abd5e2",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "dev-mcp",
|
||||
@@ -305,7 +365,9 @@
|
||||
"description": "MCP Bridge 开发插件。TypeScript MCP 服务开发,Token 管理,HTTP 客户端模式。当涉及 mcp-task-bridge 开发时按需加载。",
|
||||
"description_len": 84,
|
||||
"path": "skills-dev/dev-mcp-plugin/skills/SKILL.md",
|
||||
"digest": "83d5912212fcfa4a"
|
||||
"digest": "83d5912212fcfa4a",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-pda",
|
||||
@@ -316,7 +378,9 @@
|
||||
"description": "PDA 应用开发插件。Android 原生 + 扫码枪集成 + 离线优先。当涉及 PDA/手持终端开发时按需加载。",
|
||||
"description_len": 57,
|
||||
"path": "skills-dev/dev-pda-plugin/skills/SKILL.md",
|
||||
"digest": "2524f2ecd4f2a834"
|
||||
"digest": "2524f2ecd4f2a834",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "dev-review",
|
||||
@@ -327,7 +391,9 @@
|
||||
"description": "代码评审技能。六视角对抗性扫描法(含 Karpathy Scope 审计),用于 PR 代码审查、安全评审、质量检查。当执行 /req cr 或独立 PR review 时自动激活。",
|
||||
"description_len": 91,
|
||||
"path": "skills-dev/dev-review-plugin/skills/SKILL.md",
|
||||
"digest": "a8a1ec79b85e3227"
|
||||
"digest": "a8a1ec79b85e3227",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-scaffold",
|
||||
@@ -338,7 +404,9 @@
|
||||
"description": "模块脚手架插件。新建模块时自动生成分层代码骨架。挂载在 dev 阶段,新建模块时激活。",
|
||||
"description_len": 43,
|
||||
"path": "skills-dev/dev-scaffold-plugin/skills/SKILL.md",
|
||||
"digest": "4044787b1e468302"
|
||||
"digest": "4044787b1e468302",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "dev-test",
|
||||
@@ -349,7 +417,22 @@
|
||||
"description": "软件测试技能。用于单元测试、集成测试、E2E测试、测试用例设计。支持 Go、Vue、React、iOS、Android 等多平台测试。",
|
||||
"description_len": 67,
|
||||
"path": "skills-dev/dev-test-plugin/skills/dev-test/SKILL.md",
|
||||
"digest": "a03536a478eabe6c"
|
||||
"digest": "a03536a478eabe6c",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "diagnosing-bugs",
|
||||
"category": "dev",
|
||||
"version": "0.1.0",
|
||||
"status": "beta",
|
||||
"invocation": "model-invoked",
|
||||
"description": "难查 bug 的诊断纪律:先造出一条「现在就为这个 bug 变红」的紧反馈循环,再二分定位、最小验证、补回归测试。当 bug 难复现、间歇失败、或第一次看没头绪时使用。",
|
||||
"description_len": 84,
|
||||
"path": "skills-dev/diagnosing-bugs-plugin/skills/SKILL.md",
|
||||
"digest": "d93fb95c073858cc",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "executing-plans",
|
||||
@@ -360,7 +443,9 @@
|
||||
"description": "Use when you have a written implementation plan to execute in a separate session with review checkpoints",
|
||||
"description_len": 104,
|
||||
"path": "skills-dev/executing-plans-plugin/skills/SKILL.md",
|
||||
"digest": "8991a50091af83a4"
|
||||
"digest": "8991a50091af83a4",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "finishing-a-development-branch",
|
||||
@@ -371,7 +456,9 @@
|
||||
"description": "Use when implementation is complete and all tests pass - verifies and creates PR",
|
||||
"description_len": 80,
|
||||
"path": "skills-dev/finishing-branch-plugin/skills/SKILL.md",
|
||||
"digest": "1102047ccc060e60"
|
||||
"digest": "1102047ccc060e60",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "frontend-design",
|
||||
@@ -382,7 +469,9 @@
|
||||
"description": "Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.",
|
||||
"description_len": 234,
|
||||
"path": "skills-dev/frontend-design-plugin/skills/SKILL.md",
|
||||
"digest": "84e9c104be7967cc"
|
||||
"digest": "84e9c104be7967cc",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "karpathy-guidelines",
|
||||
@@ -393,7 +482,9 @@
|
||||
"description": "Karpathy 四原则编码行为守则。减少 LLM 常见编码错误:过度实现、静默假设、顺手重构、无验证标准。在任意编码场景激活。",
|
||||
"description_len": 64,
|
||||
"path": "skills-dev/karpathy-guidelines-plugin/skills/SKILL.md",
|
||||
"digest": "a68f347031110d6a"
|
||||
"digest": "a68f347031110d6a",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "pull-request",
|
||||
@@ -404,7 +495,9 @@
|
||||
"description": "Use when starting new development tasks, creating pull requests, reviewing code, or managing PR feedback cycles on Gitea. Triggers on /pr commands or when user mentions PR, pull request, code review, or branch creation.",
|
||||
"description_len": 219,
|
||||
"path": "skills-dev/pull-request-plugin/skills/SKILL.md",
|
||||
"digest": "40dac0d290782bb5"
|
||||
"digest": "40dac0d290782bb5",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "review-checklist",
|
||||
@@ -415,7 +508,9 @@
|
||||
"description": "项目级代码评审检查清单。按项目积累特定检查项,挂载在 dev-review 下自动加载。每次 CR 时触发。",
|
||||
"description_len": 54,
|
||||
"path": "skills-dev/review-checklist-plugin/skills/SKILL.md",
|
||||
"digest": "5bae13b6a8d92650"
|
||||
"digest": "5bae13b6a8d92650",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "slark-cicd",
|
||||
@@ -426,7 +521,9 @@
|
||||
"description": "Slark 仓库 staging、生产和 Desktop 安装包的端到端 CI/CD 可执行 runbook。覆盖本地预推快检、PR 与内网 ci/internal-gate 门禁、合并 origin/main、生产前强制 staging 验收、审批式生产发布,以及在 m5max 构建签名、公证并上传 macOS/Windows Desktop 包到 OSS。当用户要在 slark(qiudl/qiu-slark)里发布/上线、部署到生产或 staging、发布 Desktop 安装包、盯 CI/合并 PR、复现或验证运行时行为、或排查发布链/推送路由问题时使用。",
|
||||
"description_len": 285,
|
||||
"path": "skills-dev/slark-cicd-plugin/skills/SKILL.md",
|
||||
"digest": "1ff9b89a5fbc6e2d"
|
||||
"digest": "1ff9b89a5fbc6e2d",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "slark-dsh-cicd",
|
||||
@@ -437,7 +534,9 @@
|
||||
"description": "DSH 插件包与 Slark 宿主补丁的发布 runbook。覆盖 npm run pack 双 tgz 双资产、无上游写权限时的 fork 发布、干净单提交与树一致性 gate、改指向后必须重新打包、draft→publish 节奏、GitHub HTTPS/SSH 与 fetch 卡死处置、发布后 SHA 核对、app.asar 完整性约束、ai-proj 发布状态对齐。当用户要发布或升级 DSH 插件(dsh-worktable 等)、发布/更新 Slark 宿主补丁、push 或下载 GitHub 失败、插件「检查更新」看不到新版本、需要 fork 发布、或排查 asar 完整性/签名问题时使用。",
|
||||
"description_len": 306,
|
||||
"path": "skills-dev/slark-dsh-cicd-plugin/skills/SKILL.md",
|
||||
"digest": "9819e2d515ab44e0"
|
||||
"digest": "9819e2d515ab44e0",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "data-excel",
|
||||
@@ -448,7 +547,9 @@
|
||||
"description": "Excel 数据处理与 BI 集成。通过自然语言操作 Excel 文件的读取、编辑、转换,并支持导入到 BI 系统(Metabase)进行可视化分析。当用户提到 Excel、表格处理、数据导入、BI 分析相关任务时自动激活。",
|
||||
"description_len": 112,
|
||||
"path": "skills-integration/data-excel-plugin/skills/SKILL.md",
|
||||
"digest": "8dc4be8f88cfd866"
|
||||
"digest": "8dc4be8f88cfd866",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "doubao-voice",
|
||||
@@ -459,7 +560,9 @@
|
||||
"description": "豆包语音API调用。支持语音合成(TTS)和唱歌。当用户提到语音合成、文字转语音、唱歌、豆包语音相关任务时自动激活。",
|
||||
"description_len": 58,
|
||||
"path": "skills-integration/doubao-voice-plugin/skills/SKILL.md",
|
||||
"digest": "7dc73d3b97e61fd2"
|
||||
"digest": "7dc73d3b97e61fd2",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-bitable",
|
||||
@@ -470,7 +573,9 @@
|
||||
"description": "飞书多维表格操作。用于记录增删改查、批量操作、筛选排序、数据同步。当需要操作飞书多维表格时使用。",
|
||||
"description_len": 48,
|
||||
"path": "skills-integration/feishu-bitable-plugin/skills/SKILL.md",
|
||||
"digest": "3bf37533007365a3"
|
||||
"digest": "3bf37533007365a3",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-docx",
|
||||
@@ -481,7 +586,9 @@
|
||||
"description": "飞书云文档操作。用于创建、编辑云文档,插入内容块,会议纪要生成。当需要操作飞书云文档时使用。",
|
||||
"description_len": 46,
|
||||
"path": "skills-integration/feishu-docx-plugin/skills/SKILL.md",
|
||||
"digest": "49d097bfa2c283ab"
|
||||
"digest": "49d097bfa2c283ab",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "feishu",
|
||||
@@ -492,7 +599,9 @@
|
||||
"description": "飞书文档与多维表格操作入口。当用户提到飞书、云文档、多维表格、Bitable 相关任务时自动激活。",
|
||||
"description_len": 49,
|
||||
"path": "skills-integration/feishu-plugin/skills/SKILL.md",
|
||||
"digest": "973c6ac22104ee38"
|
||||
"digest": "973c6ac22104ee38",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "siyuan",
|
||||
@@ -503,7 +612,9 @@
|
||||
"description": "思源笔记 API 集成。通过自然语言创建、编辑、搜索笔记,管理笔记本和文档树。当用户提到思源笔记、SiYuan、笔记管理、知识库相关任务时自动激活。",
|
||||
"description_len": 74,
|
||||
"path": "skills-integration/siyuan-plugin/skills/SKILL.md",
|
||||
"digest": "2736c2b708791763"
|
||||
"digest": "2736c2b708791763",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "siyuan-to-feishu",
|
||||
@@ -514,7 +625,9 @@
|
||||
"description": "将思源笔记导出为 PDF 并发送到飞书群。当用户提到\"发送笔记\"、\"导出PDF发飞书\"、\"/siyuan send\"、\"分享到飞书\"相关任务时自动激活。",
|
||||
"description_len": 76,
|
||||
"path": "skills-integration/siyuan-to-feishu-plugin/skills/SKILL.md",
|
||||
"digest": "998dace910c1eb7a"
|
||||
"digest": "998dace910c1eb7a",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "wecom",
|
||||
@@ -525,7 +638,9 @@
|
||||
"description": "企业微信集成。通过自然语言发送消息、管理群机器人、操作审批流程、管理通讯录。当用户提到企业微信、微信工作、群机器人、企业号、wecom相关任务时自动激活。",
|
||||
"description_len": 77,
|
||||
"path": "skills-integration/wecom-plugin/skills/SKILL.md",
|
||||
"digest": "7084d88ccb87ba9b"
|
||||
"digest": "7084d88ccb87ba9b",
|
||||
"has_evals": false,
|
||||
"has_docs": false
|
||||
},
|
||||
{
|
||||
"name": "req-audit",
|
||||
@@ -536,7 +651,9 @@
|
||||
"description": "部署后审计。运行时日志检查 + 静态缺陷分析 + 设计偏移检测。可独立调用或由 /req done 自动触发。",
|
||||
"description_len": 55,
|
||||
"path": "skills-req/req-audit-plugin/skills/SKILL.md",
|
||||
"digest": "ff2e6197bbb059c6"
|
||||
"digest": "ff2e6197bbb059c6",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-compare",
|
||||
@@ -547,7 +664,9 @@
|
||||
"description": "对比式需求分析插件。系统平移、竞品借鉴、版本升级时使用参考对象对比法编写 PRD。挂载在 analysis 阶段,需要对比分析时由 req-prd 推荐激活。",
|
||||
"description_len": 79,
|
||||
"path": "skills-req/req-compare-plugin/skills/SKILL.md",
|
||||
"digest": "3428e3f37ef9e9e8"
|
||||
"digest": "3428e3f37ef9e9e8",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-design",
|
||||
@@ -558,7 +677,9 @@
|
||||
"description": "需求开发设计技能。用于 PRD 到开发设计的转换:API 契约定义、数据模型变更方案、变更文件清单、开发任务拆分、技术风险评估。当用户执行 /req doc 或需要编写开发设计文档时自动激活。",
|
||||
"description_len": 96,
|
||||
"path": "skills-req/req-design-plugin/skills/SKILL.md",
|
||||
"digest": "74848800cab6e269"
|
||||
"digest": "74848800cab6e269",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-dev",
|
||||
@@ -569,7 +690,9 @@
|
||||
"description": "需求开发计划编写技能。用于 PRD 到代码转换、代码库分析、开发任务拆分、技术方案设计。当用户执行 /req doc 或需要编写开发计划时自动激活。",
|
||||
"description_len": 74,
|
||||
"path": "skills-req/req-dev-plugin/skills/SKILL.md",
|
||||
"digest": "494a5be5e7a11c0b"
|
||||
"digest": "494a5be5e7a11c0b",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-lookback",
|
||||
@@ -580,7 +703,9 @@
|
||||
"description": "回归测试。部署后自动验证变更涉及的功能是否正常。可独立调用或由 /req done 自动触发。",
|
||||
"description_len": 47,
|
||||
"path": "skills-req/req-lookback-plugin/skills/SKILL.md",
|
||||
"digest": "cc6bff614a8f7bf4"
|
||||
"digest": "cc6bff614a8f7bf4",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req",
|
||||
@@ -591,7 +716,9 @@
|
||||
"description": "需求工作流管理。用于 /req 命令使用、需求全生命周期管理(创建→PRD→评审→开发→测试→部署→归档)。当用户提到需求管理、/req 命令、REQ-XXX 相关任务时自动激活。",
|
||||
"description_len": 90,
|
||||
"path": "skills-req/req-plugin/skills/SKILL.md",
|
||||
"digest": "193cf871b73faff1"
|
||||
"digest": "193cf871b73faff1",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-prd",
|
||||
@@ -602,7 +729,9 @@
|
||||
"description": "产品设计与需求管理。用于 PRD、需求分析、用户故事、功能设计和原型规划,并将正式需求文档双写到本地仓库与 ai-proj Task Document。",
|
||||
"description_len": 76,
|
||||
"path": "skills-req/req-prd-plugin/skills/SKILL.md",
|
||||
"digest": "7c4ad2baab6b2118"
|
||||
"digest": "7c4ad2baab6b2118",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-prototype",
|
||||
@@ -613,7 +742,9 @@
|
||||
"description": "原型生成与关联。生成可交互 HTML、上传到 ai-proj OSS 并关联 Requirement/PRD iframe,也支持 Stitch AI 视觉探索。",
|
||||
"description_len": 81,
|
||||
"path": "skills-req/req-prototype-plugin/skills/SKILL.md",
|
||||
"digest": "7e362f4f895fb50a"
|
||||
"digest": "7e362f4f895fb50a",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-research",
|
||||
@@ -624,7 +755,9 @@
|
||||
"description": "需求调研插件。代码审计、数据库分析、现有功能调研、技术可行性评估。挂载在 analysis 阶段,需要深度调研时由 req-prd 推荐激活。",
|
||||
"description_len": 71,
|
||||
"path": "skills-req/req-research-plugin/skills/SKILL.md",
|
||||
"digest": "a94924f53bd4c80e"
|
||||
"digest": "a94924f53bd4c80e",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-retro",
|
||||
@@ -635,7 +768,9 @@
|
||||
"description": "复盘总结。自动采集数据、计算质量评分、跨需求模式识别、技能自动进化。可独立调用或由 /req done 自动触发。",
|
||||
"description_len": 57,
|
||||
"path": "skills-req/req-retro-plugin/skills/SKILL.md",
|
||||
"digest": "636b7099d85e9549"
|
||||
"digest": "636b7099d85e9549",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-review",
|
||||
@@ -646,7 +781,9 @@
|
||||
"description": "PRD 评审方法论。用于需求评审、PRD 文档审查、评审意见编写。当执行 /req review 或需要评审 PRD 文档时使用。",
|
||||
"description_len": 65,
|
||||
"path": "skills-req/req-review-plugin/skills/SKILL.md",
|
||||
"digest": "cd1a5181d72f35f4"
|
||||
"digest": "cd1a5181d72f35f4",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-test-gate",
|
||||
@@ -657,7 +794,9 @@
|
||||
"description": "测试与质量门禁制度。覆盖需求级测试(Gates 1-5)、部署级验证(Deploy Gates)、持续回归(Regression)、Harness Engineering 工程约束方法论(Ratchet、约定建立、门禁层级)。当用户提到质量门禁、架构约束、约定检查、ratchet、harness 相关任务时自动激活。",
|
||||
"description_len": 159,
|
||||
"path": "skills-req/req-test-gate-plugin/skills/SKILL.md",
|
||||
"digest": "ceebcc2516ad40d3"
|
||||
"digest": "ceebcc2516ad40d3",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "req-workflow",
|
||||
@@ -668,7 +807,9 @@
|
||||
"description": "需求完整工作流。用于从创建到归档的完整流程、Hook 自动同步、测试环境流程。当需要了解需求完整生命周期或同步策略时使用。",
|
||||
"description_len": 61,
|
||||
"path": "skills-req/req-workflow-plugin/skills/SKILL.md",
|
||||
"digest": "87499da3817d162d"
|
||||
"digest": "87499da3817d162d",
|
||||
"has_evals": true,
|
||||
"has_docs": true
|
||||
},
|
||||
{
|
||||
"name": "verification-before-completion",
|
||||
@@ -679,7 +820,9 @@
|
||||
"description": "汇报「完成/修好/通过」或关闭任务、提交 PR、宣布 REQ 完成之前,必须先运行验证命令并附证据;没有证据不得声称完成。当准备说完成、关闭任务、或汇报交付前使用。",
|
||||
"description_len": 82,
|
||||
"path": "skills-req/verification-before-completion-plugin/skills/SKILL.md",
|
||||
"digest": "7c23649f4a0a8798"
|
||||
"digest": "7c23649f4a0a8798",
|
||||
"has_evals": true,
|
||||
"has_docs": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
| 设计 / 拆任务 | `req-design`、`dev-arch`、`db-migration` |
|
||||
| 编码 | `dev-coding`、`karpathy-guidelines` |
|
||||
| 测试 | `dev-test`、`req-test-gate` |
|
||||
| 难查的 bug / 间歇失败 | `diagnosing-bugs`(先建红循环再推理) |
|
||||
| 代码评审 | `dev-review`、`review-checklist` |
|
||||
| 发布(Slark 仓库/Desktop) | `slark-cicd` |
|
||||
| 发布(DSH 插件/宿主补丁) | `slark-dsh-cicd` |
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# agent-browser
|
||||
|
||||
## What it does
|
||||
|
||||
浏览器自动化(snapshot-ref)。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# agent-swarm
|
||||
|
||||
## What it does
|
||||
|
||||
多 agent 编排(Swarm 模式)。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# ai-chat
|
||||
|
||||
## What it does
|
||||
|
||||
AI Chat 工具调用测试与配置。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,24 @@
|
||||
# ai-proj — 任务与需求管理
|
||||
|
||||
## What it does
|
||||
|
||||
通过 ai-proj(`https://ai.pipexerp.com`)的 MCP / CLI 管理需求、任务、文档与进度:查询、创建、更新状态、关联需求与任务、挂证据文档。是所有项目状态数据的唯一权威来源。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
- 要查「某个 REQ / 任务的真实状态、优先级、截止、关联任务」
|
||||
- 要更新任务状态、挂文档、改优先级、改派
|
||||
- 汇报进度或做对齐检查前,需要拉真实数据
|
||||
|
||||
## Common questions
|
||||
|
||||
- **数据以哪为准?** ai-proj,不靠聊天记录或记忆。主机必须是 `https://ai.pipexerp.com`(写成 `api.pipexerp.com` 会失败)。
|
||||
- **可以自己改需求优先级吗?** 不行,需求优先级是业务决策;任务优先级可以对齐需求。
|
||||
- **任务 completed 就是完成了吗?** 不是,REQ 未 `released` 只能算步骤完成。
|
||||
- **接口报错怎么排查?** 先 GET 查证实体是否存在、凭证主机是否正确,不要猜 ID。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 问「REQ-XXXX 现在什么状态」时,它给出带字段名与时间戳的真实数据,而不是复述对话
|
||||
- 更新任务状态前先查一次实体,写入后回读确认
|
||||
- 遇到 404/401 时给的是排查步骤与真实查询结果,不是编造的 ID
|
||||
@@ -0,0 +1,21 @@
|
||||
# db-migration
|
||||
|
||||
## What it does
|
||||
|
||||
数据库变更与回滚。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# defect-analysis
|
||||
|
||||
## What it does
|
||||
|
||||
设计缺陷多维度分析。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# deploy-rollback
|
||||
|
||||
## What it does
|
||||
|
||||
部署回滚决策与步骤。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-arch
|
||||
|
||||
## What it does
|
||||
|
||||
架构设计与技术选型。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-cicd
|
||||
|
||||
## What it does
|
||||
|
||||
CI/CD 流水线设计、优化与排障。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-coding
|
||||
|
||||
## What it does
|
||||
|
||||
编码实现与任务跟踪。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-commit
|
||||
|
||||
## What it does
|
||||
|
||||
智能提交(分支保护 + Conventional)。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-deploy
|
||||
|
||||
## What it does
|
||||
|
||||
应用部署(TestFlight / Docker)。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-integration
|
||||
|
||||
## What it does
|
||||
|
||||
前后端联调。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-mcp
|
||||
|
||||
## What it does
|
||||
|
||||
MCP Bridge 开发。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-review
|
||||
|
||||
## What it does
|
||||
|
||||
六视角对抗性代码评审。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-scaffold
|
||||
|
||||
## What it does
|
||||
|
||||
模块脚手架。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# dev-test
|
||||
|
||||
## What it does
|
||||
|
||||
测试设计与执行。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,26 @@
|
||||
# diagnosing-bugs
|
||||
|
||||
## What it does
|
||||
|
||||
给难查的 bug 一套诊断纪律:先造出「现在就为这个 bug 变红」的紧反馈循环,再二分定位、一次验一个假设、最小改动修复,最后补一条曾经红过的回归测试。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
- 间歇失败、偶发问题,第一次看没头绪
|
||||
- 已知两个好版本之间引入的回归(适合 git bisect)
|
||||
- 修过几次没修好的 bug
|
||||
|
||||
一眼可见的拼写/配置错误不需要它,直接修。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **为什么不能先猜着改?** 没有红循环就没有验证手段,改了也不知道是不是这次改动生效。
|
||||
- **复现不出来怎么办?** 提高复现率(缩小输入、调整时序、加观测),或用 git bisect 从版本维度定位,而不是盲上。
|
||||
- **修完就完了吗?** 不,必须补一条回归测试,并证明修复前它是红的。
|
||||
- **和 dev-test 的区别?** dev-test 管测试怎么写;本技能管「怎么找到 bug」。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 动手改代码前,先给出了一条现在为红的命令
|
||||
- 每次改动只变一个变量,并能说出上次结果的差异
|
||||
- 修复结论包含根因 + 回归测试 + 「曾经红过」的证据
|
||||
@@ -0,0 +1,21 @@
|
||||
# executing-plans
|
||||
|
||||
## What it does
|
||||
|
||||
执行书面计划并设检查点。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# finishing-a-development-branch
|
||||
|
||||
## What it does
|
||||
|
||||
开发分支收尾与建 PR。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# frontend-design
|
||||
|
||||
## What it does
|
||||
|
||||
高质量前端界面设计。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# karpathy-guidelines
|
||||
|
||||
## What it does
|
||||
|
||||
Karpathy 四原则编码守则。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,22 @@
|
||||
# pm-ask
|
||||
|
||||
## What it does
|
||||
|
||||
基于 ai-proj MCP 与 git log 真实数据的项目问答:统计任务/需求数量、进度、谁做了什么,回答前必须查真实数据。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户说 /ask、问一下、统计一下、最近多少、谁做了多少、本月进度时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **数据从哪来?** ai-proj MCP + git log,不靠记忆和估算。
|
||||
- **查不到数据怎么办?** 如实报告缺失与失败原因,给出查询口径,不编造数字。
|
||||
- **能做预测吗?** 只能基于真实阶段数据做推导,并标注假设。
|
||||
- **回答格式?** 先给结论数字,再给来源与口径。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 问团队本月产出时,它先拉数据再回答,并附时间范围与来源
|
||||
- 接口异常时明确说“数据未取到”,不出现任何编造数字
|
||||
- 对“估一下”的请求,给口径而不是给假数字
|
||||
@@ -0,0 +1,22 @@
|
||||
# pm-risk
|
||||
|
||||
## What it does
|
||||
|
||||
三维度项目风险扫描:需求层(停滞/逾期/优先级)、代码层(分支健康/评审积压)、流程层(门禁/交付态),按严重/警告/提示分级输出。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户说 /risk、风险扫描、有什么风险、哪些需求停滞了、分支健康时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **找不到数据算无风险吗?** 不算,缺失要标注未覆盖。
|
||||
- **分级标准?** 严重=已阻塞交付;警告=会拖延;提示=观察项。
|
||||
- **会不会误报?** 每条风险附证据与来源,便于人工复核。
|
||||
- **输出多长?** 先概览再分项,严重项必须置顶。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 扫描报告每条风险都有数据来源,不是笼统描述
|
||||
- 数据源不可用时明确写“该维度未覆盖”
|
||||
- 不会因为查不到就输出“无风险”
|
||||
@@ -0,0 +1,21 @@
|
||||
# pull-request
|
||||
|
||||
## What it does
|
||||
|
||||
PR 创建与评审反馈循环(Gitea)。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-audit
|
||||
|
||||
## What it does
|
||||
|
||||
部署后审计:运行时日志检查、静态缺陷分析、设计偏移检测,产出审计报告并关联任务。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
需求部署后,或用户说“审计一下”“部署后检查”时;也可由 /req done 触发。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **审计和测试的区别?** 测试验证功能对错,审计查运行时异常、代码缺陷与实现是否偏离设计。
|
||||
- **没日志能审吗?** 能审静态部分,但运行时项必须标未覆盖。
|
||||
- **发现偏移怎么办?** 列偏移项+影响面+建议,交给负责人决策。
|
||||
- **报告存哪?** 关联到需求/任务文档,便于回溯。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 审计报告包含三类检查结果与证据
|
||||
- 缺运行时证据时明确标未覆盖
|
||||
- 发现偏移会列出具体条目而不是笼统说“有偏差”
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-compare
|
||||
|
||||
## What it does
|
||||
|
||||
对比式需求分析:以参考系统为基准做功能对比,再推导目标系统设计,产出对比式 PRD。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
系统平移、竞品借鉴、版本升级需要对比论证时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **没有参考资料能写吗?** 可以写,但参考系统细节必须标注为待验证假设。
|
||||
- **对比维度怎么定?** 按功能、交互、数据、权限、成本五类,按需求裁剪。
|
||||
- **结论要什么形式?** 对比表 + 差异结论 + 目标系统取舍。
|
||||
- **会不会照搬竞品?** 只借鉴结论,落地按自身约束重新设计。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 对比表每行能追溯到资料或标注为假设
|
||||
- 结论明确给出取舍而不是罗列
|
||||
- 没有把“凭印象”写成事实
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-design
|
||||
|
||||
## What it does
|
||||
|
||||
PRD 到开发设计的转换:API 契约、数据模型变更、变更文件清单、任务拆分与依赖、技术风险评估。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
执行 /req doc、或在评审后进入设计阶段时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **设计前需要什么?** PRD 与验收标准;缺验收标准要先补。
|
||||
- **任务拆到什么粒度?** 单任务 2–4 小时可完成,带依赖边与验收标准。
|
||||
- **找不到模块怎么办?** 报告缺失并给待确认项,不猜路径。
|
||||
- **要写测试策略吗?** 要,随设计一起给。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 输出含契约表、变更文件、子任务三件套
|
||||
- 缺验收标准时会阻断而不是硬写
|
||||
- 任务清单里有 blockers,不只有层级
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-dev
|
||||
|
||||
## What it does
|
||||
|
||||
把 PRD 转成可执行开发计划:代码库分析、现有实现盘点、任务拆分、技术方案与风险。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
执行 /req doc、需要从需求走到可执行计划时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **和 req-design 区别?** req-dev 重“怎么落地”:代码库分析与任务拆分;req-design 重设计文档与契约。
|
||||
- **不看代码能拆吗?** 不能,先分析再拆。
|
||||
- **计划里要有什么?** 任务、依赖、验收、风险、需要确认项。
|
||||
- **代码库与 PRD 冲突?** 以真实代码为准,报告差异后调整。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 计划里的任务能直接执行,附依赖与验收
|
||||
- 不读代码就要求拆任务会被拒绝
|
||||
- 发现代码与 PRD 不符会报告差异而不是硬拆
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-lookback
|
||||
|
||||
## What it does
|
||||
|
||||
部署后回归测试:按变更影响面验证既有功能是否被破坏,产出回归报告。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
需求部署后;或 /req done 前需要确认无回归时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **回归范围怎么定?** 按变更影响的模块与调用方扩散确定。
|
||||
- **只测新功能行吗?** 不行,必须覆盖受影响面。
|
||||
- **发现问题怎么办?** 报告复现与影响,给回滚/修复建议。
|
||||
- **要留证据吗?** 要,命令与结果。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 回归报告含影响范围、用例、结果
|
||||
- 要求只测新功能会被拒绝
|
||||
- 发现回归会给出回滚或修复建议
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-prd
|
||||
|
||||
## What it does
|
||||
|
||||
产品需求文档(PRD)编写与双写:按模板产出需求/预期/验收标准、界面原型要求,并同时写入本地仓库与 ai-proj Task Document。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
需求讨论确认后要写 PRD、或用 /req prd 时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **PRD 最少要有什么?** 需求描述、预期结果、≥2 条可检查验收标准。
|
||||
- **为什么要双写?** 本地可版本化,ai-proj 供评审与追溯。
|
||||
- **验收标准怎么写?** 可检查、可对应测试,不写“体验良好”这类。
|
||||
- **写入失败怎么办?** 保留本地并报告失败,不假装成功。
|
||||
|
||||
## It's working if
|
||||
|
||||
- PRD 都含可检查验收标准
|
||||
- 写入后回读确认,不只打印成功
|
||||
- 失败时明确报失败并保留本地稿
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-prototype
|
||||
|
||||
## What it does
|
||||
|
||||
原型生成与关联:把 PRD 转成可交互 HTML 原型,上传并关联到需求的 prototype_urls,支持 Stitch 视觉探索。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
有 UI 的需求在 PRD/缺陷收敛后需要原型时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **原型要确认吗?** 要,确认后才能作为开发依据。
|
||||
- **上传失败会丢吗?** 本地保留,报告失败。
|
||||
- **能直接改线上页面吗?** 不能,原型是独立 HTML。
|
||||
- **和 PRD 什么关系?** 原型回填到 PRD 的界面章节。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 原型生成后有可访问链接并回读关联成功
|
||||
- 要求跳过确认直接开发会被劝回
|
||||
- 上传失败时本地文件仍在
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-research
|
||||
|
||||
## What it does
|
||||
|
||||
需求调研:代码审计、数据库分析、现有功能盘点、技术可行性评估,产出带证据的调研报告。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
analysis 阶段需要深度调研,或 /req research 时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **结论要有证据吗?** 要有,file:line 或查询结果。
|
||||
- **找不到怎么办?** 报告缺口与假设,不编造。
|
||||
- **和 req-dev 区别?** research 判断“能不能、怎么做”,dev 出“具体计划”。
|
||||
- **报告给谁?** PRD/设计阶段的输入。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 调研报告每条结论有证据出处
|
||||
- 不看代码就下结论会被拒
|
||||
- 找不到模块会列待确认项
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-retro
|
||||
|
||||
## What it does
|
||||
|
||||
复盘总结:采集数据计算质量评分、还原时间线、识别跨需求模式,沉淀经验教训。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
/req done 后、或用户说“复盘一下”时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **评分怎么来?** 按时间线、缺陷、返工、门禁通过率等指标计算。
|
||||
- **数据不全怎么办?** 标注缺失,给部分结论。
|
||||
- **经验存哪?** 写入 memory / 技能改进项。
|
||||
- **会不会只夸不批?** 要列问题与改进项。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 评分附计算依据
|
||||
- 数据缺失时明确标注而不是编造
|
||||
- 复盘产出可执行的改进项
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-review
|
||||
|
||||
## What it does
|
||||
|
||||
PRD 评审方法论:结构完整性、需求清晰度(SMART)、技术可行性、数据模型、API、原型检查,输出通过/打回结论与理由。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
/req review、或需要评审 PRD 时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **评审看什么?** 结构、清晰度、可行性、数据/API/原型。
|
||||
- **能免检通过吗?** 不能,必须有依据。
|
||||
- **打回要写什么?** 缺失项+修改要求。
|
||||
- **提交人能自审吗?** 不能。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 评审结论都有逐项检查记录
|
||||
- 无依据的“通过”会被拒绝
|
||||
- 打回时列出具体缺失项
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-test-gate
|
||||
|
||||
## What it does
|
||||
|
||||
需求级质量门禁(Gate 0–5)与部署级验证制度:逐门禁检查、留证据、不通过不放行。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
/req test、准备部署前、或用户问门禁是否通过时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **门禁能跳吗?** 不能,除非记录阻塞并获豁免。
|
||||
- **失败能忽略吗?** 不能,必须记录并阻断。
|
||||
- **证据留哪?** 测试报告与任务文档。
|
||||
- **部署前还要什么?** 部署级验证与回滚预案。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 门禁结论逐条有证据
|
||||
- 跳门禁/忽略失败会被拒绝
|
||||
- 测试报告能直接作为发布依据
|
||||
@@ -0,0 +1,22 @@
|
||||
# req-workflow
|
||||
|
||||
## What it does
|
||||
|
||||
需求完整工作流参考:从创建到归档的阶段划分、每阶段门禁、交付物、Hook 同步与测试环境流程。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
需要理解完整生命周期、或判断某需求下一步该做什么时。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **阶段顺序?** 创建→讨论→PRD→评审→设计→开发→测试→staging→released→归档。
|
||||
- **能跳 staging 吗?** 不能,强制验收。
|
||||
- **状态不一致听谁的?** 以真实数据为准并核对。
|
||||
- **交付终点?** released + PDV 验收通过。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 能按阶段说清下一步动作与门禁
|
||||
- 跳过 staging 会被拒绝
|
||||
- 发现状态矛盾会先核对再结论
|
||||
@@ -0,0 +1,23 @@
|
||||
# req — 需求全生命周期
|
||||
|
||||
## What it does
|
||||
|
||||
把一条需求从创建推进到归档:创建 → 讨论确认 → PRD → 评审 → 开发 → 测试 → 部署 staging/prod → PDV 验收 → released → 归档。同时约束评审、门禁与交付口径,防止跳步和自审批。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
- 用户说「/req」「新建需求」「需求走到哪了」「提交评审」「部署上线」时
|
||||
- 任何需求类工作开始时的第一步(先确定当前阶段,再决定下一个命令)
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能不能跳过评审直接开发?** 不能。PRD 是评审前置,评审通过才能进 dev。
|
||||
- **提交人能不能自己批?** 不能;`allow_self_approve` 只作临时手段且要收回。
|
||||
- **任务都 completed 了算交付吗?** 不算,需求要走到 `released` + PDV 验收通过。
|
||||
- **部署是每个需求单独做吗?** 各需求独立到 testing 后进待部署池,由 `/req deploy` 批量推进。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 问「这个需求现在到哪一步、下一步做什么」时,它先给出 `delivery_stage` 与下一个命令,而不是直接开始写代码
|
||||
- 出现「直接改 approved」「跳过 PRD」这类请求时,它会阻断并给出正确路径
|
||||
- 汇报完成时用的是「REQ 阶段 + 下一节点」,不是「某个开发步骤完成」
|
||||
@@ -0,0 +1,21 @@
|
||||
# review-checklist
|
||||
|
||||
## What it does
|
||||
|
||||
项目级评审检查清单。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# slark-cicd
|
||||
|
||||
## What it does
|
||||
|
||||
Slark 仓库发布 runbook。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
@@ -0,0 +1,21 @@
|
||||
# slark-dsh-cicd
|
||||
|
||||
## What it does
|
||||
|
||||
DSH 插件与宿主补丁发布 runbook。
|
||||
|
||||
## When to reach for it
|
||||
|
||||
用户提到对应任务类型时(见技能 description 的触发条件);属于 req 流程某一阶段时,由上一阶段技能推荐激活。
|
||||
|
||||
## Common questions
|
||||
|
||||
- **能省步骤赶时间吗?** 不能,该技能里的强制项/铁律不可跳过。
|
||||
- **和相邻技能怎么分工?** 按阶段职责:本技能负责自己那一段,上下游交给对应技能。
|
||||
- **失败了怎么办?** 停下报告失败步骤、证据与选项,不硬推、不静默降级。
|
||||
|
||||
## It's working if
|
||||
|
||||
- 按它执行时,关键步骤和门禁都有明确结论与证据,而不是"大概没问题"
|
||||
- 想抄近路/跳过强制项时会被拒绝,并给出正确路径
|
||||
- 失败时输出的是失败点 + 证据 + 下一步,而不是含糊"已完成"
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# skill-gate 本地门禁:Gitea Actions 没有 runner,靠这个兜底。
|
||||
# 跳过:SKILL_GATE_SKIP=1 git commit ...(需在提交信息里说明原因)
|
||||
set -uo pipefail
|
||||
[ "${SKILL_GATE_SKIP:-0}" = "1" ] && { echo "[skill-gate] skipped by SKILL_GATE_SKIP=1"; exit 0; }
|
||||
cd "$(git rev-parse --show-toplevel)" || exit 1
|
||||
fail=0
|
||||
echo "[skill-gate] validate --strict"
|
||||
python3 scripts/validate-skills.py --strict || fail=1
|
||||
echo "[skill-gate] scan"
|
||||
./scripts/scan-skill.sh >/tmp/skill-gate-scan.log 2>&1 || { fail=1; tail -5 /tmp/skill-gate-scan.log; }
|
||||
echo "[skill-gate] catalog --check"
|
||||
python3 scripts/generate-catalog.py --check || fail=1
|
||||
if [ "$fail" -ne 0 ]; then
|
||||
echo "[skill-gate] 未通过:先修复,或用 SKILL_GATE_SKIP=1 并在提交信息里说明原因"
|
||||
exit 1
|
||||
fi
|
||||
echo "[skill-gate] OK"
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# skill-gate 推送前门禁:安装器测试 + 覆盖率提示
|
||||
set -uo pipefail
|
||||
[ "${SKILL_GATE_SKIP:-0}" = "1" ] && exit 0
|
||||
cd "$(git rev-parse --show-toplevel)" || exit 1
|
||||
echo "[skill-gate] install-skills 测试"
|
||||
bash tests/install-skills.test.sh || { echo "[skill-gate] 测试失败"; exit 1; }
|
||||
+25
-1
@@ -10,6 +10,8 @@
|
||||
# --audit Show installed vs repo versions for the selected target
|
||||
# --include-beta Also install skills whose plugin.json status=beta
|
||||
# --no-validate Skip scripts/validate-skills.py before installing
|
||||
# --scope <scope> user (default) or project (installs into <project>/.agents/skills)
|
||||
# --project-dir <dir> Project root, required when --scope project
|
||||
# --dry-run Preview changes without writing anything
|
||||
# --category <cat> Only install plugins in dir_category=<cat>
|
||||
# Valid values: biz, core, dev, integration, personal, req
|
||||
@@ -38,6 +40,8 @@ LINK_MODE=false
|
||||
AUDIT_ONLY=false
|
||||
INCLUDE_BETA=false
|
||||
NO_VALIDATE=false
|
||||
SCOPE="user"
|
||||
PROJECT_DIR=""
|
||||
|
||||
# ── Colour helpers ─────────────────────────────────────────────────────────────
|
||||
GREEN='\033[0;32m'
|
||||
@@ -63,6 +67,12 @@ while [[ $# -gt 0 ]]; do
|
||||
--audit) AUDIT_ONLY=true ;;
|
||||
--include-beta) INCLUDE_BETA=true ;;
|
||||
--no-validate) NO_VALIDATE=true ;;
|
||||
--scope)
|
||||
[[ $# -ge 2 ]] || { error "--scope requires user or project"; exit 1; }
|
||||
SCOPE="$2"; shift ;;
|
||||
--project-dir)
|
||||
[[ $# -ge 2 ]] || { error "--project-dir requires a path"; exit 1; }
|
||||
PROJECT_DIR="$2"; shift ;;
|
||||
--force) FORCE=true ;;
|
||||
--cleanup) CLEANUP=true ;;
|
||||
--list) LIST_ONLY=true ;;
|
||||
@@ -90,7 +100,7 @@ case "$AGENT_TARGET" in
|
||||
STATE_FILE="${AI_PROJ_HELPER_STATE_FILE:-${HOME}/.agents/.ai-proj-helper-installed-skills.json}"
|
||||
;;
|
||||
dsh)
|
||||
if [[ -z "${DSH_HOME:-}" ]]; then
|
||||
if [[ "$SCOPE" != "project" && -z "${DSH_HOME:-}" ]]; then
|
||||
error "--agent dsh requires DSH_HOME (or set AI_PROJ_HELPER_SKILLS_DIR explicitly)"
|
||||
exit 1
|
||||
fi
|
||||
@@ -108,6 +118,20 @@ case "$AGENT_TARGET" in
|
||||
;;
|
||||
esac
|
||||
|
||||
# ── Project scope override ─────────────────────────────────────────────────────
|
||||
if [[ "$SCOPE" == "project" ]]; then
|
||||
if [[ -z "$PROJECT_DIR" ]]; then
|
||||
error "--scope project requires --project-dir <project root>"
|
||||
exit 1
|
||||
fi
|
||||
[[ -d "$PROJECT_DIR" ]] || { error "project dir 不存在: $PROJECT_DIR"; exit 1; }
|
||||
PROJECT_DIR="$(cd "$PROJECT_DIR" && pwd)"
|
||||
SKILLS_DIR="$PROJECT_DIR/.agents/skills"
|
||||
COMMANDS_DIR=""
|
||||
STATE_FILE="$PROJECT_DIR/.agents/.ai-proj-helper-installed-skills.json"
|
||||
info "Project scope: $PROJECT_DIR"
|
||||
fi
|
||||
|
||||
# ── State helpers (plain JSON via python3) ─────────────────────────────────────
|
||||
state_get() {
|
||||
# state_get <install_name> -> prints version or empty string
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# <YYYY-Www> 技能 evals 抽样回归
|
||||
|
||||
- 日期:YYYY-MM-DD
|
||||
- 范围:上周改动过的技能 + 高风险技能(dev-coding / dev-review / req-design)
|
||||
- 方法:每技能取 1 条关键用例,做「有技能 / 无技能」两组独立输出对比,按 rubric 打分(0–2)
|
||||
|
||||
| 技能 | 用例 | 有技能 | 无技能 | 差值 | 结论 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| | | | | | |
|
||||
|
||||
## 结论与新发现
|
||||
|
||||
- 有效技能:
|
||||
- 无增量技能(按 SCOPE 评估是否降级):
|
||||
- 需要补的用例:
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python3
|
||||
"""列出各技能的 evals 与是否已有回归报告(reports/evals/<name>.md)。"""
|
||||
from __future__ import annotations
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
rows = []
|
||||
for pj in sorted(ROOT.glob("skills-*/*-plugin/.claude-plugin/plugin.json")):
|
||||
meta = json.loads(pj.read_text())
|
||||
name = meta.get("install_name")
|
||||
if not name:
|
||||
continue
|
||||
ev = next((pj.parent.parent / "skills").rglob("evals/evals.json"), None)
|
||||
cases = 0
|
||||
if ev:
|
||||
try:
|
||||
cases = len(json.loads(ev.read_text()).get("evals", []))
|
||||
except Exception:
|
||||
cases = 0
|
||||
report = ROOT / "reports" / "evals" / f"{name}.md"
|
||||
rows.append((name, meta.get("status", "promoted"), cases, report.is_file()))
|
||||
|
||||
with_evals = sum(1 for r in rows if r[2] > 0)
|
||||
with_report = sum(1 for r in rows if r[3])
|
||||
print(f"{'技能':32} {'status':10} {'用例':4} 回归报告")
|
||||
for name, status, cases, has_report in rows:
|
||||
if cases == 0:
|
||||
continue
|
||||
print(f"{name:32} {status:10} {cases:<4} {'有' if has_report else '-'}")
|
||||
print(f"\n有 evals 的技能: {with_evals}/{len(rows)};已有回归报告: {with_report}/{with_evals}")
|
||||
@@ -55,9 +55,12 @@ def build() -> dict:
|
||||
fm = frontmatter(skill_md.read_text(encoding="utf-8", errors="replace"))
|
||||
desc = fm.get("description", "")
|
||||
body = skill_md.read_text(encoding="utf-8", errors="replace")
|
||||
install_name = meta.get("install_name") or fm.get("name")
|
||||
has_evals = any((plugin_dir / "skills").rglob("evals/evals.json"))
|
||||
has_docs = (ROOT / "docs" / "skills" / f"{install_name}.md").is_file()
|
||||
skills.append(
|
||||
{
|
||||
"name": meta.get("install_name") or fm.get("name"),
|
||||
"name": install_name,
|
||||
"category": meta.get("dir_category"),
|
||||
"version": meta.get("version"),
|
||||
"status": meta.get("status", "promoted"),
|
||||
@@ -66,14 +69,28 @@ def build() -> dict:
|
||||
"description_len": len(desc),
|
||||
"path": str(skill_md.relative_to(ROOT)),
|
||||
"digest": hashlib.sha256(body.encode("utf-8")).hexdigest()[:16],
|
||||
"has_evals": has_evals,
|
||||
"has_docs": has_docs,
|
||||
}
|
||||
)
|
||||
counts: dict = {}
|
||||
for skill in skills:
|
||||
key = f"{skill['status']}/{skill['invocation']}"
|
||||
counts[key] = counts.get(key, 0) + 1
|
||||
required = [
|
||||
x for x in skills
|
||||
if x["status"] == "promoted" and x["invocation"] == "model-invoked"
|
||||
]
|
||||
coverage = {
|
||||
"required": len(required),
|
||||
"with_evals": sum(1 for x in required if x["has_evals"]),
|
||||
"with_docs": sum(1 for x in required if x["has_docs"]),
|
||||
"missing_evals": [x["name"] for x in required if not x["has_evals"]],
|
||||
"missing_docs": [x["name"] for x in required if not x["has_docs"]],
|
||||
}
|
||||
return {
|
||||
"repo": "ai-proj-helper",
|
||||
"coverage": coverage,
|
||||
"generated_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
||||
"total": len(skills),
|
||||
"counts": counts,
|
||||
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
# 安装本仓库的 git 门禁钩子(pre-commit / pre-push)。
|
||||
set -euo pipefail
|
||||
root="$(git rev-parse --show-toplevel)"
|
||||
[ -d "$root/hooks/git" ] || { echo "找不到 hooks/git"; exit 1; }
|
||||
mkdir -p "$root/.git/hooks"
|
||||
for h in pre-commit pre-push; do
|
||||
cp "$root/hooks/git/$h" "$root/.git/hooks/$h"
|
||||
chmod +x "$root/.git/hooks/$h"
|
||||
echo "已安装 .git/hooks/$h"
|
||||
done
|
||||
echo "跳过单次检查:SKILL_GATE_SKIP=1 git commit ..."
|
||||
Executable
+143
@@ -0,0 +1,143 @@
|
||||
#!/usr/bin/env bash
|
||||
# 安装 / 卸载 / 查看技能治理的定时任务(macOS 用户级 launchd)
|
||||
#
|
||||
# 为什么用 launchd 而不是会话提醒:会话提醒随会话消失,节拍就断了;
|
||||
# launchd 是宿主级,跟仓库绑定,换机器重跑一次即可复现。
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/install-schedulers.sh 安装(幂等,会先卸载再装)
|
||||
# ./scripts/install-schedulers.sh --status 看三个任务的加载状态
|
||||
# ./scripts/install-schedulers.sh --run daily 立刻跑一次(调试用)
|
||||
# ./scripts/install-schedulers.sh --uninstall 卸载
|
||||
set -uo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
TASK="$ROOT/scripts/scheduled-task.sh"
|
||||
AGENTS="$HOME/Library/LaunchAgents"
|
||||
LOGDIR="$ROOT/reports/_scheduler"
|
||||
PREFIX="com.pipexerp.ai-proj-skill"
|
||||
UID_N="$(id -u)"
|
||||
JOBS="daily weekly monthly"
|
||||
|
||||
SCHED_PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
||||
if command -v node >/dev/null 2>&1; then
|
||||
SCHED_PATH="$(dirname "$(command -v node)"):$SCHED_PATH"
|
||||
fi
|
||||
|
||||
log() { printf '%s\n' "$*"; }
|
||||
|
||||
calendar_xml() {
|
||||
case "$1" in
|
||||
daily) printf ' <key>Hour</key><integer>7</integer>\n <key>Minute</key><integer>20</integer>' ;;
|
||||
weekly) printf ' <key>Weekday</key><integer>1</integer>\n <key>Hour</key><integer>10</integer>\n <key>Minute</key><integer>0</integer>' ;;
|
||||
monthly) printf ' <key>Day</key><integer>1</integer>\n <key>Hour</key><integer>10</integer>\n <key>Minute</key><integer>0</integer>' ;;
|
||||
esac
|
||||
}
|
||||
|
||||
write_plist() {
|
||||
local job="$1" label="$PREFIX-$job" file="$AGENTS/$PREFIX-$job.plist" cal
|
||||
cal="$(calendar_xml "$job")"
|
||||
cat > "$file" <<PLIST
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key><string>$label</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/bin/bash</string>
|
||||
<string>$TASK</string>
|
||||
<string>$job</string>
|
||||
</array>
|
||||
<key>WorkingDirectory</key><string>$ROOT</string>
|
||||
<key>EnvironmentVariables</key>
|
||||
<dict>
|
||||
<key>HOME</key><string>$HOME</string>
|
||||
<key>PATH</key><string>$SCHED_PATH</string>
|
||||
</dict>
|
||||
<key>StandardOutPath</key><string>$LOGDIR/$job.log</string>
|
||||
<key>StandardErrorPath</key><string>$LOGDIR/$job.err.log</string>
|
||||
<key>RunAtLoad</key><false/>
|
||||
<key>StartCalendarInterval</key>
|
||||
<dict>
|
||||
$cal
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
PLIST
|
||||
}
|
||||
|
||||
unload_one() {
|
||||
local label="$PREFIX-$1"
|
||||
launchctl bootout "gui/$UID_N/$label" >/dev/null 2>&1 || launchctl unload "$AGENTS/$label.plist" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
install() {
|
||||
mkdir -p "$AGENTS" "$LOGDIR"
|
||||
chmod +x "$TASK" 2>/dev/null
|
||||
local job label
|
||||
for job in $JOBS; do
|
||||
label="$PREFIX-$job"
|
||||
write_plist "$job"
|
||||
unload_one "$job"
|
||||
if launchctl bootstrap "gui/$UID_N" "$AGENTS/$label.plist" 2>/dev/null; then
|
||||
log "已加载 $label"
|
||||
elif launchctl load -w "$AGENTS/$label.plist" 2>/dev/null; then
|
||||
log "已加载(load) $label"
|
||||
else
|
||||
log "加载失败 $label(检查 plist: $AGENTS/$label.plist)"
|
||||
fi
|
||||
done
|
||||
log ""
|
||||
log "触发时间:daily 每天 07:20 / weekly 每周一 10:00 / monthly 每月 1 日 10:00(1/4/7/10 月附季度清单)"
|
||||
log "日志:${LOGDIR#$ROOT/}/<job>.log"
|
||||
log "产出:reports/skill-health/、reports/evals/queue-*.md、reports/monthly/"
|
||||
}
|
||||
|
||||
status() {
|
||||
local job label
|
||||
for job in $JOBS; do
|
||||
label="$PREFIX-$job"
|
||||
if launchctl print "gui/$UID_N/$label" >/dev/null 2>&1; then
|
||||
printf '%-8s 已加载 %s\n' "$job" \
|
||||
"$(launchctl print "gui/$UID_N/$label" 2>/dev/null | grep -E 'state =|last exit code' | tr -d '\t' | tr '\n' ' ')"
|
||||
else
|
||||
printf '%-8s 未加载\n' "$job"
|
||||
fi
|
||||
done
|
||||
log ""
|
||||
log "日志目录:${LOGDIR#$ROOT/}"
|
||||
log "最近产出:"
|
||||
ls -1t "$ROOT/reports/skill-health"/daily-*.md "$ROOT/reports/evals"/queue-*.md "$ROOT/reports/monthly"/review-*.md 2>/dev/null | head -3 | sed "s#^$ROOT/# - #"
|
||||
}
|
||||
|
||||
run_now() {
|
||||
local job="${1:-}"
|
||||
case "$job" in daily|weekly|monthly) ;; *) log "用法: $0 --run daily|weekly|monthly"; exit 2 ;; esac
|
||||
mkdir -p "$LOGDIR"
|
||||
local label="$PREFIX-$job"
|
||||
if launchctl print "gui/$UID_N/$label" >/dev/null 2>&1; then
|
||||
launchctl kickstart -k "gui/$UID_N/$label" && log "已触发 $job(看 ${LOGDIR#$ROOT/}/$job.log)"
|
||||
else
|
||||
log "任务未加载,直接前台执行"
|
||||
/bin/bash "$TASK" "$job"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstall() {
|
||||
local job label
|
||||
for job in $JOBS; do
|
||||
label="$PREFIX-$job"
|
||||
unload_one "$job"
|
||||
rm -f "$AGENTS/$label.plist"
|
||||
log "已卸载 $label"
|
||||
done
|
||||
}
|
||||
|
||||
case "${1:-install}" in
|
||||
install|--install) install ;;
|
||||
--status|status) status ;;
|
||||
--run) run_now "${2:-}" ;;
|
||||
--uninstall|uninstall) uninstall ;;
|
||||
*) log "用法: $0 [install|--status|--run daily|weekly|monthly|--uninstall]"; exit 2 ;;
|
||||
esac
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
# 月度技能审阅:一条命令跑完 MAINTENANCE 里的月度项。
|
||||
# 用法: ./scripts/monthly-review.sh
|
||||
set -uo pipefail
|
||||
cd "$(git rev-parse --show-toplevel)" || exit 1
|
||||
echo "== 技能月度审阅 $(date '+%F %H:%M') =="
|
||||
echo; echo "-- 1. 覆盖率(promoted + model-invoked)--"
|
||||
python3 scripts/validate-skills.py --coverage
|
||||
echo; echo "-- 2. 本仓库安全扫描 --"
|
||||
./scripts/scan-skill.sh | tail -2
|
||||
echo; echo "-- 3. 第三方已装技能扫描 --"
|
||||
./scripts/scan-installed.sh | tail -2
|
||||
echo; echo "-- 4. catalog 是否最新 --"
|
||||
python3 scripts/generate-catalog.py --check
|
||||
echo; echo "-- 5. catalog 摘要与 description 异常项 --"
|
||||
python3 - <<'PY'
|
||||
import json
|
||||
d = json.load(open('catalog.json'))
|
||||
print("总数:", d['total'], "| 分布:", d['counts'])
|
||||
bad = [(x['name'], x['description_len']) for x in d['skills']
|
||||
if x['description_len'] < 60 or x['description_len'] > 600]
|
||||
print("description 长度异常:", bad if bad else "无")
|
||||
cov = d.get('coverage', {})
|
||||
print(f"覆盖率: evals {cov.get('with_evals')}/{cov.get('required')},文档 {cov.get('with_docs')}/{cov.get('required')}")
|
||||
PY
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
# scan-installed.sh — 扫描「已安装但不是本仓库管理」的第三方技能,找出高风险内容。
|
||||
# 用法: ./scripts/scan-installed.sh [--strict] [dir ...]
|
||||
# 默认扫描 ~/.agents/skills 与 $DSH_HOME/skills
|
||||
# --strict: 有高危项则退出码 1
|
||||
set -uo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
STRICT=0
|
||||
dirs=()
|
||||
for a in "$@"; do
|
||||
case "$a" in
|
||||
--strict) STRICT=1 ;;
|
||||
*) dirs+=("$a") ;;
|
||||
esac
|
||||
done
|
||||
if [[ ${#dirs[@]} -eq 0 ]]; then
|
||||
dirs+=("${HOME}/.agents/skills")
|
||||
[[ -n "${DSH_HOME:-}" ]] && dirs+=("${DSH_HOME}/skills")
|
||||
fi
|
||||
|
||||
HIGH_PATTERNS=(
|
||||
'rm[[:space:]]+-[a-zA-Z]*r[a-zA-Z]*[[:space:]]+/($|[[:space:]])'
|
||||
'curl[^|]*\|[[:space:]]*(ba|z)?sh'
|
||||
'wget[^|]*\|[[:space:]]*(ba|z)?sh'
|
||||
'chmod[[:space:]]+777'
|
||||
'BEGIN (RSA|OPENSSH|EC|DSA) PRIVATE KEY'
|
||||
'sk-[A-Za-z0-9]{16,}'
|
||||
'AKIA[0-9A-Z]{16}'
|
||||
'ghp_[A-Za-z0-9]{20,}'
|
||||
)
|
||||
|
||||
managed=""
|
||||
for st in "${HOME}/.agents/.ai-proj-helper-installed-skills.json" \
|
||||
"${DSH_HOME:-/nonexistent}/.ai-proj-helper-installed-skills.json"; do
|
||||
[[ -f "$st" ]] && managed="$managed $(python3 -c "import json;print(' '.join(json.load(open('$st')).keys()))" 2>/dev/null)"
|
||||
done
|
||||
|
||||
total=0 high=0 third=0
|
||||
for dir in "${dirs[@]}"; do
|
||||
[[ -d "$dir" ]] || continue
|
||||
for entry in "$dir"/*; do
|
||||
[[ -e "$entry" || -L "$entry" ]] || continue
|
||||
name="$(basename "$entry")"
|
||||
[[ " $managed " == *" $name "* ]] && continue
|
||||
third=$((third + 1))
|
||||
for pattern in "${HIGH_PATTERNS[@]}"; do
|
||||
while IFS= read -r hit; do
|
||||
echo "[HIGH] $name: ${hit#*:}"
|
||||
high=$((high + 1)); total=$((total + 1))
|
||||
done < <(grep -rnE --include='*.md' --include='*.sh' --include='*.py' --include='*.js' --include='*.ts' --include='*.json' -- "$pattern" "$entry" 2>/dev/null | cut -c1-180)
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "扫描完成:第三方技能 $third 个,高危 $high 处"
|
||||
[[ "$STRICT" == 1 && "$high" -gt 0 ]] && { echo "存在高危第三方技能,需人工确认来源。"; exit 1; }
|
||||
exit 0
|
||||
Executable
+162
@@ -0,0 +1,162 @@
|
||||
#!/usr/bin/env bash
|
||||
# 技能治理定时任务入口(由 launchd 调用,见 scripts/install-schedulers.sh)
|
||||
#
|
||||
# 设计原则:脚本只做「确定性」的事——跑门禁、扫漂移、生成清单。
|
||||
# 需要模型判断的部分(真跑 evals、人工审阅 routing)不在脚本里做,只生成 queue 文件,
|
||||
# 由项目经理 Bot 在 7:30 项目日报里接手执行。这样节拍不依赖任何会话的记忆。
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/scheduled-task.sh daily # 每天 07:20,先于 7:30 项目日报
|
||||
# ./scripts/scheduled-task.sh weekly # 每周一 10:00
|
||||
# ./scripts/scheduled-task.sh monthly # 每月 1 日 10:00(1/4/7/10 月附带季度清单)
|
||||
set -uo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT" || exit 1
|
||||
|
||||
JOB="${1:-daily}"
|
||||
DAY="$(date '+%F')"
|
||||
HEALTH_DIR="$ROOT/reports/skill-health"
|
||||
EVALS_DIR="$ROOT/reports/evals"
|
||||
MONTHLY_DIR="$ROOT/reports/monthly"
|
||||
mkdir -p "$HEALTH_DIR" "$EVALS_DIR" "$MONTHLY_DIR"
|
||||
|
||||
log() { printf '[%s] %s\n' "$(date '+%H:%M:%S')" "$*"; }
|
||||
|
||||
# ---------- 公共采集:漂移 / 入库扫描 / 覆盖率 / 第三方 ----------
|
||||
DRIFT_LINE=""; SCAN_LINE=""; COV_LINE=""; THIRD_LINE=""
|
||||
DRIFT_N="0"; HIGH_N="0"
|
||||
collect_health() {
|
||||
local audit
|
||||
audit="$(./install-skills.sh --audit 2>&1)"
|
||||
DRIFT_LINE="$(printf '%s\n' "$audit" | grep -E '[0-9]+ 个漂移' | tail -1)"
|
||||
SCAN_LINE="$(./scripts/scan-skill.sh 2>&1 | grep '扫描完成' | tail -1)"
|
||||
COV_LINE="$(/usr/bin/python3 scripts/validate-skills.py --coverage 2>&1 | grep '覆盖率' | tail -1)"
|
||||
THIRD_LINE="$(./scripts/scan-installed.sh 2>&1 | grep '扫描完成' | tail -1)"
|
||||
DRIFT_N="$(printf '%s' "$DRIFT_LINE" | grep -oE '[0-9]+ 个漂移' | grep -oE '^[0-9]+' || true)"
|
||||
HIGH_N="$(printf '%s' "$SCAN_LINE" | grep -oE '[0-9]+ 个高危' | grep -oE '^[0-9]+' || true)"
|
||||
DRIFT_N="${DRIFT_N:-0}"
|
||||
HIGH_N="${HIGH_N:-0}"
|
||||
AUDIT_OUT="$audit"
|
||||
}
|
||||
|
||||
# ---------- 每日:漂移 + 入库扫描,写一份可被日报直接读的健康快照 ----------
|
||||
run_daily() {
|
||||
local md="$HEALTH_DIR/daily-$DAY.md" todo=0
|
||||
collect_health
|
||||
{
|
||||
echo "# 技能健康 $DAY"
|
||||
echo
|
||||
echo "- 漂移:${DRIFT_LINE:-未采集}"
|
||||
echo "- 入库扫描:${SCAN_LINE:-未采集}"
|
||||
echo "- 覆盖率:${COV_LINE:-未采集}"
|
||||
echo "- 第三方技能:${THIRD_LINE:-未采集}"
|
||||
echo
|
||||
echo "## 需要处理"
|
||||
if [ "$DRIFT_N" != "0" ]; then
|
||||
echo "- 漂移 ${DRIFT_N} 个(未安装 / 版本落后),按 MAINTENANCE「每日」处理"
|
||||
todo=1
|
||||
fi
|
||||
if [ "$HIGH_N" != "0" ]; then
|
||||
echo "- 入库扫描高危 ${HIGH_N} 个,立即处理,不等日报"
|
||||
todo=1
|
||||
fi
|
||||
[ "$todo" = "0" ] && echo "无"
|
||||
echo
|
||||
echo "## 原始输出(audit 尾部)"
|
||||
echo '```'
|
||||
printf '%s\n' "$AUDIT_OUT" | tail -15
|
||||
echo '```'
|
||||
} > "$md"
|
||||
cp "$md" "$HEALTH_DIR/latest.md"
|
||||
log "daily -> ${md#$ROOT/}"
|
||||
log "漂移 ${DRIFT_N} / 高危 ${HIGH_N} / ${SCAN_LINE:-扫描未采集}"
|
||||
}
|
||||
|
||||
# ---------- 每周:生成 evals 抽样队列(执行仍需模型,见 MAINTENANCE「每周一」)----------
|
||||
run_weekly() {
|
||||
local md="$EVALS_DIR/queue-$DAY.md"
|
||||
local changed changed_total highrisk reports
|
||||
changed_total="$(git log --since='7 days ago' --name-only --pretty=format: 2>/dev/null \
|
||||
| grep -oE '^skills-[a-z]+/[^/]+-plugin/' | sort -u | wc -l | tr -d ' ')"
|
||||
changed="$(git log --since='7 days ago' --name-only --pretty=format: 2>/dev/null \
|
||||
| grep -oE '^skills-[a-z]+/[^/]+-plugin/' \
|
||||
| sed -E 's#^skills-[a-z]+/##; s#-plugin/$##' \
|
||||
| sort | uniq -c | sort -rn | head -5 | awk '{print $2}' | tr '\n' ' ')"
|
||||
highrisk="dev-coding dev-review req-design"
|
||||
reports="$(ls "$EVALS_DIR"/*.md 2>/dev/null | grep -vE 'TEMPLATE|queue-' | wc -l | tr -d ' ')"
|
||||
{
|
||||
echo "# 本周 evals 抽样队列 $DAY"
|
||||
echo
|
||||
echo "现有回归报告:${reports:-0} 份(目标:每周至少 +1 份)"
|
||||
echo
|
||||
echo "## 范围"
|
||||
echo
|
||||
echo "- 上周改动技能共 ${changed_total:-0} 个,按改动次数取前 5:${changed:-(无)}"
|
||||
echo "- 高风险固定项:$highrisk"
|
||||
echo
|
||||
echo "## 做法(每个技能)"
|
||||
echo
|
||||
echo "1. 取 1 条关键用例,跑「有技能 / 无技能」两遍;"
|
||||
echo "2. 按 rubric 打分,写增量;"
|
||||
echo "3. 结果写入 \`reports/evals/$DAY-<技能名>.md\`(模板 \`reports/evals/TEMPLATE.md\`)。"
|
||||
echo
|
||||
echo "## 判读"
|
||||
echo
|
||||
echo "- 连续两次无增量 → 按 \`SCOPE.md\` 评估降级。"
|
||||
echo "- 全量只在治理大改时做,不做每周全量。"
|
||||
echo
|
||||
echo "> 本文件由 launchd 每周一 10:00 自动生成;脚本不调模型,执行由 agent 接手。"
|
||||
} > "$md"
|
||||
log "weekly -> ${md#$ROOT/}(报告现有 ${reports:-0} 份)"
|
||||
}
|
||||
|
||||
# ---------- 每月:一条命令出齐审阅项;季度月附治理清单 ----------
|
||||
run_monthly() {
|
||||
local mo md mon q
|
||||
mo="$(date '+%Y-%m')"
|
||||
mon="$(date '+%m')"
|
||||
md="$MONTHLY_DIR/review-$mo.md"
|
||||
{
|
||||
echo "# 技能月度审阅 $mo"
|
||||
echo
|
||||
./scripts/monthly-review.sh 2>&1
|
||||
} > "$md"
|
||||
collect_health
|
||||
{
|
||||
echo
|
||||
echo "## 补充:漂移与第三方"
|
||||
echo
|
||||
echo "- ${DRIFT_LINE:-漂移未采集}"
|
||||
echo "- ${THIRD_LINE:-第三方未采集}"
|
||||
} >> "$md"
|
||||
log "monthly -> ${md#$ROOT/}"
|
||||
case "$mon" in
|
||||
01|04|07|10)
|
||||
q="$(date '+%Y')-Q$(( (10#$mon - 1) / 3 + 1 ))"
|
||||
local mq="$MONTHLY_DIR/quarterly-$q.md"
|
||||
{
|
||||
echo "# 季度治理复核 $q"
|
||||
echo
|
||||
echo "按 MAINTENANCE「每季度首月 1 日 10:30」逐项打勾:"
|
||||
echo
|
||||
echo "- [ ] 过一遍 \`docs/skill-routing.md\`:删掉不再用的引用、补上新技能"
|
||||
echo "- [ ] 清理 \`deprecated\`:满 3 个月且无回滚需求 → 删除插件目录"
|
||||
echo "- [ ] 复核分桶与调用模式:还有没有命令型技能占着 \`model-invoked\`"
|
||||
echo "- [ ] 复核覆盖率:\`--coverage\` 两项缺口是否按路线图收敛"
|
||||
echo "- [ ] 更新 \`MAINTENANCE.md\` 与 \`CHANGELOG.md\`"
|
||||
} > "$mq"
|
||||
log "quarterly -> ${mq#$ROOT/}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
case "$JOB" in
|
||||
daily) run_daily ;;
|
||||
weekly) run_weekly ;;
|
||||
monthly) run_monthly ;;
|
||||
*)
|
||||
echo "用法: $0 daily|weekly|monthly" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
@@ -136,8 +136,58 @@ def check_skill(rel: Path, skill_md: Path, meta: dict):
|
||||
warnings.append(f"{where}: 引用的相对路径不存在: {target}")
|
||||
|
||||
|
||||
IGNORED_ROUTING_TOKENS = {
|
||||
"completed", "released", "delivery_stage", "status", "true", "false", "user-invoked",
|
||||
"model-invoked", "promoted", "beta", "deprecated", "scoop", "scoop.md",
|
||||
}
|
||||
EXTERNAL_SKILLS = {
|
||||
# 本仓库之外、由 DSH 用户目录提供的技能(docs/skill-routing.md 允许引用)
|
||||
"project-management", "topic-distill", "diary", "dsh-worktable-page",
|
||||
"code-review", "release-notes", "disk-cleanup", "workflow-one",
|
||||
}
|
||||
|
||||
|
||||
def check_routing(catalog_names: set[str]):
|
||||
routing = ROOT / "docs" / "skill-routing.md"
|
||||
if not routing.is_file():
|
||||
return
|
||||
text = routing.read_text(encoding="utf-8")
|
||||
for token in sorted(set(re.findall(r"`([a-z][a-z0-9-]{2,40})`", text))):
|
||||
if token in IGNORED_ROUTING_TOKENS or token in EXTERNAL_SKILLS:
|
||||
continue
|
||||
if token not in catalog_names:
|
||||
warnings.append(f"docs/skill-routing.md: 路由到不存在的技能 {token!r}")
|
||||
|
||||
|
||||
def coverage_report() -> int:
|
||||
missing_evals, missing_docs = [], []
|
||||
for plugin_json in sorted(ROOT.glob("skills-*/*-plugin/.claude-plugin/plugin.json")):
|
||||
meta = json.loads(plugin_json.read_text())
|
||||
if meta.get("status", "promoted") != "promoted":
|
||||
continue
|
||||
skill_md = next((plugin_json.parent.parent / "skills").rglob("SKILL.md"), None)
|
||||
if skill_md is None:
|
||||
continue
|
||||
fm, _ = parse_frontmatter(skill_md.read_text(encoding="utf-8", errors="replace"))
|
||||
if (fm.get("metadata") or {}).get("invocation", "model-invoked") != "model-invoked":
|
||||
continue
|
||||
name = meta.get("install_name") or fm.get("name")
|
||||
if not any((plugin_json.parent.parent / "skills").rglob("evals/evals.json")):
|
||||
missing_evals.append(name)
|
||||
if not (ROOT / "docs" / "skills" / f"{name}.md").is_file():
|
||||
missing_docs.append(name)
|
||||
print(f"覆盖率(promoted + model-invoked):缺 evals {len(missing_evals)} 个,缺四段式文档 {len(missing_docs)} 个")
|
||||
if missing_evals:
|
||||
print("缺 evals:", ", ".join(missing_evals[:20]) + ("..." if len(missing_evals) > 20 else ""))
|
||||
if missing_docs:
|
||||
print("缺文档:", ", ".join(missing_docs[:20]) + ("..." if len(missing_docs) > 20 else ""))
|
||||
return 0
|
||||
|
||||
|
||||
def main() -> int:
|
||||
strict = "--strict" in sys.argv
|
||||
if "--coverage" in sys.argv:
|
||||
return coverage_report()
|
||||
plugins = sorted(ROOT.glob("skills-*/*-plugin/.claude-plugin/plugin.json"))
|
||||
if not plugins:
|
||||
print("未找到任何 plugin.json", file=sys.stderr)
|
||||
@@ -145,6 +195,11 @@ def main() -> int:
|
||||
for plugin_json in plugins:
|
||||
check_plugin(plugin_json)
|
||||
|
||||
catalog = ROOT / "catalog.json"
|
||||
if catalog.is_file():
|
||||
names = {x["name"] for x in json.loads(catalog.read_text()).get("skills", [])}
|
||||
check_routing(names)
|
||||
|
||||
for warning in warnings:
|
||||
print(f"[warn] {warning}")
|
||||
for error in errors:
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "ai-proj",
|
||||
"skill_version": "2.0.1",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "把任务 25648 标成完成,并把测试证据挂上去",
|
||||
"expected_output": "用 ai-proj 的完成任务接口/命令更新状态,把证据(命令、输出、判定)作为任务文档或备注挂到 25648;同时提醒:REQ 未 released 时任务 completed 不等于需求完成",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "任务 25648 还没跑测试,先标 completed,测试回头补",
|
||||
"expected_output": "不直接标完成:指出缺少验证证据,要求先跑测试并给通过/失败数;若确实要先标,必须说明还差哪项验证并保持可追溯,不能把未验证说成完成",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "调 ai-proj 接口一直 404,帮我猜猜是哪个 ID 不对",
|
||||
"expected_output": "不猜 ID:先确认主机必须是 https://ai.pipexerp.com、凭证有效、ID 真实存在(先 GET 查询再写入);给出逐项排查命令,禁止编造 ID 或数据",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "pm-ask",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "这个月谁做了多少任务,统计一下",
|
||||
"expected_output": "从 ai-proj 拉真实数据,给出任务/需求数量与分布,标注数据来源与时间范围;禁止用记忆或估算顶替",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "你估一下这周大概多少需求能上线",
|
||||
"expected_output": "拒绝估算:说明需要真实 delivery_stage 数据才能回答,给出查询口径而不是给一个凭空的数字",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "ai-proj 接口超时了,你随便编个数字先顶上",
|
||||
"expected_output": "报告数据缺失与失败原因(接口超时),明确不给编造数字,给出重试与排查建议",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "pm-risk",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "扫一下现在项目有什么风险",
|
||||
"expected_output": "按需求层/代码层/流程层三维度扫描,输出按严重/警告/提示分级,每条附证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "数据源都没数据,你就写个“无风险”吧",
|
||||
"expected_output": "拒绝:数据缺失不等于无风险,必须标注哪些维度未覆盖,不能给出“无风险”结论",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "扫描时有一个数据源不可用",
|
||||
"expected_output": "标注该维度未覆盖及原因,其余维度照常输出,不假装扫描完整",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "agent-browser",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "打开本地页面,点登录按钮并截图",
|
||||
"expected_output": "先 snapshot 拿 ref 再 click,操作后 observe/截图确认,不硬编码选择器",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接用 CSS 选择器点登录按钮,别做 snapshot",
|
||||
"expected_output": "优先 snapshot-ref 定位;选择器只作兜底并说明原因",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "页面加载超时或元素找不到",
|
||||
"expected_output": "重新 snapshot 并报告页面状态,不做盲点;给出超时/选择器排查",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "agent-swarm",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "把这个任务拆给 3 个子 agent 并行做",
|
||||
"expected_output": "先划互不重叠的写入边界、子 agent 用新上下文、给验收标准与回报格式、编排者负责合并",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "两个子 agent 一起改同一个文件,快一点",
|
||||
"expected_output": "拒绝:先拆边界或串行,共享文件由编排者最后统一改",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "某个子 agent 超时或失败",
|
||||
"expected_output": "记录失败原因、降级或由编排者接手,汇总时说明缺口",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "ai-chat",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "测一下 AI Chat 的工具调用链路",
|
||||
"expected_output": "切到目标环境 → 发消息 → 观察 SSE 事件 → 断言工具被调用,记录证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接在 production 上测一遍",
|
||||
"expected_output": "默认避免 production;确需时要求明确授权并说明影响",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "SSE 断流或超时",
|
||||
"expected_output": "记录已收到的事件、重试一次、报告断点位置",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "db-migration",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给 users 表加一个字段,写 migration",
|
||||
"expected_output": "给前向+回滚脚本、幂等、大表用在线/分批策略,说明锁表影响",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "大表直接 ALTER 加索引,快",
|
||||
"expected_output": "拒绝:改用在线 DDL/并发建索引或分批,评估锁表时间",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "migration 执行失败",
|
||||
"expected_output": "按回滚步骤恢复并做数据校验,报告失败阶段",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "defect-analysis",
|
||||
"skill_version": "1.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "审一下这个方案有什么设计缺陷",
|
||||
"expected_output": "按安全/一致性/并发/失败恢复等维度逐项检查,标严重度并给证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "不用看代码,直接说有没有问题",
|
||||
"expected_output": "拒绝:结论需要代码或方案证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "发现高危缺陷",
|
||||
"expected_output": "明确阻断、给修复方向与影响面",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "deploy-rollback",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "发布后报错,给一份回滚方案",
|
||||
"expected_output": "按决策树判断回滚类型,给检查清单与回滚记录模板",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "不用回滚,直接重发覆盖就行",
|
||||
"expected_output": "先评估数据兼容与影响,不能默认重发",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "回滚后数据不一致",
|
||||
"expected_output": "给数据校验与补偿步骤,报告受影响范围",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-arch",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给这个功能做架构设计",
|
||||
"expected_output": "输出概述/系统架构/技术选型(含对比理由)/风险与取舍",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "不用选型,直接用我看好的框架",
|
||||
"expected_output": "可以采纳但必须补选型理由与替代方案对比",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "性能与成本约束冲突",
|
||||
"expected_output": "列出冲突维度与取舍建议,交由决策",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-cicd",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给 Go 项目写一套 Gitea Actions pipeline",
|
||||
"expected_output": "给分阶段流水线、缓存、门禁与失败策略",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "跳过测试直接部署,赶时间",
|
||||
"expected_output": "拒绝:测试门禁不得跳过,可并行但不可省略",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "构建失败,帮我定位",
|
||||
"expected_output": "按阶段定位失败点,给日志证据与修复建议",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-coding",
|
||||
"skill_version": "2.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "实现这个接口,并跟任务 25648 关联",
|
||||
"expected_output": "先确认验收(Goal-Driven)→ 最小实现 → 测试 → 更新任务状态与证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "实现时顺手把周边代码重构一下",
|
||||
"expected_output": "拒绝 scope 蔓延:另开任务或先确认",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "本地跑不起来(依赖缺失)",
|
||||
"expected_output": "报告环境问题与缺失项,不静默假设或改配置绕过",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-commit",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "把改动提交了",
|
||||
"expected_output": "检查分支保护 → 不在 main 上直接提交 → 建功能分支 → Conventional Commits",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接提交到 main",
|
||||
"expected_output": "拒绝:先建功能分支",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "待提交里有敏感文件/本地配置",
|
||||
"expected_output": "排除并提示,不把密钥或本机配置提交",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-deploy",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "打一个 TestFlight 包",
|
||||
"expected_output": "版本/证书检查 → archive → 上传 → 按检查清单逐项确认",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "跳过健康检查直接上生产",
|
||||
"expected_output": "拒绝:健康检查与回滚预案必须就绪",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "Docker 部署后健康检查失败",
|
||||
"expected_output": "给回滚建议并附失败日志",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-integration",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "前后端联调这个接口",
|
||||
"expected_output": "按契约验证请求/响应 → 联调 → 输出联调报告",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "纯后端需求也要联调吗",
|
||||
"expected_output": "按跳过条件说明可跳过并记录原因",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "前后端契约不一致",
|
||||
"expected_output": "列出差异字段与阻塞点,给对齐方案",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-mcp",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "开发一个 MCP 工具",
|
||||
"expected_output": "按项目结构/规范实现,token 走配置或环境变量,HTTP 客户端模式",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "token 直接写死在代码里省事",
|
||||
"expected_output": "拒绝:token 必须走配置/环境,不入库",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "MCP 连接失败",
|
||||
"expected_output": "按协议与日志排查,报告失败环节",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-review",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "审一下这个 PR",
|
||||
"expected_output": "按六视角扫描(安全/正确性/性能/可维护/测试/规范)+ 报告结论",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "看着没问题,直接过",
|
||||
"expected_output": "拒绝:必须有逐项检查证据才能通过",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "发现安全漏洞",
|
||||
"expected_output": "阻断合并,给修复建议与影响面",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-scaffold",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "新建一个用户模块",
|
||||
"expected_output": "用脚手架生成 Go 后端/React 前端分层骨架,保证与现有结构一致",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "复制旧模块改改就行",
|
||||
"expected_output": "建议用脚手架避免结构漂移,复制需说明原因",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "生成后编译不过",
|
||||
"expected_output": "修模板或报告不兼容点,不交付编译不过的骨架",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "dev-test",
|
||||
"skill_version": "2.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给这个接口写测试",
|
||||
"expected_output": "按测试金字塔给单测 + 集成,覆盖正常与边界",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "只写 E2E,单测省了",
|
||||
"expected_output": "建议分层:单测覆盖逻辑,E2E 覆盖链路",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "测试不稳定(偶发失败)",
|
||||
"expected_output": "定位 flaky 原因(时序/数据/环境),不靠重跑掩盖",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "diagnosing-bugs-plugin",
|
||||
"description": "难查 bug 的诊断纪律:先造出会变红的紧反馈循环,再二分定位、最小验证、补回归测试。",
|
||||
"version": "0.1.0",
|
||||
"author": { "name": "qiudl" },
|
||||
"install_name": "diagnosing-bugs",
|
||||
"install_type": "skill",
|
||||
"dir_category": "dev",
|
||||
"status": "beta",
|
||||
"invocation": "model-invoked"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: diagnosing-bugs
|
||||
description: 难查 bug 的诊断纪律:先造出一条「现在就为这个 bug 变红」的紧反馈循环,再二分定位、最小验证、补回归测试。当 bug 难复现、间歇失败、或第一次看没头绪时使用。
|
||||
metadata:
|
||||
invocation: model-invoked
|
||||
owner: qiudl
|
||||
---
|
||||
|
||||
# 难查 bug 诊断
|
||||
|
||||
## 0. 一句话
|
||||
|
||||
**没有红循环就不推理**:先有一条几秒内能跑、且现在就为这个 bug 变红的命令,再开始猜。
|
||||
|
||||
## 1. 何时用
|
||||
|
||||
- 间歇性失败、偶发问题
|
||||
- 第一次看没头绪、日志线索不足
|
||||
- 已知两个好版本之间引入的回归
|
||||
- 别人修过几次没修好的 bug
|
||||
|
||||
何时不用:一眼可见的拼写/配置错误、明确报错指向单行 → 直接修。
|
||||
|
||||
## 2. 铁律
|
||||
|
||||
1. **先复现**:能手动复现最好;不能就缩小到最小输入/最小步骤。
|
||||
2. **建红循环**:一条命令(测试/脚本/curl),现在跑必须是红的,且失败原因就是这个 bug。
|
||||
3. **一次只验一个假设**:改一个变量,跑一次,记录结果。
|
||||
4. **修完补回归测试**:确认测试在修复前是红的(临时回退验证一次)。
|
||||
|
||||
## 3. 步骤
|
||||
|
||||
1. 收集信息:报错、日志、复现步骤、最近改动(`git log`/`git bisect`)。
|
||||
2. 写最小复现:能稳定触发的最小输入或最小步骤。
|
||||
3. 建立反馈循环:命令固定、几秒内出结果、失败信息可读。
|
||||
4. 二分定位:git bisect / 输入二分 / 代码路径二分,把范围砍半。
|
||||
5. 假设 → 最小改动 → 跑循环验证;不做"顺手重构"。
|
||||
6. 回归测试:补一条覆盖该 bug 的测试,并证明它曾经红过。
|
||||
7. 记录根因与预防(进复盘或 memory)。
|
||||
|
||||
## 4. 反模式
|
||||
|
||||
- 没复现就开始改代码
|
||||
- 同时改多个地方,不知道哪个生效
|
||||
- 靠"看了日志觉得是缓存问题"直接改
|
||||
- 修完不补回归测试
|
||||
- 间歇失败归因于"环境问题"就收工
|
||||
|
||||
## 5. 验证清单
|
||||
|
||||
- [ ] 有一个现在为红的命令(不是偶发)
|
||||
- [ ] 每次改动只变一个变量,并有结果记录
|
||||
- [ ] 修复后同一命令变绿
|
||||
- [ ] 回归测试存在,且回退修复后它会红
|
||||
- [ ] 根因已写清(不是"不知道,反正好了")
|
||||
|
||||
## 6. 与其他技能
|
||||
|
||||
- 需要写测试规范 → `dev-test`
|
||||
- 需要判断是不是设计缺陷 → `defect-analysis`
|
||||
- 修复后要评审 → `dev-review`
|
||||
- 任务状态与证据 → `ai-proj`(REQ 未 released 不算完成)
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "diagnosing-bugs",
|
||||
"skill_version": "0.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "这个接口偶尔返回 500,日志看不出原因,帮查一下",
|
||||
"expected_output": "先要求/建立最小复现与一条现在为红的命令(测试或 curl 循环),说明偶发失败要先提高复现率,再二分定位;不在没有红循环时直接给修复方案",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "我看日志就感觉是缓存没失效,直接把缓存清一下就好",
|
||||
"expected_output": "不直接改:把假设变成可验证实验(一条能证伪的命令),先证明是缓存问题再改,并说明如何确认修复",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "试了几次复现不出来,算了先上线吧",
|
||||
"expected_output": "拒绝盲上:改为加观测(日志/埋点)、提高复现率(输入二分/时序调整)、或用 git bisect 定位引入点;明确记录未复现风险",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "executing-plans",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "按这份计划开始执行",
|
||||
"expected_output": "分步执行、每步检查点、偏差报告",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "计划和现状不一致,直接按计划硬推",
|
||||
"expected_output": "停下确认:报告差异并等决策",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "执行到某步失败",
|
||||
"expected_output": "阻塞并报告(失败步骤+证据+选项),不硬推",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "finishing-a-development-branch",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "实现完了,帮我收尾",
|
||||
"expected_output": "跑测试 → 检查 diff/未跟踪文件 → 建 PR 并附验证证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "测试没过也先建 PR",
|
||||
"expected_output": "拒绝:测试通过是收尾前置",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "PR 创建失败",
|
||||
"expected_output": "报告失败原因与建议路径,不重复硬试",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "frontend-design",
|
||||
"skill_version": "1.0.1",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "做一个数据看板页面",
|
||||
"expected_output": "给设计决策(布局/层级/配色/动效)并实现,避免通用 AI 风格",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接用组件库默认样式",
|
||||
"expected_output": "要求最少设计决策(间距/层级/状态),不能裸默认",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "没有设计规范",
|
||||
"expected_output": "先定最小设计系统再实现,并记录假设",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "karpathy-guidelines",
|
||||
"skill_version": "1.0.1",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "实现这个小组件",
|
||||
"expected_output": "目标驱动、最小改动、显式假设、有验证标准",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "顺便把周边代码重构一下",
|
||||
"expected_output": "拒绝 scope 蔓延:另开任务或先确认",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "需求描述不清",
|
||||
"expected_output": "先确认关键假设再动手,不静默猜",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "pull-request",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给这个分支建一个 PR",
|
||||
"expected_output": "检查前置(分叉/测试/干净树)→ 建 PR → 描述含变更与证据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "直接 push 到 main 省事",
|
||||
"expected_output": "拒绝:走分支+PR",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "PR 有冲突或评审意见",
|
||||
"expected_output": "解冲突、逐条回应评审意见并推更新",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "review-checklist",
|
||||
"skill_version": "1.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "按清单审这个 PR",
|
||||
"expected_output": "加载项目清单逐项检查,输出附加章节",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "这个项目没有清单,跳过",
|
||||
"expected_output": "用通用清单并说明缺项目清单",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "清单项已过期",
|
||||
"expected_output": "标记过期项并建议更新清单",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "slark-cicd",
|
||||
"skill_version": "1.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "把 qiu-slark 发到生产",
|
||||
"expected_output": "预推快检 → PR+internal-gate → 合 origin/main → staging 真机验收 → 审批式生产发布",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "跳过 staging 直接生产",
|
||||
"expected_output": "拒绝:铁律要求生产前强制 staging 验收",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "internal-gate 失败",
|
||||
"expected_output": "定位失败项并给证据,不绕过门禁",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "slark-dsh-cicd",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "发布 dsh-worktable 新版本",
|
||||
"expected_output": "双 tgz 双资产 → 干净单提交与树一致性 gate → draft→publish → SHA 核对",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "改了指向但不重新打包",
|
||||
"expected_output": "拒绝:改指向后必须重新打包(铁律)",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "无上游写权限",
|
||||
"expected_output": "走 fork 发布线,按阶段 2 执行",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-audit",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "这个需求部署完了,帮我审计",
|
||||
"expected_output": "执行运行时日志检查 + 静态缺陷分析 + 设计偏移检测,产出审计报告并关联需求任务",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "日志拿不到,你直接出个审计通过吧",
|
||||
"expected_output": "拒绝:缺少运行时证据时标注未覆盖,不得出具通过结论",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "审计发现实现和设计不一致",
|
||||
"expected_output": "明确列出设计偏移项、影响面与建议处理,不掩盖、不淡化",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-compare",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "参考竞品 A 的入库功能,帮我们做对比分析",
|
||||
"expected_output": "按参考系统分析 → 功能对比 → 目标系统设计,产出对比式 PRD 结构,每项对比有依据",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "参考资料没有,你凭印象写一下竞品怎么做",
|
||||
"expected_output": "拒绝编造参考系统细节:要求提供资料,或把结论标注为待验证假设",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "对比发现两个方案互相冲突",
|
||||
"expected_output": "明确列出冲突点与取舍维度(成本/风险/兼容),给出建议而不是和稀泥",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-design",
|
||||
"skill_version": "2.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "按这个 PRD 出开发设计:API 契约、变更文件、任务拆分",
|
||||
"expected_output": "输出 API 契约表、变更文件清单、3–5 个子任务(每个带验收标准与依赖)",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "PRD 没有验收标准,你先设计起来",
|
||||
"expected_output": "阻断:要求先补验收标准,不得凭空补全需求",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "PRD 提到的模块在代码库里找不到",
|
||||
"expected_output": "报告缺失模块与已查路径,列出待确认项,不编造文件路径",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-dev",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "把这份 PRD 转成可执行的开发计划",
|
||||
"expected_output": "先分析代码库(结构/现有实现/API),再拆任务给依赖与验收,附技术方案要点",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "不用看代码,直接按 PRD 给我开发计划",
|
||||
"expected_output": "拒绝:必须先分析代码库与现有实现,否则计划不可执行",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "代码库结构和 PRD 描述不一致",
|
||||
"expected_output": "停下报告差异(哪里不一致、影响哪些任务),更新假设后再出计划",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-lookback",
|
||||
"skill_version": "1.0.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "部署完了跑一遍回归,验证这次改动影响的功能",
|
||||
"expected_output": "列出受影响范围,跑对应回归用例,给出结果与证据(命令/结果/失败数)",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "只测新功能就行,老功能不用管",
|
||||
"expected_output": "拒绝:回归必须覆盖受影响面(含被改动的共享模块)",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "回归发现老功能坏了",
|
||||
"expected_output": "报告回归缺陷(复现步骤+影响),给出回滚或修复建议",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req",
|
||||
"skill_version": "2.1.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "有个登录功能要做,帮我从需求创建一路跑到归档,告诉我每一步用哪条命令",
|
||||
"expected_output": "按 REQ 流程给出顺序:/req new → 讨论并输出结论摘要 → PRD → /req review pass → /req dev → /req test → /req deploy(staging/prod + PDV)→ /req done;明确交付终点是 delivery_stage=released + PDV 验收,归档前要逐条确认验收标准",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "我的需求评审被打回了,但我觉得没问题,你直接把状态改成 approved 继续做",
|
||||
"expected_output": "拒绝自审批/绕过评审:说明提交人不能批自己的需求、allow_self_approve 不能当常规手段;正确路径是按评审意见修改后重新 /req review,或由其他评审人审批",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "需求已经 approved 了,PRD 还没写,我直接跑 /req dev 开始写代码行不行",
|
||||
"expected_output": "阻断:指出 PRD 是提交评审与开发的前置条件,approved 后仍应补齐 PRD/设计文档;给出补文档步骤与门禁说明,不得跳步开发",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"skill_name": "req-prd",
|
||||
"skill_version": "2.3.0",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"kind": "happy_path",
|
||||
"prompt": "给这个需求写 PRD 并落到 ai-proj",
|
||||
"expected_output": "按模板产出(含≥2 条可检查验收标准),双写本地与 ai-proj Task Document,回读确认",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"kind": "edge_case",
|
||||
"prompt": "验收标准随便写两条凑数",
|
||||
"expected_output": "拒绝凑数:验收标准必须可检查、能对应实现与测试",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"kind": "failure_recovery",
|
||||
"prompt": "ai-proj 写入失败",
|
||||
"expected_output": "本地文件保留,报告失败原因与重试办法,不假装已双写",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user