Audit Extractor
Extract findings from PDF security audit reports and convert them to a structured markdown checklist for tracking remediation.
Overview
This skill processes PDF audit reports (from firms like Certora, Sigma Prime, Cantina, etc.) and extracts:
- Finding ID (e.g., C-01, H-01, M-01, L-01, I-01)
- Title/Description
- Severity (Critical, High, Medium, Low, Informational)
- Status (Fixed, Partially fixed, Awaiting Fix, Acknowledged, Disregarded, Pending)
- Impact and Likelihood (when available)
- Detailed descriptions and recommendations
How to Extract Findings
Step 1: Read the PDF directly
Use the Read tool to read the PDF file. Claude can natively read and understand PDF documents:
Read the PDF file at: <pdf_path>
Step 2: Parse the audit content
After reading the PDF, manually extract findings by looking for:
Summary/Findings Table - Usually contains:
- Finding IDs (patterns like C-01, H-01, M-01, L-01, I-01)
- Titles
- Severity levels
- Status
Detailed Finding Sections - Usually organized by PR or category, containing:
- Full descriptions
- Code snippets
- Exploit scenarios
- Recommendations
- Customer response / Fix review status
Severity Information - Look for:
- Impact (High, Medium, Low)
- Likelihood (High, Medium, Low)
Step 3: Generate the markdown output
Create a markdown file with the following structure:
# Audit Findings: [Audit Name]
**Auditor:** [Auditor Name]
**Date:** [Date]
**Status:** [Draft/Final]
**Total findings:** [Count]
## Summary
| Severity | Discovered | Confirmed | Fixed |
|----------|------------|-----------|-------|
| Critical | X | | |
| High | X | | |
| Medium | X | | |
| Low | X | | |
| Informational | X | | |
| **Total** | **X** | | |
## Action Required (X items pending)
- [ ] **M-01** (Medium): [Title]
- [ ] **L-01** (Low): [Title]
---
## All Findings
### ([PR/Category Name])
#### [ID]. [Title]
| Severity | Impact | Likelihood | Status |
|----------|--------|------------|--------|
| [Severity] | [Impact] | [Likelihood] | [Status] |
**Files:** `[filename.sol]`
**Description:** [Full description]
**Recommendation:** [Recommendation text]
---
Step 4: Save the output
Use the Write tool to save the markdown file:
- Save to
audits/[Audit-Name]-Findings.md
Output Format Guidelines
Severity Levels
- Critical - Direct loss of funds or complete protocol compromise
- High - Significant impact on protocol security or functionality
- Medium - Moderate impact, potential for exploitation under certain conditions
- Low - Minor issues, best practice violations
- Informational - Code quality, gas optimizations, documentation
Status Values
- Fixed - Issue has been resolved
- Partially fixed - Issue has been partially addressed
- Awaiting Fix - Issue acknowledged, fix pending
- Acknowledged - Issue acknowledged, may not be fixed
- Pending - Awaiting customer response
- Disregarded - Issue will not be fixed (by design)
Checklist Rules
- Use
[ ] for unresolved items (Pending, Awaiting Fix, Partially fixed)
- Use
[x] for resolved items (Fixed, Acknowledged, Disregarded)
Audit Files Location
Audit reports are typically stored in: audits/
Example Extraction
Given a PDF with findings like:
M-01 MigrateSlashers may assign incompatible slasher | Medium | Pending
L-01 Instant slasher setting leaves stale field | Low | Pending
I-01 getSlasher is implemented twice | Informational | Pending
Generate:
# Audit Findings: EigenLayer - Slashing UX Improvements
**Auditor:** Certora
**Date:** December 2025
**Total findings:** 3
## Summary
| Severity | Count |
|----------|-------|
| Medium | 1 |
| Low | 1 |
| Informational | 1 |
## Action Required (2 items)
- [ ] **M-01** (Medium): MigrateSlashers may assign incompatible slasher
- [ ] **L-01** (Low): Instant slasher setting leaves stale field
## All Findings
### Medium (1)
#### M-01. MigrateSlashers may assign an incompatible slasher address
| Severity | Impact | Likelihood | Status |
|----------|--------|------------|--------|
| Medium | High | Low | Pending |
**Description:** [Full description from PDF]
**Recommendation:** [Recommendation from PDF]
---
### Low (1)
#### L-01. Instant slasher setting leaves stale slasher field in storage
| Severity | Impact | Likelihood | Status |
|----------|--------|------------|--------|
| Low | Low | Low | Pending |
**Description:** [Full description from PDF]
**Recommendation:** [Recommendation from PDF]
---
### Informational (1)
#### I-01. getSlasher is implemented twice
| Severity | Status |
|----------|--------|
| Informational | Pending |
**Description:** [Full description from PDF]
**Recommendation:** [Recommendation from PDF]
Troubleshooting
PDF won't read
- Ensure the file path is correct and the file exists
- Check if the PDF is password protected (not supported)
Missing findings
- Some PDFs have findings spread across multiple sections
- Check the Table of Contents for finding locations
- Look for "Detailed Findings" or similar sections
Inconsistent formatting
- Different audit firms use different formats
- Adapt the markdown structure to match the source format
- Preserve all relevant information even if structure differs
1---2name: audit-extractor3description: Extract findings from PDF audit reports and convert them to a markdown checklist. Use when the user asks to process an audit report, extract audit findings, or create an audit action items list. (project)4---56# Audit Extractor78Extract findings from PDF security audit reports and convert them to a structured markdown checklist for tracking remediation.910## Overview1112This skill processes PDF audit reports (from firms like Certora, Sigma Prime, Cantina, etc.) and extracts:13- Finding ID (e.g., C-01, H-01, M-01, L-01, I-01)14- Title/Description15- Severity (Critical, High, Medium, Low, Informational)16- Status (Fixed, Partially fixed, Awaiting Fix, Acknowledged, Disregarded, Pending)17- Impact and Likelihood (when available)18- Detailed descriptions and recommendations1920## How to Extract Findings2122### Step 1: Read the PDF directly2324Use the Read tool to read the PDF file. Claude can natively read and understand PDF documents:2526```27Read the PDF file at: <pdf_path>28```2930### Step 2: Parse the audit content3132After reading the PDF, manually extract findings by looking for:33341. **Summary/Findings Table** - Usually contains:35 - Finding IDs (patterns like C-01, H-01, M-01, L-01, I-01)36 - Titles37 - Severity levels38 - Status39402. **Detailed Finding Sections** - Usually organized by PR or category, containing:41 - Full descriptions42 - Code snippets43 - Exploit scenarios44 - Recommendations45 - Customer response / Fix review status46473. **Severity Information** - Look for:48 - Impact (High, Medium, Low)49 - Likelihood (High, Medium, Low)5051### Step 3: Generate the markdown output5253Create a markdown file with the following structure:5455```markdown56# Audit Findings: [Audit Name]5758**Auditor:** [Auditor Name]59**Date:** [Date]60**Status:** [Draft/Final]61**Total findings:** [Count]6263## Summary6465| Severity | Discovered | Confirmed | Fixed |66|----------|------------|-----------|-------|67| Critical | X | | |68| High | X | | |69| Medium | X | | |70| Low | X | | |71| Informational | X | | |72| **Total** | **X** | | |7374## Action Required (X items pending)7576- [ ] **M-01** (Medium): [Title]77- [ ] **L-01** (Low): [Title]7879---8081## All Findings8283### ([PR/Category Name])8485#### [ID]. [Title]86| Severity | Impact | Likelihood | Status |87|----------|--------|------------|--------|88| [Severity] | [Impact] | [Likelihood] | [Status] |8990**Files:** `[filename.sol]`9192**Description:** [Full description]9394**Recommendation:** [Recommendation text]9596---97```9899### Step 4: Save the output100101Use the Write tool to save the markdown file:102- Save to `audits/[Audit-Name]-Findings.md`103104## Output Format Guidelines105106### Severity Levels107- **Critical** - Direct loss of funds or complete protocol compromise108- **High** - Significant impact on protocol security or functionality109- **Medium** - Moderate impact, potential for exploitation under certain conditions110- **Low** - Minor issues, best practice violations111- **Informational** - Code quality, gas optimizations, documentation112113### Status Values114- **Fixed** - Issue has been resolved115- **Partially fixed** - Issue has been partially addressed116- **Awaiting Fix** - Issue acknowledged, fix pending117- **Acknowledged** - Issue acknowledged, may not be fixed118- **Pending** - Awaiting customer response119- **Disregarded** - Issue will not be fixed (by design)120121### Checklist Rules122- Use `[ ]` for unresolved items (Pending, Awaiting Fix, Partially fixed)123- Use `[x]` for resolved items (Fixed, Acknowledged, Disregarded)124125## Audit Files Location126127Audit reports are typically stored in: `audits/`128129## Example Extraction130131Given a PDF with findings like:132133```134M-01 MigrateSlashers may assign incompatible slasher | Medium | Pending135L-01 Instant slasher setting leaves stale field | Low | Pending136I-01 getSlasher is implemented twice | Informational | Pending137```138139Generate:140141```markdown142# Audit Findings: EigenLayer - Slashing UX Improvements143144**Auditor:** Certora145**Date:** December 2025146**Total findings:** 3147148## Summary149150| Severity | Count |151|----------|-------|152| Medium | 1 |153| Low | 1 |154| Informational | 1 |155156## Action Required (2 items)157158- [ ] **M-01** (Medium): MigrateSlashers may assign incompatible slasher159- [ ] **L-01** (Low): Instant slasher setting leaves stale field160161## All Findings162163### Medium (1)164165#### M-01. MigrateSlashers may assign an incompatible slasher address166| Severity | Impact | Likelihood | Status |167|----------|--------|------------|--------|168| Medium | High | Low | Pending |169170**Description:** [Full description from PDF]171172**Recommendation:** [Recommendation from PDF]173174---175176### Low (1)177178#### L-01. Instant slasher setting leaves stale slasher field in storage179| Severity | Impact | Likelihood | Status |180|----------|--------|------------|--------|181| Low | Low | Low | Pending |182183**Description:** [Full description from PDF]184185**Recommendation:** [Recommendation from PDF]186187---188189### Informational (1)190191#### I-01. getSlasher is implemented twice192| Severity | Status |193|----------|--------|194| Informational | Pending |195196**Description:** [Full description from PDF]197198**Recommendation:** [Recommendation from PDF]199```200201## Troubleshooting202203### PDF won't read204- Ensure the file path is correct and the file exists205- Check if the PDF is password protected (not supported)206207### Missing findings208- Some PDFs have findings spread across multiple sections209- Check the Table of Contents for finding locations210- Look for "Detailed Findings" or similar sections211212### Inconsistent formatting213- Different audit firms use different formats214- Adapt the markdown structure to match the source format215- Preserve all relevant information even if structure differs