Generated banner for Testing Handbook Generator
Generated logo for Testing Handbook Generator

Testing Handbook Generator

Trail of BitsOfficialPublished by Trail of Bits

  • Skill
  • Workflow
  • Agent tooling
  • CC-BY-SA-4.0
  • No issues found

From the author

Generates Claude Code skills from the Trail of Bits Testing Handbook (appsec.guide), analyzing handbook pages and emitting SKILL.md files with the structure each skill type requires. Use when creating or refreshing a skill from handbook content, or when the user names the testing handbook or appsec.guide. Not for answering security testing questions — the generated skills cover those.
— the description by Trail of Bits

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The testing-handbook-generator is a workflow-based skill designed to transform content from the Trail of Bits Testing Handbook into structured Claude Code skills. It follows a multi-phase process that includes handbook discovery, planning, two-pass content generation, and validation. The skill ensures that generated documentation adheres to specific templates based on the handbook section type, such as tools, fuzzers, techniques, or domains. It also manages cross-references between generated skills and updates repository documentation to maintain consistency.

What it does

  • Analyzes the Trail of Bits Testing Handbook to identify potential skills.
  • Generates structured SKILL.md files using predefined templates.
  • Executes a two-pass generation process to handle cross-references between skills.
  • Validates generated skills and their cross-references using automated scripts.
  • Updates the repository README and cross-reference graphs.
  • Supports regeneration of individual skills from specific handbook sections.

When to use it

  • When you need to create new security testing skills derived from the appsec.guide handbook.
  • When you need to refresh existing skills based on updates to the handbook content.
  • When you are performing bulk skill generation or maintenance within the plugin structure.
  • When a user explicitly references the testing handbook or appsec.guide.

Advantages

  • Ensures consistent structure across all generated security skills.
  • Automates the complex task of managing inter-skill dependencies.
  • Provides a clear workflow for validating and integrating new skills into the repository.
  • Reduces manual effort in maintaining documentation and cross-references.

Usage examples

“Generate skills from the testing handbook”
The agent initiates the discovery phase, scans the handbook, presents a generation plan for approval, and proceeds to create the skills.
“Create a skill for the libFuzzer section”
The agent reads the specific libFuzzer handbook section, applies the fuzzer-skill template, and generates the corresponding SKILL.md file.
“Regenerate the semgrep skill from the handbook”
The agent re-reads the relevant handbook section, overwrites the existing semgrep SKILL.md, and updates cross-references.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/trailofbits/testing-handbook-generator/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip testing-handbook-generator.zip -d .agents/skills

Documentation by Trail of Bits

Testing Handbook Skill Generator

Generate and maintain Claude Code skills from the Trail of Bits Testing Handbook.

When to Use

Invoke this skill when:

  • Creating new security testing skills from handbook content

  • User mentions "testing handbook", "appsec.guide", or asks about generating skills

  • Bulk skill generation or refresh is needed

Do NOT use for:

  • General security testing questions (use the generated skills)

  • Non-handbook skill creation

Handbook Location

The skill needs the Testing Handbook repository. See discovery.md for full details.

Quick reference: Check ./testing-handbook, ../testing-handbook, ~/testing-handbook → ask user → clone as last resort.

Repository: https://github.com/trailofbits/testing-handbook

Workflow Overview

Phase 0: Setup              Phase 1: Discovery
┌─────────────────┐        ┌─────────────────┐
│ Locate handbook │   →    │ Analyze handbook│
│ - Find or clone │        │ - Scan sections │
│ - Confirm path  │        │ - Classify types│
└─────────────────┘        └─────────────────┘
         ↓                          ↓
Phase 3: Generation        Phase 2: Planning
┌─────────────────┐        ┌─────────────────┐
│ TWO-PASS GEN    │   ←    │ Generate plan   │
│ Pass 1: Content │        │ - New skills    │
│ Pass 2: X-refs  │        │ - Updates       │
│ - Write to gen/ │        │ - Present user  │
└─────────────────┘        └─────────────────┘
         ↓
Phase 4: Testing           Phase 5: Finalize
┌─────────────────┐        ┌─────────────────┐
│ Validate skills │   →    │ Post-generation │
│ - Run validator │        │ - Update README │
│ - Test activation│       │ - Update X-refs │
│ - Fix issues    │        │ - Self-improve  │
└─────────────────┘        └─────────────────┘

Scope Restrictions

ONLY modify these locations:

  • plugins/testing-handbook-skills/skills/[skill-name]/* - Generated skills (as siblings to testing-handbook-generator)

  • plugins/testing-handbook-skills/skills/testing-handbook-generator/* - Self-improvement

  • Repository root README.md - Add generated skills to table

NEVER modify or analyze:

  • Other plugins (plugins/property-based-testing/, plugins/static-analysis/, etc.)

  • Other skills outside this plugin

Do not scan or pull into context any skills outside of testing-handbook-skills/. Generate skills based solely on handbook content and resources referenced from it.

Quick Reference

Section → Skill Type Mapping
Handbook SectionSkill TypeTemplate
/static-analysis/[tool]/Tool Skilltool-skill.md
/fuzzing/[lang]/[fuzzer]/Fuzzer Skillfuzzer-skill.md
/fuzzing/techniques/Technique Skilltechnique-skill.md
/crypto/[tool]/Domain Skilldomain-skill.md
/web/[tool]/Tool Skilltool-skill.md
Skill Candidate Signals
SignalIndicates
_index.md with bookCollapseSection: trueMajor tool/topic
Numbered files (00-, 10-, 20-)Structured content
techniques/ subsectionMethodology content
99-resources.md or 91-resources.mdHas external links
Exclusion Signals
SignalAction
draft: true in frontmatterSkip section
Empty directorySkip section
Template/placeholder fileSkip section
GUI-only tool (e.g., web/burp/)Skip section (Claude cannot operate GUI tools)

Decision Tree

Starting skill generation?

├─ Need to analyze handbook and build plan?
│  └─ Read: discovery.md
│     (Handbook analysis methodology, plan format)
│
├─ Spawning skill generation agents?
│  └─ Read: agent-prompt.md
│     (Full prompt template, variable reference, validation checklist)
│
├─ Generating a specific skill type?
│  └─ Read appropriate template:
│     ├─ Tool (Semgrep, CodeQL) → templates/tool-skill.md
│     ├─ Fuzzer (libFuzzer, AFL++) → templates/fuzzer-skill.md
│     ├─ Technique (harness, coverage) → templates/technique-skill.md
│     └─ Domain (crypto, web) → templates/domain-skill.md
│
├─ Validating generated skills?
│  └─ Run: scripts/validate-skills.py
│     Then read: testing.md for activation testing
│
├─ Finalizing after generation?
│  └─ See: Post-Generation Tasks below
│     (Update main README, update Skills Cross-Reference, self-improvement)
│
└─ Quick generation from specific section?
   └─ Use Quick Reference above, apply template directly

Two-Pass Generation (Phase 3)

Generation uses a two-pass approach to solve forward reference problems (skills referencing other skills that don't exist yet).

Pass 1: Content Generation (Parallel)

Generate all skills in parallel without the Related Skills section:

Pass 1 - Generating 5 skills in parallel:
├─ Agent 1: libfuzzer (fuzzer) → skills/libfuzzer/SKILL.md
├─ Agent 2: aflpp (fuzzer) → skills/aflpp/SKILL.md
├─ Agent 3: semgrep (tool) → skills/semgrep/SKILL.md
├─ Agent 4: harness-writing (technique) → skills/harness-writing/SKILL.md
└─ Agent 5: wycheproof (domain) → skills/wycheproof/SKILL.md

Each agent uses: pass=1 (content only, Related Skills left empty)

Pass 1 agents:

  • Generate all sections EXCEPT Related Skills

  • Leave a placeholder: ## Related Skills\n\n<!-- PASS2: populate after all skills exist -->

  • Output report includes references: DEFERRED

Pass 2: Cross-Reference Population (Sequential)

After all Pass 1 agents complete, run Pass 2 to populate Related Skills:

Pass 2 - Populating cross-references:
├─ Read all generated skill names from skills/*/SKILL.md
├─ For each skill, determine related skills based on:
│   ├─ related_sections from discovery (handbook structure)
│   ├─ Skill type relationships (fuzzers → techniques)
│   └─ Explicit mentions in content
└─ Update each SKILL.md's Related Skills section

Pass 2 process:

  1. Collect all generated skill names: ls -d skills/*/SKILL.md

  2. For each skill, identify related skills using the mapping from discovery

  3. Edit each SKILL.md to replace the placeholder with actual links

  4. Validate cross-references exist (no broken links)

Agent Prompt Template

See agent-prompt.md for the full prompt template with:

  • Variable substitution reference (including pass variable)

  • Pre-write validation checklist

  • Hugo shortcode conversion rules

  • Line count splitting rules

  • Error handling guidance

  • Output report format

Collecting Results

After Pass 1: Aggregate output reports, verify all skills generated. After Pass 2: Run validator to check cross-references.

Handling Agent Failures

If an agent fails or produces invalid output:

Failure TypeDetectionRecovery Action
Agent crashedNo output reportRe-run single agent with same inputs
Validation failedOutput report shows errorsCheck gaps/warnings, manually patch or re-run
Wrong skill typeContent doesn't match templateRe-run with corrected type parameter
Missing contentOutput report lists gapsAccept if minor, or provide additional related_sections
Pass 2 broken refValidator shows missing skillCheck if skill was skipped, update reference

Important: Do NOT re-run the entire parallel batch for a single agent failure. Fix individual failures independently.

Single-Skill Regeneration

To regenerate a single skill without re-running the entire batch:

# Regenerate single skill (Pass 1 - content only)
"Use testing-handbook-generator to regenerate the {skill-name} skill from section {section_path}"

# Example:
"Use testing-handbook-generator to regenerate the libfuzzer skill from section fuzzing/c-cpp/10-libfuzzer"

Regeneration workflow:

  1. Re-read the handbook section for fresh content

  2. Apply the appropriate template

  3. Write to skills/{skill-name}/SKILL.md (overwrites existing)

  4. Re-run Pass 2 for that skill only to update cross-references

  5. Run validator on the single skill: uv run scripts/validate-skills.py --skill {skill-name}

Output Location

Generated skills are written to:

skills/[skill-name]/SKILL.md

Each skill gets its own directory for potential supporting files (as siblings to testing-handbook-generator).

Quality Checklist

Before delivering generated skills:

  • [ ] All handbook sections analyzed (Phase 1)

  • [ ] Plan presented to user before generation (Phase 2)

  • [ ] Parallel agents launched - one per skill (Phase 3)

  • [ ] Templates applied correctly per skill type

  • [ ] Validator passes: uv run scripts/validate-skills.py

  • [ ] Activation testing passed - see testing.md

  • [ ] Main README.md updated with generated skills table

  • [ ] README.md Skills Cross-Reference graph updated

  • [ ] Self-improvement notes captured

  • [ ] User notified with summary

Post-Generation Tasks

1. Update Main README

After generating skills, update the repository's main README.md to list them.

Format: Add generated skills to the same "Available Plugins" table, directly after testing-handbook-skills. Use plain text testing-handbook-generator as the author (no link).

Example:

| Plugin | Description | Author |
|--------|-------------|--------|
| ... other plugins ... |
| [testing-handbook-skills](plugins/testing-handbook-skills/) | Meta-skill that generates skills from the Testing Handbook | Paweł Płatek |
| [libfuzzer](plugins/testing-handbook-skills/skills/libfuzzer/) | Coverage-guided fuzzing with libFuzzer for C/C++ | testing-handbook-generator |
| [aflpp](plugins/testing-handbook-skills/skills/aflpp/) | Multi-core fuzzing with AFL++ | testing-handbook-generator |
| [semgrep](plugins/testing-handbook-skills/skills/semgrep/) | Fast static analysis for finding bugs | testing-handbook-generator |
2. Update Skills Cross-Reference

After generating skills, update the README.md's Skills Cross-Reference section with the mermaid graph showing skill relationships.

Process:

  1. Read each generated skill's SKILL.md and extract its ## Related Skills section

  2. Build the mermaid graph with nodes grouped by skill type (Fuzzers, Techniques, Tools, Domain)

  3. Add edges based on the Related Skills relationships:

    • Solid arrows (-->) for primary technique dependencies

    • Dashed arrows (-.->) for alternative tool suggestions

  4. Replace the existing mermaid code block in README.md

Edge classification:

RelationshipArrow StyleExample
Fuzzer → Technique-->libfuzzer --> harness-writing
Tool → Tool (alternative)-.->semgrep -.-> codeql
Fuzzer → Fuzzer (alternative)-.->libfuzzer -.-> aflpp
Technique → Technique-->harness-writing --> coverage-analysis

Validation: After updating, run validate-skills.py to verify all referenced skills exist.

3. Self-Improvement

After each generation run, reflect on what could improve future runs.

Capture improvements to:

  • Templates (missing sections, better structure)

  • Discovery logic (missed patterns, false positives)

  • Content extraction (shortcodes not handled, formatting issues)

Update process:

  1. Note issues encountered during generation

  2. Identify patterns that caused problems

  3. Update relevant files:

    • SKILL.md - Workflow, decision tree, quick reference updates

    • templates/*.md - Template improvements

    • discovery.md - Detection logic updates

    • testing.md - New validation checks

  4. Document the improvement in commit message

Example self-improvement:

Issue: libFuzzer skill missing sanitizer flags table
Fix: Updated templates/fuzzer-skill.md to include ## Compiler Flags section

Example Usage

Full Discovery and Generation
User: "Generate skills from the testing handbook"

1. Locate handbook (check common locations, ask user, or clone)
2. Read discovery.md for methodology
3. Scan handbook at {handbook_path}/content/docs/
4. Build candidate list with types
5. Present plan to user
6. On approval, generate each skill using appropriate template
7. Validate generated skills
8. Update main README.md with generated skills table
9. Update README.md Skills Cross-Reference graph from Related Skills sections
10. Self-improve: note any template/discovery issues for future runs
11. Report results
Single Section Generation
User: "Create a skill for the libFuzzer section"

1. Read /testing-handbook/content/docs/fuzzing/c-cpp/10-libfuzzer/
2. Identify type: Fuzzer Skill
3. Read templates/fuzzer-skill.md
4. Extract content, apply template
5. Write to skills/libfuzzer/SKILL.md
6. Validate and report

Tips

Do:

  • Always present plan before generating

  • Use appropriate template for skill type

  • Preserve code blocks exactly

  • Validate after generation

Don't:

  • Generate without user approval

  • Skip fetching non-video external resources (use WebFetch)

  • Fetch video URLs (YouTube, Vimeo - titles only)

  • Include handbook images directly

  • Skip validation step

  • Exceed 500 lines per SKILL.md


For first-time use: Start with discovery.md to understand the handbook analysis process.

For template reference: See templates/ directory for skill type templates.

For validation: See testing.md for quality assurance methodology.

Files

templates/domain-skill.md

Domain Skill Template

Use this template for domain-specific security testing (cryptographic testing, web security methodologies, etc.).

Template Structure

---
name: {domain-name-lowercase}
type: domain
description: "{What this skill does for the reader, leading with the task rather than defining the domain}. Covers {the specific tools, formats, and checks}. Use when {the situations a user describes, in the words they would type — the symptom, the file, the error, the question}."
---

# {Domain Name}

{Brief introduction to the domain and why specialized testing matters}

## Background

{Theory and context needed to understand this domain}

### Key Concepts

| Concept | Description |
|---------|-------------|
| {Concept 1} | {Explanation} |
| {Concept 2} | {Explanation} |
| {Concept 3} | {Explanation} |

### Why This Matters

{Security implications of getting this wrong - real-world impact}

## When to Use

**Apply this methodology when:**
- {Trigger 1}
- {Trigger 2}
- {Trigger 3}

**Consider alternatives when:**
- {Alternative condition 1}
- {Alternative condition 2}

## Quick Reference

{Decision aid for choosing tools and approaches}

| Scenario | Recommended Approach | Skill |
|----------|---------------------|-------|
| {Scenario 1} | {Approach} | **{skill-name}** |
| {Scenario 2} | {Approach} | **{skill-name}** |
| {Scenario 3} | {Approach} | **{skill-name}** |

## Testing Workflow

{High-level workflow showing how tools and techniques fit together}

\```
Phase 1: {Phase Name}         Phase 2: {Phase Name}
┌─────────────────┐          ┌─────────────────┐
│ {Description}   │    →     │ {Description}   │
│ Tool: {name}    │          │ Tool: {name}    │
└─────────────────┘          └─────────────────┘
         ↓                            ↓
Phase 3: {Phase Name}         Phase 4: {Phase Name}
┌─────────────────┐          ┌─────────────────┐
│ {Description}   │    ←     │ {Description}   │
│ Tool: {name}    │          │ Technique: {n}  │
└─────────────────┘          └─────────────────┘
\```

## Tools and Approaches

{Overview of tools/methods available for this domain}

| Tool/Approach | Purpose | Complexity | Skill |
|---------------|---------|------------|-------|
| {Tool 1} | {Purpose} | {Level} | **{skill-name}** |
| {Tool 2} | {Purpose} | {Level} | **{skill-name}** |
| {Tool 3} | {Purpose} | {Level} | **{skill-name}** |

### {Tool/Approach 1}

{Brief overview of this tool in the domain context}

> **Detailed Guidance:** See the **{tool-skill-name}** skill for installation,
> configuration, and usage details.

#### Quick Start for {Domain}

\```bash
{Domain-specific usage command}
\```

#### Domain-Specific Configuration

\```{format}
{Config specific to this domain use case}
\```

### {Tool/Approach 2}

{Brief overview}

> **Detailed Guidance:** See the **{tool-skill-name}** skill.

#### Quick Start for {Domain}

\```bash
{Domain-specific usage command}
\```

## Key Techniques

{Techniques that apply to this domain - link to technique skills}

| Technique | When to Apply | Skill |
|-----------|---------------|-------|
| {Technique 1} | {When} | **{technique-skill-name}** |
| {Technique 2} | {When} | **{technique-skill-name}** |
| {Technique 3} | {When} | **{technique-skill-name}** |

### Applying {Technique 1} to {Domain}

{How this technique specifically applies to the domain}

> **See Also:** For detailed technique guidance, see the **{technique-skill}** skill.

\```{language}
{Domain-specific example}
\```

## Implementation Guide

{Step-by-step for applying this methodology}

### Phase 1: {First Phase}

{Instructions}

**Tools to use:** {tool-name}, {tool-name}
**Techniques to apply:** {technique-name}

### Phase 2: {Second Phase}

{Instructions}

### Phase 3: {Third Phase}

{Instructions}

## Common Vulnerabilities

{What to look for in this domain}

| Vulnerability | Description | Detection | Severity |
|---------------|-------------|-----------|----------|
| {Vuln 1} | {Description} | {Tool/technique} | {Level} |
| {Vuln 2} | {Description} | {Tool/technique} | {Level} |
| {Vuln 3} | {Description} | {Tool/technique} | {Level} |

### {Vulnerability 1}: Deep Dive

{Detailed explanation of the vulnerability}

**How to detect:**

\```{language}
{Detection code or command}
\```

**Related skill:** **{skill-name}**

## Case Studies

{Real-world examples from handbook}

### Case Study: {Name 1}

{Description of vulnerability and testing approach}

**Tools used:** {tool-list}
**Techniques applied:** {technique-list}

### Case Study: {Name 2}

{Description}

## Advanced Usage

### Tips and Tricks

{Domain-specific tips from experienced practitioners}

| Tip | Why It Helps |
|-----|--------------|
| {Tip 1} | {Explanation} |
| {Tip 2} | {Explanation} |
| {Tip 3} | {Explanation} |

### Common Mistakes

| Mistake | Why It's Wrong | Correct Approach |
|---------|----------------|------------------|
| {Mistake 1} | {Reason} | {Fix} |
| {Mistake 2} | {Reason} | {Fix} |

## Related Skills

{Comprehensive links to all relevant tools and techniques - KEY for discoverability}

### Tool Skills

{Tools commonly used in this domain}

| Skill | Primary Use in {Domain} |
|-------|-------------------------|
| **{tool-skill-1}** | {How this tool is used in the domain} |
| **{tool-skill-2}** | {How this tool is used in the domain} |
| **{tool-skill-3}** | {How this tool is used in the domain} |

### Technique Skills

{Techniques that apply to this domain}

| Skill | When to Apply |
|-------|---------------|
| **{technique-skill-1}** | {Specific application in this domain} |
| **{technique-skill-2}** | {Specific application in this domain} |
| **{technique-skill-3}** | {Specific application in this domain} |

### Related Domain Skills

{Other domains that share overlap}

| Skill | Relationship |
|-------|--------------|
| **{domain-skill-1}** | {How they relate - e.g., "Crypto testing often overlaps with..."} |
| **{domain-skill-2}** | {How they relate} |

## Skill Dependency Map

{Visual representation of how skills work together in this domain}

\```
                    ┌─────────────────────┐
                    │   {Domain Skill}    │
                    │   (this skill)      │
                    └──────────┬──────────┘
                               │
           ┌───────────────────┼───────────────────┐
           │                   │                   │
           ▼                   ▼                   ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│  {Tool Skill 1} │ │  {Tool Skill 2} │ │  {Tool Skill 3} │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
         │                   │                   │
         └───────────────────┼───────────────────┘
                             │
                             ▼
              ┌──────────────────────────┐
              │   Technique Skills       │
              │  {tech-1}, {tech-2}, ... │
              └──────────────────────────┘
\```

## Resources

### Key External Resources

{For each non-video URL: fetch with WebFetch, summarize key insights}

**[{Title 1}]({URL})**
{Summarized insights from fetched content}

**[{Title 2}]({URL})**
{Summarized insights from fetched content}

### Video Resources

{Videos - title and URL only, no fetching}

- [{Video Title}]({YouTube/Vimeo URL}) - {Brief description}

Field Extraction Guide

Template FieldHandbook Source
{domain-name-lowercase}Slugified from section name
BackgroundFrom handbook intro and theory sections
Tools and ApproachesFrom tool subsections
Common VulnerabilitiesExtract from handbook or related resources
Case StudiesFrom handbook examples
Related SkillsMap to all tool and technique skills in the domain

Skill Reference Mapping

When generating a domain skill, map to relevant tool and technique skills:

DomainTool SkillsTechnique Skills
Cryptographywycheproof, constant-time-testing, cryptofuzzcoverage-analysis, property-based-testing
Fuzzing (general)libfuzzer, aflpp, honggfuzzfuzz-harness-writing, address-sanitizer, coverage-analysis
Web Securitysemgrep, nuclei-
Static Analysissemgrep, codeql, bandit-

Example: Cryptographic Testing

---
name: crypto-testing
type: domain
description: "Tests cryptographic implementations against known attacks and edge cases using standard test vectors and timing analysis. Covers vector formats, result flags, and reading a failure. Use when auditing crypto code for correctness or timing leaks, checking a library against standard test vectors, or investigating why two implementations disagree on the same input."
---

# Cryptographic Testing

Cryptographic code requires specialized testing beyond standard security scanning.
Subtle bugs in crypto implementations can completely undermine security.

## Background

### Key Concepts

| Concept | Description |
|---------|-------------|
| Test vector | Input/output pair for validating crypto implementation |
| Timing attack | Exploiting execution time variations to extract secrets |
| Constant-time | Code that executes in same time regardless of secret values |

### Why This Matters

Cryptographic bugs can:
- Expose private keys
- Allow signature forgery
- Enable message decryption
- Leak secret values through side channels

## Quick Reference

| Scenario | Recommended Approach | Skill |
|----------|---------------------|-------|
| Validate crypto primitives | Wycheproof test vectors | **wycheproof** |
| Check for timing leaks | Constant-time analysis | **constant-time-testing** |
| Fuzz crypto parsers | Coverage-guided fuzzing | **libfuzzer** |
| Find edge cases | Property-based testing | **property-based-testing** |

## Testing Workflow

\```
Phase 1: Static Analysis      Phase 2: Test Vectors
┌─────────────────┐          ┌─────────────────┐
│ Identify crypto │    →     │ Run Wycheproof  │
│ Tool: semgrep   │          │ Tool: wycheproof│
└─────────────────┘          └─────────────────┘
         ↓                            ↓
Phase 4: Fuzzing              Phase 3: Timing Analysis
┌─────────────────┐          ┌─────────────────┐
│ Edge case bugs  │    ←     │ Side-channel    │
│ Tool: libfuzzer │          │ Tool: CT tools  │
└─────────────────┘          └─────────────────┘
\```

## Tools and Approaches

| Tool/Approach | Purpose | Complexity | Skill |
|---------------|---------|------------|-------|
| Wycheproof | Validate implementations | Low | **wycheproof** |
| Constant-time tools | Detect timing leaks | Medium | **constant-time-testing** |
| libFuzzer | Find edge case bugs | Medium | **libfuzzer** |

### Wycheproof Test Vectors

Test vectors cover ECDSA, RSA, AES-GCM, ECDH, and more.

> **Detailed Guidance:** See the **wycheproof** skill for setup and usage.

#### Quick Start for Crypto Testing

\```bash
git clone https://github.com/google/wycheproof
# See wycheproof skill for integration patterns
\```

### Constant-Time Analysis

Essential for code handling secrets.

> **Detailed Guidance:** See the **constant-time-testing** skill for tools and techniques.

## Common Vulnerabilities

| Vulnerability | Description | Detection | Severity |
|---------------|-------------|-----------|----------|
| Timing side-channel | Execution varies with secrets | constant-time-testing | HIGH |
| Signature malleability | Multiple valid signatures | wycheproof | MEDIUM |
| Invalid curve attack | ECDH with bad points | wycheproof | CRITICAL |

## Related Skills

### Tool Skills

| Skill | Primary Use in Crypto Testing |
|-------|-------------------------------|
| **wycheproof** | Validate implementations against known test vectors |
| **constant-time-testing** | Detect timing side-channels in crypto code |
| **libfuzzer** | Fuzz crypto parsers and edge cases |
| **semgrep** | Find insecure crypto patterns statically |

### Technique Skills

| Skill | When to Apply |
|-------|---------------|
| **coverage-analysis** | Measure test coverage of crypto code |
| **property-based-testing** | Test mathematical properties (e.g., decrypt(encrypt(x)) == x) |
| **fuzz-harness-writing** | Write harnesses for crypto functions |

## Skill Dependency Map

\```
                    ┌─────────────────────┐
                    │   crypto-testing    │
                    │   (this skill)      │
                    └──────────┬──────────┘
                               │
           ┌───────────────────┼───────────────────┐
           │                   │                   │
           ▼                   ▼                   ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   wycheproof    │ │ constant-time   │ │   libfuzzer     │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
         │                   │                   │
         └───────────────────┼───────────────────┘
                             │
                             ▼
              ┌──────────────────────────┐
              │   Technique Skills       │
              │ coverage, harness, PBT   │
              └──────────────────────────┘
\```

...

Example: Web Security Testing

---
name: web-security-testing
type: domain
description: "Tests web applications and APIs for the vulnerability classes that matter, from injection and access control to session handling. Covers proxy setup, request tampering, and triaging what a scanner reports. Use when auditing a web app or HTTP API, testing an authentication or session flow, or working through a scanner finding on a live target."
---

# Web Security Testing

...

## Quick Reference

| Scenario | Recommended Approach | Skill |
|----------|---------------------|-------|
| Automated scanning | Nuclei templates | **nuclei** |
| API fuzzing | API-specific tools | **api-fuzzing** |
| Code review | Semgrep rules | **semgrep** |

## Related Skills

### Tool Skills

| Skill | Primary Use in Web Security |
|-------|----------------------------|
| **semgrep** | Find OWASP Top 10 patterns in code |
| **sqlmap** | Automated SQL injection testing |
| **nuclei** | Template-based vulnerability scanning |

### Technique Skills

| Skill | When to Apply |
|-------|---------------|
| **fuzz-harness-writing** | Create harnesses for web parsers |
| **property-based-testing** | Test input validation logic |

...

Notes

  • Domain skills often need more background/theory than tool skills

  • Include vulnerability patterns specific to the domain

  • ALWAYS link to tool skills that implement methodology steps

  • ALWAYS link to technique skills that apply to the domain

  • Include Quick Reference table mapping scenarios to skills

  • Include Skill Dependency Map showing relationships

  • Include Testing Workflow showing how skills fit together

  • Keep under 500 lines - split into supporting files if needed

  • Fetch non-video external resources with WebFetch, extract key insights

  • For videos (YouTube, Vimeo): include title/URL only, do not fetch

Requirements and compatibility

Written for: Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Names Claude Code tools, Needs Python

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Trail of Bits
Publisher
Trail of Bits (Official)
Source
trailofbits/skills · plugins/testing-handbook-skills/skills/testing-handbook-generator · commit e4dd0bb
Licence
Creative Commons Attribution-ShareAlike 4.0 International (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Trail of Bits or Trail of Bits.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download testing-handbook-generator.zip