测试手册技能生成器Skill testing-handbook-generator

此技能用于自动分析 Trail of Bits 测试手册内容,生成专注于安全测试工具和技术的 Claude Code 技能,帮助用户快速创建和更新测试相关技能。关键词包括:安全测试、技能生成、自动化、Claude Code、测试手册、静态分析、模糊测试、安全工具。

测试 0 次安装 0 次浏览 更新于 3/14/2026

名称:测试手册技能生成器 描述:> 这是一个元技能,用于分析 Trail of Bits 测试手册 (appsec.guide) 并生成 Claude Code 技能,用于安全测试工具和技术。 在基于手册内容创建新技能时使用。

测试手册技能生成器

从 Trail of Bits 测试手册生成和维护 Claude Code 技能。

使用时机

在以下情况调用此技能:

  • 从手册内容创建新的安全测试技能
  • 用户提到“测试手册”、“appsec.guide”或询问生成技能
  • 需要批量技能生成或刷新

不要用于:

  • 一般安全测试问题(使用生成的技能)
  • 非手册技能创建

手册位置

此技能需要测试手册仓库。完整详情见 discovery.md

快速参考: 检查 ./testing-handbook../testing-handbook~/testing-handbook → 询问用户 → 最后克隆。

仓库: https://github.com/trailofbits/testing-handbook

工作流程概述

阶段 0: 设置             阶段 1: 发现
┌─────────────────┐        ┌─────────────────┐
│ 定位手册        │   →    │ 分析手册        │
│ - 查找或克隆    │        │ - 扫描章节      │
│ - 确认路径      │        │ - 分类类型      │
└─────────────────┘        └─────────────────┘
         ↓                          ↓
阶段 3: 生成             阶段 2: 计划
┌─────────────────┐        ┌─────────────────┐
│ 两阶段生成      │   ←    │ 生成计划        │
│ 阶段 1: 内容    │        │ - 新技能        │
│ 阶段 2: 交叉引用│        │ - 更新          │
│ - 写入 gen/     │        │ - 呈现给用户    │
└─────────────────┘        └─────────────────┘
         ↓
阶段 4: 测试             阶段 5: 完成
┌─────────────────┐        ┌─────────────────┐
│ 验证技能        │   →    │ 生成后处理      │
│ - 运行验证器    │        │ - 更新 README   │
│ - 测试激活      │        │ - 更新交叉引用  │
│ - 修复问题      │        │ - 自我改进      │
└─────────────────┘        └─────────────────┘

范围限制

仅修改以下位置:

  • plugins/testing-handbook-skills/skills/[技能名称]/* - 生成的技能(作为 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-skill.md
/fuzzing/[语言]/[模糊测试器]/ 模糊测试器技能 fuzzer-skill.md
/fuzzing/techniques/ 技术技能 technique-skill.md
/crypto/[工具]/ 领域技能 domain-skill.md
/web/[工具]/ 工具技能 tool-skill.md

技能候选信号

信号 指示
_index.md 带有 bookCollapseSection: true 主要工具/主题
编号文件(00-、10-、20-) 结构化内容
techniques/ 子章节 方法论内容
99-resources.md91-resources.md 有外部链接

排除信号

信号 操作
前置元数据中的 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)

生成使用两阶段方法解决前向引用问题(技能引用尚未存在的其他技能)。

阶段 1:内容生成(并行)

并行生成所有技能不包含相关技能部分:

阶段 1 - 并行生成 5 个技能:
├─ 代理 1: libfuzzer(模糊测试器) → skills/libfuzzer/SKILL.md
├─ 代理 2: aflpp(模糊测试器) → skills/aflpp/SKILL.md
├─ 代理 3: semgrep(工具) → skills/semgrep/SKILL.md
├─ 代理 4: harness-writing(技术) → skills/harness-writing/SKILL.md
└─ 代理 5: wycheproof(领域) → skills/wycheproof/SKILL.md

每个代理使用:pass=1(仅内容,相关技能留空)

阶段 1 代理:

  • 生成除相关技能外的所有部分
  • 留占位符:`## 相关技能

<!-- PASS2: 在所有技能存在后填充 -->`

  • 输出报告包括 references: DEFERRED

阶段 2:交叉引用填充(顺序)

所有阶段 1 代理完成后,运行阶段 2 填充相关技能:

阶段 2 - 填充交叉引用:
├─ 从 skills/*/SKILL.md 读取所有生成的技能名称
├─ 对于每个技能,基于以下确定相关技能:
│   ├─ 来自发现的 related_sections(手册结构)
│   ├─ 技能类型关系(模糊测试器 → 技术)
│   └─ 内容中的明确提及
└─ 更新每个 SKILL.md 的相关技能部分

阶段 2 过程:

  1. 收集所有生成的技能名称:ls -d skills/*/SKILL.md
  2. 对于每个技能,使用发现中的映射识别相关技能
  3. 编辑每个 SKILL.md 以用实际链接替换占位符
  4. 验证交叉引用存在(无损坏链接)

代理提示模板

agent-prompt.md 获取完整提示模板,包括:

  • 变量替换参考(包括 pass 变量)
  • 预写验证清单
  • Hugo 短代码转换规则
  • 行数分割规则
  • 错误处理指南
  • 输出报告格式

收集结果

阶段 1 后:汇总输出报告,验证所有技能生成。 阶段 2 后:运行验证器检查交叉引用。

处理代理失败

如果代理失败或产生无效输出:

失败类型 检测 恢复操作
代理崩溃 无输出报告 使用相同输入重新运行单个代理
验证失败 输出报告显示错误 检查差距/警告,手动修补或重新运行
错误技能类型 内容不匹配模板 用更正后的 type 参数重新运行
缺少内容 输出报告列出差距 如果轻微则接受,或提供额外的 related_sections
阶段 2 损坏引用 验证器显示缺失技能 检查技能是否被跳过,更新引用

重要: 不要为单个代理失败重新运行整个并行批次。独立修复个别失败。

单技能重新生成

重新生成单个技能而不重新运行整个批次:

# 重新生成单个技能(阶段 1 - 仅内容)
“使用 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. 仅为该技能重新运行阶段 2 以更新交叉引用
  5. 在该单个技能上运行验证器:uv run scripts/validate-skills.py --skill {skill-name}

输出位置

生成的技能写入:

skills/[技能名称]/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/) | 从测试手册生成技能的元技能 | 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 并提取其 ## 相关技能 部分
  2. 构建 mermaid 图,节点按技能类型分组(模糊测试器、技术、工具、领域)
  3. 基于相关技能关系添加边:
    • 实线箭头(-->)用于主要技术依赖
    • 虚线箭头(-.->)用于替代工具建议
  4. 替换 README.md 中现有的 mermaid 代码块

边分类:

关系 箭头样式 示例
模糊测试器 → 技术 --> libfuzzer --> harness-writing
工具 → 工具(替代) -.-> semgrep -.-> codeql
模糊测试器 → 模糊测试器(替代) -.-> libfuzzer -.-> aflpp
技术 → 技术 --> harness-writing --> coverage-analysis

验证: 更新后,运行 validate-skills.py 以验证所有引用的技能存在。

3. 自我改进

每次生成运行后,反思可以改进未来运行的地方。

捕获改进到:

  • 模板(缺失部分,更好结构)
  • 发现逻辑(错过模式,误报)
  • 内容提取(未处理的短代码,格式问题)

更新过程:

  1. 记录生成期间遇到的问题
  2. 识别导致问题的模式
  3. 更新相关文件:
    • SKILL.md - 工作流程、决策树、快速参考更新
    • templates/*.md - 模板改进
    • discovery.md - 检测逻辑更新
    • testing.md - 新验证检查
  4. 在提交消息中记录改进

示例自我改进:

问题:libFuzzer 技能缺少消毒器标志表
修复:更新 templates/fuzzer-skill.md 以包含 ## 编译器标志部分

示例用法

完整发现和生成

用户:“从测试手册生成技能”

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)
  • 获取视频 URL(YouTube, Vimeo - 仅标题)
  • 直接包含手册图像
  • 跳过验证步骤
  • SKILL.md 超过 500 行

首次使用:discovery.md 开始以了解手册分析过程。

模板参考:templates/ 目录获取技能类型模板。

验证:testing.md 了解质量保证方法论。