testing-handbook-generator

testing-handbook-generator

熱門

Meta-skill 用於分析 Trail of Bits 測試手冊 (appsec.guide) 並根據手冊內容生成 Claude Code 技能,適用於安全測試工具與技術。當需要根據手冊內容建立新技能時使用。

6336星標
545分支
更新於 2026/7/30
SKILL.md
唯讀
名稱
testing-handbook-generator
描述

Meta-skill 用於分析 Trail of Bits 測試手冊 (appsec.guide) 並根據手冊內容生成 Claude Code 技能,適用於安全測試工具與技術。當需要根據手冊內容建立新技能時使用。

Testing Handbook Skill Generator

從 Trail of Bits 測試手冊生成並維護 Claude Code 技能。

使用時機

在以下情況呼叫此技能:

  • 根據手冊內容建立新的安全測試技能
  • 使用者提到「testing handbook」、「appsec.guide」或詢問生成技能
  • 需要大量生成或重新整理技能

請勿用於:

  • 一般安全測試問題(請使用已生成的技能)
  • 非手冊相關的技能建立

手冊位置

此技能需要測試手冊儲存庫。完整細節請參閱 discovery.md

快速參考: 檢查 ./testing-handbook../testing-handbook~/testing-handbook → 詢問使用者 → 最後手段為複製儲存庫。

儲存庫: https://github.com/trailofbits/testing-handbook

工作流程概覽

階段 0:設定              階段 1:探索
┌─────────────────┐        ┌─────────────────┐
│ 定位手冊         │   →    │ 分析手冊         │
│ - 尋找或複製     │        │ - 掃描章節       │
│ - 確認路徑       │        │ - 分類類型       │
└─────────────────┘        └─────────────────┘
         ↓                          ↓
階段 3:生成              階段 2:規劃
┌─────────────────┐        ┌─────────────────┐
│ 兩階段生成       │   ←    │ 生成計畫         │
│ 第一階段:內容   │        │ - 新技能         │
│ 第二階段:交叉引用│        │ - 更新           │
│ - 寫入 gen/     │        │ - 呈現給使用者   │
└─────────────────┘        └─────────────────┘
         ↓
階段 4:測試              階段 5:完成
┌─────────────────┐        ┌─────────────────┐
│ 驗證技能         │   →    │ 生成後處理       │
│ - 執行驗證器     │        │ - 更新 README   │
│ - 測試啟用       │        │ - 更新交叉引用   │
│ - 修正問題       │        │ - 自我改進       │
└─────────────────┘        └─────────────────┘

範圍限制

僅修改以下位置:

  • plugins/testing-handbook-skills/skills/[skill-name]/* - 生成的技能(與 testing-handbook-generator 同層)
  • plugins/testing-handbook-skills/skills/testing-handbook-generator/* - 自我改進
  • 儲存庫根目錄 README.md - 將生成的技能加入表格

絕對不要修改或分析:

  • 其他外掛(plugins/property-based-testing/plugins/static-analysis/ 等)
  • 此外掛以外的其他技能

請勿掃描或將 testing-handbook-skills/ 以外的任何技能納入上下文。僅根據手冊內容及其引用的資源生成技能。

快速參考

章節 → 技能類型對應

手冊章節 技能類型 範本
/static-analysis/[tool]/ 工具技能 tool-skill.md
/fuzzing/[lang]/[fuzzer]/ 模糊測試技能 fuzzer-skill.md
/fuzzing/techniques/ 技術技能 technique-skill.md
/crypto/[tool]/ 領域技能 domain-skill.md
/web/[tool]/ 工具技能 tool-skill.md

技能候選訊號

訊號 表示
_index.md 包含 bookCollapseSection: true 主要工具/主題
編號檔案 (00-, 10-, 20-) 結構化內容
techniques/ 子章節 方法論內容
99-resources.md91-resources.md 有外部連結

排除訊號

訊號 動作
frontmatter 中 draft: true 跳過該章節
空目錄 跳過該章節
範本/佔位檔案 跳過該章節
僅 GUI 工具(例如 web/burp/ 跳過該章節(Claude 無法操作 GUI 工具)

決策樹

開始生成技能?

├─ 需要分析手冊並建立計畫?
│  └─ 閱讀:discovery.md
│     (手冊分析方法論、計畫格式)
│
├─ 要啟動技能生成代理?
│  └─ 閱讀:agent-prompt.md
│     (完整提示範本、變數參考、驗證檢查清單)
│
├─ 要生成特定技能類型?
│  └─ 閱讀對應範本:
│     ├─ 工具(Semgrep, CodeQL)→ templates/tool-skill.md
│     ├─ 模糊測試器(libFuzzer, AFL++)→ templates/fuzzer-skill.md
│     ├─ 技術(harness, coverage)→ templates/technique-skill.md
│     └─ 領域(crypto, web)→ templates/domain-skill.md
│
├─ 要驗證生成的技能?
│  └─ 執行:scripts/validate-skills.py
│     然後閱讀:testing.md 了解啟用測試
│
├─ 生成後要完成?
│  └─ 參閱下方「生成後任務」
│     (更新主 README、更新技能交叉引用、自我改進)
│
└─ 從特定章節快速生成?
   └─ 使用上方快速參考,直接套用範本

兩階段生成(階段 3)

生成採用兩階段方法來解決前向引用問題(技能引用尚未存在的其他技能)。

第一階段:內容生成(並行)

並行生成所有技能,不包含相關技能區段:

第一階段 - 並行生成 5 個技能:
├─ 代理 1:libfuzzer (fuzzer) → skills/libfuzzer/SKILL.md
├─ 代理 2:aflpp (fuzzer) → skills/aflpp/SKILL.md
├─ 代理 3:semgrep (tool) → skills/semgrep/SKILL.md
├─ 代理 4:harness-writing (technique) → skills/harness-writing/SKILL.md
└─ 代理 5:wycheproof (domain) → skills/wycheproof/SKILL.md

每個代理使用:pass=1(僅內容,相關技能留空)

第一階段代理:

  • 生成除「相關技能」外的所有區段
  • 留下佔位符:## Related Skills\n\n<!-- PASS2: populate after all skills exist -->
  • 輸出報告包含 references: DEFERRED

第二階段:交叉引用填充(依序)

所有第一階段代理完成後,執行第二階段以填充相關技能:

第二階段 - 填充交叉引用:
├─ 從 skills/*/SKILL.md 讀取所有生成的技能名稱
├─ 對每個技能,根據以下條件決定相關技能:
│   ├─ 來自探索的 related_sections(手冊結構)
│   ├─ 技能類型關係(模糊測試器 → 技術)
│   └─ 內容中的明確提及
└─ 更新每個 SKILL.md 的相關技能區段

第二階段流程:

  1. 收集所有生成的技能名稱:ls -d skills/*/SKILL.md
  2. 對每個技能,使用探索階段的對應關係識別相關技能
  3. 編輯每個 SKILL.md,將佔位符替換為實際連結
  4. 驗證交叉引用存在(無斷鏈)

代理提示範本

請參閱 agent-prompt.md 取得完整提示範本,包含:

  • 變數替換參考(包含 pass 變數)
  • 寫入前驗證檢查清單
  • Hugo shortcode 轉換規則
  • 行數分割規則
  • 錯誤處理指引
  • 輸出報告格式

收集結果

第一階段後:彙總輸出報告,確認所有技能已生成。
第二階段後:執行驗證器檢查交叉引用。

處理代理失敗

如果代理失敗或產生無效輸出:

失敗類型 偵測方式 復原動作
代理當機 無輸出報告 使用相同輸入重新執行單一代理
驗證失敗 輸出報告顯示錯誤 檢查缺口/警告,手動修補或重新執行
錯誤技能類型 內容與範本不符 使用修正後的 type 參數重新執行
內容遺漏 輸出報告列出缺口 若輕微則接受,或提供額外 related_sections
第二階段引用錯誤 驗證器顯示缺少技能 檢查技能是否被跳過,更新引用

重要: 不要因單一代理失敗而重新執行整個並行批次。應獨立修復個別失敗。

單一技能重新生成

若要重新生成單一技能而不重新執行整個批次:

# 重新生成單一技能(第一階段 - 僅內容)
"使用 testing-handbook-generator 從章節 {section_path} 重新生成 {skill-name} 技能"

# 範例:
"使用 testing-handbook-generator 從章節 fuzzing/c-cpp/10-libfuzzer 重新生成 libfuzzer 技能"

重新生成工作流程:

  1. 重新讀取手冊章節以取得最新內容
  2. 套用適當範本
  3. 寫入 skills/{skill-name}/SKILL.md(覆蓋現有檔案)
  4. 僅對該技能重新執行第二階段以更新交叉引用
  5. 對單一技能執行驗證器:uv run scripts/validate-skills.py --skill {skill-name}

輸出位置

生成的技能寫入:

skills/[skill-name]/SKILL.md

每個技能擁有自己的目錄,以存放可能的支援檔案(與 testing-handbook-generator 同層)。

品質檢查清單

在交付生成的技能前:

  • [ ] 所有手冊章節已分析(階段 1)
  • [ ] 生成前已向使用者呈現計畫(階段 2)
  • [ ] 已啟動並行代理 - 每個技能一個(階段 3)
  • [ ] 範本已根據技能類型正確套用
  • [ ] 驗證器通過:uv run scripts/validate-skills.py
  • [ ] 啟用測試已通過 - 請參閱 testing.md
  • [ ] 主 README.md 已更新,包含生成的技能表格
  • [ ] README.md 技能交叉引用圖表已更新
  • [ ] 自我改進筆記已記錄
  • [ ] 已通知使用者並附上摘要

生成後任務

1. 更新主 README

生成技能後,更新儲存庫的主 README.md 以列出它們。

格式: 將生成的技能加入相同的「可用外掛」表格,直接放在 testing-handbook-skills 之後。作者欄使用純文字 testing-handbook-generator(無連結)。

範例:

| 外掛 | 描述 | 作者 |
|--------|-------------|--------|
| ... 其他外掛 ... |
| [testing-handbook-skills](plugins/testing-handbook-skills/) | 從測試手冊生成技能的 Meta-skill | Paweł Płatek |
| [libfuzzer](plugins/testing-handbook-skills/skills/libfuzzer/) | 使用 libFuzzer 進行 C/C++ 覆蓋率導向模糊測試 | testing-handbook-generator |
| [aflpp](plugins/testing-handbook-skills/skills/aflpp/) | 使用 AFL++ 進行多核心模糊測試 | testing-handbook-generator |
| [semgrep](plugins/testing-handbook-skills/skills/semgrep/) | 快速靜態分析以尋找錯誤 | testing-handbook-generator |

2. 更新技能交叉引用

生成技能後,更新 README.md技能交叉引用區段,使用 mermaid 圖表顯示技能關係。

流程:

  1. 讀取每個生成技能的 SKILL.md,擷取其 ## Related Skills 區段
  2. 建立 mermaid 圖表,節點按技能類型分組(模糊測試器、技術、工具、領域)
  3. 根據相關技能關係加入邊線:
    • 實線箭頭 (-->) 表示主要技術依賴
    • 虛線箭頭 (-.->) 表示替代工具建議
  4. 取代 README.md 中現有的 mermaid 程式碼區塊

邊線分類:

關係 箭頭樣式 範例
模糊測試器 → 技術 --> libfuzzer --> harness-writing
工具 → 工具(替代) -.-> semgrep -.-> codeql
模糊測試器 → 模糊測試器(替代) -.-> libfuzzer -.-> aflpp
技術 → 技術 --> harness-writing --> coverage-analysis

驗證: 更新後,執行 validate-skills.py 以確認所有引用的技能都存在。

3. 自我改進

每次生成執行後,反思哪些部分可以改善未來的執行。

記錄改進項目:

  • 範本(遺漏的區段、更好的結構)
  • 探索邏輯(遺漏的模式、誤報)
  • 內容擷取(未處理的 shortcode、格式問題)

更新流程:

  1. 記錄生成過程中遇到的問題
  2. 識別造成問題的模式
  3. 更新相關檔案:
    • SKILL.md - 工作流程、決策樹、快速參考更新
    • templates/*.md - 範本改進
    • discovery.md - 偵測邏輯更新
    • testing.md - 新的驗證檢查
  4. 在提交訊息中記錄改進

自我改進範例:

問題:libFuzzer 技能缺少 sanitizer 旗標表格
修正:更新 templates/fuzzer-skill.md 加入 ## Compiler Flags 區段

使用範例

完整探索與生成

使用者:「從測試手冊生成技能」

1. 定位手冊(檢查常見位置、詢問使用者或複製)
2. 閱讀 discovery.md 了解方法論
3. 掃描手冊位於 {handbook_path}/content/docs/
4. 建立候選清單並標註類型
5. 向使用者呈現計畫
6. 獲得批准後,使用適當範本生成每個技能
7. 驗證生成的技能
8. 更新主 README.md,加入生成的技能表格
9. 根據相關技能區段更新 README.md 技能交叉引用圖表
10. 自我改進:記錄任何範本/探索問題以供未來執行參考
11. 回報結果

單一章節生成

使用者:「為 libFuzzer 章節建立一個技能」

1. 讀取 /testing-handbook/content/docs/fuzzing/c-cpp/10-libfuzzer/
2. 識別類型:模糊測試技能
3. 讀取 templates/fuzzer-skill.md
4. 擷取內容,套用範本
5. 寫入 skills/libfuzzer/SKILL.md
6. 驗證並回報

提示

應該:

  • 生成前務必先呈現計畫
  • 根據技能類型使用適當範本
  • 精確保留程式碼區塊
  • 生成後務必驗證

不應該:

  • 未經使用者批准就生成
  • 跳過擷取非影片的外部資源(請使用 WebFetch)
  • 擷取影片網址(YouTube、Vimeo - 僅標題)
  • 直接包含手冊圖片
  • 跳過驗證步驟
  • 每個 SKILL.md 超過 500 行

首次使用:discovery.md 開始,了解手冊分析流程。

範本參考: 請參閱 templates/ 目錄取得技能類型範本。

驗證: 請參閱 testing.md 了解品質保證方法。