@shirlytaylor73/superharness 1.5.0

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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/bin/lib/codex-installer.js +228 -0
  4. package/bin/lib/interactive-select.js +96 -0
  5. package/bin/superharness.js +67 -0
  6. package/package.json +52 -0
  7. package/plugins/superharness/.claude-plugin/plugin.json +19 -0
  8. package/plugins/superharness/.codex-plugin/plugin.json +31 -0
  9. package/plugins/superharness/.mcp.json +9 -0
  10. package/plugins/superharness/CODE_OF_CONDUCT.md +79 -0
  11. package/plugins/superharness/LICENSE +21 -0
  12. package/plugins/superharness/README.md +57 -0
  13. package/plugins/superharness/agents/code-reviewer.md +48 -0
  14. package/plugins/superharness/archived-skills/using-superpowers/SKILL.md +140 -0
  15. package/plugins/superharness/archived-skills/using-superpowers/references/codex-tools.md +25 -0
  16. package/plugins/superharness/archived-skills/using-superpowers/references/copilot-tools.md +52 -0
  17. package/plugins/superharness/archived-skills/using-superpowers/references/gemini-tools.md +33 -0
  18. package/plugins/superharness/archived-skills/using-superpowers/references/hermes-tools.md +44 -0
  19. package/plugins/superharness/commands/free.md +6 -0
  20. package/plugins/superharness/commands/rollback.md +30 -0
  21. package/plugins/superharness/commands-codex/free.md +29 -0
  22. package/plugins/superharness/commands-codex/rollback.md +33 -0
  23. package/plugins/superharness/hooks/hooks-codex.json +50 -0
  24. package/plugins/superharness/hooks/hooks.json +50 -0
  25. package/plugins/superharness/hooks/lib/free-mode-check.mjs +27 -0
  26. package/plugins/superharness/hooks/run-hook.cmd +58 -0
  27. package/plugins/superharness/hooks/workflow-context +4 -0
  28. package/plugins/superharness/hooks/workflow-context.mjs +184 -0
  29. package/plugins/superharness/hooks/workflow-post-transition +4 -0
  30. package/plugins/superharness/hooks/workflow-post-transition.mjs +89 -0
  31. package/plugins/superharness/hooks/workflow-pre-tool-use +4 -0
  32. package/plugins/superharness/hooks/workflow-pre-tool-use.mjs +97 -0
  33. package/plugins/superharness/hooks/workflow-stop +4 -0
  34. package/plugins/superharness/hooks/workflow-stop.mjs +136 -0
  35. package/plugins/superharness/scripts/rollback.mjs +86 -0
  36. package/plugins/superharness/scripts/set-free-mode.mjs +77 -0
  37. package/plugins/superharness/skills/brainstorming/SKILL.md +182 -0
  38. package/plugins/superharness/skills/brainstorming/scripts/frame-template.html +214 -0
  39. package/plugins/superharness/skills/brainstorming/scripts/helper.js +88 -0
  40. package/plugins/superharness/skills/brainstorming/scripts/server.cjs +338 -0
  41. package/plugins/superharness/skills/brainstorming/scripts/start-server.sh +153 -0
  42. package/plugins/superharness/skills/brainstorming/scripts/stop-server.sh +55 -0
  43. package/plugins/superharness/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  44. package/plugins/superharness/skills/brainstorming/visual-companion.md +286 -0
  45. package/plugins/superharness/skills/chinese-code-review/SKILL.md +277 -0
  46. package/plugins/superharness/skills/chinese-commit-conventions/SKILL.md +364 -0
  47. package/plugins/superharness/skills/chinese-documentation/SKILL.md +448 -0
  48. package/plugins/superharness/skills/chinese-git-workflow/SKILL.md +547 -0
  49. package/plugins/superharness/skills/dispatching-parallel-agents/SKILL.md +186 -0
  50. package/plugins/superharness/skills/exploration/SKILL.md +197 -0
  51. package/plugins/superharness/skills/finishing/SKILL.md +200 -0
  52. package/plugins/superharness/skills/intake/SKILL.md +134 -0
  53. package/plugins/superharness/skills/mcp-builder/SKILL.md +255 -0
  54. package/plugins/superharness/skills/parallel-execution/SKILL.md +368 -0
  55. package/plugins/superharness/skills/parallel-execution/implementer-prompt.md +144 -0
  56. package/plugins/superharness/skills/parallel-execution/spec-reviewer-prompt.md +84 -0
  57. package/plugins/superharness/skills/parallel-execution/wave-final-manual-qa-prompt.md +61 -0
  58. package/plugins/superharness/skills/parallel-execution/wave-final-quality-prompt.md +59 -0
  59. package/plugins/superharness/skills/parallel-execution/wave-final-scope-fidelity-prompt.md +69 -0
  60. package/plugins/superharness/skills/parallel-execution/wave-final-spec-prompt.md +56 -0
  61. package/plugins/superharness/skills/planning/SKILL.md +265 -0
  62. package/plugins/superharness/skills/planning/plan-document-reviewer-prompt.md +80 -0
  63. package/plugins/superharness/skills/receiving-code-review/SKILL.md +213 -0
  64. package/plugins/superharness/skills/requesting-code-review/SKILL.md +107 -0
  65. package/plugins/superharness/skills/requesting-code-review/code-reviewer.md +146 -0
  66. package/plugins/superharness/skills/serial-execution/SKILL.md +183 -0
  67. package/plugins/superharness/skills/systematic-debugging/CREATION-LOG.md +119 -0
  68. package/plugins/superharness/skills/systematic-debugging/SKILL.md +320 -0
  69. package/plugins/superharness/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  70. package/plugins/superharness/skills/systematic-debugging/condition-based-waiting.md +115 -0
  71. package/plugins/superharness/skills/systematic-debugging/defense-in-depth.md +122 -0
  72. package/plugins/superharness/skills/systematic-debugging/find-polluter.sh +63 -0
  73. package/plugins/superharness/skills/systematic-debugging/root-cause-tracing.md +169 -0
  74. package/plugins/superharness/skills/systematic-debugging/test-academic.md +14 -0
  75. package/plugins/superharness/skills/systematic-debugging/test-pressure-1.md +58 -0
  76. package/plugins/superharness/skills/systematic-debugging/test-pressure-2.md +68 -0
  77. package/plugins/superharness/skills/systematic-debugging/test-pressure-3.md +69 -0
  78. package/plugins/superharness/skills/test-driven-development/SKILL.md +371 -0
  79. package/plugins/superharness/skills/test-driven-development/testing-anti-patterns.md +299 -0
  80. package/plugins/superharness/skills/trivial/SKILL.md +118 -0
  81. package/plugins/superharness/skills/using-git-worktrees/SKILL.md +218 -0
  82. package/plugins/superharness/skills/verification/SKILL.md +139 -0
  83. package/plugins/superharness/skills/workflow-runner/SKILL.md +172 -0
  84. package/plugins/superharness/skills/writing-skills/SKILL.md +655 -0
  85. package/plugins/superharness/skills/writing-skills/anthropic-best-practices.md +1149 -0
  86. package/plugins/superharness/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  87. package/plugins/superharness/skills/writing-skills/graphviz-conventions.dot +172 -0
  88. package/plugins/superharness/skills/writing-skills/persuasion-principles.md +187 -0
  89. package/plugins/superharness/skills/writing-skills/render-graphs.js +168 -0
  90. package/plugins/superharness/skills/writing-skills/testing-skills-with-subagents.md +385 -0
  91. package/plugins/superharness/workflow/default-workflow.yaml +84 -0
  92. package/plugins/superharness/workflow-state-server/bootstrap.js +44 -0
  93. package/plugins/superharness/workflow-state-server/package-lock.json +2853 -0
  94. package/plugins/superharness/workflow-state-server/package.json +22 -0
  95. package/plugins/superharness/workflow-state-server/render-context.js +124 -0
  96. package/plugins/superharness/workflow-state-server/schema.sql +39 -0
  97. package/plugins/superharness/workflow-state-server/server.js +290 -0
  98. package/plugins/superharness/workflow-state-server/state.js +424 -0
  99. package/plugins/superharness/workflow-state-server/validate-workflow.js +165 -0
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: trivial
3
+ description: 当用户描述 typo 修复、单文件配置调整、改个常量、改个文案、小幅且明确的轻量改动时使用——只对 ≤ 3 文件 / ≤ 50 行 / 不引新依赖 / 不动公共 API 与 schema 的小修适用;超出任一边界必须立即转回 intake
4
+ metadata:
5
+ type: workflow-state
6
+ ---
7
+
8
+ # Trivial — 单点小改 + 自带验证
9
+
10
+ ## 概述
11
+
12
+ 你处在快速通道。这条路把 plan / verification / finishing 全跳过——你既是 implementer,也是 reviewer,**所有事都在这一个状态内完成**。
13
+
14
+ **核心原则:** 改动必须真的轻量。任何"顺手再改一点"的冲动都意味着你不应该在 trivial 里。
15
+
16
+ ## 何时使用 / 不使用
17
+
18
+ **适用**(**全部**满足才能留在 trivial):
19
+
20
+ - 改 typo / 错别字 / 注释笔误
21
+ - 调整 1-3 个配置项(如 timeout、buffer 大小、feature flag 默认值)
22
+ - 改个常量或字面量
23
+ - 改文案 / log message / 错误信息
24
+ - 单文件函数体内的小幅 bugfix(不动签名、不动调用方)
25
+
26
+ **不适用**(出现任一条立即 transition 回 `intake`):
27
+
28
+ - 改动会跨 ≥ 4 个文件
29
+ - 实质改动 > 50 行(不算空白行、纯重命名、纯格式化)
30
+ - 需要新增依赖、新增配置文件、新增 npm/pip 包
31
+ - 改动函数签名 / 导出接口 / 公共 API
32
+ - 改动 schema:DB schema、API contract、消息格式、配置文件结构
33
+ - 改动行为语义(哪怕只改一行——一行 `if` 反转都可能不是 trivial)
34
+ - 你需要先去查代码、对比方案、想架构才能决定怎么改
35
+
36
+ ## 改动边界(硬约束)
37
+
38
+ ```
39
+ ≤ 3 个文件
40
+ ≤ 50 行实质改动(不算空白行 / 纯重命名 / 纯格式化)
41
+ 不引入新依赖
42
+ 不改公共 API / 导出接口 / 函数签名
43
+ 不改 schema(DB / API contract / 配置结构 / 消息格式)
44
+ ```
45
+
46
+ **违反任一条 → 立即 transition_state 到 `intake`**,reason 写明"超出 trivial 边界:[具体哪条]",让用户决定是否升级到 `brainstorming`。
47
+
48
+ **不要试图把改动"切碎"绕过边界**——边界的精神是"心智负担可以一眼读完",违反字面就是违反精神。
49
+
50
+ ## 自带验证(改完必须做)
51
+
52
+ 改完代码后,**在 transition 出去之前**必须完成以下验证,并把结果写进 transition 的 reason:
53
+
54
+ 1. **跑相关测试**:找到覆盖你改动的测试文件 / test 函数,运行它们。看到通过结果,不要"假设会过"。
55
+ 2. **跑 lint**:项目有 lint 命令就跑(npm run lint / ruff / eslint / 等等)。
56
+ 3. **跑类型检查**:项目有类型检查就跑(tsc --noEmit / mypy / 等等)。
57
+ 4. **没有自动化测试时**:至少手动验证 happy path——明确写出"我手动验证了 X 场景,输出 Y"。
58
+
59
+ **验证不通过**:见下方"异常出口"。**不许**用"应该能过"、"看起来对了"、"改动很小不可能出错"这类话替代实际运行验证命令。
60
+
61
+ ## 异常出口
62
+
63
+ | 情况 | 出口 |
64
+ |---|---|
65
+ | 测试失败 / lint 报错 / 类型错误 / 运行报错 | transition 到 `systematic_debugging` |
66
+ | 发现真实改动范围超过任一边界 | transition 回 `intake`,reason 注明超边界细节 |
67
+ | 改完发现需要顺手 refactor 才合理 | **不要 refactor**,transition 回 `intake` 让用户决定 |
68
+
69
+ ## 完成后
70
+
71
+ 完成 = 改动落地 + 自带验证全过。然后 transition_state 回 `intake`。
72
+
73
+ **reason 必须包含两段**:
74
+
75
+ 1. **改了什么**:具体文件路径 + 函数名 / 行号 / 改动的本质(如 "src/utils/timeout.ts 把 DEFAULT_TIMEOUT 从 5000 改为 10000")
76
+ 2. **验证结果**:实际运行了哪些命令 + 看到了什么输出(如 "npm test src/utils/timeout.test.ts 通过 12/12;npm run lint 0 errors")
77
+
78
+ reason 不写或敷衍 = 等同于在审计日志里说谎。
79
+
80
+ ## 反 anti-pattern(红线)
81
+
82
+ 以下任一条出现 → **停**,重新评估:
83
+
84
+ - 在 trivial 里搞 refactor(**不要**——transition 回 intake)
85
+ - "顺手优化"了一段无关代码(**回滚那段**,只保留任务本身的改动)
86
+ - 跳过 self-verification 直接 transition(**回头跑验证**)
87
+ - 改完之后想"我再多改一点点 X 就完美了"(**不要**——超出边界的征兆)
88
+ - 用 "应该" / "大概" / "看起来对了" 替代实际验证命令(**跑命令看输出**)
89
+ - 测试失败但跟自己说"这个 bug 跟我改的无关"(**transition 到 systematic_debugging**,不要绕过)
90
+
91
+ ## 防止合理化
92
+
93
+ | 借口 | 现实 |
94
+ |---|---|
95
+ | "改动这么小不可能出错" | 小改动也会破测试,跑一遍 30 秒 |
96
+ | "测试覆盖的不是我改的地方所以不用跑" | 行为可能传染到任何 caller,跑相关测试 |
97
+ | "顺手把这段 if/else 改清楚一点" | 那是 refactor,不在 trivial 范围 |
98
+ | "lint warning 不算 error" | 看项目设定,CI 报红就是 error |
99
+ | "类型检查通过等于功能正确" | 错的——它只证明类型对 |
100
+ | "范围只超了一点点" | 边界数字是硬的,超了就 transition |
101
+ | "改完发现还得改另一个文件,但加上才 4 个" | 4 > 3,transition 回 intake 升级到 brainstorming |
102
+
103
+ ## 红线——停下来 transition 回 intake
104
+
105
+ - 即将动第 4 个文件
106
+ - 实质改动已经 > 50 行
107
+ - 准备 npm install / pip install 任何东西
108
+ - 准备改某个 export / public 函数签名
109
+ - 准备改 schema / migration / API 契约
110
+ - 准备做"顺手的 refactor"
111
+
112
+ **以上任一条 = trivial 已经不适用。transition 回 intake,让用户决定是否走 brainstorming。**
113
+
114
+ ## 底线
115
+
116
+ trivial 之所以快,是因为它**小到可以一眼审完**。一旦你需要"想一下"才能确定改对了——就不再 trivial。
117
+
118
+ 不要用 trivial 偷渡你本该走 brainstorming / planning 的工作。这条快速通道的存在前提是:使用者诚实地遵守边界。
@@ -0,0 +1,218 @@
1
+ ---
2
+ name: using-git-worktrees
3
+ description: 当需要开始与当前工作区隔离的功能开发或执行实现计划之前使用——创建具有智能目录选择和安全验证的隔离 git 工作树
4
+ ---
5
+
6
+ # 使用 Git 工作树
7
+
8
+ ## 概述
9
+
10
+ Git 工作树创建共享同一仓库的隔离工作区,允许同时在多个分支上工作而无需切换。
11
+
12
+ **核心原则:** 系统化的目录选择 + 安全验证 = 可靠的隔离。
13
+
14
+ **开始时宣布:** "我正在使用 using-git-worktrees 技能来建立一个隔离的工作区。"
15
+
16
+ ## 目录选择流程
17
+
18
+ 按以下优先顺序执行:
19
+
20
+ ### 1. 检查现有目录
21
+
22
+ ```bash
23
+ # 按优先顺序检查
24
+ ls -d .worktrees 2>/dev/null # 首选(隐藏目录)
25
+ ls -d worktrees 2>/dev/null # 备选
26
+ ```
27
+
28
+ **如果找到:** 使用该目录。如果两者都存在,`.worktrees` 优先。
29
+
30
+ ### 2. 检查 CLAUDE.md
31
+
32
+ ```bash
33
+ grep -i "worktree.*director" CLAUDE.md 2>/dev/null
34
+ ```
35
+
36
+ **如果指定了偏好:** 直接使用,无需询问。
37
+
38
+ ### 3. 询问用户
39
+
40
+ 如果没有现有目录且 CLAUDE.md 中无偏好设置:
41
+
42
+ ```
43
+ 未找到工作树目录。我应该在哪里创建工作树?
44
+
45
+ 1. .worktrees/(项目本地,隐藏目录)
46
+ 2. ~/.config/superpowers/worktrees/<project-name>/(全局位置)
47
+
48
+ 你倾向哪个?
49
+ ```
50
+
51
+ ## 安全验证
52
+
53
+ ### 项目本地目录(.worktrees 或 worktrees)
54
+
55
+ **创建工作树前必须验证目录已被忽略:**
56
+
57
+ ```bash
58
+ # 检查目录是否被忽略(遵循本地、全局和系统 gitignore)
59
+ git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees 2>/dev/null
60
+ ```
61
+
62
+ **如果未被忽略:**
63
+
64
+ 根据 Jesse 的规则"立即修复坏掉的东西":
65
+ 1. 在 .gitignore 中添加相应条目
66
+ 2. 提交更改
67
+ 3. 继续创建工作树
68
+
69
+ **为什么这很关键:** 防止意外将工作树内容提交到仓库。
70
+
71
+ ### 全局目录(~/.config/superpowers/worktrees)
72
+
73
+ 无需 .gitignore 验证——完全在项目之外。
74
+
75
+ ## 创建步骤
76
+
77
+ ### 1. 检测项目名称
78
+
79
+ ```bash
80
+ project=$(basename "$(git rev-parse --show-toplevel)")
81
+ ```
82
+
83
+ ### 2. 创建工作树
84
+
85
+ ```bash
86
+ # 确定完整路径
87
+ case $LOCATION in
88
+ .worktrees|worktrees)
89
+ path="$LOCATION/$BRANCH_NAME"
90
+ ;;
91
+ ~/.config/superpowers/worktrees/*)
92
+ path="~/.config/superpowers/worktrees/$project/$BRANCH_NAME"
93
+ ;;
94
+ esac
95
+
96
+ # 创建带有新分支的工作树
97
+ git worktree add "$path" -b "$BRANCH_NAME"
98
+ cd "$path"
99
+ ```
100
+
101
+ ### 3. 运行项目设置
102
+
103
+ 自动检测并运行相应的设置命令:
104
+
105
+ ```bash
106
+ # Node.js
107
+ if [ -f package.json ]; then npm install; fi
108
+
109
+ # Rust
110
+ if [ -f Cargo.toml ]; then cargo build; fi
111
+
112
+ # Python
113
+ if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
114
+ if [ -f pyproject.toml ]; then poetry install; fi
115
+
116
+ # Go
117
+ if [ -f go.mod ]; then go mod download; fi
118
+ ```
119
+
120
+ ### 4. 验证基线正常
121
+
122
+ 运行测试确保工作树初始状态干净:
123
+
124
+ ```bash
125
+ # 示例 - 使用项目对应的命令
126
+ npm test
127
+ cargo test
128
+ pytest
129
+ go test ./...
130
+ ```
131
+
132
+ **如果测试失败:** 报告失败情况,询问是否继续或排查。
133
+
134
+ **如果测试通过:** 报告就绪。
135
+
136
+ ### 5. 报告位置
137
+
138
+ ```
139
+ 工作树已就绪:<full-path>
140
+ 测试通过(<N> 个测试,0 个失败)
141
+ 准备实现 <feature-name>
142
+ ```
143
+
144
+ ## 快速参考
145
+
146
+ | 情况 | 操作 |
147
+ |------|------|
148
+ | `.worktrees/` 存在 | 使用它(验证已忽略) |
149
+ | `worktrees/` 存在 | 使用它(验证已忽略) |
150
+ | 两者都存在 | 使用 `.worktrees/` |
151
+ | 都不存在 | 检查 CLAUDE.md → 询问用户 |
152
+ | 目录未被忽略 | 添加到 .gitignore + 提交 |
153
+ | 基线测试失败 | 报告失败 + 询问 |
154
+ | 无 package.json/Cargo.toml | 跳过依赖安装 |
155
+
156
+ ## 常见错误
157
+
158
+ ### 跳过忽略验证
159
+
160
+ - **问题:** 工作树内容被跟踪,污染 git status
161
+ - **修复:** 创建项目本地工作树前始终使用 `git check-ignore`
162
+
163
+ ### 假设目录位置
164
+
165
+ - **问题:** 造成不一致,违反项目约定
166
+ - **修复:** 遵循优先级:现有目录 > CLAUDE.md > 询问
167
+
168
+ ### 带着失败的测试继续
169
+
170
+ - **问题:** 无法区分新 bug 和已有问题
171
+ - **修复:** 报告失败,获得明确许可后再继续
172
+
173
+ ### 硬编码设置命令
174
+
175
+ - **问题:** 在使用不同工具的项目上会出错
176
+ - **修复:** 从项目文件自动检测(package.json 等)
177
+
178
+ ## 示例工作流
179
+
180
+ ```
181
+ 你:我正在使用 using-git-worktrees 技能来建立一个隔离的工作区。
182
+
183
+ [检查 .worktrees/ - 存在]
184
+ [验证已忽略 - git check-ignore 确认 .worktrees/ 已被忽略]
185
+ [创建工作树:git worktree add .worktrees/auth -b feature/auth]
186
+ [运行 npm install]
187
+ [运行 npm test - 47 个通过]
188
+
189
+ 工作树已就绪:/Users/jesse/myproject/.worktrees/auth
190
+ 测试通过(47 个测试,0 个失败)
191
+ 准备实现 auth 功能
192
+ ```
193
+
194
+ ## 红线
195
+
196
+ **绝不:**
197
+ - 创建项目本地工作树时不验证是否已忽略
198
+ - 跳过基线测试验证
199
+ - 不询问就带着失败的测试继续
200
+ - 在有歧义时假设目录位置
201
+ - 跳过 CLAUDE.md 检查
202
+
203
+ **始终:**
204
+ - 遵循目录优先级:现有目录 > CLAUDE.md > 询问
205
+ - 对项目本地目录验证是否已忽略
206
+ - 自动检测并运行项目设置
207
+ - 验证测试基线干净
208
+
209
+ ## 集成
210
+
211
+ **被以下技能调用:**
212
+ - **brainstorming**(阶段 4)- 设计通过且需要实现时必需
213
+ - **parallel-execution** - 执行任何任务前必需
214
+ - **serial-execution** - 执行任何任务前必需
215
+ - 任何需要隔离工作区的技能
216
+
217
+ **配合使用:**
218
+ - **finishing** - 工作完成后清理时必需
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: verification
3
+ description: 在宣称工作完成、已修复或测试通过之前使用,在提交或创建 PR 之前——必须运行验证命令并确认输出后才能声称成功;始终用证据支撑断言
4
+ ---
5
+
6
+ # 完成前验证
7
+
8
+ ## 概述
9
+
10
+ 在没有验证的情况下宣称工作完成,这不是高效,而是不诚实。
11
+
12
+ **核心原则:** 始终用证据支撑结论。
13
+
14
+ **对这条规则敷衍了事,就等于违背了它的精神。**
15
+
16
+ ## 铁律
17
+
18
+ ```
19
+ 没有新鲜的验证证据,不许宣称完成
20
+ ```
21
+
22
+ 如果你在这条消息中没有运行验证命令,就不能声称测试通过。
23
+
24
+ ## 门控函数
25
+
26
+ ```
27
+ 在宣称任何状态或表达满意之前:
28
+
29
+ 1. 确定:什么命令能证明这个结论?
30
+ 2. 运行:执行完整命令(重新运行,完整执行)
31
+ 3. 阅读:完整输出,检查退出码,统计失败数
32
+ 4. 验证:输出是否支持这个结论?
33
+ - 如果否:用证据说明实际状态
34
+ - 如果是:带证据陈述结论
35
+ 5. 只有这时:才能做出结论
36
+
37
+ 跳过任何一步 = 说谎,不是验证
38
+ ```
39
+
40
+ ## 常见失败模式
41
+
42
+ | 结论 | 需要 | 不够格 |
43
+ |------|------|--------|
44
+ | 测试通过 | 测试命令输出:0 failures | 之前的运行结果、"应该会通过" |
45
+ | Linter 无报错 | Linter 输出:0 errors | 部分检查、推断 |
46
+ | 构建成功 | 构建命令:exit 0 | linter 通过、日志看起来没问题 |
47
+ | Bug 已修复 | 测试原始症状:通过 | 代码改了,假设已修复 |
48
+ | 回归测试有效 | 红-绿循环已验证 | 测试只通过了一次 |
49
+ | 代理已完成 | VCS diff 显示变更 | 代理报告"成功" |
50
+ | 需求已满足 | 逐项核对清单 | 测试通过 |
51
+
52
+ ## 红线——停下来
53
+
54
+ - 使用"应该"、"大概"、"似乎"
55
+ - 验证前就表达满意("太好了!"、"完美!"、"搞定!"等)
56
+ - 即将提交/推送/创建 PR 却没有验证
57
+ - 信任代理的成功报告
58
+ - 依赖部分验证
59
+ - 想着"就这一次"
60
+ - 累了想赶紧收工
61
+ - **任何暗示成功但实际未运行验证的措辞**
62
+
63
+ ## 防止合理化
64
+
65
+ | 借口 | 现实 |
66
+ |------|------|
67
+ | "应该能行了" | 运行验证命令 |
68
+ | "我有信心" | 信心 ≠ 证据 |
69
+ | "就这一次" | 没有例外 |
70
+ | "Linter 通过了" | Linter ≠ 编译器 |
71
+ | "代理说成功了" | 独立验证 |
72
+ | "我累了" | 疲劳 ≠ 借口 |
73
+ | "部分检查就够了" | 部分检查什么也证明不了 |
74
+ | "换个说法这条规则就不适用了" | 精神大于字面 |
75
+
76
+ ## 关键模式
77
+
78
+ **测试:**
79
+ ```
80
+ ✅ [运行测试命令] [看到:34/34 pass] "全部测试通过"
81
+ ❌ "应该能通过了" / "看起来对了"
82
+ ```
83
+
84
+ **回归测试(TDD 红-绿):**
85
+ ```
86
+ ✅ 编写 → 运行(通过)→ 回退修复 → 运行(必须失败)→ 恢复 → 运行(通过)
87
+ ❌ "我写了回归测试"(没有经过红-绿验证)
88
+ ```
89
+
90
+ **构建:**
91
+ ```
92
+ ✅ [运行构建] [看到:exit 0] "构建通过"
93
+ ❌ "Linter 通过了"(linter 不检查编译)
94
+ ```
95
+
96
+ **需求:**
97
+ ```
98
+ ✅ 重读计划 → 创建核对清单 → 逐项验证 → 报告缺口或完成
99
+ ❌ "测试通过了,阶段完成"
100
+ ```
101
+
102
+ **代理委派:**
103
+ ```
104
+ ✅ 代理报告成功 → 检查 VCS diff → 验证变更 → 报告实际状态
105
+ ❌ 信任代理报告
106
+ ```
107
+
108
+ ## 为什么这很重要
109
+
110
+ 来自 24 次失败记录:
111
+ - 搭档说"我不信你"——信任被破坏
112
+ - 未定义的函数被交付——会直接崩溃
113
+ - 遗漏需求被交付——功能不完整
114
+ - 虚假完成浪费的时间 → 返工 → 重做
115
+ - 违反原则:"诚实是核心价值。如果你说谎,就会被替换。"
116
+
117
+ ## 何时使用
118
+
119
+ **以下情况之前必须使用:**
120
+ - 任何形式的成功/完成声明
121
+ - 任何满意的表达
122
+ - 任何关于工作状态的正面陈述
123
+ - 提交、创建 PR、标记任务完成
124
+ - 进入下一个任务
125
+ - 委派给代理
126
+
127
+ **本规则适用于:**
128
+ - 准确措辞
129
+ - 同义词和换一种说法
130
+ - 暗示成功
131
+ - 任何传达完成/正确性的沟通
132
+
133
+ ## 底线
134
+
135
+ **验证没有捷径。**
136
+
137
+ 运行命令。阅读输出。然后才能宣称结果。
138
+
139
+ 这没有商量余地。
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: workflow-runner
3
+ description: "在 Claude Code 和 Codex 中直接运行 agency-orchestrator YAML 工作流——无需 API key,使用当前会话的 LLM 作为执行引擎。当用户提供 .yaml 工作流文件或要求多角色协作完成任务时触发。"
4
+ ---
5
+
6
+ # 工作流执行器:在 AI 工具内运行多角色编排
7
+
8
+ 直接在当前会话中执行 agency-orchestrator 的 YAML 工作流,无需配置 API key。当前 LLM 就是执行引擎——依次扮演每个角色完成任务。
9
+
10
+ ## 适用场景
11
+
12
+ - 用户提供了一个 `.yaml` 工作流文件(如 `运行 workflows/story-creation.yaml`)
13
+ - 用户要求多个角色协作完成任务(如"用产品经理和架构师一起评审这个 PRD")
14
+ - 用户安装了 `agency-agents-zh` 并希望直接在 AI 工具内编排多角色
15
+
16
+ ## 执行流程(5 步)
17
+
18
+ 按以下顺序执行,不要跳步:
19
+
20
+ ### 第 1 步:解析工作流
21
+
22
+ 用 Read 工具读取用户指定的 YAML 文件,提取以下字段:
23
+
24
+ ```yaml
25
+ name: "工作流名称"
26
+ agents_dir: "agency-agents-zh" # 角色定义目录
27
+ inputs: # 输入变量
28
+ - name: xxx
29
+ required: true/false
30
+ default: "默认值"
31
+ steps: # 执行步骤
32
+ - id: step_id
33
+ role: "category/agent-name" # 角色路径
34
+ task: "任务描述 {{变量}}" # 支持模板变量
35
+ output: variable_name # 输出变量名
36
+ depends_on: [other_step_id] # 依赖关系
37
+ ```
38
+
39
+ **忽略 `llm`、`concurrency`、`timeout`、`retry` 配置**——Skill 模式使用当前会话的 LLM,这些字段仅用于 CLI 模式。
40
+
41
+ **定位角色目录**:用 Bash `test -d` 按以下顺序检查,用第一个存在的:
42
+ 1. 当前工作目录下的 `{agents_dir}/`(如 `./agency-agents-zh/`)
43
+ 2. `../{agents_dir}/`(上级目录)
44
+ 3. 相对于 YAML 文件所在目录的 `{agents_dir}/`
45
+ 4. `node_modules/agency-agents-zh/`
46
+
47
+ 如果全部找不到,**停止执行**并提示用户:
48
+ ```
49
+ 找不到角色目录。请先安装:
50
+ git clone --depth 1 https://github.com/jnMetaCode/agency-agents-zh.git
51
+ 或:npm install agency-agents-zh
52
+ ```
53
+
54
+ ### 第 2 步:收集输入
55
+
56
+ - 对每个 `required: true` 的输入,检查用户消息中是否已提供值
57
+ - 未提供的必填输入:**立即向用户询问**,不要猜测或用空值
58
+ - 有 `default` 的可选输入:使用默认值
59
+ - 无默认值的可选输入:设为空字符串
60
+
61
+ ### 第 3 步:构建执行顺序
62
+
63
+ 根据 `depends_on` 进行拓扑排序,将步骤分成多个层级:
64
+
65
+ - **无 depends_on 的步骤** → 第 1 层
66
+ - **depends_on 全部在第 N 层或之前的步骤** → 第 N+1 层
67
+ - **同一层内的步骤**互不依赖,可并行
68
+
69
+ 在回复中展示执行计划:
70
+ ```
71
+ 执行计划(共 N 步):
72
+ 第 1 层: [step_id] — 角色名
73
+ 第 2 层: [step_a, step_b] — 并行
74
+ 第 3 层: [step_id] — 角色名
75
+ ```
76
+
77
+ ### 第 4 步:逐层执行
78
+
79
+ 对每一层:
80
+
81
+ #### 4a. 预读角色文件
82
+
83
+ 用 Read 工具读取该层所有步骤的角色 `.md` 文件:`{角色目录}/{role}.md`
84
+
85
+ 从文件中提取:
86
+ - **角色名**:frontmatter 中的 `name` 字段
87
+ - **角色 system prompt**:第二个 `---` 之后的全部 markdown 内容
88
+
89
+ #### 4b. 渲染 task 模板
90
+
91
+ 将 task 中的 `{{变量名}}` 替换为:
92
+ - 来自 inputs 的用户输入值
93
+ - 来自前序步骤 output 的结果文本
94
+
95
+ #### 4c. 执行
96
+
97
+ **单步骤层**:直接在主会话中扮演该角色执行。格式:
98
+
99
+ ```
100
+ ### Step N/Total: step_id(角色名)
101
+
102
+ [以该角色身份完成 task,使用角色的专业知识和沟通风格]
103
+ ```
104
+
105
+ **多步骤层(并行)**:使用 Agent 工具为每个步骤启动子代理。每个子代理的 prompt 必须包含:
106
+ - 角色文件的**完整文本内容**(不是路径——子代理可能无法读文件)
107
+ - 渲染后的 task 文本
108
+ - 指令:"以上是你的角色定义,请以该角色身份完成以下任务,直接输出结果"
109
+
110
+ #### 4d. 保存输出到上下文
111
+
112
+ 如果 step 有 `output` 字段,将该步骤的输出文本存入变量上下文,供后续步骤的 `{{变量}}` 使用。
113
+
114
+ ### 第 5 步:保存结果并展示
115
+
116
+ 用 Write 工具将结果保存到文件:
117
+
118
+ ```
119
+ .ao-output/{工作流名称}-{YYYY-MM-DD}/
120
+ ├── steps/
121
+ │ ├── 1-{step_id}.md # 每步的输出
122
+ │ ├── 2-{step_id}.md
123
+ │ └── ...
124
+ ├── summary.md # 最后一步的完整输出(最终成果)
125
+ └── metadata.json # 基本元数据
126
+ ```
127
+
128
+ metadata.json 格式:
129
+ ```json
130
+ {
131
+ "name": "工作流名称",
132
+ "date": "2026-03-22",
133
+ "success": true,
134
+ "steps": [
135
+ {"id": "step_id", "role": "category/agent", "status": "completed"},
136
+ ...
137
+ ]
138
+ }
139
+ ```
140
+
141
+ 执行完毕后,向用户展示:
142
+ 1. 最终成果(summary.md 的内容)
143
+ 2. 文件保存位置
144
+ 3. 执行了几个步骤
145
+
146
+ ## 重要规则
147
+
148
+ <HARD-GATE>
149
+ - 每个步骤都必须真正扮演对应角色,使用该角色的专业知识和沟通风格,不能泛泛回答
150
+ - 角色切换必须明确——每步开始时标注角色名
151
+ - 不要跳过步骤或合并步骤,严格按 DAG 层级顺序执行
152
+ - 如果角色文件找不到,告知用户并建议安装 agency-agents-zh
153
+ - 不要在没有读取角色 .md 文件的情况下执行步骤——必须先 Read 再执行
154
+ </HARD-GATE>
155
+
156
+ ## 没有 YAML 文件时的快捷模式
157
+
158
+ 如果用户没有指定 YAML 文件,但描述了需要多角色协作的任务:
159
+
160
+ 1. 根据用户描述,**自动生成** YAML 工作流定义
161
+ 2. 展示给用户确认
162
+ 3. 确认后按上述流程执行
163
+
164
+ 示例:
165
+ - 用户说"帮我用叙事学家和心理学家写个故事" → 生成 story-creation 类似的工作流
166
+ - 用户说"让产品经理和架构师评审这个 PRD" → 生成 product-review 类似的工作流
167
+
168
+ ## 故障处理
169
+
170
+ - **角色文件不存在**:提示用户运行 `ao init` 或 `npm install agency-agents-zh`
171
+ - **模板变量未定义**:检查上下文,如果是必填输入则向用户询问
172
+ - **步骤执行失败**:标记该步骤为失败,跳过所有依赖它的下游步骤,继续执行其他独立步骤