homunculus-code 0.1.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.
- package/CONTRIBUTING.md +56 -0
- package/LICENSE +21 -0
- package/README.md +443 -0
- package/bin/init.js +317 -0
- package/commands/eval-skill.md +48 -0
- package/commands/evolve.md +67 -0
- package/commands/improve-skill.md +50 -0
- package/core/evaluate-session.js +173 -0
- package/core/observe.sh +51 -0
- package/core/prune-instincts.js +159 -0
- package/docs/nightly-agent.md +130 -0
- package/examples/reference/README.md +47 -0
- package/examples/reference/architecture.yaml +886 -0
- package/examples/reference/evolved-agents/assistant-explorer.md +86 -0
- package/examples/reference/evolved-agents/shell-debugger.md +108 -0
- package/examples/reference/evolved-agents/tdd-runner.md +112 -0
- package/examples/reference/evolved-evals/api-system-diagnosis.eval.yaml +125 -0
- package/examples/reference/evolved-evals/assistant-system-management.eval.yaml +123 -0
- package/examples/reference/evolved-evals/claude-code-reference.eval.yaml +394 -0
- package/examples/reference/evolved-evals/development-verification-patterns.eval.yaml +117 -0
- package/examples/reference/evolved-evals/multi-agent-design-patterns.eval.yaml +151 -0
- package/examples/reference/evolved-evals/shell-automation-patterns.eval.yaml +209 -0
- package/examples/reference/evolved-evals/tdd-workflow.eval.yaml +191 -0
- package/examples/reference/evolved-evals/workflows.eval.yaml +148 -0
- package/examples/reference/evolved-skills/api-system-diagnosis.md +234 -0
- package/examples/reference/evolved-skills/assistant-system-management.md +199 -0
- package/examples/reference/evolved-skills/development-verification-patterns.md +243 -0
- package/examples/reference/evolved-skills/multi-agent-design-patterns.md +259 -0
- package/examples/reference/evolved-skills/shell-automation-patterns.md +347 -0
- package/examples/reference/evolved-skills/tdd-workflow.md +272 -0
- package/examples/reference/evolved-skills/workflows.md +237 -0
- package/package.json +25 -0
- package/templates/CLAUDE.md.template +36 -0
- package/templates/architecture.template.yaml +41 -0
- package/templates/rules/evolution-system.md +29 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
skill: claude-code-reference
|
|
2
|
+
version: "4.9"
|
|
3
|
+
last_eval: "2026-03-22"
|
|
4
|
+
pass_rate: 100
|
|
5
|
+
total_scenarios: 22
|
|
6
|
+
grader_type: model # model=LLM 判斷 | code=腳本驗證
|
|
7
|
+
|
|
8
|
+
scenarios:
|
|
9
|
+
- id: headless-cli-script
|
|
10
|
+
name: "Headless CLI 在 Shell Script 中使用"
|
|
11
|
+
context: |
|
|
12
|
+
開發者需要在 shell script 中呼叫 claude CLI,要求:
|
|
13
|
+
1. 不受 CLAUDECODE 環境變數影響
|
|
14
|
+
2. 輸出 JSON 格式並提取 result 欄位
|
|
15
|
+
3. 多步驟對話(step 1 的 session 傳給 step 2)
|
|
16
|
+
expected_behavior: |
|
|
17
|
+
- 提到 `unset CLAUDECODE` 作為第一步
|
|
18
|
+
- 提到 `--output-format json | jq -r '.result'`
|
|
19
|
+
- 提到 `--output-format json | jq -r '.session_id'` 取得 session ID
|
|
20
|
+
- 提到 `--resume "$SESSION"` 繼續多步驟對話
|
|
21
|
+
anti_patterns:
|
|
22
|
+
- "沒有 unset CLAUDECODE 就直接呼叫 claude"
|
|
23
|
+
- "用 grep 而非 jq 解析 JSON"
|
|
24
|
+
- "沒有提到 session 保留機制"
|
|
25
|
+
|
|
26
|
+
- id: hooks-vs-skills-decision
|
|
27
|
+
name: "Hooks vs Skills 選擇決策"
|
|
28
|
+
context: |
|
|
29
|
+
用戶想在每次 Edit 工具執行後自動執行某個動作(格式化、lint)。
|
|
30
|
+
問:應該用 Hooks 還是 Skills?
|
|
31
|
+
expected_behavior: |
|
|
32
|
+
- 推薦 Hooks(PostToolUse 類型)
|
|
33
|
+
- 說明 Skills 是主動呼叫的命令,不能自動觸發
|
|
34
|
+
- 提到 matcher 可以設定 tool_name: Edit
|
|
35
|
+
- 說明 hook 接收 JSON stdin 包含 tool_name 和結果
|
|
36
|
+
anti_patterns:
|
|
37
|
+
- "推薦用 Skills 做自動觸發"
|
|
38
|
+
- "沒有提到 PostToolUse"
|
|
39
|
+
- "沒有說明 matcher 設定"
|
|
40
|
+
|
|
41
|
+
- id: mcp-server-setup
|
|
42
|
+
name: "新增 MCP Server"
|
|
43
|
+
context: |
|
|
44
|
+
用戶想新增一個本地 MCP server(node 程式,路徑 ~/tools/my-mcp.js),
|
|
45
|
+
只在這個專案使用,不要全域啟用。
|
|
46
|
+
expected_behavior: |
|
|
47
|
+
- 在 `.claude/settings.json` 或 `.mcp.json` 中設定(project scope)
|
|
48
|
+
- 格式:`{"mcpServers": {"my-tool": {"command": "node", "args": ["~/tools/my-mcp.js"]}}}`
|
|
49
|
+
- 說明 user scope 是 `~/.claude/settings.json`,project scope 是 `.claude/settings.json`
|
|
50
|
+
anti_patterns:
|
|
51
|
+
- "只說明全域設定,不提 project scope"
|
|
52
|
+
- "格式錯誤(command 不是 node)"
|
|
53
|
+
- "沒有提到 settings.json 的位置"
|
|
54
|
+
|
|
55
|
+
- id: cost-optimization
|
|
56
|
+
name: "降低 Claude Code 成本"
|
|
57
|
+
context: |
|
|
58
|
+
用戶反映 Claude Code 每週成本太高,想要具體的降低方法。
|
|
59
|
+
目前用 Sonnet 模型,有時做簡單的重複性任務。
|
|
60
|
+
expected_behavior: |
|
|
61
|
+
- 提到模型選擇(Haiku 用於重複性任務)
|
|
62
|
+
- 提到 hooks 預處理可以減少 AI 需介入的次數
|
|
63
|
+
- 提到 ENABLE_TOOL_SEARCH=0 或 MAX_THINKING_TOKENS 環境變數
|
|
64
|
+
- 或提到 --max-budget-usd 成本上限
|
|
65
|
+
anti_patterns:
|
|
66
|
+
- "只說用 Haiku,沒有其他建議"
|
|
67
|
+
- "建議完全停用功能而非優化"
|
|
68
|
+
|
|
69
|
+
- id: permission-allow-pattern
|
|
70
|
+
name: "設定精細 Permission 允許規則"
|
|
71
|
+
context: |
|
|
72
|
+
用戶想允許 `npm run *` 類的所有 npm 命令自動執行,
|
|
73
|
+
但其他 bash 命令仍需要確認。
|
|
74
|
+
expected_behavior: |
|
|
75
|
+
- 在 `.claude/settings.json` 中設定 `allowedTools`
|
|
76
|
+
- 格式:`"Bash(npm run *)"`(glob 模式)
|
|
77
|
+
- 說明 `//path` 是絕對路徑,`~/` 是 home
|
|
78
|
+
- 或說明 `/permissions` 命令可以互動管理
|
|
79
|
+
anti_patterns:
|
|
80
|
+
- "允許所有 Bash 命令(安全風險)"
|
|
81
|
+
- "沒有說明 glob 模式語法"
|
|
82
|
+
|
|
83
|
+
- id: enterprise-pr-review
|
|
84
|
+
name: "Teams 自動 PR Code Review 設定"
|
|
85
|
+
context: |
|
|
86
|
+
用戶的團隊使用 GitHub,想要設定每次 PR 時自動進行 code review。
|
|
87
|
+
問:如何設定?費用如何?可以自訂 review 規則嗎?
|
|
88
|
+
expected_behavior: |
|
|
89
|
+
- 說明需要 Teams/Enterprise 方案
|
|
90
|
+
- 提到 Admin 在 `claude.ai/admin-settings/claude-code` 啟用
|
|
91
|
+
- 說明費用約 $15-25/review
|
|
92
|
+
- 提到 `REVIEW.md` 可以設定 review 專用規則(獨立於 CLAUDE.md)
|
|
93
|
+
- 提到 inline comment 嚴重度標籤(🔴🟡🟣)
|
|
94
|
+
anti_patterns:
|
|
95
|
+
- "說可以在 Free plan 使用"
|
|
96
|
+
- "混淆 REVIEW.md 與 CLAUDE.md 的用途"
|
|
97
|
+
- "沒有提到費用"
|
|
98
|
+
|
|
99
|
+
- id: code-intelligence-plugin
|
|
100
|
+
name: "安裝 Code Intelligence Plugin 提升開發效率"
|
|
101
|
+
context: |
|
|
102
|
+
用戶在 TypeScript 專案工作,希望 Claude 能自動偵測型別錯誤,
|
|
103
|
+
不需要手動執行 tsc。問:有什麼方法可以做到?
|
|
104
|
+
expected_behavior: |
|
|
105
|
+
- 提到 Claude Code 官方 marketplace 有 code intelligence plugins
|
|
106
|
+
- 提到 `vtsls@claude-code-lsps` plugin(typescript-lsp 有 bug #15235 應避免)
|
|
107
|
+
- 說明安裝後 Claude 每次 edit 後自動得到 LSP 診斷,可即時修復型別錯誤
|
|
108
|
+
- 提到需設定 `ENABLE_LSP_TOOL=1` 環境變數啟用 LSP
|
|
109
|
+
- 提到安裝指令:`/plugin install vtsls@claude-code-lsps`
|
|
110
|
+
anti_patterns:
|
|
111
|
+
- "建議手動跑 tsc 而不提 LSP plugin"
|
|
112
|
+
- "不知道有 code intelligence plugin"
|
|
113
|
+
- "推薦使用 typescript-lsp(有 bug #15235,應用 vtsls)"
|
|
114
|
+
- "沒有提到 ENABLE_LSP_TOOL=1"
|
|
115
|
+
|
|
116
|
+
- id: pr-attribution-analytics
|
|
117
|
+
name: "PR 貢獻度追蹤(Analytics)"
|
|
118
|
+
context: |
|
|
119
|
+
Teams 方案用戶想追蹤團隊中 Claude Code 對 PR 的貢獻度。
|
|
120
|
+
問:merge 後如何知道哪些 PR 是 Claude Code 協助完成的?
|
|
121
|
+
expected_behavior: |
|
|
122
|
+
- 提到自動貼 `claude-code-assisted` GitHub label
|
|
123
|
+
- 說明歸因窗口(merge 前 21 天 + 後 2 天的 session activity)
|
|
124
|
+
- 提到 `gh pr list --label "claude-code-assisted"` 可程式化查詢
|
|
125
|
+
- 說明保守估計機制(自動過濾 lock files / minified)
|
|
126
|
+
anti_patterns:
|
|
127
|
+
- "說需要手動標記 PR"
|
|
128
|
+
- "不知道有 claude-code-assisted 標籤"
|
|
129
|
+
- "說個人 API 帳號也支援(實際上需要 Teams/Enterprise)"
|
|
130
|
+
|
|
131
|
+
- id: hooks-advanced-env-file
|
|
132
|
+
name: "SessionStart Hook 持久化環境變數"
|
|
133
|
+
context: |
|
|
134
|
+
用戶想在每個 session 開始時設定某些環境變數(如 NODE_ENV=production),
|
|
135
|
+
讓所有後續 Bash 呼叫都自動帶這些環境變數,不需要手動 export。
|
|
136
|
+
問:用 hooks 如何實現?
|
|
137
|
+
expected_behavior: |
|
|
138
|
+
- 提到 SessionStart hook 類型
|
|
139
|
+
- 提到 `CLAUDE_ENV_FILE` 環境變數(SessionStart 專用)
|
|
140
|
+
- 說明寫入 `$CLAUDE_ENV_FILE` 的環境變數會持久化到後續所有 Bash 呼叫
|
|
141
|
+
- 提供腳本範例:`echo 'export NODE_ENV=production' >> "$CLAUDE_ENV_FILE"`
|
|
142
|
+
anti_patterns:
|
|
143
|
+
- "建議在每個 Bash 命令前手動 export"
|
|
144
|
+
- "不知道 CLAUDE_ENV_FILE 的存在"
|
|
145
|
+
- "建議用 PreToolUse hook(應用 SessionStart)"
|
|
146
|
+
|
|
147
|
+
- id: session-context-anti-patterns
|
|
148
|
+
name: "避免 Context Window 常見錯誤"
|
|
149
|
+
context: |
|
|
150
|
+
用戶反映 Claude Code 在長 session 後表現變差,
|
|
151
|
+
常常需要重新解釋之前說過的事情。問:有什麼解決方法?
|
|
152
|
+
expected_behavior: |
|
|
153
|
+
- 提到 /clear 在任務切換時重置 context
|
|
154
|
+
- 提到 /compact <instructions> 指定保留重點
|
|
155
|
+
- 說明連續修正兩次仍失敗 → 應 /clear 而非繼續累積失敗 context
|
|
156
|
+
- 提到 /rename 命名 session 方便之後 --resume 恢復
|
|
157
|
+
- 或提到 subagent 做調查可以保持主 context 乾淨
|
|
158
|
+
anti_patterns:
|
|
159
|
+
- "只說等待自動 compact"
|
|
160
|
+
- "沒有提到 /clear 的使用時機"
|
|
161
|
+
- "建議關閉再重開整個 CC"
|
|
162
|
+
|
|
163
|
+
- id: remote-control-vs-web
|
|
164
|
+
name: "Remote Control vs Claude Code on the web 差異"
|
|
165
|
+
context: |
|
|
166
|
+
用戶有兩個問題:
|
|
167
|
+
1. 外出時想用手機繼續在 MacBook 上跑的 Claude Code session,
|
|
168
|
+
本地 MCP tools 和檔案系統都要可以用。怎麼做?
|
|
169
|
+
2. Remote Control 和直接用瀏覽器開 Claude Code on the web 有什麼差別?
|
|
170
|
+
expected_behavior: |
|
|
171
|
+
- 問題 1:推薦 Remote Control(`claude remote-control` 或 `/rc`),
|
|
172
|
+
說明 session 仍在本機執行,本地 MCP/工具/檔案系統全部可用
|
|
173
|
+
- 說明連接方式:QR code 手機掃描,或 URL,或 claude.ai/code
|
|
174
|
+
- 問題 2:清楚區分執行位置差異(Remote Control=本機 vs CC on the web=雲端),
|
|
175
|
+
說明 CC on the web 無法存取本地檔案/MCP
|
|
176
|
+
- 提到限制:關閉 terminal = session 結束,或網路中斷超過 ~10 分鐘
|
|
177
|
+
anti_patterns:
|
|
178
|
+
- "說 Remote Control 在雲端執行"
|
|
179
|
+
- "說兩者功能相同"
|
|
180
|
+
- "沒有提到本地 MCP/工具仍可用"
|
|
181
|
+
- "沒有提到關閉 terminal 的限制"
|
|
182
|
+
|
|
183
|
+
- id: output-styles-vs-claude-md
|
|
184
|
+
name: "Output Styles 與 CLAUDE.md 的差異"
|
|
185
|
+
context: |
|
|
186
|
+
用戶想讓 Claude Code 變成教學模式:每次操作時加入解釋,
|
|
187
|
+
幫助他學習正在使用的 codebase。他想知道:
|
|
188
|
+
1. 應該用 CLAUDE.md 還是 Output Styles?
|
|
189
|
+
2. 如何設定?有沒有現成的教學模式?
|
|
190
|
+
expected_behavior: |
|
|
191
|
+
- 推薦 Output Styles(而非 CLAUDE.md)
|
|
192
|
+
- 解釋關鍵差異:Output Styles 替換 system prompt;CLAUDE.md 是附加到 user message
|
|
193
|
+
- 提到內建 `explanatory` style(每個操作間加入教育性 insights)
|
|
194
|
+
或 `learning` style(insights + 要求用戶完成部分代碼)
|
|
195
|
+
- 說明設定方式:`/config` 介面選擇,或在 `.claude/output-styles/` 建立自訂 style
|
|
196
|
+
anti_patterns:
|
|
197
|
+
- "說 Output Styles 和 CLAUDE.md 作用相同"
|
|
198
|
+
- "不知道有 explanatory/learning 內建 style"
|
|
199
|
+
- "說 Output Styles 是附加而非替換 system prompt"
|
|
200
|
+
- "沒有提到 /config 設定方式"
|
|
201
|
+
|
|
202
|
+
- id: new-features-v2-1-59-71
|
|
203
|
+
name: "v2.1.59-71 新功能速查"
|
|
204
|
+
context: |
|
|
205
|
+
用戶從 v2.1.58 升級到最新版後想了解:
|
|
206
|
+
1. 如何在 session 中設定每 5 分鐘執行一次 deploy 檢查?
|
|
207
|
+
2. 用 --resume 繼續 session 時,有什麼 token 節省的改進?
|
|
208
|
+
3. 如何從 system prompt 移除 Claude Code 內建的 git 工作流指令?
|
|
209
|
+
expected_behavior: |
|
|
210
|
+
- 問題 1:提到 `/loop 5m check deploy` 命令(v2.1.71),或 CronCreate tool
|
|
211
|
+
- 問題 2:提到 v2.1.70 修復了 skill listing 重複注入,--resume 省 ~600 tokens
|
|
212
|
+
- 問題 3:提到 `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1` env var(v2.1.69)
|
|
213
|
+
或 `includeGitInstructions: false` setting
|
|
214
|
+
anti_patterns:
|
|
215
|
+
- "說 /loop 不存在或需要 cron/launchd"
|
|
216
|
+
- "不知道 --resume 有 token 節省"
|
|
217
|
+
- "說無法移除 git 指令"
|
|
218
|
+
|
|
219
|
+
- id: v2176-postcompact-and-elicitation
|
|
220
|
+
name: "v2.1.76 PostCompact Hook 與 MCP Elicitation 應用"
|
|
221
|
+
context: |
|
|
222
|
+
用戶升級到 v2.1.76,想了解兩件事:
|
|
223
|
+
1. 想在 compaction 完成後自動把 instinct 摘要注入 context(保持重要記憶)。
|
|
224
|
+
問:有沒有 hook 可以在 compaction 後觸發?
|
|
225
|
+
2. 自己寫了一個 MCP server,希望在執行某個工具時能向用戶確認一個選項。
|
|
226
|
+
問:v2.1.76 有什麼新機制支援這個?
|
|
227
|
+
expected_behavior: |
|
|
228
|
+
- 問題 1:提到 `PostCompact` hook(v2.1.76 新增)
|
|
229
|
+
- 說明 PostCompact hook 在 compaction 完成後觸發,可輸出文字注入 context
|
|
230
|
+
- 提供設定範例(hooks 設定 type: command,觸發 shell script)
|
|
231
|
+
- 問題 2:提到 MCP Elicitation(v2.1.76 新增)
|
|
232
|
+
- 說明 MCP server 可透過 `Elicitation` 發出互動式請求,CC 彈出 dialog 讓用戶輸入結構化資料
|
|
233
|
+
- 提到 `ElicitationResult` hook 可攔截/處理結果
|
|
234
|
+
anti_patterns:
|
|
235
|
+
- "說 compaction 後無法注入任何資訊"
|
|
236
|
+
- "不知道 PostCompact hook 的存在"
|
|
237
|
+
- "說 MCP server 無法向用戶請求互動輸入"
|
|
238
|
+
- "混淆 MCP Elicitation 與一般的 tool call"
|
|
239
|
+
|
|
240
|
+
# --- Boundary Scenarios (designed for precision testing, higher difficulty) ---
|
|
241
|
+
|
|
242
|
+
- id: boundary-hook-type-confusion
|
|
243
|
+
name: "[Boundary] Hook 類型混淆:command vs prompt vs agent"
|
|
244
|
+
difficulty: hard
|
|
245
|
+
context: |
|
|
246
|
+
用戶需要做兩件事:
|
|
247
|
+
1. 每次 Edit 後自動跑 eslint(確定性行為,不需 AI)
|
|
248
|
+
2. 每次 Edit 後讓 AI 判斷是否需要更新相關測試(需要推理)
|
|
249
|
+
問:這兩個分別該用什麼 hook 類型?
|
|
250
|
+
expected_behavior: |
|
|
251
|
+
- 任務 1:推薦 `type: "command"`(確定性,shell script 跑 eslint)
|
|
252
|
+
- 任務 2:推薦 `type: "prompt"` 或 `type: "agent"`(需要 AI 推理)
|
|
253
|
+
- 清楚區分三種 hook 類型的使用場景:
|
|
254
|
+
command = 確定性腳本 | prompt = 輕量 AI 判斷 | agent = 複雜多步 AI 任務
|
|
255
|
+
- 提到 prompt hook 的 output 會注入 context(可引導後續行為)
|
|
256
|
+
anti_patterns:
|
|
257
|
+
- "兩個都推薦用 command 類型"
|
|
258
|
+
- "不區分 prompt 和 agent 的差異"
|
|
259
|
+
- "不提到 prompt hook output 注入 context 的機制"
|
|
260
|
+
|
|
261
|
+
- id: boundary-mcp-scope-tradeoff
|
|
262
|
+
name: "[Boundary] MCP 設定 scope 的取捨判斷"
|
|
263
|
+
difficulty: hard
|
|
264
|
+
context: |
|
|
265
|
+
用戶有一個 Postgres MCP server。情境:
|
|
266
|
+
- 這個 MCP 只在 backend 專案需要,不想污染其他專案
|
|
267
|
+
- 但 backend 專案有 3 個 repo(微服務架構),都需要這個 MCP
|
|
268
|
+
問:應該放 user scope 還是 project scope?還是有更好的方式?
|
|
269
|
+
expected_behavior: |
|
|
270
|
+
- 分析取捨:project scope 需要在 3 個 repo 各設一份(重複但隔離)
|
|
271
|
+
- 另一選項:user scope `~/.claude/settings.json`(一份但全域可見)
|
|
272
|
+
- 最佳建議應考慮兩面並做出推薦
|
|
273
|
+
- 提到可使用 `.mcp.json`(project-level)或 user settings
|
|
274
|
+
anti_patterns:
|
|
275
|
+
- "無條件推薦 project scope 而不考慮跨 repo 重複問題"
|
|
276
|
+
- "無條件推薦 user scope 而不提醒全域影響"
|
|
277
|
+
- "沒有分析取捨就直接給答案"
|
|
278
|
+
|
|
279
|
+
- id: boundary-resume-permissions
|
|
280
|
+
name: "[Boundary] --resume 與 --fork-session 的權限陷阱"
|
|
281
|
+
difficulty: hard
|
|
282
|
+
context: |
|
|
283
|
+
用戶在一個 session 中設定了 `acceptEdits` 權限。
|
|
284
|
+
現在想繼續工作,問:--resume 和 --fork-session 會保留這個權限嗎?
|
|
285
|
+
expected_behavior: |
|
|
286
|
+
- 關鍵警告:--resume 和 --fork-session 都**不繼承 permissions**
|
|
287
|
+
- 新的 session 會用預設權限,需要重新設定
|
|
288
|
+
- 區分 --resume(繼續原 session)vs --fork-session(複製為獨立分支)
|
|
289
|
+
anti_patterns:
|
|
290
|
+
- "說 --resume 會繼承權限"
|
|
291
|
+
- "說 --fork-session 保留原 session 的 permissions"
|
|
292
|
+
- "不提到權限不繼承的重要警告"
|
|
293
|
+
|
|
294
|
+
- id: v2178-stop-failure-hook
|
|
295
|
+
name: "[v2.1.78] StopFailure hook 使用場景"
|
|
296
|
+
difficulty: medium
|
|
297
|
+
context: |
|
|
298
|
+
用戶的夜間 agent 在執行時偶爾因 rate limit 或 auth failure 靜默退出,
|
|
299
|
+
無法知道是正常結束還是 API 錯誤導致的退出。
|
|
300
|
+
問:CC v2.1.78 有什麼機制可以捕捉這種情況?
|
|
301
|
+
expected_behavior: |
|
|
302
|
+
- 說明 StopFailure hook(v2.1.78 新增):API 錯誤結束 turn 時觸發
|
|
303
|
+
- 區分 Stop hook(正常結束)vs StopFailure hook(API 錯誤結束)
|
|
304
|
+
- 指出觸發條件:rate limit、auth failure 等 API 層級錯誤
|
|
305
|
+
- 建議在 settings.json 的 hooks.StopFailure 中配置日誌或通知
|
|
306
|
+
anti_patterns:
|
|
307
|
+
- "說 Stop hook 可以捕捉 API 錯誤(Stop hook 只在正常結束時觸發)"
|
|
308
|
+
- "不知道 StopFailure hook 的存在或說 v2.1.78 沒有此功能"
|
|
309
|
+
- "混淆 PostToolUseFailure(工具失敗)和 StopFailure(API 錯誤退出)"
|
|
310
|
+
|
|
311
|
+
# --- v4.8 新增:覆蓋 v2.1.80 功能 (added by autoresearch round 1, 2026-03-22) ---
|
|
312
|
+
|
|
313
|
+
- id: v2180-effort-frontmatter
|
|
314
|
+
name: "[v2.1.80] Skill effort frontmatter 節省 token"
|
|
315
|
+
difficulty: medium
|
|
316
|
+
context: |
|
|
317
|
+
用戶有一個 `/summarize` skill,這個 skill 用於每日日誌摘要,
|
|
318
|
+
是低風險、重複性的任務,想要讓這個 skill 預設以低 effort 執行以節省成本。
|
|
319
|
+
問:v2.1.80 有什麼方法可以在 skill 定義層級設定 effort?
|
|
320
|
+
expected_behavior: |
|
|
321
|
+
- 提到 `effort` frontmatter 欄位(v2.1.80 新增)
|
|
322
|
+
- 說明在 `.md` skill YAML frontmatter 中加入 `effort: low`
|
|
323
|
+
- 列出可用值:low | medium | high | max
|
|
324
|
+
- 說明 max = Opus 4.6 only,high-stakes 任務適用
|
|
325
|
+
- 提到也可用環境變數 `CLAUDE_CODE_EFFORT_LEVEL=low` 在 shell 層控制
|
|
326
|
+
anti_patterns:
|
|
327
|
+
- "說 skill 的 effort 無法在 frontmatter 設定(v2.1.80 之前正確,但現在不對)"
|
|
328
|
+
- "只提到 /model 設定,沒有提到 frontmatter 方式"
|
|
329
|
+
- "不知道 effort 有 low/medium/high/max 四個值"
|
|
330
|
+
- "說需要在每次呼叫時手動傳入 effort 設定"
|
|
331
|
+
|
|
332
|
+
- id: v2180-channels-vs-webhook
|
|
333
|
+
name: "[v2.1.80] CC Channels 與 webhook 的使用場景差異"
|
|
334
|
+
difficulty: hard
|
|
335
|
+
context: |
|
|
336
|
+
用戶想讓 CI 系統在 build 完成時通知 Claude Code,
|
|
337
|
+
讓 Claude 自動分析 build log 並決定是否需要修復。
|
|
338
|
+
他目前用 Discord webhook 推送通知。問:
|
|
339
|
+
1. CC Channels 和現有的 webhook 有什麼本質差異?
|
|
340
|
+
2. 如果要讓 Claude 能「互動式」回應 CI 通知,應該用哪種方式?
|
|
341
|
+
expected_behavior: |
|
|
342
|
+
- 清楚區分:CC Channels = 雙向互動控制;webhook = 單向推送通知
|
|
343
|
+
- 說明 CC Channels 允許 MCP server 推送事件,Claude 可反應並回覆
|
|
344
|
+
- 回答問題 2:推薦 CC Channels(讓 Claude 能反應並採取行動)
|
|
345
|
+
- 提到啟用方式:`claude --channels plugin:telegram@claude-plugins-official` 或 discord
|
|
346
|
+
- 提到關鍵限制:只在 session 開啟時有效;Team/Enterprise 需 admin 啟用
|
|
347
|
+
anti_patterns:
|
|
348
|
+
- "說 CC Channels 和 webhook 功能相同"
|
|
349
|
+
- "不知道 `--channels` flag 的存在"
|
|
350
|
+
- "建議用 webhook 實現雙向互動"
|
|
351
|
+
- "說 CC Channels 無需開啟 session 就能持續運作(always-on 需要 background process)"
|
|
352
|
+
|
|
353
|
+
# --- v4.9 新增:覆蓋 v2.1.81 功能 (added by autoresearch round 2, 2026-03-22) ---
|
|
354
|
+
|
|
355
|
+
- id: v2181-bare-flag-headless-optimization
|
|
356
|
+
name: "[v2.1.81] --bare flag 加速 headless 腳本呼叫"
|
|
357
|
+
difficulty: medium
|
|
358
|
+
context: |
|
|
359
|
+
用戶的 heartbeat 腳本每小時呼叫 `claude -p` 多次,
|
|
360
|
+
感覺啟動時間偏長(約 3-4 秒/次,累計很慢)。
|
|
361
|
+
問:v2.1.81 有什麼方法可以大幅加速這些無狀態 headless 呼叫?
|
|
362
|
+
這些呼叫不需要 hooks、LSP、或 auto-memory。
|
|
363
|
+
expected_behavior: |
|
|
364
|
+
- 提到 `--bare` flag(v2.1.81 新增)
|
|
365
|
+
- 說明 --bare 跳過所有初始化開銷:hooks、LSP、plugins、skill scan、auto-memory
|
|
366
|
+
- 說明關鍵限制:必須搭配 `ANTHROPIC_API_KEY` 環境變數(不支援 OAuth/keychain)
|
|
367
|
+
- 提到 auto-memory 在 --bare 模式下完全停用
|
|
368
|
+
- 推薦適用場景:heartbeat scripts、CI 無狀態呼叫、不需要記憶/hooks 的一次性任務
|
|
369
|
+
anti_patterns:
|
|
370
|
+
- "說標準 `claude -p` 和 `--bare` 速度相同"
|
|
371
|
+
- "說 --bare 可以和 OAuth 一起使用"
|
|
372
|
+
- "不知道 --bare flag 的存在(v2.1.81 之前確實不存在)"
|
|
373
|
+
- "說 --bare 下 hooks 仍然會執行"
|
|
374
|
+
|
|
375
|
+
# --- v4.9 Round 3 ---
|
|
376
|
+
|
|
377
|
+
- id: v2181-channels-permission-relay
|
|
378
|
+
name: "[v2.1.81] CC Channels permission relay 夜間 agent 人工審核"
|
|
379
|
+
difficulty: hard
|
|
380
|
+
context: |
|
|
381
|
+
用戶有一個自動夜間 agent,大部分操作自動執行。
|
|
382
|
+
但他想讓某些高風險操作(如刪除資料、強制 push)在執行前
|
|
383
|
+
透過 Telegram 通知他並等待他在手機上確認。
|
|
384
|
+
問:v2.1.81 有什麼機制可以實現?
|
|
385
|
+
expected_behavior: |
|
|
386
|
+
- 提到 CC Channels permission relay(v2.1.81 新增)
|
|
387
|
+
- 說明機制:`--channels` 啟動的 session 中,PermissionRequest 會透過 channel 推送到手機
|
|
388
|
+
- 提到需要先設定 CC Channels(Telegram 或 Discord plugin)
|
|
389
|
+
- 建議場景:夜間 agent 保持 `--channels` 啟動,sensitive 操作自動觸發手機通知等待確認
|
|
390
|
+
anti_patterns:
|
|
391
|
+
- "說 CC Channels 無法處理 permission 審核"
|
|
392
|
+
- "建議用 webhook 實現(webhook 是單向,無法等待用戶確認)"
|
|
393
|
+
- "不知道 v2.1.81 新增了 permission relay 功能"
|
|
394
|
+
- "說只能設定 deny 規則,沒有互動確認選項"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
skill: development-verification-patterns
|
|
2
|
+
version: "1.1"
|
|
3
|
+
last_eval: "2026-03-19"
|
|
4
|
+
pass_rate: 100
|
|
5
|
+
total_scenarios: 8
|
|
6
|
+
|
|
7
|
+
scenarios:
|
|
8
|
+
- id: multi-file-syntax-check
|
|
9
|
+
name: "多檔案修改後語法預檢"
|
|
10
|
+
context: |
|
|
11
|
+
修改了 server.js、app.js、heartbeat.sh 三個檔案,即將重啟服務。
|
|
12
|
+
expected_behavior: |
|
|
13
|
+
在重啟前執行:node -c server.js && node -c app.js && zsh -n heartbeat.sh
|
|
14
|
+
全部通過才繼續,有錯立即修正並重新驗證。
|
|
15
|
+
anti_patterns:
|
|
16
|
+
- "直接重啟服務而不先進行語法預檢"
|
|
17
|
+
- "只檢查部分修改的檔案"
|
|
18
|
+
- "語法錯誤後跳過修正繼續進行"
|
|
19
|
+
|
|
20
|
+
- id: cross-file-feature-removal
|
|
21
|
+
name: "跨檔案功能完整移除"
|
|
22
|
+
context: |
|
|
23
|
+
需要從 quest-board 移除天氣功能,涉及 index.html、app.js、server.js、refresh.sh。
|
|
24
|
+
expected_behavior: |
|
|
25
|
+
1. grep -r "weather" . 找出所有引用
|
|
26
|
+
2. 分層移除:HTML chip → app.js 事件 → server.js endpoint → refresh.sh 邏輯
|
|
27
|
+
3. grep "https" 確認是否孤立依賴,若是則移除 require('https')
|
|
28
|
+
4. node -c server.js && zsh -n refresh.sh 語法驗證
|
|
29
|
+
5. git diff 確認無殘留
|
|
30
|
+
anti_patterns:
|
|
31
|
+
- "只移除部分層次,遺留孤立程式碼"
|
|
32
|
+
- "不檢查依賴是否孤立就留著 import"
|
|
33
|
+
- "移除後不做語法驗證"
|
|
34
|
+
|
|
35
|
+
- id: orphan-dependency-check
|
|
36
|
+
name: "移除功能後的孤立依賴檢查"
|
|
37
|
+
context: |
|
|
38
|
+
移除了使用 axios 的 API endpoint,需要確認 axios 是否還有其他使用者。
|
|
39
|
+
expected_behavior: |
|
|
40
|
+
執行 grep -r "axios" . 掃描整個專案
|
|
41
|
+
若只有被移除的 endpoint 使用 → 移除 require/import 語句
|
|
42
|
+
若還有其他使用者 → 保留,繼續語法驗證
|
|
43
|
+
anti_patterns:
|
|
44
|
+
- "不檢查就直接移除 import(可能破壞其他功能)"
|
|
45
|
+
- "不檢查就保留 import(留下孤立依賴)"
|
|
46
|
+
|
|
47
|
+
- id: node-server-restart-verify
|
|
48
|
+
name: "Node.js 服務修改後重啟驗證"
|
|
49
|
+
context: |
|
|
50
|
+
修改了 quest-board/server.js,新增 POST /api/reminder/add 端點。
|
|
51
|
+
expected_behavior: |
|
|
52
|
+
1. ps aux | grep "node.*server.js" | grep -v grep 找 PID
|
|
53
|
+
2. kill <PID> && sleep 1 && cd ~/assistant/quest-board && node server.js &
|
|
54
|
+
3. curl -s http://localhost:3000/status 確認服務回復
|
|
55
|
+
4. curl -s -X POST http://localhost:3000/api/reminder/add -H "Content-Type: application/json" -d '{"title":"test"}' | jq
|
|
56
|
+
anti_patterns:
|
|
57
|
+
- "修改 server.js 後不重啟就測試新端點"
|
|
58
|
+
- "重啟後不先確認服務健康就測功能"
|
|
59
|
+
- "使用 kill -9 而不是 kill(正常關閉)"
|
|
60
|
+
|
|
61
|
+
- id: quest-board-integration-verify
|
|
62
|
+
name: "Quest Board API 整合驗證"
|
|
63
|
+
context: |
|
|
64
|
+
修改了 forge/complete 邏輯,需要驗證扣 gold 和加 stat 都正確。
|
|
65
|
+
expected_behavior: |
|
|
66
|
+
1. jq '.player' state.json 記錄初始值
|
|
67
|
+
2. curl -X POST /api/forge/complete -d '{"id":"rN"}'
|
|
68
|
+
3. jq '.player | {gold, xp}' state.json 確認扣 gold 正確
|
|
69
|
+
4. jq '.tasks[] | select(.id=="rN") | .status' state.json 確認 status==="completed"
|
|
70
|
+
anti_patterns:
|
|
71
|
+
- "不記錄初始值就測試,無法確認數值變化"
|
|
72
|
+
- "只看 API 回傳 ok:true,不驗 state.json 持久化"
|
|
73
|
+
- "不驗證 task status 是否實際更新"
|
|
74
|
+
|
|
75
|
+
- id: combined-removal-restart
|
|
76
|
+
name: "功能移除後的完整流程"
|
|
77
|
+
context: |
|
|
78
|
+
移除 server.js 中的 /api/weather endpoint,然後需要驗證服務正常運行。
|
|
79
|
+
expected_behavior: |
|
|
80
|
+
Pattern 2(移除 + 孤立依賴檢查)→ Pattern 1(語法預檢)→ Pattern 3(重啟驗證)
|
|
81
|
+
依序:grep掃描 → 分層移除 → 孤立依賴確認 → node -c 預檢 → kill+重啟 → curl驗證
|
|
82
|
+
anti_patterns:
|
|
83
|
+
- "跳過語法預檢直接重啟"
|
|
84
|
+
- "重啟後不驗證服務健康度"
|
|
85
|
+
- "不按依賴順序移除,導致遺漏殘留"
|
|
86
|
+
|
|
87
|
+
# Boundary scenarios(有辨別力)
|
|
88
|
+
- id: boundary-grep-only-in-tests
|
|
89
|
+
name: "Boundary: 孤立依賴只在測試檔出現"
|
|
90
|
+
context: |
|
|
91
|
+
移除 quest-board 的 weather endpoint 後,執行:
|
|
92
|
+
grep -r "require.*axios\|import axios" . --include="*.js"
|
|
93
|
+
結果只找到 tests/weather-api.test.js 這一個檔案。
|
|
94
|
+
expected_behavior: |
|
|
95
|
+
Production 代碼已無 axios 引用 → 移除 server.js 中的 require('axios')。
|
|
96
|
+
測試檔仍引用 axios 是因為測試邏輯本身,需要檢查測試是否需要同步更新
|
|
97
|
+
或標記為過時測試。不應因「測試還用到」就保留 production import。
|
|
98
|
+
anti_patterns:
|
|
99
|
+
- "因為 tests/weather-api.test.js 還有 import 就保留 production require('axios')"
|
|
100
|
+
- "移除 production import 但不處理現在已孤立的測試檔"
|
|
101
|
+
- "不區分 production code 和 test code 的依賴"
|
|
102
|
+
|
|
103
|
+
- id: boundary-syntax-pass-runtime-fail
|
|
104
|
+
name: "Boundary: node -c 語法通過但服務啟動失敗"
|
|
105
|
+
context: |
|
|
106
|
+
修改 server.js 後執行 node -c server.js 通過,然後重啟服務。
|
|
107
|
+
kill + node server.js & 執行後,curl http://localhost:3000/health 返回 Connection refused。
|
|
108
|
+
expected_behavior: |
|
|
109
|
+
node -c 只驗語法,不驗 runtime。啟動失敗時:
|
|
110
|
+
1. 等待幾秒讓進程完全啟動(race condition)
|
|
111
|
+
2. 若仍 refused → ps aux | grep node 確認進程是否存在
|
|
112
|
+
3. 若進程不存在 → node server.js(不後台)看完整錯誤輸出
|
|
113
|
+
常見原因:missing env var、port 已被佔用、require() 路徑錯誤。
|
|
114
|
+
anti_patterns:
|
|
115
|
+
- "node -c 通過後認為服務一定能啟動"
|
|
116
|
+
- "Connection refused 後立即重試不診斷原因"
|
|
117
|
+
- "不看啟動時的 stderr 輸出就重試"
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
skill: multi-agent-design-patterns
|
|
2
|
+
version: "1.2"
|
|
3
|
+
last_eval: "2026-03-22"
|
|
4
|
+
pass_rate: null
|
|
5
|
+
total_scenarios: 10
|
|
6
|
+
|
|
7
|
+
scenarios:
|
|
8
|
+
- id: task-distribution-lock
|
|
9
|
+
name: "平行 Agent 任務分配 — File Lock 協議"
|
|
10
|
+
context: |
|
|
11
|
+
設計 4 個 Claude Code agents 同時修復一個大型 codebase 中的 bug。
|
|
12
|
+
每個 agent 在不同 git worktree 執行,需要避免重複認領同一個 bug ticket。
|
|
13
|
+
expected_behavior: |
|
|
14
|
+
使用 current_tasks/<task-id>.lock 檔案 + git push 的去中心化機制。
|
|
15
|
+
push 失敗(conflict)時 → pull → 確認是否被搶先 → 選下一個任務。
|
|
16
|
+
不使用中央 orchestrator。
|
|
17
|
+
anti_patterns:
|
|
18
|
+
- "用一個中央 orchestrator 分配任務"
|
|
19
|
+
- "用資料庫或共享記憶體做 locking"
|
|
20
|
+
- "讓所有 agent 等待某個 coordinator 的指令"
|
|
21
|
+
|
|
22
|
+
- id: mechanical-agent-isolation
|
|
23
|
+
name: "機械式 Agent 不加決策邏輯"
|
|
24
|
+
context: |
|
|
25
|
+
建立一個 summarizer agent,從 night-report.md 提取「建議行動」清單,
|
|
26
|
+
然後篩選出「重要性高」的行動,轉換為 JSON 格式傳給 webhook。
|
|
27
|
+
expected_behavior: |
|
|
28
|
+
拆分為兩個 agent:
|
|
29
|
+
1. 機械式 summarizer:只負責 markdown → JSON 提取(格式轉換),輸出完整清單
|
|
30
|
+
2. 決策層(人工或決策 agent):負責「重要性高」的過濾判斷
|
|
31
|
+
不在 summarizer 中加入篩選邏輯。
|
|
32
|
+
anti_patterns:
|
|
33
|
+
- "在同一個 agent 中同時做提取和篩選"
|
|
34
|
+
- "讓 summarizer 自行決定哪些行動重要"
|
|
35
|
+
|
|
36
|
+
- id: reliability-model-choice
|
|
37
|
+
name: "長時間 Agent Loop — 模型選擇"
|
|
38
|
+
context: |
|
|
39
|
+
夜間 agent 需要持續執行 6 小時,處理 50+ 個研究任務,
|
|
40
|
+
每個任務都需要完整的 tool use 循環。預算有限。
|
|
41
|
+
expected_behavior: |
|
|
42
|
+
使用 Sonnet 或 Opus,不用 Haiku(Karpathy 驗證:較弱模型無法維持長時間指令遵循)。
|
|
43
|
+
在自然任務邊界做 compact(不等到 token 耗盡)。
|
|
44
|
+
維護外部狀態檔案(TASK_PROGRESS.md)記錄已完成/下一步。
|
|
45
|
+
anti_patterns:
|
|
46
|
+
- "用 Haiku 節省成本但犧牲長時間可靠性"
|
|
47
|
+
- "不做 compact,直到 token 耗盡"
|
|
48
|
+
- "只依賴對話記憶,不維護外部狀態"
|
|
49
|
+
|
|
50
|
+
- id: tdd-agent-workflow
|
|
51
|
+
name: "Agent 輔助開發 — TDD 最佳實踐"
|
|
52
|
+
context: |
|
|
53
|
+
讓 agent 實作一個新 API endpoint /api/forge/stage,需要確保品質。
|
|
54
|
+
開發者問:「應該讓 agent 直接寫代碼,還是先做什麼?」
|
|
55
|
+
expected_behavior: |
|
|
56
|
+
先讓 agent 寫 failing tests(描述 acceptance criteria),
|
|
57
|
+
然後再實作(red-green TDD)。測試讓 agent 保持正確方向,
|
|
58
|
+
並防止 agent 自我恭賀(自己寫代碼自己寫測試但 AC 未真正驗證)。
|
|
59
|
+
anti_patterns:
|
|
60
|
+
- "讓 agent 直接寫代碼,事後補測試"
|
|
61
|
+
- "假設 agent 知道什麼是「完成」"
|
|
62
|
+
|
|
63
|
+
- id: private-tool-exploration
|
|
64
|
+
name: "Agent 使用私有/不熟悉工具"
|
|
65
|
+
context: |
|
|
66
|
+
Agent 需要使用 `forge-dev` CLI 工具(私有工具,訓練資料中沒有)。
|
|
67
|
+
如何讓 agent 正確使用?
|
|
68
|
+
expected_behavior: |
|
|
69
|
+
在 prompt 中明確告訴 agent:「先用 forge-dev --help 學習工具用法」。
|
|
70
|
+
現代模型的 context length 夠大,可以先消化完整工具文件再開始工作。
|
|
71
|
+
anti_patterns:
|
|
72
|
+
- "假設 agent 知道私有工具的用法"
|
|
73
|
+
- "在 prompt 中硬寫所有工具參數(不如讓 agent 自己 --help)"
|
|
74
|
+
|
|
75
|
+
- id: direnv-worktree-setup
|
|
76
|
+
name: "平行 Worktree 環境配置"
|
|
77
|
+
context: |
|
|
78
|
+
建立 3 個 git worktrees 給 3 個 agent 並行工作,
|
|
79
|
+
但每個 worktree 需要相同的 .env 和 API keys。
|
|
80
|
+
expected_behavior: |
|
|
81
|
+
在 repo 根目錄建立 .envrc(.gitignored),使用 direnv 讓所有 worktree
|
|
82
|
+
自動繼承環境變數,無需手動複製 .env 到每個 worktree。
|
|
83
|
+
anti_patterns:
|
|
84
|
+
- "手動複製 .env 到每個 worktree"
|
|
85
|
+
- "把 API keys 放進 .gitignore 之外的檔案"
|
|
86
|
+
|
|
87
|
+
# Boundary scenarios(有辨別力)
|
|
88
|
+
- id: boundary-emergent-vs-forced-specialization
|
|
89
|
+
name: "Boundary: 有機專業化 vs 強制分工"
|
|
90
|
+
context: |
|
|
91
|
+
16 個 agents 同時修復 codebase,你可以:
|
|
92
|
+
A) 告訴每個 agent 「你負責修 networking 模組,你負責修 parser」
|
|
93
|
+
B) 讓每個 agent 自行選擇「下一個最明顯的問題」
|
|
94
|
+
expected_behavior: |
|
|
95
|
+
選擇 B(有機專業化)。強制分工限制彈性,且 agent 在動態環境中
|
|
96
|
+
自然選擇的任務比人工指定更符合當前 repo 狀態。
|
|
97
|
+
Anthropic C compiler 案例驗證:自然分化出比強制分工更多樣的角色。
|
|
98
|
+
anti_patterns:
|
|
99
|
+
- "強制每個 agent 負責固定模組(降低彈性)"
|
|
100
|
+
- "不信任 agent 自主選擇,堅持強制指派"
|
|
101
|
+
|
|
102
|
+
- id: boundary-external-memory-pattern
|
|
103
|
+
name: "Boundary: 長時間 Agent 記憶跨 Compact"
|
|
104
|
+
context: |
|
|
105
|
+
夜間 agent 執行到一半 context 接近上限,需要 compact。
|
|
106
|
+
compact 後 agent 繼續工作,但不確定之前完成了什麼。
|
|
107
|
+
expected_behavior: |
|
|
108
|
+
Compact 前更新外部狀態檔案(TASK_PROGRESS.md 或 night-journal.md),
|
|
109
|
+
記錄「已完成項目 + 當前狀態 + 下一步」。
|
|
110
|
+
Compact 後,從外部檔案重載狀態,繼續工作。
|
|
111
|
+
不依賴對話記憶(compact 後已消失)。
|
|
112
|
+
anti_patterns:
|
|
113
|
+
- "相信 compact 後對話摘要能完整保留所有狀態"
|
|
114
|
+
- "不維護外部狀態檔案"
|
|
115
|
+
- "Compact 後重新掃描所有檔案判斷進度(效率低)"
|
|
116
|
+
|
|
117
|
+
- id: boundary-subagent-over-dispatch
|
|
118
|
+
name: "Boundary: 過度分派 Subagent(保留 Root Context)"
|
|
119
|
+
context: |
|
|
120
|
+
你是 root agent,context 使用率約 35%(仍有 65% 空間)。
|
|
121
|
+
需要對 3 個小檔案做 code review(每個檔案 ~200 行)。
|
|
122
|
+
選項:
|
|
123
|
+
A) 直接在當前 context 中讀取並 review 這 3 個檔案
|
|
124
|
+
B) 為每個檔案 dispatch 一個 specialist code-reviewer subagent
|
|
125
|
+
expected_behavior: |
|
|
126
|
+
選 A。Root agent 有 65% context 空間,直接處理 3 個小檔案完全足夠。
|
|
127
|
+
Subagent 的主要價值是「保護 root context window」,當 root 有足夠空間時,
|
|
128
|
+
dispatch subagent 只增加開銷(新 session 啟動 + 結果傳回整合)而無實質收益。
|
|
129
|
+
判斷規則:root context > 40% → 直接處理;root context < 20% → 考慮 dispatch。
|
|
130
|
+
anti_patterns:
|
|
131
|
+
- "root context 充足時仍強制使用 specialist subagent"
|
|
132
|
+
- "誤以為分工本身是 subagent 的目的(實際目的是 context 保護)"
|
|
133
|
+
- "為小任務 dispatch subagent,增加不必要的 session 開銷"
|
|
134
|
+
|
|
135
|
+
- id: boundary-writer-reviewer-dual-session
|
|
136
|
+
name: "Writer/Reviewer 雙 Session — 降低確認偏誤"
|
|
137
|
+
context: |
|
|
138
|
+
團隊要在認證模組加入 OAuth 支援,涉及 session 管理和 token 刷新。
|
|
139
|
+
一個 agent 已經完成實作(修改了 5 個檔案)。
|
|
140
|
+
現在需要做 code review。有兩種方式:
|
|
141
|
+
A) 讓同一個 agent session 自己 review 自己的 code
|
|
142
|
+
B) 開一個全新的 session,只給唯讀工具,從頭 review
|
|
143
|
+
expected_behavior: |
|
|
144
|
+
選 B。高風險改動(認證/安全)應使用 Writer/Reviewer 雙 Session 模式。
|
|
145
|
+
Session A(Writer)做完決策後會傾向確認自己的選擇是對的(confirmation bias)。
|
|
146
|
+
Session B(Reviewer)從全新 context 開始,只有 Read/Grep/Glob 唯讀工具,
|
|
147
|
+
更容易發現 A 忽略的問題。
|
|
148
|
+
anti_patterns:
|
|
149
|
+
- "讓同一個 session 自我 review(自我確認偏誤)"
|
|
150
|
+
- "reviewer session 給寫入工具(失去獨立性)"
|
|
151
|
+
- "只對 typo 級別改動才用雙 session(高風險改動更需要)"
|