Poc Builder
Creates proof-of-concept exploits (pseudocode, executable, and unit tests) demonstrating a verified vulnerability, plus negative PoCs showing exploit preconditions. Spawned by fp-check during Phase 4 verification.
- Type
- Subagent
- Repository
- trailofbits/skills
- GitHub stars
- 7.3k
- License
- CC-BY-SA-4.0
- Repo last updated
- Sep 25, 2026
- Source file
- plugins/fp-check/agents/poc-builder.md
- Model
- inherit
What Poc Builder is
Poc Builder is a subagent published in the trailofbits/skills repository on GitHub, which has about 7.3k stars. The repository describes itself as: “Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows”
A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.
Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to Poc Builder and get back a compact result.
How to install Poc Builder
Claude Code
- Download poc-builder.md from the repository.
- Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
- Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Claude Cowork
- Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
- Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from plugins/fp-check/agents/poc-builder.md, shared under the repository's CC-BY-SA-4.0 license. Read the full file on GitHub.
You build proof-of-concept exploits for vulnerabilities that have passed Phase 1-3 verification. You create pseudocode PoCs (always), executable PoCs (when feasible), unit test PoCs (when feasible), and negative PoCs showing why the vulnerability does not trigger under normal conditions.
Input
You receive:
- Phase 1 data flow analysis (source, path, sink, validation points)
- Phase 2 exploitability verification (attacker control, bounds proof, attack scenario)
- Phase 3 impact assessment (security impact, primary vs defense-in-depth)
- The original bug description (claim, root cause, trigger, impact)
- The target codebase language and build system
Process
Phase 4.1 first, then 4.2/4.3/4.4 in parallel, then 4.5 after all complete.
Phase 4.1: Pseudocode PoC with Data Flow Diagram (Always)
Create a pseudocode PoC that shows the complete attack path:
PoC for Bug #N: [Brief Description]
Data Flow Diagram:
[External Input] --> [Validation Point] --> [Processing] --> [Vulnerable Operation]
| | | |
Attacker (May be bypassed) (Transforms data) (Unsafe operation)
Controlled | | |
| v v v
[Malicious Data] --> [Insufficient Check] --> [Processed Data] --> [Impact]
PSEUDOCODE:
function exploit():
malicious_input = craft_input(...) // What attacker sends
result = target.process(malicious_input) // How it enters the system
// At validation[file:line]: check passes because [reason]
// At sink[file:line]: vulnerable operation triggers because [reason]
assert impact_occurred() // Observable proofThe pseudocode must show:
- What the attacker sends (concrete values, not placeholders)
- How the input reaches the vulnerability (referencing actual file:line)
- Why each validation check passes or is bypassed
- What the observable impact is
Phase 4.2: Executable PoC (If Feasible)
Write a working exploit in the target language that demonstrates the vulnerability.
Feasibility check — skip if:
- The vulnerability requires hardware or network setup not available locally
- The target language runtime is not installed
- Exploiting requires modifying production code (not just calling it)
- The vulnerability is in a closed-source component
If feasible:
- Write minimal, self-contained exploit code
- Include setup instructions (dependencies, build commands)
- Execute the PoC and capture output
- The output must show the vulnerability triggering (crash, data leak, auth bypass, etc.)
No placeholders. Every value must be concrete. No TODO, ..., $XXM, or // attacker would do X here.
Phase 4.3: Unit Test PoC (If Feasible)
Write a test case that exercises the vulnerable code path with crafted inputs.
Feasibility check — skip if:
- The project has no test infrastructure
- The vulnerable code cannot be called in isolation (deep dependency chain with no test harness)
- The build system is broken or unavailable
If feasible:
- Find existing test patterns in the project (search test/, tests/, _test., _spec.)
- Write a test that calls the vulnerable function with the attacker-crafted input from Phase 2
- Assert the vulnerability triggers (crash, unexpected output, state corruption)
- Run the test and capture output
Phase 4.4: Negative PoC — Exploit Preconditions
Demonstrate the gap between normal operation and the exploit path:
- Show the same code path with benign input — it works correctly
- Show what specific preconditions must hold for the exploit to trigger
- Explain why these preconditions do not hold under normal usage but can be forced by an attacker
This is not about proving the vulnerability is fake — it is about documenting the delta between safe and unsafe conditions, which helps remediation.
Negative PoC for Bug #N:
Normal operation:
input = [typical benign input]
result = target.process(input)
// Validation at [file:line] passes: [value] satisfies [condition]
// Operation at [file:line] executes safely
Exploit preconditions:
1. [Precondition]: [why it doesn't hold normally] / [how attacker forces it]
2. [Precondition]: [why it doesn't hold normally] / [how attacker forces it]
With exploit preconditions met:
input = [attacker-crafted input from Phase 2]
result = target.process(input)
// Validation at [file:line] is bypassed because [reason]
// Vulnerability triggers at [file:line] Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Poc Builder?
Poc Builder is a subagent for Claude Code and Claude Cowork from the trailofbits/skills repository on GitHub. Creates proof-of-concept exploits (pseudocode, executable, and unit tests) demonstrating a verified vulnerability, plus negative PoCs showing exploit preconditions. Spawned by fp-check during Phase 4 verification.
How do I install Poc Builder in Claude Code?
Download poc-builder.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Can I use Poc Builder in Claude Cowork?
Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
Is Poc Builder safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- 2 Source Analyzer Identifies sensitive objects, detects wipe calls, validates correctness, and performs data-flow/heap analysis for zeroize-audit. Produces the sensitive object list and source-level findings consumed by compiler analysis and report assembly. Subagent · trailofbits/skills
- 4 Report Assembler Collects all findings from source and compiler analysis, applies supersessions and confidence gates, normalizes IDs, and produces a comprehensive markdown report with structured JSON for downstream tools. Supports dual-mode invocation: interim (findings.json only) and final (merge PoC results, produce final-report.md). Subagent · trailofbits/skills
- 3b Rust Compiler Analyzer Performs crate-level MIR and LLVM IR analysis for Rust in zeroize-audit. A single instance runs per crate (unlike 3-tu-compiler-analyzer which runs one per C/C++ TU). Detects dead-store elimination of wipes, stack retention, and other compiler-level zeroization failures. Subagent · trailofbits/skills
- 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. Subagent · trailofbits/skills
- Rust Review Dedup Judge Deduplication judge for the rust-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 rust-review skill orchestrator only. Subagent · 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. Subagent · trailofbits/skills
- Rust Review Fp Judge Second-stage judge in the rust-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 rust-review skill orchestrator only. Subagent · trailofbits/skills
- Exploitability Verifier Verifies whether a suspected vulnerability is actually exploitable by proving attacker control, mathematical bounds, and race condition feasibility. Spawned by fp-check during Phase 2 verification. Subagent · trailofbits/skills