@heihei0299/matt-skills 1.3.3 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/.agents/skills/ci-guard/SKILL.md +15 -25
  2. package/.agents/skills/commit-check/SKILL.md +13 -18
  3. package/.agents/skills/diagnose-fix/SKILL.md +0 -1
  4. package/.agents/skills/grill-to-spec/SKILL.md +0 -3
  5. package/.agents/skills/scaffold-functional-test/SKILL.md +0 -2
  6. package/.agents/skills/tdd-implement/SKILL.md +19 -7
  7. package/.agents/skills/tdd-implement/references/orchestration.md +2 -2
  8. package/.agents/skills/tdd-implement/references/stages.md +5 -10
  9. package/README.md +53 -52
  10. package/bin/cli.js +215 -63
  11. package/config/engineering.json +20 -0
  12. package/package.json +2 -1
  13. package/scripts/sync-upstream.js +68 -42
  14. package/template/.agents/skills/ask-matt/PHASE-BOUNDARIES.md +55 -0
  15. package/template/.agents/skills/ask-matt/SKILL.md +90 -0
  16. package/template/.agents/skills/ask-matt/agents/openai.yaml +5 -0
  17. package/template/{.opencode → .agents}/skills/ci-guard/SKILL.md +15 -25
  18. package/template/.agents/skills/code-review/SKILL.md +87 -0
  19. package/template/.agents/skills/code-review/agents/openai.yaml +3 -0
  20. package/template/.agents/skills/codebase-design/DEEPENING.md +37 -0
  21. package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
  22. package/template/.agents/skills/codebase-design/SKILL.md +114 -0
  23. package/template/.agents/skills/codebase-design/agents/openai.yaml +3 -0
  24. package/template/{.pi → .agents}/skills/commit-check/SKILL.md +13 -18
  25. package/template/{.pi → .agents}/skills/diagnose-fix/SKILL.md +0 -1
  26. package/template/.agents/skills/diagnosing-bugs/SKILL.md +138 -0
  27. package/template/.agents/skills/diagnosing-bugs/agents/openai.yaml +3 -0
  28. package/template/.agents/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
  29. package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +47 -0
  30. package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  31. package/template/.agents/skills/domain-modeling/SKILL.md +74 -0
  32. package/template/.agents/skills/domain-modeling/agents/openai.yaml +3 -0
  33. package/template/.agents/skills/grill-me/SKILL.md +7 -0
  34. package/template/.agents/skills/grill-me/agents/openai.yaml +5 -0
  35. package/template/{.pi → .agents}/skills/grill-to-spec/SKILL.md +0 -3
  36. package/template/.agents/skills/grill-with-docs/SKILL.md +7 -0
  37. package/template/.agents/skills/grill-with-docs/agents/openai.yaml +5 -0
  38. package/template/.agents/skills/grilling/SKILL.md +28 -0
  39. package/template/.agents/skills/grilling/agents/openai.yaml +3 -0
  40. package/template/.agents/skills/handoff/SKILL.md +16 -0
  41. package/template/.agents/skills/handoff/agents/openai.yaml +5 -0
  42. package/template/.agents/skills/implement/SKILL.md +15 -0
  43. package/template/.agents/skills/implement/agents/openai.yaml +5 -0
  44. package/template/.agents/skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
  45. package/template/.agents/skills/improve-codebase-architecture/SKILL.md +71 -0
  46. package/template/.agents/skills/improve-codebase-architecture/agents/openai.yaml +5 -0
  47. package/template/.agents/skills/instance-test/SKILL.md +70 -0
  48. package/template/.agents/skills/instance-test/agents/openai.yaml +5 -0
  49. package/template/.agents/skills/instance-test/references/instances.md +75 -0
  50. package/template/.agents/skills/prototype/LOGIC.md +67 -0
  51. package/template/.agents/skills/prototype/SKILL.md +26 -0
  52. package/template/.agents/skills/prototype/UI.md +112 -0
  53. package/template/.agents/skills/prototype/agents/openai.yaml +3 -0
  54. package/template/.agents/skills/research/SKILL.md +12 -0
  55. package/template/.agents/skills/research/agents/openai.yaml +3 -0
  56. package/template/.agents/skills/resolving-merge-conflicts/SKILL.md +14 -0
  57. package/template/.agents/skills/resolving-merge-conflicts/agents/openai.yaml +3 -0
  58. package/template/{.opencode → .agents}/skills/scaffold-functional-test/SKILL.md +0 -2
  59. package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +116 -0
  60. package/template/.agents/skills/setup-matt-pocock-skills/agents/openai.yaml +5 -0
  61. package/template/.agents/skills/setup-matt-pocock-skills/domain.md +51 -0
  62. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-github.md +45 -0
  63. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
  64. package/template/.agents/skills/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
  65. package/template/.agents/skills/setup-matt-pocock-skills/triage-labels.md +15 -0
  66. package/template/.agents/skills/tdd/SKILL.md +38 -0
  67. package/template/.agents/skills/tdd/agents/openai.yaml +3 -0
  68. package/template/.agents/skills/tdd/mocking.md +59 -0
  69. package/template/.agents/skills/tdd/tests.md +77 -0
  70. package/template/.agents/skills/tdd-implement/SKILL.md +60 -0
  71. package/template/{.pi → .agents}/skills/tdd-implement/references/orchestration.md +2 -2
  72. package/template/{.opencode → .agents}/skills/tdd-implement/references/stages.md +5 -10
  73. package/template/.agents/skills/teach/GLOSSARY-FORMAT.md +35 -0
  74. package/template/.agents/skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
  75. package/template/.agents/skills/teach/MISSION-FORMAT.md +31 -0
  76. package/template/.agents/skills/teach/RESOURCES-FORMAT.md +32 -0
  77. package/template/.agents/skills/teach/SKILL.md +140 -0
  78. package/template/.agents/skills/teach/agents/openai.yaml +5 -0
  79. package/template/.agents/skills/to-questionnaire/SKILL.md +54 -0
  80. package/template/.agents/skills/to-questionnaire/agents/openai.yaml +5 -0
  81. package/template/.agents/skills/to-spec/SKILL.md +75 -0
  82. package/template/.agents/skills/to-spec/agents/openai.yaml +5 -0
  83. package/template/.agents/skills/to-tickets/SKILL.md +105 -0
  84. package/template/.agents/skills/to-tickets/agents/openai.yaml +5 -0
  85. package/template/.agents/skills/triage/AGENT-BRIEF.md +207 -0
  86. package/template/.agents/skills/triage/OUT-OF-SCOPE.md +105 -0
  87. package/template/.agents/skills/triage/SKILL.md +112 -0
  88. package/template/.agents/skills/triage/agents/openai.yaml +5 -0
  89. package/template/.agents/skills/wait-what/SKILL.md +7 -0
  90. package/template/.agents/skills/wait-what/agents/openai.yaml +5 -0
  91. package/template/.agents/skills/wayfinder/SKILL.md +128 -0
  92. package/template/.agents/skills/wayfinder/agents/openai.yaml +5 -0
  93. package/template/.agents/skills/wizard/SKILL.md +44 -0
  94. package/template/.agents/skills/wizard/agents/openai.yaml +3 -0
  95. package/template/.agents/skills/wizard/template.sh +204 -0
  96. package/template/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +22 -0
  97. package/template/.agents/skills/writing-for-agents/SKILL.md +81 -0
  98. package/template/.agents/skills/writing-for-agents/agents/openai.yaml +3 -0
  99. package/template/.opencode/CONTEXT.md +7 -7
  100. package/template/.opencode/skills/.gitkeep +0 -0
  101. package/template/.opencode/skills/README.md +4 -0
  102. package/template/.pi/CONTEXT.md +7 -7
  103. package/template/.pi/skills/.gitkeep +0 -0
  104. package/template/.pi/skills/README.md +4 -0
  105. package/template/AGENTS.md +4 -6
  106. package/template/.opencode/skills/commit-check/SKILL.md +0 -67
  107. package/template/.opencode/skills/diagnose-fix/SKILL.md +0 -66
  108. package/template/.opencode/skills/grill-to-spec/SKILL.md +0 -83
  109. package/template/.opencode/skills/tdd-implement/SKILL.md +0 -48
  110. package/template/.opencode/skills/tdd-implement/references/orchestration.md +0 -136
  111. package/template/.pi/skills/ci-guard/SKILL.md +0 -104
  112. package/template/.pi/skills/ci-guard/agents/openai.yaml +0 -5
  113. package/template/.pi/skills/commit-check/agents/openai.yaml +0 -5
  114. package/template/.pi/skills/commit-check/scripts/scan-sensitive.sh +0 -36
  115. package/template/.pi/skills/diagnose-fix/agents/openai.yaml +0 -5
  116. package/template/.pi/skills/diagnose-fix/references/anti-patterns.md +0 -20
  117. package/template/.pi/skills/grill-to-spec/agents/openai.yaml +0 -5
  118. package/template/.pi/skills/grill-to-spec/references/rules.md +0 -33
  119. package/template/.pi/skills/scaffold-functional-test/SKILL.md +0 -77
  120. package/template/.pi/skills/scaffold-functional-test/agents/openai.yaml +0 -5
  121. package/template/.pi/skills/tdd-implement/SKILL.md +0 -48
  122. package/template/.pi/skills/tdd-implement/agents/openai.yaml +0 -5
  123. package/template/.pi/skills/tdd-implement/references/stages.md +0 -316
  124. /package/template/{.opencode → .agents}/skills/ci-guard/agents/openai.yaml +0 -0
  125. /package/template/{.opencode → .agents}/skills/commit-check/agents/openai.yaml +0 -0
  126. /package/template/{.opencode → .agents}/skills/commit-check/scripts/scan-sensitive.sh +0 -0
  127. /package/template/{.opencode → .agents}/skills/diagnose-fix/agents/openai.yaml +0 -0
  128. /package/template/{.opencode → .agents}/skills/diagnose-fix/references/anti-patterns.md +0 -0
  129. /package/template/{.opencode → .agents}/skills/grill-to-spec/agents/openai.yaml +0 -0
  130. /package/template/{.opencode → .agents}/skills/grill-to-spec/references/rules.md +0 -0
  131. /package/template/{.opencode → .agents}/skills/scaffold-functional-test/agents/openai.yaml +0 -0
  132. /package/template/{.opencode → .agents}/skills/tdd-implement/agents/openai.yaml +0 -0
@@ -30,8 +30,6 @@ description: "Guard the GitHub Actions release pipeline: orchestrate workflow fl
30
30
  - `jobs` 依赖:`publish.needs: [build, verify]`,**禁止** `needs: build` 单依赖。门禁失效的直接原因就是 `verify` 红仍发包
31
31
  - `permissions` 最小化:`verify`/`build` 只需 `contents: read`,仅 `publish` 保留 `contents: write` + `packages: write`(或 `id-token: write` 若用 OIDC)
32
32
  - `concurrency`:`group: ci-${{ github.ref }}` + `cancel-in-progress: true`,避免同分支并行互踩
33
- - `cache`:`rust-cache` 或 `actions/cache` 缓存 `~/.cargo` + `target`,`actions/setup-node` 加 `cache: npm`,避免每次 `npm install` 重装
34
- - `find changed Rust files`:`git diff origin/main...HEAD` 在 tag 事件下为空,改为 `git diff --name-only HEAD~1...HEAD` 或直接全量 `cargo fmt --check` / `clippy`,避免误跳过
35
33
 
36
34
  **完成条件**:
37
35
  - [ ] `git diff HEAD -- .github/workflows/ci.yml` 显示 `on.push.branches` 存在
@@ -40,23 +38,26 @@ description: "Guard the GitHub Actions release pipeline: orchestrate workflow fl
40
38
 
41
39
  ---
42
40
 
43
- ### ② 预发布 gate —— 在写盘之前变红
41
+ ### ② 预发布 gate —— 测试 GitHub Action 流程
44
42
 
45
- 本段是**硬门槛**,顺序固定:`fmtclippytest build`,任一步红即阻断 `publish`。
43
+ 本段是**硬门槛**,顺序固定:`action lint workflow dry-run dispatch 验证`,任一步红即阻断 `publish`。
46
44
 
47
- **fmt / clippy**:
48
- - `rustfmt --check` `cargo clippy --all-targets -- -D warnings` 必须与本地一致(`rust-toolchain.toml` 锁定 `stable` 版本)
49
- - 允许的 `-A` 必须显式列出(如本仓 `-A clippy::manual_checked_ops` 等 4 项),不批量 `-A clippy::all`
45
+ **action lint**:
46
+ - `actionlint` 校验 `.github/workflows/ci.yml` 语法与 `on/needs/permissions` 完整性
47
+ - `yamllint` 检查缩进与重复键
50
48
 
51
- **test(关键)**:
52
- - 落盘测试(如 `web::tests` 直写 `config.json` / `models.json`)**必须**测试隔离:`config_dir()` / `pi_dir()` / `models_path()` 在 `#[cfg(test)]` 下重定向到 `temp/pi-switch-test-<pid>`(参考 `src-rust/proxy.rs:115 init_test_state_dir()`,`config.rs:460` 为未隔离反例;曾用 `PI_SWITCH_CONFIG_DIR` 环境覆盖后被 `20f6f86` 误删,即回归)
53
- - 若暂未隔离,CI 侧以 `cargo test --release --lib -- --test-threads=1` 串行化为**过渡**(`2d68f62` 方案,322/322 稳定),并在代码侧记录 `TODO(ci-guard): 恢复 config_dir 测试隔离后去掉 --test-threads=1`
54
- - `verify` 必须跑 `cargo test --lib`(或 `--release --lib` 与发布一致),不跳过;`build` 矩阵 5 目标仅验编译,不代验测试
49
+ **workflow dry-run**:
50
+ - `act --dry-run` `gh workflow view` 模拟 `verify/build/publish` job 依赖与 `if` 条件
51
+ - 校验 `publish.needs` `verify` `workflow_dispatch` 可手动触发
52
+
53
+ **dispatch 验证**:
54
+ - 通过 `gh workflow run ci.yml --ref main -f dry_run=true` 触发试运行,观察 `verify` 日志与产物上传
55
+ - 失败即阻断 `publish`,日志留存于 Actions
55
56
 
56
57
  **完成条件**:
57
- - [ ] 本地 `cargo test --lib -- --test-threads=1` 322/322 且 `cargo test --lib`(并行)亦 322/322 或已记录隔离 TODO
58
- - [ ] `cargo clippy --all-targets` 0 warning
59
- - [ ] `npm run build:webui` 在 `verify` 与 `build` 均执行(本仓 WebUI 缺失会导致 `publish` 产物不一致)
58
+ - [ ] `actionlint` 0 error
59
+ - [ ] `act --dry-run` job 依赖正确
60
+ - [ ] `workflow_dispatch` 试运行通过
60
61
 
61
62
  ---
62
63
 
@@ -82,7 +83,6 @@ description: "Guard the GitHub Actions release pipeline: orchestrate workflow fl
82
83
 
83
84
  - **单依赖 publish**:`needs: build` 是本仓 7 次带病发布的根因
84
85
  - **仅 tag 触发**:`push.branches` 缺失导致主干修复无 CI
85
- - **真实落盘并行测试**:无 `#[cfg(test)]` 隔离的 `config_dir` 直写是偶发红的根因,`--test-threads=1` 只是止血
86
86
  - **静默发布**:`publish` 失败不建 issue / 不删 tag,下次 `409` 叠加
87
87
  - **`-A clippy::all`**:掩盖真实告警
88
88
 
@@ -92,13 +92,3 @@ description: "Guard the GitHub Actions release pipeline: orchestrate workflow fl
92
92
  - 修复:`2d68f62 fix(ci): gate publish on verify and serialize Rust tests`
93
93
  - 关联技能:`diagnose-fix`(通用诊断)、`commit-check`(提交前门禁)、`tdd`(测试隔离后的回归)
94
94
 
95
- ## 执行清单(粘贴即用)
96
-
97
- ```markdown
98
- - [ ] .github/workflows/ci.yml: on.push.branches: [main] 已加
99
- - [ ] publish.needs: [build, verify]
100
- - [ ] verify: cargo test --release --lib -- --test-threads=1(或已隔离则去掉该 flag)
101
- - [ ] config.rs: #[cfg(test)] config_dir/pi_dir → temp(或 TODO 已记录)
102
- - [ ] workflow_dispatch 可手动触发
103
- - [ ] npm view 回读 + 失败建 issue
104
- ```
@@ -5,35 +5,32 @@ description: "Run the pre-commit gate before any commit: verify docs match the i
5
5
 
6
6
  # Commit Check
7
7
 
8
- 提交前的**门禁检查**:审查文档对齐 README → 保持目录卫生 → 规范 commit message,四项全过才允许 commit。本技能是轻量检查清单,不重写 code-review 的审查语义([code-review](.agents/skills/code-review/SKILL.md) 是唯一事实源),也不替代任何完整实现流程——它是任何 commit 前的通用门禁,无论改动来自哪个流程。
8
+ 提交前的**门禁检查**:文档一致性 → 保持目录卫生 → 规范 commit message,三项全过才允许 commit。本技能是轻量检查清单,不重写 code-review 的审查语义([code-review](.agents/skills/code-review/SKILL.md) 是唯一事实源),也不替代任何完整实现流程——它是任何 commit 前的通用门禁,无论改动来自哪个流程。
9
9
 
10
- ## 四项检查(全部通过才 commit)
10
+ ## 三项检查(全部通过才 commit)
11
11
 
12
- ### ① 审查文档
12
+ ### ① 文档一致性
13
+ > 覆盖原 ① 审查文档 的全部检查项与原 ② 对齐 README 的全部检查项
13
14
 
14
15
  - 本次改动涉及的行为/接口/配置/命令是否有对应文档(README、`docs/`、技能正文)描述
15
16
  - 文档描述与实现一致:无过期信息、无声称未实现的功能、无遗留的旧接口描述
16
- - 涉及技能/模板/配置改动时,检查正文引用的路径与实际一致(如相对路径、目录结构)
17
17
  - 发现不一致 → 先修文档(或更新实现),再进入下一步
18
-
19
- ### ② 对齐 README
20
-
21
18
  - 改动涉及项目结构、分发文件、技能/命令清单时,检查 README 中对应的结构说明、映射表、清单是否同步
22
19
  - 改动涉及用法/CLI/配置/示例时,检查 README 对应描述与实际一致
23
20
  - 存在模板镜像/分发副本时,确认源文件与副本同步(如有守护测试,跑一遍确认)
24
- - **特例:skill 与 AGENTS.md 的模板同步增量**:若 `git diff HEAD` 仅涉及 `AGENTS.md` 的 `tdd-implement ↔ implement` 路由行 + `.agents/skills/`/`.pi/skills/`/`.opencode/skills/` 的技能文件 + `.gitignore` 的 `.pi/` 忽略,且同目录存在 `AGENTS.md.bak`(模板同步 `sync`/`init --force` 的备份),视为模板同步的预期增量,禁止自动 `checkout -- AGENTS.md` 回滚;存在性按文件系统判(`ls .agents/skills/<name> .pi/skills/<name> .opencode/skills/<name>` 任一存在即算存在,不以 `git ls-files` 为准);缺技能则正向补齐而非回滚文档
25
-
26
- ### ③ 保持目录卫生
21
+ - **特例**:`AGENTS.md` 的 `tdd-implement ↔ implement` 路由行 + 技能文件 + `.gitignore` 的 `.pi/` 忽略,且存在 `AGENTS.md.bak` 时,视为模板同步预期增量,不回滚
22
+ ### ② 保持目录卫生
27
23
 
28
24
  - `git status` 确认工作区只含预期改动:无残留未跟踪文件、无临时产物(调试脚本、日志、备份文件、`[DEBUG-...]` 残留)
29
- - 清理本次改动产生的临时文件(一次性脚本、转储、探针)——仅删本次产生的未跟踪临时产物,禁止为达干净而执行 `git reset --hard`、`git checkout .`、`git clean -fd`、`git stash push --include-untracked`、`git push --force`、`git rebase -i` 等(需显式用户确认;`stash` 如需使用改用 `--keep-index` 并在 `pop` 后校验 `git merge-base --is-ancestor $BASE_HEAD HEAD`)。详见 `CONTEXT.md` Git History Preservation 与 `docs/agents/skill-design.md` Rule 4
25
+ - 无关文件(一次性脚本、转储、探针、调试日志)直接追加至 `.gitignore`,不执行删除;仅对本次产生的 `[DEBUG-...]` 临时产物做受控清理,禁止为达干净而执行 `git reset --hard`、`git checkout .`、`git clean -fd`、`git stash push --include-untracked`、`git push --force`、`git rebase -i` 等(需显式用户确认;`stash` 如需使用改用 `--keep-index` 并在 `pop` 后校验 `git merge-base --is-ancestor $BASE_HEAD HEAD`)。详见 `CONTEXT.md` Git History Preservation 与 `docs/agents/skill-design.md` Rule 4
30
26
  - 若本次会话记录了 `BASE_HEAD`,commit 前校验 `git merge-base --is-ancestor $BASE_HEAD HEAD`,失败即经 `git reflog` 恢复后才提交
31
27
  - 确认没有敏感信息进入改动(密钥、token、`.env`、私钥)——跑 `scripts/scan-sensitive.sh`,不用手写扫描
32
28
  - 提交后工作区应为干净状态(`git status` 无输出)
33
29
 
34
- ### 规范 commit message
30
+ ### 规范 commit message
35
31
 
36
32
  - 格式遵循仓库约定(常见:`<type>(<scope>): <subject>`,type 用 feat/fix/docs/chore/refactor/test)
33
+ > 模板:`feat(<scope>): <subject>` / `fix(<scope>): <subject>` — 例 `feat(tdd): add seam login`,`fix(ci): gate publish on verify`
37
34
  - subject 描述变更内容而非过程(不说"我做了什么",说"改成了什么")
38
35
  - 需要时补充 body:动机、影响范围、验收证据(测试结果、同步确认)
39
36
  - 一次 commit 只含一个逻辑变更;多主题拆多个 commit
@@ -42,24 +39,22 @@ description: "Run the pre-commit gate before any commit: verify docs match the i
42
39
 
43
40
  - 不做全量 code review:审查语义以 [code-review](.agents/skills/code-review/SKILL.md) 为唯一事实源,本技能不重写
44
41
  - 不替代实现流程的收尾:`tdd-implement` 阶段⑦已含文档对齐与目录卫生,本技能只管独立 commit 的门禁
45
- - 不顺手重构:只检查与本次改动直接相关的内容,不扩权到无关文档/目录
46
42
  - 不发明扫描规则:敏感信息检测跑 `scripts/scan-sensitive.sh`,不每次重写 grep 模式
47
43
 
48
44
  ## 执行顺序(回合内串行)
49
45
 
50
- 1. 跑 ① 审查文档 → ② 对齐 README → ③ 保持目录卫生 → ④ 写 commit message
46
+ 1. 跑 ① 文档一致性 → ② 保持目录卫生 → ③ 写 commit message
51
47
  2. 任一项发现问题:修复后重跑该项,全部通过才 commit
52
48
  3. commit 后确认 `git status` 干净,工作结束
53
49
 
54
- **回合连续性**:四项检查在一个回合内串行完成,不等用户"继续";发现问题立即修复并重查,直到四项全过或遇到外部阻塞(权限/授权缺失)。
50
+ **回合连续性**:三项检查在一个回合内串行完成,不等用户"继续";发现问题立即修复并重查,直到三项全过或遇到外部阻塞(权限/授权缺失)。
55
51
 
56
52
  ## 出口条件
57
53
 
58
- - [ ] 文档审查通过(无过期/不一致描述)
59
- - [ ] README 对齐(涉及结构/分发改动时已同步)
54
+ - [ ] 文档一致性(文档与 README 均已对齐)
60
55
  - [ ] 目录卫生(`git status` 干净,无临时产物/敏感信息)
61
56
  - [ ] commit message 规范(遵循仓库格式)
62
- - 四项全过 → commit
57
+ - 三项全过 → commit
63
58
 
64
59
  ## 引用
65
60
 
@@ -34,7 +34,6 @@ description: "Complete diagnosis→fix→regression channel for bugs: diagnose,
34
34
 
35
35
  - **无逃生舱**:不存在正确 seam 时,**本身即 finding**——向用户明确说明"架构阻止锁定该 bug",请求 seam 决策或记录为架构改进建议(可转交 `/improve-codebase-architecture`);**不得**绕过测试直接改代码。
36
36
  - **轻量声明**:本技能不套用 tdd-implement 的重流程——不做逐 todo 的循环编排、不设 seams 确认步骤、无 typecheck/commit 前置门禁;单 seam 修复场景直走红-绿。
37
-
38
37
  **出口条件**:回归测试先红 → 写最小修复 → 回归测试变绿。
39
38
 
40
39
  ## ③ 回归验证
@@ -57,7 +57,6 @@ disable-model-invocation: true
57
57
  | 触发点 | 条件 | 动作 |
58
58
  |--------|------|------|
59
59
  | ② seam 确认 | 用户不同意 seams | → ① 补充 |
60
- | ② 综合时 | 关键信息缺失 | → ① 补采 |
61
60
  | ② 发布后 | spec 有问题 | → ① 重新循环 |
62
61
 
63
62
  ## 异常终止
@@ -72,8 +71,6 @@ disable-model-invocation: true
72
71
 
73
72
  - ① 出口达成后方可进入 ②
74
73
  - 全程不写代码、不动源码:唯一允许写入的文件是领域文档(`CONTEXT.md`/ADR)与 spec
75
- - ② 探索代码只为确认 seams 与术语——只读不改
76
- - 产出物格式细则(Glossary/ADR/Spec 守则)与反模式见 [references/rules.md](references/rules.md),不在本文件重写
77
74
 
78
75
  ## 引用
79
76
 
@@ -66,8 +66,6 @@ description: "Scaffold a repo-specific functional-test skill from spec — use w
66
66
 
67
67
  - 不替代 `tdd`/`tdd-implement` 的红绿循环与 `commit-check` 门禁
68
68
  - 不自动织入每次 `tdd-implement` 或 `commit-check`;仅 `tdd-implement --with-functional` 显式 opt-in
69
- - 不支持并行执行与 `docker` 隔离
70
- - 不处理超出混合推导锚点范围的源码静态分析隐式行为挖掘
71
69
 
72
70
  ## 引用
73
71
 
@@ -12,8 +12,20 @@ description: "TDD seam red-green loop: use when the user provides a spec/ticket
12
12
  ## 分支
13
13
 
14
14
  - **单线**:单 spec / 单 issue,走下节 Steps ①→⑦(详规见 [stages.md](references/stages.md))。
15
- - **多 issue 编排**:`.scratch/<feature>/issues/` 下多文件且含 `Blocked by` 时走编排模式——编排器按依赖分层并行调度,子代理各自治完成 ①→⑦。详见 [orchestration.md](references/orchestration.md)。
16
-
15
+ - **多 issue 编排**:`.scratch/<feature>/issues/` 下多文件且含 `Blocked by` 时走编排模式——编排器按依赖分层并行调度,子代理各自治完成 ①→⑦。主过程见下节 [多 issue 编排](#多-issue-编排按依赖分层并行),详规见 [orchestration.md](references/orchestration.md)。
16
+
17
+ ## 多 issue 编排(按依赖分层并行)
18
+ 精简主过程(可执行约束全保留,详规见 [orchestration.md](references/orchestration.md);`references/orchestration.md` 全量保留为详规真相源)。
19
+ - **触发**:`.scratch/<feature>/issues/` 下多文件且至少部分含 `Blocked by` 依赖声明;单 issue / 单 spec 不走本节,走 [stages.md](references/stages.md) 单线 ①→⑦。
20
+ - **A0 依赖图**:扫描 `NN-<slug>.md` 解析 `Blocked by`(`None`/`(无`/无此行→无依赖;`01, 02`/`01(…)`→依赖对应编号;无法解析→视无依赖并告警),以编号为节点构建 DAG,环则报错列环上节点不调度。
21
+ - **A1 Kahn 分层**:对 DAG 做 Kahn BFS 拓扑分层 `L1=入度0 → L2=移除L1后入度0 → … → Ln`;层内无依赖可并行,层间串行;分层结果展示给用户确认后派发。
22
+ - **A2 分层调度**:`for Li in L1..Ln: 并行派发(逐个 subagent single 模式,禁 parallel tasks 数组)→ 等待全层回执卡片 → 按 A3 逐 issue 验收(只认回执+抽检,不消费全量日志)→ 层收敛 4 项全过才进下一层`;层收敛 4 项:①该层全部 issue 验收通过 ②相关测试通过 ③`git status` 卫生(仅删 `[DEBUG-...]` 临时产物,禁 `reset --hard/checkout ./clean -fd/stash --include-untracked`)④`git merge-base --is-ancestor $BASE_HEAD HEAD` 通过;任一失败按 A5 回退重派。层间回合连续性:一层收敛后立即派下一层。
23
+ - **A3 子代理契约**:每子代理为完整单 issue ①→⑦执行单元(输入:`spec.md`+ 单 `NN-<slug>.md`+`CONTEXT/adr`;执行:①读 issue →②该 issue seams →③红-绿+typecheck →④相关测试(非全量)→⑤双轴 review →⑥commit-check+commit →⑦文档对齐+`Status: resolved`+`## 实施总结`+卫生;产出:独立 commit `feat(<feature>): <title> (#NN)`+ 落盘+测试全绿;禁止跨 issue/跳过⑤⑥)。
24
+ - **输出约束**:仅回执卡片(≤30 行,不透传全量日志):`[回执] #NN <标题>` + 提交/ seams/ 测试(相关)/ typecheck/ review(Standards/Spec)/ 验收 checkbox/ 文档/ 遗留;缺字段视不通过。
25
+ - **主代理验收(5 项,任一不过打回重派)**:①落盘(`git log` 含 `#NN` + issue 文件 `resolved`+总结)②抽检(相关测试/`tsc --noEmit`)③改动边界(`git diff <base>..HEAD --name-only` 无跨改)④卫生(无 `[DEBUG-...]` 残留)⑤提交关联(message 含 `#NN` 且一致);子代理同样 `BASE_HEAD`+回合计 Chunk/历史保护与单线一致。
26
+ - **A4 全量收敛**:全部层验收后编排器执行唯一全量测试 + `merge-base --is-ancestor $BASE_HEAD HEAD` 历史校验(失败经 `reflog` 恢复)+ `git status` 卫生(含禁令)+ 会话汇总回执关键信息(不另写汇总文件)。
27
+ - **A5 回退与冲突**:子代理内按 `stages.md` 回退表闭环;层收敛失败→该 issue 保持原 Status、不进下一层、修复后重派;全量失败→定位归属 issue 重派;文件冲突→后完成者 rebase 解决后重跑 typecheck+相关测试,禁丢弃提交、必校验 `merge-base` 与 `git log` 全含;环依赖→A0 即终止。
28
+ - **出口/边界**:全部 issue `Status: resolved`+`## 实施总结` 落盘 + 全量测试通过 + 工作区干净;单 issue 不走本节、子代理不跨改、编排器不替写代码、汇总只对话输出、TDD 语义以 `tdd` 技能为唯一事实源。
17
29
  ## Steps
18
30
 
19
31
  按序执行,每步达到完成条件才进入下一步;进入任一步前先读取其在 [stages.md](references/stages.md) 的定义。
@@ -28,13 +40,13 @@ description: "TDD seam red-green loop: use when the user provides a spec/ticket
28
40
  | ⑥ Commit | 跑 [commit-check](.agents/skills/commit-check/SKILL.md) 门禁四项后提交 | commit 完成且历史校验通过 | [stages.md#阶段-⑥](references/stages.md#阶段-⑥commit) |
29
41
  | ⑦ 收尾 | 文档对齐 → issue 状态与实施总结 → 目录卫生 | 文档已对齐、issue 已 `resolved`+总结落盘、工作区干净 | [stages.md#阶段-⑦](references/stages.md#阶段-⑦收尾文档对齐--issue-状态--实施总结) |
30
42
 
31
- 编排模式流转见 [orchestration.md](references/orchestration.md);子代理内部仍走上表 ①→⑦(其中 ④ 为相关测试口径,全量由编排器收敛)。
43
+ 编排主过程见上节 [多 issue 编排](#多-issue-编排按依赖分层并行),详规见 [orchestration.md](references/orchestration.md);子代理内部仍走上表 ①→⑦(其中 ④ 为相关测试口径,全量由编排器收敛)。
32
44
 
33
45
  ### 阶段间流转
34
46
 
35
47
  - 正常流转:出口条件满足即进入下一阶段,不在阶段间停顿。
36
- - 回退路由:见 [stages.md#回退路由](references/stages.md#回退路由);编排模式回退见 [orchestration.md#A5](references/orchestration.md#a5-回退与冲突)。
37
- - 回合连续性:阶段内连续动作(红→绿→typecheck→下一 seam)在**一个回合内串行完成**,直至阶段出口;预告下一步后立即执行。详规见 [stages.md ③-3e](references/stages.md#3e-回合连续性) [orchestration.md#A2](references/orchestration.md#a2-分层调度)。
48
+ - 回退路由:见 [stages.md#回退路由](references/stages.md#回退路由);编排模式回退见上节 [多 issue 编排 A5](#多-issue-编排按依赖分层并行) 与 [orchestration.md#A5](references/orchestration.md#a5-回退与冲突)。
49
+ - 回合连续性:阶段内连续动作(红→绿→typecheck→下一 seam)在**一个回合内串行完成**,直至阶段出口;预告下一步后立即执行。详规见 [stages.md ③-3e](references/stages.md#3e-回合连续性) 与上节 [多 issue 编排 A2](#多-issue-编排按依赖分层并行) / [orchestration.md#A2](references/orchestration.md#a2-分层调度)。
38
50
  - 任务分解:巨型写入拆小步——`write` 超 ~150 行先写骨架再分批补全,`replace` 超 ~5 处分批执行并验证。详见 [stages.md ③-3f](references/stages.md#3f-任务分解chunking)。
39
51
 
40
52
  ## 引用
@@ -44,5 +56,5 @@ description: "TDD seam red-green loop: use when the user provides a spec/ticket
44
56
  - Mock 指南:[tdd/mocking.md](.agents/skills/tdd/mocking.md)
45
57
  - Commit 门禁:[commit-check](.agents/skills/commit-check/SKILL.md)
46
58
  - 单线详规:[stages.md](references/stages.md)
47
- - 多 issue 编排:[orchestration.md](references/orchestration.md)
48
- - Issue tracker 约定:[issue-tracker.md](../../docs/agents/issue-tracker.md)
59
+ - 多 issue 编排主过程:本文件 [多 issue 编排](#多-issue-编排按依赖分层并行)
60
+ - issue 编排详规:[orchestration.md](references/orchestration.md)(全量保留)
@@ -46,7 +46,7 @@ for each 层 Li in L1..Ln:
46
46
  并行派发:为 Li 中每个 issue 启动一个子代理(single 模式,禁止 parallel tasks 数组)
47
47
  等待:阻塞直到 Li 全部子代理返回回执卡片
48
48
  验收:编排器按 A3 验收清单逐 issue 验收(只认回执卡片的关键信息 + 抽检验证,不消费全量日志)
49
- 层收敛验证:验收全通过进入全量验证(完成条件 4 项,全部通过才进下一层,任一失败按 A5 回退):①该层全部 issue 验收通过 ②全量测试套件通过 ③`git status` 卫生(仅删本次临时产物,正向;护栏:禁止 `git reset --hard`/`git checkout .`/`git clean -fd`/`git stash push --include-untracked`)④历史校验 `git merge-base --is-ancestor $BASE_HEAD HEAD` 通过;验收不通过或全量/卫生/历史任一失败按 A5 回退重派该 issue
49
+ 层收敛验证:验收全通过进入全量验证(完成条件 4 项,全部通过才进下一层,任一失败按 A5 回退):①该层全部 issue 验收通过 ②相关测试套件通过(全量仅在 A4) ③`git status` 卫生(仅删本次临时产物,正向;护栏:禁止 `git reset --hard`/`git checkout .`/`git clean -fd`/`git stash push --include-untracked`)④历史校验 `git merge-base --is-ancestor $BASE_HEAD HEAD` 通过;验收不通过或相关/卫生/历史任一失败按 A5 回退重派该 issue
50
50
  全部层层收敛通过后进入 A4 全量收敛
51
51
  ```
52
52
 
@@ -108,7 +108,7 @@ for each 层 Li in L1..Ln:
108
108
 
109
109
  全部层逐 issue 验收通过后,编排器执行:
110
110
 
111
- 1. **全量测试套件**:跑仓库完整测试套件(阶段④口径),失败则按 A5 回退。
111
+ 1. **全量测试套件**:跑仓库完整测试套件(所有 issue 执行完毕后的唯一全量,阶段④与 A2 已改为相关,仅此一次)
112
112
  2. **历史校验**:执行 `git merge-base --is-ancestor $BASE_HEAD HEAD`,若为 false 说明编排过程中历史被改写,立即经 `git reflog` 恢复后重跑收敛。
113
113
  3. **目录卫生**:`git status` 确认无 `[DEBUG-...]` 残留、无未跟踪临时文件;有残留则仅删本次临时产物后重检,禁止 `git reset --hard`/`git checkout .`/`git clean -fd`/`git stash push --include-untracked` 等。
114
114
  4. **汇总总结**:在会话输出汇总各 issue 的回执卡片关键信息(提交 hash / seams / 验收 checkbox / 测试结果 / 文档对齐);不另写汇总文件,不透传子代理全量日志(各 issue 的 `## 实施总结` 已落盘,详查落盘文件)。
@@ -1,6 +1,6 @@
1
1
  # 阶段详细定义
2
2
 
3
- 单线 ①→⑦ 的详细定义;多 issue 编排见 [orchestration.md](orchestration.md)。TDD 语义以 [tdd 技能](.agents/skills/tdd/SKILL.md) 为唯一事实源,不在此重写。
3
+ 单线 ①→⑦ 的详细定义;多 issue 编排主过程见 [SKILL.md](../SKILL.md#多-issue-编排按依赖分层并行),详规见 [orchestration.md](orchestration.md)。TDD 语义以 [tdd 技能](.agents/skills/tdd/SKILL.md) 为唯一事实源,不在此重写。
4
4
 
5
5
  ## 目录
6
6
 
@@ -35,7 +35,6 @@
35
35
 
36
36
  ### 边界
37
37
 
38
- - 本阶段只澄清需求——实现与测试设计在后续阶段进行
39
38
 
40
39
  ---
41
40
 
@@ -61,8 +60,6 @@
61
60
 
62
61
  - 一个 seam 对应一个公共接口上的一个待测行为(输入 + 预期输出):一个 seam = 一个测试 + 一个最小实现 cycle;同一接口的多个行为拆分为多个 seam,而非内部函数
63
62
 
64
- > Seams 定义参考:[tdd 技能](.agents/skills/tdd/SKILL.md#seams--where-tests-go)
65
-
66
63
  ---
67
64
 
68
65
  ## 阶段 ③:TDD 开发循环
@@ -132,8 +129,6 @@
132
129
  - 全部 todo 为 done 才进入阶段④
133
130
  - 测试质量规则(公共接口验证、独立断言、mock 边界、重构归属 review)见 tdd 技能,不在本阶段重写
134
131
 
135
- > Mock 指南:[tdd/mocking.md](.agents/skills/tdd/mocking.md)
136
- > 好测试标准:[tdd/tests.md](.agents/skills/tdd/tests.md)
137
132
 
138
133
  ---
139
134
 
@@ -145,7 +140,7 @@
145
140
 
146
141
  ### 操作
147
142
 
148
- 1. 运行仓库的完整测试套件
143
+ 1. 运行仓库的完整测试套件(单线模式的唯一全量;多 issue 子代理此步仅相关,全量由 A4 统一执行)
149
144
  2. 检查所有测试是否通过
150
145
 
151
146
  ### 出口条件
@@ -251,7 +246,7 @@
251
246
 
252
247
  ## Todo 规定
253
248
 
254
- 本节为阶段②/③的共用规定,完成"任务拆分"到"回合内执行"的闭环。
249
+ 本节复用 `tdd`/`implement` 的 Todo 规定,`tdd-implement` 仅做多 issue 编排与串联,不再重写层次细节。
255
250
 
256
251
  ### 拆分层级(大小任务层次)
257
252
 
@@ -260,7 +255,7 @@
260
255
  3. **小任务**:Todo——seam 内可独立验证、可勾选的执行单元(T1/T2/T3…)
261
256
  4. **执行步**:Subtodo——Todo 内的串行步骤(红 → 绿 → typecheck),回合内逐步勾选推进
262
257
 
263
- > 编排模式新增一层见 [orchestration.md](orchestration.md):**编排层** Feature——`.scratch/<feature>/` 下全部 issues,按 `Blocked by` 分层;每层一组并行子代理,每子代理一个 issue 的完整 ①→⑦。
258
+ > 编排模式新增一层见 [SKILL.md](../SKILL.md#多-issue-编排按依赖分层并行) 主过程与 [orchestration.md](orchestration.md) 详规:**编排层** Feature——`.scratch/<feature>/` 下全部 issues,按 `Blocked by` 分层;每层一组并行子代理,每子代理一个 issue 的完整 ①→⑦。
264
259
 
265
260
  ### Todo 清单格式
266
261
 
@@ -312,5 +307,5 @@ pending → in-progress → done
312
307
  | ⑤ Code Review | seams 遗漏 | → ② 补充 seams |
313
308
  | ⑤ Code Review | 需求偏差 | → ① 澄清需求 |
314
309
 
315
- 编排模式回退见 [orchestration.md#A5](orchestration.md#a5-回退与冲突):子代理内回退按上表在子代理内闭环;编排器层收敛失败(全量测试失败 / 目录不干净)→ 定位到失败 issue 所在层重派对应子代理。
310
+ 编排模式回退主过程见 [SKILL.md](../SKILL.md#多-issue-编排按依赖分层并行) A5,详规见 [orchestration.md#A5](orchestration.md#a5-回退与冲突):子代理内回退按上表在子代理内闭环;编排器层收敛失败(全量测试失败 / 目录不干净)→ 定位到失败 issue 所在层重派对应子代理。
316
311
 
package/README.md CHANGED
@@ -7,9 +7,15 @@ mattpocock/skills(`skills/engineering` + `skills/productivity`)的配置仓
7
7
  ```
8
8
  template/
9
9
  ├── AGENTS.md 项目级全局配置(行为路由 + 分文件指针)
10
- ├── .pi/ pi-agent 项目配置(pi 标准结构:`.pi/skills/` 直放独有技能,自动发现)
11
- └── .opencode/ 分发内容(目标仓库的 opencode 项目配置)
12
- ├── skills/ 6 个独有技能(ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test)
10
+ ├── .agents/
11
+ └── skills/ 32 个技能(上游 26 + 独有 6:ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test)单一源;模板全量 32,默认安装仅编程相关 22(engineering 18 + 核心独有 4,见 config/engineering.json),--all 展开全量
12
+ ├── .pi/ pi-agent 项目配置
13
+ │ ├── skills/ 空占位(项目自定义技能,含 .gitkeep + README.md)
14
+ │ ├── prompts/ issue-audit 命令(prompt template)
15
+ │ ├── docs/agents/ 5 个分文件镜像
16
+ │ └── CONTEXT.md 术语表镜像
17
+ └── .opencode/ opencode 项目配置
18
+ ├── skills/ 空占位(项目自定义技能,含 .gitkeep + README.md)
13
19
  ├── agents/ issue-audit 子代理定义
14
20
  ├── commands/ issue-audit + 9 个显式触发技能命令(grill-to-spec/wayfinder/to-spec/to-tickets/triage/improve-codebase-architecture/teach/handoff/writing-for-agents)
15
21
  ├── docs/agents/ 5 个分文件(运行时纪律 / 技能设计 / issue tracker / triage labels / domain)
@@ -23,44 +29,40 @@ template/
23
29
  在目标仓库根目录执行一条命令:
24
30
 
25
31
  ```sh
26
- npx @heihei0299/matt-skills init
32
+ npx @heihei0299/matt-skills init # 默认仅编程相关 21(engineering + 独有),--all 展开全量 32
33
+ npx @heihei0299/matt-skills init --all # 安装全量 32(含 productivity)
27
34
  ```
28
35
 
29
- `init` 做两件事:
30
-
31
- 1. 复制 `template/` 快照(`AGENTS.md`、`.opencode/`、`.pi/`)到当前目录;
32
- 2. 把上游技能(engineering 17 个 + productivity 5 个)复制到 `.agents/skills/`。
33
-
34
- 选项:`--dest <path>` 指定目标目录(默认当前目录);`--force` 覆盖已存在的文件(直接覆盖,`AGENTS.md` 会备份到 `.bak`)(默认跳过)。
36
+ `init` 做一件事:复制 `template/` 快照(`AGENTS.md`、`.agents/skills/`、`.opencode/`、`.pi/`)到当前目录;模板全量 32,默认仅安装编程相关 24(上游 engineering 桶,见 config/engineering.json + 独有 6),`--all` 展开全量,无需二次拉取上游。
35
37
 
38
+ 选项:`--dest <path>` 指定目标目录(默认当前目录);`--force` 覆盖已存在的文件(直接覆盖,`AGENTS.md` 会备份到 `.bak`)(默认跳过);`--all` 包含非编程技能(productivity,默认仅编程)。
36
39
  **增量同步(已有项目)**:已有项目更新到最新模板与技能:
37
40
 
38
41
  ```sh
39
- npx @heihei0299/matt-skills sync # 默认仅对比不写盘(check),有差异 exit 1,--json 可解析
40
- npx @heihei0299/matt-skills sync --apply # 安全增量:AGENTS.md 定制跳过,上游技能强制覆盖但不删
41
- npx @heihei0299/matt-skills sync --force # 硬盖:AGENTS.md 备份后硬盖,技能与模板全量 add/update/remove
42
+ npx @heihei0299/matt-skills sync # 默认仅对比不写盘(check),有差异 exit 1,--json 可解析(仅编程)
43
+ npx @heihei0299/matt-skills sync --all --json # 全量对比
44
+ npx @heihei0299/matt-skills sync --apply # 安全增量:AGENTS.md 定制跳过,编程技能 rm+cp,不删多余 productivity(默认保留)
45
+ npx @heihei0299/matt-skills sync --apply --all # 安全增量全量
46
+ npx @heihei0299/matt-skills sync --force # 硬盖编程:AGENTS.md 备份后硬盖,编程技能全量 add/update/remove(含 productivity 删除与旧镜像清理)
47
+ npx @heihei0299/matt-skills sync --force --all # 硬盖全量
42
48
  npx @heihei0299/matt-skills sync --apply --dest <path> --upstream <url> --ref <ref> --json # 选项可组合
43
49
  ```
44
50
 
45
- `sync` 专为已有项目设计,三档语义:默认 `check` 仅对比不写盘(打印“上游 HEAD / 本地非独有 vs 上游 / 新增/更新/删除/一致”表,`--json` 可解析,有差异 `exit 1`);`--apply` 安全增量写盘(`AGENTS.md` 若含独有路由如 `tdd-implement` 则跳过,`.agents/skills` 对上游技能 `rm+cp force` 覆盖但不 `remove`,`template/.opencode/.pi` 增量 `add/update`);`--force` 硬盖(`AGENTS.md` 备份 `.bak` 后强制覆盖,技能与模板均 `add/update/remove` 全做)。`--dest`、`--upstream`、`--ref`、`--json` 在三档均可透传。
46
-
47
- 上游没有 `tdd-implement`、`grill-to-spec`、`diagnose-fix`、`commit-check`,复制天然不冲突。目标仓库会话即自动加载全部技能(上游在 `.agents/skills/`、独有在 `.opencode/skills/`;pi 侧独有在 `.pi/skills/`)与项目级全局配置(行为路由表、分文件约定);`issue-audit` 以子代理 + 命令形式分发(`.opencode/agents/`、`.opencode/commands/`);9 个显式触发技能注册为 opencode 命令(`.opencode/commands/`,`/命令名` 触发)。
51
+ `sync` 专为已有项目设计,三档语义:默认 `check` 仅对比不写盘(仅编程,`--all` 展开全量,打印“上游 HEAD / 本地非独有 vs 上游 / 新增/更新/删除/一致”表,`--json` 可解析,有差异 `exit 1`);`--apply` 安全增量写盘(编程模式:`AGENTS.md` 若含独有路由如 `tdd-implement` 则跳过,`.agents/skills` 按编程子集 `rm+cp force` 覆盖但不 `remove` 多余 productivity,`template/.agents/.opencode/.pi` 按过滤增量 `add/update`,旧镜像 `.pi/skills` + `.opencode/skills` 中残留的共享技能自动清理但保留项目自定义;`--all` 则全量);`--force` 硬盖(编程模式:`AGENTS.md` 备份 `.bak` 后强制覆盖,编程技能 `add/update/remove` 全做(含 productivity 删除与旧镜像清理);`--all` 则全量硬盖)。`--dest`、`--upstream`、`--ref`、`--json`、`--all` 在三档均可透传。
52
+ 目标仓库会话即自动加载共享技能(`.agents/skills/` 单一源,默认编程 22,`--all` 全量 32)与项目级全局配置(行为路由表、分文件约定);项目自定义技能可按需放入 `.pi/skills/` 或 `.opencode/skills/`(按 harness 自动发现);`issue-audit` 以子代理 + 命令形式分发(`.opencode/agents/`、`.opencode/commands/`);9 个显式触发技能注册为 opencode 命令(`.opencode/commands/`,`/命令名` 触发)。
53
+ **pi-agent 用户**:初始化命令完全相同。pi 从 `.agents/skills/` 自动发现全部共享技能,无需额外指向;`.pi/skills/` 仅用于项目自定义。首次在目标仓库交互启动时 pi 会询问项目信任,用 `/trust` 保存即可。
48
54
 
49
- **pi-agent 用户**:初始化命令完全相同。pi `.pi/skills/` 自动发现独有技能(ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test),无需任何指向配置;首次在目标仓库交互启动时 pi 会询问项目信任,用 `/trust` 保存即可。
50
-
51
- **手动方式(备选)**:无 npx 环境时,将 `template/` 整个文件夹复制到目标仓库根目录,再拉取上游技能:
55
+ **手动方式(备选)**:无 npx 环境时,将 `template/` 整个文件夹复制到目标仓库根目录即可(已含全量技能):
52
56
 
53
57
  ```sh
54
58
  cp -r template/. /path/to/target/
55
- git clone --depth 1 https://github.com/mattpocock/skills.git /tmp/mattpocock-skills
56
- cp -r /tmp/mattpocock-skills/skills/engineering/. .agents/skills/
57
- cp -r /tmp/mattpocock-skills/skills/productivity/. .agents/skills/
58
- rm -rf /tmp/mattpocock-skills
59
59
  ```
60
60
 
61
- 上游没有 `tdd-implement`、`grill-to-spec`、`diagnose-fix`、`commit-check`,复制天然不冲突。目标仓库会话即自动加载全部技能(上游在 `.agents/skills/`、独有在 `.opencode/skills/`;pi 侧独有在 `.pi/skills/`)与项目级全局配置(行为路由表、分文件约定);`issue-audit` 以子代理 + 命令形式分发(`.opencode/agents/`、`.opencode/commands/`);9 个显式触发技能注册为 opencode 命令(`.opencode/commands/`,`/命令名` 触发)。
61
+ 旧的手动拉取上游步骤已不再需要;若需单独验证上游,仍可:
62
62
 
63
- **pi-agent 用户**:初始化命令完全相同。pi 从 `.pi/skills/` 自动发现独有技能(ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test),无需任何指向配置;首次在目标仓库交互启动时 pi 会询问项目信任,用 `/trust` 保存即可。
63
+ ```sh
64
+ git clone --depth 1 https://github.com/mattpocock/skills.git /tmp/mattpocock-skills
65
+ ```
64
66
 
65
67
  ## 维护约定
66
68
 
@@ -68,18 +70,18 @@ rm -rf /tmp/mattpocock-skills
68
70
 
69
71
  | 工作区 | 模板 |
70
72
  |--------|------|
71
- | `.agents/skills/{ci-guard,tdd-implement,grill-to-spec,diagnose-fix,commit-check,scaffold-functional-test}/` | `template/.opencode/skills/{ci-guard,tdd-implement,grill-to-spec,diagnose-fix,commit-check,scaffold-functional-test}/` |
72
- | `.agents/skills/{ci-guard,tdd-implement,grill-to-spec,diagnose-fix,commit-check,scaffold-functional-test}/` | `template/.pi/skills/{ci-guard,tdd-implement,grill-to-spec,diagnose-fix,commit-check,scaffold-functional-test}/` |
73
+ | `.agents/skills/`(全部 32 个:上游 26 + 独有 6) | `template/.agents/skills/`(全量快照,单一源) |
74
+ | `.agents/skills/` 的 harness 占位说明 | `template/.pi/skills/.gitkeep` + `README.md`、`template/.opencode/skills/.gitkeep` + `README.md`(空目录占位,供项目自定义) |
73
75
  | `.opencode/agents/issue-audit.md`、`commands/*.md`(issue-audit + 9 个显式技能命令)、`.gitignore`、`package.json`、`package-lock.json` | `template/.opencode/` 同名 |
74
76
  | `.pi/prompts/issue-audit.md`(pi 命令:opencode 版适配,去 subagent frontmatter) | `template/.pi/prompts/issue-audit.md` |
75
77
  | `AGENTS.md` | `template/AGENTS.md`(引用映射为 `.opencode/` 路径) |
76
- | `CONTEXT.md` | `template/.opencode/CONTEXT.md` |
77
- | `docs/agents/*` | `template/.opencode/docs/agents/*`(引用映射为 `.opencode/` 路径) |
78
+ | `CONTEXT.md` | `template/.opencode/CONTEXT.md` + `template/.pi/CONTEXT.md` |
79
+ | `docs/agents/*` | `template/.opencode/docs/agents/*` + `template/.pi/docs/agents/*`(引用映射为 `.opencode/` 路径) |
78
80
 
79
- 独有技能需同步**双份**:`.opencode/skills/`(opencode 分发)与 `.pi/skills/`(pi 标准分发)。
81
+ 共享技能统一在 `.agents/skills` 单一源,不再双份镜像到 `.opencode/skills` / `.pi/skills`。
80
82
  `test/template-sync.test.js` 守护同步(含路径映射),漏同步测试即红。
81
83
 
82
- 新增技能前先查上游 `mattpocock/skills` 是否已存在;仅上游没有的技能才作为独有技能落在本仓库(当前独有:ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test),上游技能一律不进 `template/`。
84
+ 新增技能前先查上游 `mattpocock/skills` 是否已存在;仅上游没有的技能才作为独有技能落在本仓库(当前独有:ci-guard、tdd-implement、grill-to-spec、diagnose-fix、commit-check、scaffold-functional-test),上游技能通过 `scripts/sync-upstream.js` 同步到 `.agents/skills` 后随模板分发。
83
85
 
84
86
  ## harness 支持
85
87
 
@@ -101,39 +103,38 @@ pi 下对应能力以内置工具或已装扩展为准(`AGENTS.md`「能力边
101
103
 
102
104
  - **全局**:`~/.pi/agent/skills/`、`~/.agents/skills/`(用户级技能,自动发现);配置在 `~/.pi/agent/settings.json`
103
105
  - **项目**:
104
- - `.pi/skills/` — pi 标准结构,目录内技能**自动发现**(本项目独有技能直放此处)
106
+ - `.agents/skills/` — 共享技能单一源(默认编程 22,`--all` 全量 32,自动发现)
107
+ - `.pi/skills/` — 项目自定义技能(pi 标准结构,自动发现,仅放项目本地技能)
105
108
  - `.pi/prompts/` — pi 命令(prompt template)自动发现,如 `issue-audit.md` → `/issue-audit`
106
- - `.agents/skills/`自动发现(上游技能与 workspace 技能在此)
107
- - `.pi/settings.json` — `skills` 数组可选,指向额外技能目录(本项目不再使用)
108
-
109
+ - `.pi/settings.json`已简化为空对象(历史指向 `.opencode/skills` 已移除,共享技能走 `.agents/skills`)
109
110
  ### opencode
110
111
 
111
- - **项目**:`.opencode/skills/`(技能)、`.opencode/agents/`(子代理)、`.opencode/commands/`(命令:issue-audit + 9 个显式触发技能,`/命令名` 触发)、`.opencode/docs/`(文档)
112
- - **全局**:`~/.config/opencode/`(`opencode.json` 配置、`skills/`、`agents/`、`commands/`),按 opencode 官方文档
112
+ - **项目**:`.agents/skills/`(共享技能单一源,默认编程 22,`--all` 全量 32)、`.opencode/skills/`(项目自定义技能)、`.opencode/agents/`(子代理)、`.opencode/commands/`(命令:issue-audit + 9 个显式触发技能,`/命令名` 触发)、`.opencode/docs/`(文档)
113
+
114
+ 同一份技能(Agent Skills 标准)与 `AGENTS.md` 行为路由在两种 harness 下均可加载:pi 与 codex/claude 从 `.agents/skills/` 自动发现;opencode 按本模板约定同样优先读取 `.agents/skills/`(`.opencode/skills/` 仅用于项目自定义)。
113
115
 
114
- 同一份技能(Agent Skills 标准)与 `AGENTS.md` 行为路由在两种 harness 下均可加载:opencode 从 `.opencode/skills/`、pi 从 `.pi/skills/` 与 `.agents/skills/`。
115
116
  ## 仓库 CLI
116
117
 
117
118
  仓库内提供安装管理 CLI(`bin/cli.js`,依赖 `prompts`,见 `package.json`),同时作为 npm 包 `@heihei0299/matt-skills` 分发(`npx @heihei0299/matt-skills <command>`):
118
119
 
119
120
  ```sh
120
- node bin/cli.js init [--dest <dir>] [--force] # 初始化项目:template + 上游技能
121
- node bin/cli.js sync [--apply|--force] [--dest <path>] [--upstream <url>] [--ref <ref>] [--json] # 同步已有项目到最新
122
- node bin/cli.js list [--json] # 列出 .agents/skills/ 下全部技能及描述
123
- node bin/cli.js install [选项] # 把技能复制到目标工具目录(交互式选择)
124
- node bin/cli.js check [--json] [--upstream <url>] [--ref <ref>] # 只读检查上游技能是否最新(等价 sync 默认)
121
+ node bin/cli.js init [--dest <dir>] [--force] [--all] # 初始化项目:template 全量 32,默认编程 22
122
+ node bin/cli.js sync [--apply|--force] [--all] [--dest <path>] [--upstream <url>] [--ref <ref>] [--json] # 同步已有项目到最新(默认编程)
123
+ node bin/cli.js list [--json] [--all] # 列出技能(默认编程)
124
+ node bin/cli.js install [选项] # 把技能复制到目标工具目录(交互式选择,默认编程)
125
+ node bin/cli.js check [--json] [--all] [--upstream <url>] [--ref <ref>] # 只读检查上游技能是否最新(等价 sync 默认,仅编程)
125
126
  ```
126
127
 
127
- `init` 选项:`--dest <path>` 指定目标目录(默认当前目录);`--force` 覆盖已存在的文件(直接覆盖,`AGENTS.md` 会备份到 `.bak`)(默认跳过),见「初始化」。
128
- `sync` 选项:`--apply` 安全增量(`AGENTS.md` 定制跳过、技能不删),`--force` 硬盖(`AGENTS.md` 备份后硬盖、技能与模板全量 `remove`);`--dest <path>` 目标目录;`--upstream <url>` 上游地址;`--ref <ref>` 上游分支;`--json` JSON 输出;默认无参等价 `check` 仅对比不写盘,`--json` 可解析,有差异 `exit 1`。
129
- `check` 选项:`--json`、`--upstream <url>`、`--ref <ref>`(等价 `sync` 默认 `check`)。
128
+ `init` 选项:`--dest <path>` 指定目标目录(默认当前目录);`--force` 覆盖已存在的文件(直接覆盖,`AGENTS.md` 会备份到 `.bak`)(默认跳过);`--all` 包含非编程(productivity,默认仅编程 22),见「初始化」。
129
+ `sync` 选项:`--apply` 安全增量(编程默认:`AGENTS.md` 定制跳过、编程技能不删 productivity,旧镜像清理保留项目自定义;`--all` 全量),`--force` 硬盖(编程默认:`AGENTS.md` 备份后硬盖、编程技能与模板全量 `remove` 含 productivity 删除与旧镜像清理;`--all` 全量);`--all` 展开全量;`--dest <path>` 目标目录;`--upstream <url>` 上游地址;`--ref <ref>` 上游分支;`--json` JSON 输出;默认无参等价 `check` 仅对比不写盘(仅编程,`--all` 全量),`--json` 可解析,有差异 `exit 1`。
130
+ `check` 选项:`--json`、`--all`(默认仅编程)、`--upstream <url>`、`--ref <ref>`(等价 `sync` 默认 `check`)。
130
131
 
131
132
  `install` 选项:
132
133
 
133
134
  - `--dest <dir>`:复制到指定目录(覆盖工具映射)
134
- - `--tools <t1,t2>`:指定工具,项目级映射 `codex→.agents/skills`、`pi→.pi/skills`、`opencode→.opencode/skills`、`claude→.claude/skills`
135
+ - `--tools <t1,t2>`:指定工具,项目级已统一 `codex/pi/opencode/claude → .agents/skills`(共享技能单一源,`.pi/skills`/`.opencode/skills` 仅用于项目自定义)
135
136
  - `--global`:安装到全局目录(`~/.codex/skills`、`~/.pi/agent/skills`、`~/.config/opencode/skills`、`~/.claude/skills`);`--project` 回到项目级
136
- - `--all`:安装全部技能(默认交互勾选);`--force`:覆盖已存在的技能
137
+ - `--all`:安装全部技能(默认仅编程 22,`--all` 32,交互勾选时仅列编程);`--force`:覆盖已存在的技能
137
138
 
138
139
 
139
140
  ### 上游同步(自动更新)
@@ -152,7 +153,7 @@ node scripts/sync-upstream.js --check # 等价底层脚本(CLI s
152
153
  node scripts/sync-upstream.js --apply --dry-run
153
154
  ```
154
155
 
155
- 实现细节:`scripts/sync-upstream.js` 为单一事实源(CLI 与 Actions 共用),以 `config/proprietary.json` 为独有白名单,上游通过 `git clone --depth 1 https://github.com/mattpocock/skills.git` 获取,比对 `SKILL.md` 的 sha256,自动处理新增/更新/重命名/删除;Actions 提 PR 后需人工合入,合入后按“发布”节打 `v*` 标签即发布(自动 patch 发版可在后续扩展为 PR 合入后自动 bump)。
156
+ 实现细节:`scripts/sync-upstream.js` 为单一事实源(CLI 与 Actions 共用),以 `config/proprietary.json` 为独有白名单 + `config/engineering.json` 为编程白名单(engineering 桶即编程,productivity 默认不装,`--all` 展开),上游通过 `git clone --depth 1 https://github.com/mattpocock/skills.git` 获取,比对 `SKILL.md` 的 sha256,自动处理新增/更新/重命名/删除;Actions 提 PR 后需人工合入,合入后按“发布”节打 `v*` 标签即发布(自动 patch 发版可在后续扩展为 PR 合入后自动 bump)。
156
157
  上游重命名映射:`RENAMES = { "writing-great-skills": "writing-for-agents" }`,Actions/CLI 均会删除旧目录并复制新目录。
157
158
  ## 发布
158
159
 
@@ -180,14 +181,14 @@ npm publish
180
181
  - `prepublishOnly` 自动跑全量测试(`node --test test/*.test.js`)
181
182
  - 发布内容 = `bin/` + `template/` + `.agents/skills/` + `README.md`,由 `package.json` 的 `files` 白名单控制,`npm pack` 可预览
182
183
  - `template/` 与 `.agents/skills/` 是包内容:改动后需重新发版才对目标仓库生效
184
+
183
185
  ## 开发
184
186
 
185
187
  ```sh
186
- npm test # 全量测试 122 项
187
- npm run build:template # 从单源生成 template/.opencode/.pi(config/proprietary.json 为单一事实源)
188
+ npm test # 全量测试
189
+ npm run build:template # 从单源生成 template/.agents/skills(全量 32 技能)+ 空占位
188
190
  ```
189
191
 
190
192
  交互模式依赖 `prompts`(见 `package.json`);测试见 `test/cli.test.js`、`test/cli-init.test.js`、`test/template-sync.test.js`。
191
193
 
192
194
  用户手动触发的功能测试:`/instance-test`(matt-skills 专属示范,见 `.agents/skills/instance-test/SKILL.md`)——验证 sync 合并 update 后的行为,`references/instances.md` 由 `scaffold-functional-test` 从 spec 生成;通用模板已废弃。新增生成器 `/scaffold-functional-test`(见 `.agents/skills/scaffold-functional-test/SKILL.md`)——读 spec 生成定制化功能测试 skill。
193
-