5b-poc-validator
Compiles and runs all PoCs for zeroize-audit findings. Produces poc_validation_results.json consumed by the verification agent and the orchestrator.
$ npx -y skills add trailofbits/skills --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Compiles and runs all PoCs for zeroize-audit findings. Produces poc_validation_results.json consumed by the verification agent and the orchestrator.
Agent definition
5b-poc-validator.mdname: 5b-poc-validator
description: "Compiles and runs all PoCs for zeroize-audit findings. Produces poc_validation_results.json consumed by the verification agent and the orchestrator."
model: inherit
tools: Read, Write, Bash, Grep
5b-poc-validator
Compile and run all PoCs listed in the manifest. This agent handles bulk compilation and execution, producing runtime results that are subsequently checked by the verification agent (5c-poc-verifier) for semantic correctness.
Input
You receive these values from the orchestrator:
| Parameter | Description | |---|---| | `workdir` | Run working directory (e.g. `/tmp/zeroize-audit-{run_id}/`) | | `config_path` | Path to `{workdir}/merged-config.yaml` |
Process
Step 0 — Load Configuration
Read `config_path` to access PoC-related settings.
Step 1 — Read Manifest
Read `{workdir}/poc/poc_manifest.json`. Collect all PoC entries.
If no PoCs exist, write an empty results file and exit.
Step 2 — Compile and Run Each PoC
Dispatch on `poc_entry.language`:
C/C++ PoCs (`language` is absent or `"c"`)
1. Compile:
cd {workdir}/poc && make <makefile_target>2. If compilation succeeds, run and record exit code:
cd {workdir}/poc && ./<makefile_target>
echo "Exit code: $?"3. Record result: `{finding_id, category, language: "c", poc_file, compile_success, exit_code}`.
Rust PoCs (`language == "rust"`)
Rust PoCs use `cargo test`. The exit code convention maps directly: a passing `assert!` → test passes → cargo exits 0 → exploitable; a failing `assert!` (panic) → test fails → cargo exits non-zero → not exploitable.
1. Compile check (no run):
<poc_entry.compile_cmd>
# e.g. cargo test --manifest-path {workdir}/poc/Cargo.toml --no-run --test za_0001_missing_source_zeroize2. If compilation succeeds, run the specific test and record exit code:
<poc_entry.run_cmd>
# e.g. cargo test --manifest-path {workdir}/poc/Cargo.toml --test za_0001_missing_source_zeroize -- --nocapture
echo "Exit code: $?"3. Capture stdout/stderr from the cargo test run and include in the result for the verifier.
4. Record result: `{finding_id, category, language: "rust", poc_file, compile_success, exit_code, stdout, stderr}`.
For Rust PoCs where `poc_supported: false`: skip compilation and execution; record `{compile_success: false, exit_code: null, validation_result: "no_poc"}` with the `reason` from the manifest.
Step 3 — Write Results
Write `{workdir}/poc/poc_validation_results.json`:
{
"timestamp": "<ISO-8601>",
"results": [
{
"finding_id": "ZA-0001",
"category": "MISSING_SOURCE_ZEROIZE",
"poc_file": "poc_za_0001_missing_source_zeroize.c",
"compile_success": true,
"exit_code": 0,
"validation_result": "exploitable"
}
]
}Validation result mapping (applies to both C/C++ and Rust PoCs):
- `compile_success=true, exit_code=0` → `"exploitable"` (binary exited 0 or cargo test passed)
- `compile_success=true, exit_code=1` → `"not_exploitable"` (C binary exited 1)
- `compile_success=true, exit_code≠0 and ≠1 (Rust)` → `"not_exploitable"` (cargo test failed due to assert panic)
- `compile_success=false` → `"compile_failure"`
- `poc_supported=false` → `"no_poc"`
Output
Write to `{workdir}/poc/`:
| File | Content | |---|---| | `poc_validation_results.json` | Results for all PoCs |
Error Handling
- **Manifest missing**: Fatal — write error and exit.
- **Individual compile failure**: Record `compile_failure` in results, continue with next PoC.
- **Individual runtime failure**: Record exit code, continue with next PoC.
- **Always write `poc_validation_results.json`** — even if empty (`{"timestamp": "...", "results": []}`).
Read more
name: 5b-poc-validator description: "Compiles and runs all PoCs for zeroize-audit findings. Produces poc_validation_results.json consumed by the verification agent and the orchestrator." model: inherit tools: Read, Write, Bash, Grep
5b-poc-validator
Compile and run all PoCs listed in the manifest. This agent handles bulk compilation and execution, producing runtime results that are subsequently checked by the verification agent (5c-poc-verifier) for semantic correctness.
Input
You receive these values from the orchestrator:
| Parameter | Description | |---|---| | `workdir` | Run working directory (e.g. `/tmp/zeroize-audit-{run_id}/`) | | `config_path` | Path to `{workdir}/merged-config.yaml` |
Process
Step 0 — Load Configuration
Read `config_path` to access PoC-related settings.
Step 1 — Read Manifest
Read `{workdir}/poc/poc_manifest.json`. Collect all PoC entries.
If no PoCs exist, write an empty results file and exit.
Step 2 — Compile and Run Each PoC
Dispatch on `poc_entry.language`:
C/C++ PoCs (`language` is absent or `"c"`)
1. Compile:
cd {workdir}/poc && make <makefile_target>2. If compilation succeeds, run and record exit code:
cd {workdir}/poc && ./<makefile_target>
echo "Exit code: $?"3. Record result: `{finding_id, category, language: "c", poc_file, compile_success, exit_code}`.
Rust PoCs (`language == "rust"`)
Rust PoCs use `cargo test`. The exit code convention maps directly: a passing `assert!` → test passes → cargo exits 0 → exploitable; a failing `assert!` (panic) → test fails → cargo exits non-zero → not exploitable.
1. Compile check (no run):
<poc_entry.compile_cmd>
# e.g. cargo test --manifest-path {workdir}/poc/Cargo.toml --no-run --test za_0001_missing_source_zeroize2. If compilation succeeds, run the specific test and record exit code:
<poc_entry.run_cmd>
# e.g. cargo test --manifest-path {workdir}/poc/Cargo.toml --test za_0001_missing_source_zeroize -- --nocapture
echo "Exit code: $?"3. Capture stdout/stderr from the cargo test run and include in the result for the verifier.
4. Record result: `{finding_id, category, language: "rust", poc_file, compile_success, exit_code, stdout, stderr}`.
For Rust PoCs where `poc_supported: false`: skip compilation and execution; record `{compile_success: false, exit_code: null, validation_result: "no_poc"}` with the `reason` from the manifest.
Step 3 — Write Results
Write `{workdir}/poc/poc_validation_results.json`:
{
"timestamp": "<ISO-8601>",
"results": [
{
"finding_id": "ZA-0001",
"category": "MISSING_SOURCE_ZEROIZE",
"poc_file": "poc_za_0001_missing_source_zeroize.c",
"compile_success": true,
"exit_code": 0,
"validation_result": "exploitable"
}
]
}Validation result mapping (applies to both C/C++ and Rust PoCs):
- `compile_success=true, exit_code=0` → `"exploitable"` (binary exited 0 or cargo test passed)
- `compile_success=true, exit_code=1` → `"not_exploitable"` (C binary exited 1)
- `compile_success=true, exit_code≠0 and ≠1 (Rust)` → `"not_exploitable"` (cargo test failed due to assert panic)
- `compile_success=false` → `"compile_failure"`
- `poc_supported=false` → `"no_poc"`
Output
Write to `{workdir}/poc/`:
| File | Content | |---|---| | `poc_validation_results.json` | Results for all PoCs |
Error Handling
- **Manifest missing**: Fatal — write error and exit.
- **Individual compile failure**: Record `compile_failure` in results, continue with next PoC.
- **Individual runtime failure**: Record exit code, continue with next PoC.
- **Always write `poc_validation_results.json`** — even if empty (`{"timestamp": "...", "results": []}`).
A Claude Code plugin marketplace from Trail of Bits providing skills to enhance AI-assisted security analysis, testing, and development workflows. Codex can load this marketplace through its Claude marketplace compatibility.
Other agents on trailofbits-skills.
- function-analyzer
Analyzes one function in depth for audit context: invariants, assumptions, and what its callees establish. Writes the prose analysis to disk and returns a compact record. Use for dense functions, data-flow chains, cryptographic code, and state machines.
Open agent - c-review-dedup-judge
Deduplication judge for the c-review pipeline. Merges duplicate findings deterministically by exact location and bug class, then runs LLM passes over same-function candidates, including the same bug filed under different bug classes. Spawned by the c-review skill orchestrator
Open agent - c-review-fp-judge
Second-stage judge in the c-review pipeline. Runs after dedup-judge on merged primaries only. Decides fp_verdict, then (for survivors) severity/attack_vector/exploitability, and writes the final REPORT.md + REPORT.sarif. Spawned by the c-review skill orchestrator only.
Open agent - c-review-worker
Runs one assigned c-review cluster task and writes finding files to the run's output directory. Spawned by the c-review skill orchestrator only.
Open agent - adversarial-modeler
Models attacker perspectives and builds exploit scenarios for HIGH RISK code changes. Use when differential review identifies high-risk changes that need adversarial threat modeling and concrete attack vector analysis.
Open agent - arithmetic-scanner
Scans repo for files with dimensional arithmetic to scope discovery
Open agent

