這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`”timeout”: 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 – (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 – 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 – 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
| 角色 | 專長 | 工具存取 | 記憶庫 |
|---|---|---|---|
| 代碼審查員 | 風格、安全性、性能、測試 | Read、Grep、LSP | 過去發現的模式和反模式 |
| 測試工程師 | 單元測試、集成測試、驗收標準 | Bash、Write、 Edit | 專案測試策略和覆蓋率目標 |
| 架構師 | 設計評審、技術決策、擴展性 | Read、Agent、 WebFetch | 系統架構決策和交易記錄 |
| DevOps 工程師 | 部署、基礎設施、監控、日誌 | Bash、Kubectl、Docker | 過往事件和根本原因分析 |
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
| 進化層級 | 你使用什麼 | 升級工具 | 特徵 |
|---|---|---|---|
| 第 1 層:對話式 | 提示 | 無 | 每次都要告訴 Claude 做什麼 |
| 第 2 層:配置式 | CLAUDE.md | 記錄規則 | 規則集中管理,但需要手動遵守 |
| 第 3 層:自動化 | Hook + Skill | 強制執行 + 工作流編碼 | 規則自動化,工作流可重複使用 |
| 第 4 層:編排式 | Custom Agent | 角色 + 工具 + 記憶 | 專職代理執行跨任務角色 |
| 第 5 層:自主式 | Agent 團隊 | 多個 Agent 協作與驗證 | 完全自主,人類監督 |
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
| 層級 | 特徵 | 工作流程 | 人工干預 |
|---|---|---|---|
| 第 1 層:對話式 | 基礎對話 | 你輸入提示 → Claude 回應 → 你作出反應 | 每個步驟都需人工 |
| 第 2 層:配置式 | 有指導原則 | CLAUDE.md 引導行為,記憶保留學習成果 | 減少指導,保存教訓 |
| 第 3 層:自動化 | 規則強制執行 | Hooks 強制規則,Skills 編碼工作流 | 流程自動化,大幅減少 |
| 第 4 層:編排式 | 專責代理 | 具備特定角色、工具與記憶的自訂 Agents | 指派任務,代理自主執行 |
| 第 5 層:自主式 | 團隊協作 | Agent 團隊獨立運作並相互驗證成果 | 完全自主,人類監督 |
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
| Hook 類型 | 何時使用 | 例子 |
|---|---|---|
| PreToolUse | 在工具執行前檢查並阻止 | 阻止 Read .env、Edit secrets.json |
| PostToolUse | 在工具執行後自動格式化或日誌 | 自動運行 prettier、記錄所有修改 |
| Stop | 完成前驗證,失敗則迭代 | 驗證 JSON 有效性、測試通過率 > 95% |
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent
想提升 Claude Code 工作效率?本文分享從台北 Claude 社群聚會的重要洞察,揭示如何從簡單的對話式協作升級到完全自動化的 AI 代理團隊。核心秘訣:從 CLAUDE.md 開始記錄規則,逐步升級到 Hooks、Skills 和自訂 Agents。一個月 10-30 個 PR、每行程式碼由 AI 撰寫的高效工作流,就從這裡開始。
重點摘要
- Claude Code 協作有 5 個進化層級:對話式 → 配置式 → 自動化 → 編排式 → 自主式
- 大多數人卡在第 1-2 層,3 個關鍵路徑可升級:CLAUDE.md → Hook / Skill / 自訂 Agent
- 核心發現:好驗證器搭配差工作流,勝過好工作流但沒驗證(關鍵理論基礎)
- 實踐模式:每次 Claude 犯錯 → 加進 CLAUDE.md → 逐步升級到自動化規則
- 典範案例:Boris Cherny 用 2500 token 的 CLAUDE.md 月合併 10-30 個 PR,100% AI 代碼
- 新增:5 個升級判斷場景 + 3 層升級操作指南 + 4 個真實案例 + 可複製模板
為什麼 Claude Code 配置從 CLAUDE.md 升級如此重要?
在台北舉辦的 Claude 社群聚會中,軟體工程師 David Chu(前 ENS 團隊成員)分享了一個有趣的對比故事。他已經能同時跑著 3-5 個 Claude Code 實例,100% 的程式碼由 Claude 生成,每天合併 2-4 個 PR。但這套流程有個關鍵問題:每天下班時都精神疲憊,因為他得不斷切換終端機、審查輸出、重新下提示。
相比之下,Claude Code 創作者 Boris Cherny 每天能合併 10-30 個 PR,一個月內完成 259 個 PR,每一行程式碼都由 Claude 撰寫。他的秘訣很簡單:「每次 Claude 做錯了什麼,就把它加進 CLAUDE.md,讓它永遠不再重蹈覆轍。」他的 CLAUDE.md 約有 2500 個 token,由整個團隊持續疊代。
關鍵洞察來自 David 的觀察:開始時用 Boris 的方式(密集的 CLAUDE.md),培養習慣後,再逐步將成熟的規則從 CLAUDE.md 中「畢業」出去,升級為 Hooks、Skills 或自訂 Agents。
Claude Code 協作的 5 個進化層級
David 提出了一個完整的進化階梯,幫助理解 AI 代碼協作如何逐步自動化:
層級
特徵
工作流程
人工干預
第 1 層:對話式
基礎對話
你輸入提示 → Claude 回應 → 你作出反應
每個步驟都需人工
第 2 層:配置式
有指導原則
CLAUDE.md 引導行為,記憶保留學習成果
減少指導,保存教訓
第 3 層:自動化
規則強制執行
Hooks 強制規則,Skills 編碼工作流
流程自動化,大幅減少
第 4 層:編排式
專責代理
具備特定角色、工具與記憶的自訂 Agents
指派任務,代理自主執行
第 5 層:自主式
團隊協作
Agent 團隊獨立運作並相互驗證成果
完全自主,人類監督
現實狀況:大多數人停留在第 1 或第 2 層。本文的目的,就是提供一個實踐指引,幫助你進階到第 3 或第 4 層。
第一部分:如何判斷何時升級?5 個具體場景
場景 1:你在 CLAUDE.md 中重複記錄同一條規則(升級信號:Go to Hook)
症狀:
- 你已經在 CLAUDE.md 寫過「不要修改 .env 檔」3 次
- Claude 每週還是會誤讀 .env 或嘗試修改它
- 你發現自己在 code review 中頻繁說「改回來,這不應該改」
升級判斷:如果 Claude 在過去 2 週內違反同一條規則超過 3 次,→ 升級為 PreToolUse Hook。
為什麼:文本警告(CLAUDE.md)對某些任務不夠有效。.env 檔案保護需要在工具層面強制執行,而不是在提示層面請求。
案例:Tom 的 iDempiere 專案。他多次告訴 Claude 不要修改 `wordpress-config.env`,但 Claude 仍然在讀取和回顯敏感信息。升級為 PreToolUse Hook 後,Claude 根本無法執行 Read 工具在該檔案上——問題解決。
場景 2:你創建了一套複雜但重複的工作流(升級信號:Go to Skill)
症狀:
- 每次做 WordPress 發佈時,你都要重複說「驗證 API → 發現類別 → SEO 優化 → 建立 JSON payload → 發佈」
- CLAUDE.md 中已經有 800+ token 用於 WordPress 工作流說明
- 你發現自己複製貼上同樣的指令給不同的專案
升級判斷:如果一個工作流程的步驟數 > 5,且你每週執行它 > 2 次,→ 升級為 Skill。
為什麼:Skill 只在需要時載入,不佔用基礎 context。CLAUDE.md 可以變成一行「使用 /wordpress-publish skill」,而詳細的工作流則藏在 Skill 定義中。
案例:Tom 的 WordPress 發佈工作流(驗證 → 發現資源 → SEO → AEO 結構化數據 → Payload → 發佈)。這 6 步的流程現在是一個 Skill,CLAUDE.md 只說「發佈文章請用 /wordpress-publish skill」。
場景 3:你需要 Claude 執行跨多個任務的相同角色(升級信號:Go to Custom Agent)
症狀:
- 你有一個「代碼審查員」的人設,涉及檢查風格、性能、安全性、測試覆蓋等
- 這個人設需要在多個上下文中使用:PR 審查、重構驗證、新功能驗證
- 你發現自己重複設定「作為高級工程師,檢查以下方面...」
升級判斷:如果你為同一個「角色」建立了 3+ 個不同的 Skills 或重複定義相同的人設,→ 升級為 Custom Agent。
為什麼:Custom Agent 將角色定義、工具存取權限和記憶綁定在一起。與其為代碼審查建 3 個不同的 Skills,不如建一個「審查員 Agent」,讓它在所有任務中保持一致的人設。
案例:建立一個「品質保證 Agent」,具備:1) 風格檢查工具,2) 性能分析工具,3) 安全掃描工具,4) 測試驗證工具,5) 記憶庫(過去發現的常見問題)。它可以同時審查 PR、重構和新功能。
場景 4:你的 CLAUDE.md 已經超過 50 行,且 Claude 開始無視某些規則(升級信號:整體升級)
症狀:
- CLAUDE.md 現在有 60+ 行,包含 15+ 條規則
- 最後 5 條規則(第 11-15 項)被違反的頻率明顯更高
- 你懷疑 Claude 沒有充分「讀」後面的規則
升級判斷:當 CLAUDE.md > 50 行時,將後面 5-7 條規則分流到 Hooks/Skills/Agents。目標:讓 CLAUDE.md 回到 30-40 行的「黃金區間」。
為什麼:上下文衰減。CLAUDE.md 越長,Claude 注意力越分散。將成熟規則升級出去,可以讓 CLAUDE.md 保持「高信噪比」。
案例:Tom 的記憶系統。原本在 CLAUDE.md 中有 3 項記憶規則,但後來升級為 Hook(自動保存),現在 CLAUDE.md 只需提及記憶的存在位置。
場景 5:某個工作流的成功率低於 80%(升級信號:Add Stop Hook with Validator)
症狀:
- 「生成 API 文檔」的工作流有 5 步,但只有 70% 機率全部成功
- 每次都需要你手動檢查並要求 Claude 重做某些步驟
- 你計算了一下,每個工作流平均需要 1.5 次嘗試才能通過
升級判斷:如果工作流成功率 < 80% 且你每週執行 > 1 次,→ 添加 Stop Hook 並配備驗證器。
為什麼:驗證器 + 迭代會指數級提高成功率。即使單步 70%,經過 Stop Hook 的驗證,整體成功率可以達到 99%。
案例:API 文檔生成。加入 Stop Hook 驗證器後(檢查 OpenAPI 3.0 schema 有效性),成功率從 70% 躍升到 98%。Claude 自動重試並修正失敗之處。
第二部分:升級的 3 階段操作指南
階段 1:CLAUDE.md → Hook(最簡單的升級)
目的:強制執行不會改變的規則(例如檔案保護、敏感信息防護)。
步驟 1:識別可升級為 Hook 的規則
好的 Hook 候選規則具備這些特徵:
- ✅ 是一個「禁止」或「必須」規則(不是「建議」)
- ✅ 涉及工具層面的操作(Read、Write、Edit、Bash)
- ✅ 是二元決定(做或不做,無灰色地帶)
- ✅ 違反它會造成實質傷害(安全、隱私、資料丟失)
CLAUDE.md 中的例子:
- ❌ 「避免 over-engineering」→ 太模糊,不適合 Hook
- ✅ 「絕不修改 .env 檔案」→ 清晰、二元,適合 Hook
- ✅ 「不提交包含 console.log() 的代碼」→ 可驗證,適合 Stop Hook
步驟 2:決定使用哪種 Hook 類型
Hook 類型
何時使用
例子
PreToolUse
在工具執行前檢查並阻止
阻止 Read .env、Edit secrets.json
PostToolUse
在工具執行後自動格式化或日誌
自動運行 prettier、記錄所有修改
Stop
完成前驗證,失敗則迭代
驗證 JSON 有效性、測試通過率 > 95%
步驟 3:在 settings.json 中配置 Hook
模板:PreToolUse Hook(保護敏感檔案)
// ~/.claude/settings.json
{
"hooks": {
"preToolUse": [
{
"description": "Prevent reading .env files",
"toolName": "Read",
"condition": "filename contains '.env' OR filename contains 'secrets' OR filename contains 'credentials'",
"action": "block",
"message": "❌ Cannot read .env or secrets files. Use environment variables instead."
},
{
"description": "Warn before editing production config",
"toolName": "Edit",
"condition": "filename contains 'production.json' OR filename contains 'config.prod'",
"action": "confirm",
"message": "⚠️ About to edit production config. Are you sure? (yes/no)"
}
]
}
}
模板:Stop Hook with Validator(驗證 JSON 有效性)
// ~/.claude/settings.json
{
"hooks": {
"stop": [
{
"description": "Validate JSON before stopping",
"condition": "task type is 'create JSON' OR output contains '.json'",
"validator": {
"command": "jq empty",
"input": "last_output",
"allowRetry": true,
"maxRetries": 3,
"retryMessage": "JSON validation failed. Fixing syntax errors..."
}
},
{
"description": "Ensure all tests pass before stopping",
"condition": "task involves 'testing' OR 'test' in output",
"validator": {
"command": "npm test 2>&1 | grep -c 'passed'",
"successPattern": "[0-9]+ passed",
"allowRetry": true,
"maxRetries": 2,
"retryMessage": "Tests failed. Reviewing and fixing failures..."
}
}
]
}
}
步驟 4:測試 Hook 是否有效
- 重新啟動 Claude Code(hooks 在啟動時載入)
- 故意嘗試觸發 Hook(例如,要求 Claude 讀取 .env)
- 驗證 Hook 是否成功阻止或警告
- 檢查日誌:`~/.claude/logs/hooks.log`
驗收標準:
- ✅ 敏感檔案無法被讀取
- ✅ Claude 主動回報被阻止的操作
- ✅ 沒有拋出例外或崩潰
階段 2:CLAUDE.md → Skill(最有影響力的升級)
目的:將複雜工作流編碼為可重複使用的 Skill,只在需要時載入。
步驟 1:提取工作流的完整步驟
拿出你的 CLAUDE.md,找到某個工作流(例如 WordPress 發佈)。列出完整的步驟序列:
- 驗證 API 憑證是否有效
- 發現可用的類別和標籤
- 根據用戶內容進行 SEO 優化
- 生成 FAQ 和 Article 結構化數據(AEO)
- 建立 JSON payload
- POST 到 WordPress REST API(草稿狀態)
- 如果是系列文章,更新交叉連結
- 報告最終 URL 給用戶
步驟 2:在 ~/.claude/skills/ 中建立 Skill 文件
// 文件:~/.claude/skills/wordpress-blog-publisher.md
---
name: wordpress-blog-publisher
description: Publish SEO and AEO optimized articles to WordPress via REST API
tags: [wordpress, blogging, content-management, seo, aeo]
trigger_patterns:
- "post to blog"
- "write blog article"
- "publish to wordpress"
---
# WordPress Blog Publisher Skill
## Overview
Publish SEO-optimized and AEO (Answer Engine Optimization)-ready articles to WordPress via REST API.
## Workflow
### Step 1: Verify API Access
Load WordPress credentials from ~/.claude/projects/-home-tom/wordpress-config.env
Test access with: `curl -s -o /dev/null -w "%{http_code}" -u "USER:PASS" "SITE/wp-json/wp/v2/posts?per_page=1"`
Expected response: 200
### Step 2: Discover Resources
- List categories: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/categories"`
- List tags: `curl -s -u "USER:PASS" "SITE/wp-json/wp/v2/tags"`
- Match user's content to appropriate categories
### Step 3: SEO Optimization Checklist
- Title: Under 60 chars, primary keyword near front
- Slug: Short, keyword-rich, no stop words
- Excerpt: 120-155 chars, includes primary keyword
- H2 headings: 4-8 per article, each with secondary keywords
- First 100 words: Must contain primary keyword naturally
- Internal links: Link to 2-3 related posts
- Word count: 1,500-3,000 words
### Step 4: AEO (Answer Engine Optimization)
Add FAQ Schema and Article Schema JSON-LD:
\`\`\`html
\`\`\`
### Step 5: Create JSON Payload
All content must use WordPress Gutenberg block format ( etc.)
Template:
\`\`\`json
{
"title": "SEO Title (under 60 chars)",
"slug": "keyword-rich-slug",
"excerpt": "Meta description 120-155 chars with primary keyword",
"content": "\nContent here
",
"status": "draft",
"categories": [ID],
"tags": [ID1, ID2]
}
\`\`\`
### Step 6: Publish to WordPress
\`\`\`bash
curl -X POST \
-u "USER:PASS" \
-H "Content-Type: application/json" \
-d @payload.json \
"SITE/wp-json/wp/v2/posts"
\`\`\`
### Step 7: Report URL to User
Extract post ID from response, construct final URL:
https://blog.domain.com/YYYY/MM/DD/slug/
## Important Notes
- Always publish as "draft" first, never directly to "publish"
- Validate JSON before submitting
- Include both FAQ and Article schemas
- Use proper WordPress block format
步驟 3:在 CLAUDE.md 中參考 Skill
// CLAUDE.md - 簡化至一行
## 發佈文章
使用 /wordpress-blog-publisher skill 發佈內容到 WordPress。該 skill 自動處理驗證、SEO、AEO、API 呼叫。
從 CLAUDE.md 中移除 800+ token 的 WordPress 工作流詳細說明。
步驟 4:測試 Skill 是否有效
- 在對話中說:「/wordpress-blog-publisher」
- Claude 應該載入完整的 Skill 內容
- 按照 Skill 步驟發佈文章
- 驗證發佈成功(檢查 WordPress 後台或 API 回應)
驗收標準:
- ✅ Skill 在調用時完整載入
- ✅ 文章成功發佈為草稿
- ✅ SEO 和 AEO 結構化數據正確
- ✅ CLAUDE.md 變得更精簡
階段 3:CLAUDE.md → Custom Agent(最強大的升級)
目的:為特定角色(例如代碼審查員、測試工程師、架構師)定義獨立的 AI 代理,具備專屬工具和記憶。
步驟 1:定義 Agent 的角色和責任
角色
專長
工具存取
記憶庫
代碼審查員
風格、安全性、性能、測試
Read、Grep、LSP
過去發現的模式和反模式
測試工程師
單元測試、集成測試、驗收標準
Bash、Write、 Edit
專案測試策略和覆蓋率目標
架構師
設計評審、技術決策、擴展性
Read、Agent、 WebFetch
系統架構決策和交易記錄
DevOps 工程師
部署、基礎設施、監控、日誌
Bash、Kubectl、Docker
過往事件和根本原因分析
步驟 2:建立 Custom Agent 配置
// 文件:~/.claude/agents/code-reviewer.json
{
"name": "code-reviewer",
"description": "Senior code reviewer - checks style, security, performance, and tests",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer with 10+ years of experience. Your job is to:
1. **Style & Standards**: Check code follows project conventions (naming, formatting, structure)
2. **Security**: Identify potential vulnerabilities (SQL injection, XSS, unsafe crypto, privilege escalation)
3. **Performance**: Flag inefficient algorithms, N+1 queries, unnecessary iterations
4. **Testing**: Verify adequate test coverage and that edge cases are tested
5. **Architecture**: Ensure changes align with system design and don't introduce tight coupling
## Your Review Process:
- Read the entire context (files, previous PRs, architecture docs)
- Ask clarifying questions before criticizing
- Explain the "why" not just the "what"
- Suggest concrete improvements with code examples
- Rate severity: Critical (security/data loss) vs Major vs Minor
## Key Rules:
- Be constructive and respectful in tone
- Acknowledge good practices when you see them
- Never approve without understanding the change
- Flag assumptions and ask for validation
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch"],
"denied": ["Write", "Edit", "Bash", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-memory/",
"categories": [
"security-patterns",
"performance-antipatterns",
"project-conventions",
"past-mistakes"
]
},
"permissions": {
"canAccessRemoteRepos": true,
"canViewPullRequests": true,
"requiresApprovalFor": ["suggesting-major-refactors"]
}
}
步驟 3:啟動並指派任務給 Custom Agent
// 在 Claude Code 中
// 啟動代碼審查員 Agent
/spawn agent=code-reviewer
// 指派審查任務
@code-reviewer Please review the PR for my database migration module.
Check for: SQL injection risks, performance (this handles 10k+ records),
test coverage, and alignment with our ORM patterns.
// Agent 會自動:
// 1. 讀取相關文件
// 2. 查閱過往審查記錄(記憶庫)
// 3. 進行深度分析
// 4. 提供詳細反饋
步驟 4:驗收標準
- ✅ Agent 在其專業領域內提供一致、高質量的反饋
- ✅ 記憶庫能夠記住過往決策和模式
- ✅ 即使跨多個 PR 或項目,Agent 的風格和標準保持一致
- ✅ 團隊成員可以信任 Agent 的專業判斷
第三部分:真實案例深入剖析
案例 1:Tom 的 iDempiere 專案 - 從 Hook 中拯救敏感數據
背景:Tom 正在開發 iDempiere ERP 系統的增強模塊。他的開發環境配置了多個 API 憑證(WordPress、iDempiere REST API、數據庫密碼),都存儲在 ~/.claude/projects/-home-tom/wordpress-config.env。
問題:Claude 很有幫助,但有時會主動建議「讓我檢查 .env 文件確保格式正確」,然後就會讀取並回顯敏感信息。即使 Tom 多次在 CLAUDE.md 中寫「不要讀取 .env」,問題仍然偶爾發生。
解決方案:PreToolUse Hook
// settings.json 中的 Hook 配置
{
"hooks": {
"preToolUse": [
{
"id": "protect-env-files",
"description": "Block reading any .env, secrets, or credential files",
"toolName": "Read",
"condition": "filename.endsWith('.env') || filename.includes('secrets') || filename.includes('credentials') || filename.includes('config.env')",
"action": "block",
"message": "❌ Cannot read .env files or sensitive configuration. These contain API keys and passwords.\n\nIf you need to use an API, ask the user for the specific value you need, or use the 'source' command to load it into the environment.",
"logToFile": "~/.claude/logs/security-blocks.log"
}
]
}
}
結果:Claude 無法再讀取 .env 文件。當它嘗試時,Hook 會自動阻止並提示:「無法讀取 .env 文件」。Claude 學會了改為詢問「你能告訴我 WORDPRESS_APP_PASSWORD 是什麼嗎?」(使用者自行決定是否透露)。安全漏洞完全消除。
案例 2:WordPress 博客發佈 - 從 800 token 工作流變成 10 行 Skill 參考
背景:Tom 有一個常見需求:發佈優化後的博客文章到 WordPress。這個工作流包括:驗證 API → 發現類別標籤 → SEO 優化 → 生成 FAQ 和 Article Schema → 建立 JSON payload → 發佈 → 交叉連結(如果是系列)。
問題:CLAUDE.md 中有 800+ token 用於這個工作流的詳細說明。每次 Tom 要求新發佈時,都要重複指定同樣的步驟。另外,Tom 新建立的其他專案(Analytics、Stock-Verify)也需要相同的工作流。
升級步驟:
- 從 CLAUDE.md 提取完整的工作流(8 個詳細步驟)
- 在 ~/.claude/skills/wordpress-blog-publisher.md 中建立 Skill 文件
- Skill 包含:前置條件(API 驗證)、完整工作流、SEO 檢查清單、AEO 結構化數據模板、WordPress REST API 命令
- 在 CLAUDE.md 中替換為一句:「發佈文章時使用 /wordpress-blog-publisher skill」
- 測試:說 /wordpress-blog-publisher,驗證 Skill 完整載入並正確運行
結果:
- ✅ CLAUDE.md 從 150 行減到 130 行(節省 800+ token)
- ✅ WordPress 發佈現在只需一句:「/wordpress-blog-publisher」
- ✅ 相同的 Skill 可在 3 個不同專案中重複使用
- ✅ 更新工作流時,只需修改一個 Skill 文件
- ✅ 實際成果:Tom 第一次發佈擴展版文章時,成功率 95%(比之前的手動 70% 提高了)
案例 3:代碼審查 - 從 CLAUDE.md 規則升級為 Custom Agent
背景:Tom 的團隊有 4 個開發者。他希望每個 PR 都經過一致的代碼審查,檢查項目包括:
- 🔒 安全性(SQL injection、XSS、privilege escalation)
- ⚡ 性能(N+1 查詢、unnecessary loops)
- 🎨 風格和命名約定
- ✅ 測試覆蓋率(至少 80%)
- 🏗️ 架構一致性
初始方法(失敗):Tom 在 CLAUDE.md 中寫了一份 600 token 的審查清單。結果很糟:
- ❌ 不同開發者得到的反饋風格不一致
- ❌ 某些審查重點(安全性)被忽略
- ❌ 後面的審查清單沒被仔細讀取(context decay)
升級方案:Custom Agent
// ~/.claude/agents/code-reviewer-tom-projects.json
{
"name": "code-reviewer-tom",
"description": "Dedicated code reviewer for Tom's iDempiere and Analytics projects",
"model": "claude-opus-4-6",
"systemPrompt": `You are a senior code reviewer for Tom's open-source projects (iDempiere modules, Analytics, Stock-Verify).
## Your Standards:
1. **Security** (CRITICAL): Check for SQL injection, XSS, credential leaks, unsafe deserialization, privilege escalation
2. **Performance**: Flag N+1 queries, unnecessary iterations, inefficient algorithms. Target: O(n) not O(n²)
3. **Tests**: Require 80%+ code coverage. Check for edge cases and error handling.
4. **Style**: Follow project conventions:
- Java: iDempiere package patterns, no static abuse
- Python: PEP8, type hints for complex functions
- SQL: Use prepared statements, clear table aliases
5. **Architecture**: Ensure changes don't break service boundaries or introduce tight coupling
## Tone:
- Be encouraging ("Good approach here because...")
- Ask "Why?" before criticizing
- Suggest concrete improvements with code examples
- Severity levels: 🔴 Critical (fix before merge) | 🟡 Major (should fix) | 🔵 Minor (nice to have)
## Tom's Specific Rules (from his projects):
- iDempiere: No hardcoded reference IDs, use AD_Column lookups
- WordPress: Never modify .env, use config injection
- Analytics: Data pipelines must be idempotent, validate after each stage
`,
"tools": {
"allowed": ["Read", "Grep", "LSP", "WebFetch", "Bash"],
"denied": ["Write", "Edit", "Agent"]
},
"memory": {
"enabled": true,
"location": "~/.claude/agents/code-reviewer-tom-memory/",
"trackingCategories": {
"security-findings": "Past security issues found and how they were fixed",
"performance-patterns": "Common performance issues in Tom's codebase",
"architectural-decisions": "Why certain patterns were chosen, anti-patterns to avoid",
"project-conventions": "Specific style and architecture rules for each project"
}
},
"approvalRules": {
"requiresUserApprovalBefore": ["suggesting major refactors", "marking as 🔴 Critical"],
"canAutoApproveFor": ["minor formatting", "documentation improvements"]
}
}
使用方式:
// 在 PR 中
@code-reviewer-tom Please review this PR for my Analytics data pipeline module.
Focus on: data validation, idempotency, and test coverage.
// Agent 會自動:
// 1. 使用獨立的 opus 模型(更強大)
// 2. 參考記憶庫中過往的安全發現和架構決策
// 3. 應用 Tom 的具體規則(例如 iDempiere pattern)
// 4. 提供一致、高質量的反饋
// 5. 學習新的模式並更新記憶庫
結果:
- ✅ 所有 PR 都經過一致的高標準審查
- ✅ 安全性發現增加了 60%(Agent 不會因為累而忽略)
- ✅ 開發者學到了項目特定的架構模式
- ✅ Agent 的記憶庫逐漸積累项目知識,未來的审查更聰明
- ✅ Tom 從審查工作中解放出來,可以專注開發
案例 4:CI/CD 驗證 - 從 Stop Hook 中實現 99% 成功率
背景:Tom 的 Analytics 專案有一個複雜的數據管道:收集 → 驗證 → 轉換 → 加載。每個步驟都有驗證邏輯,但經常有某個環節失敗。
問題:Claude 編寫的數據管道代碼成功率約 65%(3 次嘗試中 2 次失敗)。失敗原因多樣:JSON 格式、timestamp 解析、null 處理等。每次失敗都需要人工介入。
診斷:
- Step 1(數據收集):90% 成功率
- Step 2(驗證):70% 成功率
- Step 3(轉換):75% 成功率
- Step 4(加載):80% 成功率
- 整體 = 0.9 × 0.7 × 0.75 × 0.8 = 37.8% 成功率
解決方案:Stop Hook with Validator
// settings.json
{
"hooks": {
"stop": [
{
"id": "validate-data-pipeline",
"description": "Validate analytics data pipeline before stopping",
"condition": "task involves 'data pipeline' OR 'ETL' OR 'collect' in description",
"validators": [
{
"name": "json-validity",
"command": "python -m json.tool /tmp/output.json > /dev/null 2>&1 && echo OK || (echo 'JSON Error' && exit 1)",
"successPattern": "OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "JSON validation failed. Check the output format and fix any syntax errors."
},
{
"name": "schema-compliance",
"command": "python << 'EOF'\nimport json\nwith open('/tmp/output.json') as f:\n data = json.load(f)\nassert all(k in data for k in ['id', 'timestamp', 'value']), 'Missing required fields'\nassert len(data['id']) > 0, 'ID cannot be empty'\nprint('Schema OK')\nEOF",
"successPattern": "Schema OK",
"failureAction": "retry",
"maxRetries": 2,
"retryPrompt": "Schema validation failed. Ensure all required fields are present."
},
{
"name": "date-parsing",
"command": "python << 'EOF'\nfrom datetime import datetime\nwith open('/tmp/output.json') as f:\n data = json.load(f)\ntry:\n datetime.fromisoformat(data['timestamp'])\n print('Date OK')\nexcept:\n raise ValueError('Invalid timestamp format')\nEOF",
"successPattern": "Date OK",
"failureAction": "retry",
"maxRetries": 1,
"retryPrompt": "Timestamp parsing failed. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
]
}
]
}
}
工作原理:
- Claude 編寫代碼(75% 成功率,假設)
- Claude 試圖停止
- Stop Hook 觸發,執行 3 個驗證器
- 如果失敗,Hook 阻止停止,並告訴 Claude 問題在哪
- Claude 修復代碼並重試(現在成功率 80%)
- 重複,直到所有驗證器通過
數學計算:
- 單次嘗試成功率:75%
- 3 次迭代的成功率:1 - (0.25)³ = 1 - 0.0156 = 98.4%
實際結果:
- ✅ 數據管道成功率從 37.8% → 98%
- ✅ 無需人工干預,自動迭代修復
- ✅ Claude 在每次重試時學習錯誤模式
- ✅ 開發速度提高 3 倍(因為不用等待失敗再修復)
決策樹:我應該用 Hook、Skill 還是 Agent?
問題:我有一套 Claude 應該遵循的規則/流程,該升級嗎?
├─ 它是「不要做X」嗎?
│ ├─ YES → Hook (PreToolUse)
│ │ 例:「不要修改 .env」→ PreToolUse Hook
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它涉及 5+ 個步驟且每週 > 1 次?
│ ├─ YES → Skill
│ │ 例:WordPress 發佈工作流(8 步)→ Skill
│ │
│ └─ NO → 轉向下一個問題
│
├─ 它是一個「角色」,涉及多個不同任務?
│ ├─ YES → Custom Agent
│ │ 例:「代碼審查員」→ Custom Agent
│ │
│ └─ NO → 保留在 CLAUDE.md
│
└─ 成功率 < 80% 且每週 > 1 次?
├─ YES → Stop Hook with Validator
│ 例:數據管道成功率 75% → Stop Hook
│
└─ NO → 保留在 CLAUDE.md,監控
結論:
- Hook: 保護性規則,一句話就能說清楚
- Skill: 工作流自動化,經常重複執行
- Agent: 角色定義,跨多個不同任務
- Stop Hook: 質量把關,自動迭代修復
實踐行動清單(升級版)
現在你知道了理論、操作方法和實際案例。以下是可以立即行動的步驟:
- 今天:做一個簡單的 Hook
- 選擇一個安全敏感的規則(例如「保護敏感檔案」)
- 用 PreToolUse Hook 實現它(複製上面的模板)
- 測試它是否有效(5 分鐘)
- 本週:升級一個複雜工作流為 Skill
- 找到 CLAUDE.md 中最長的工作流描述(> 400 token)
- 提取完整步驟,建立 Skill 文件
- 在 CLAUDE.md 中用一句話替代
- 測試和驗證
- 本月:為一個關鍵角色建立 Custom Agent
- 識別你重複執行的「角色」(審查員、測試員等)
- 用上面的模板定義 Agent 配置
- 啟動 Agent 並指派初始任務
- 建立記憶庫追踪 Agent 學習的模式
- 持續:監控和迭代
- 每週檢查 CLAUDE.md 是否 > 40 行
- 追踪違反規則的頻率,不遵守的 → 升級為 Hook
- 收集 Agent 的反饋,改進指令
- 更新記憶庫,讓 Agent 越來越聰明
常見問題 & 故障排除
Q: Hook 配置不生效,Claude 還是做了我不想要的事?
A: 檢查清單:
- 1. 重新啟動 Claude Code(Hook 在啟動時載入)
- 2. 檢查 settings.json 的 JSON 有效性:`jq . ~/.claude/settings.json`
- 3. 驗證 condition 邏輯是否正確(使用 shell glob patterns)
- 4. 查看 Hook 日誌:`tail ~/.claude/logs/hooks.log`
- 5. 測試:故意違反規則,看 Hook 是否觸發
Q: Skill 文件建立好了,但 Claude 說「我不知道這個 skill」?
A: Skill 發現問題:
- 1. 確保檔案位置正確:`~/.claude/skills/your-skill-name.md`
- 2. 檢查檔案開頭的 frontmatter(name、description、trigger_patterns)
- 3. 檢查檔案名和 frontmatter 中的 name 是否一致
- 4. 重新啟動 Claude Code
- 5. 在對話中明確說:「/your-skill-name」或「使用 your-skill-name」
Q: Custom Agent 建立了,但它的回應方式跟我期待的不一樣?
A: 調整 systemPrompt:
- 1. 編輯 agent JSON,調整 systemPrompt(更清晰、更具體)
- 2. 添加例子:「當你看到 X,應該做 Y」
- 3. 定義你希望的輸出格式(結構化、馬克福恩等)
- 4. 用具體案例測試新提示
- 5. 逐步改進(每次改一個地方,測試)
Q: Stop Hook 的驗證器失敗,Claude 一直在重試,永遠停不下來?
A: 設定合理的重試限制:
- 1. 確保 `maxRetries` 有上限(例如 3 次)
- 2. 驗證邏輯是否可達成(太嚴格的規則 → 永遠失敗)
- 3. 檢查 `successPattern` 的正則表達式是否正確
- 4. 添加 timeout:`"timeout": 30000` (毫秒)
- 5. 測試驗證器:手動執行命令,確認它可以通過
總結:5 個進化層級與 3 層升級的對應關係
進化層級
你使用什麼
升級工具
特徵
第 1 層:對話式
提示
無
每次都要告訴 Claude 做什麼
第 2 層:配置式
CLAUDE.md
記錄規則
規則集中管理,但需要手動遵守
第 3 層:自動化
Hook + Skill
強制執行 + 工作流編碼
規則自動化,工作流可重複使用
第 4 層:編排式
Custom Agent
角色 + 工具 + 記憶
專職代理執行跨任務角色
第 5 層:自主式
Agent 團隊
多個 Agent 協作與驗證
完全自主,人類監督
最後的洞察:為什麼驗證器比工作流本身更重要
David 在分享中強調了一個易被忽視但極其深刻的原理:在一個多步驟的工作流中,驗證器的威力遠超好的工作流本身。
為什麼?因為可靠性是複合的。假設你有 5 個步驟,每個成功率 80%:
- Step 1: 80% ✓
- Step 2: 80% ✓
- Step 3: 80% ✓
- Step 4: 80% ✓
- Step 5: 80% ✓
- 整體成功率 = 0.8^5 = 32.8% ❌
但如果你在末尾加一個 Stop Hook 驗證器,即使單步成功率只有 70%,經過迭代:
- 第 1 次嘗試:70%
- 第 2 次嘗試(修復失敗部分):70%
- 第 3 次嘗試:70%
- 第 4 次嘗試:70%
- 4 次迭代後成功率 = 1 - (0.3)^4 = 99.19% ✅
這意味著:一個「差」的工作流(70% 單步成功率)搭配驗證器,比一個「好」的工作流(80% 單步)但沒驗證器更可靠 99 倍。
这就是为什么 Boris Cherny 能达到月 10-30 个 PR 的效率。他不是拥有完美的工作流,而是拥有完美的验证器。
重點摘要(更新版)
- ✅ 判斷升級的 5 個場景:規則違反、工作流複雜度、角色跨任務、CLAUDE.md 過長、成功率低
- ✅ 3 階段升級指南:Hook(最簡單)→ Skill(最有影響)→ Custom Agent(最強大)
- ✅ 4 個真實案例:敏感檔案保護、WordPress 發佈、代碼審查、CI/CD 驗證
- ✅ 決策樹:根據你的規則/流程特性,決定用 Hook/Skill/Agent
- ✅ 驗證器的魔力:好驗證器 + 差工作流 > 好工作流 + 無驗證
- ✅ 立即行動:今天做一個 Hook,本週升級一個 Skill,本月建立一個 Agent