ワンクリックで
audit-extractor
// 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)
// 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)
Write Solidity integration tests for EigenLayer contracts. Use when the user asks to write integration tests, test user flows, test cross-contract interactions, or test upgrade scenarios. Follows project conventions with User/AVS actors and numbered action steps.
Format and lint Solidity interface files following EigenLayer conventions. Use when the user asks to format an interface, add documentation to an interface, or create a new interface. Ensures proper organization with Errors/Events/Types sub-interfaces.
Write Solidity unit tests for EigenLayer contracts. Use when the user asks to write tests, add test coverage, create unit tests, or test a function. Follows project conventions with per-function test contracts and mock dependencies.
| name | audit-extractor |
| description | 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) |
| allowed-tools | Read, Write |
Extract findings from PDF security audit reports and convert them to a structured markdown checklist for tracking remediation.
This skill processes PDF audit reports (from firms like Certora, Sigma Prime, Cantina, etc.) and extracts:
Use the Read tool to read the PDF file. Claude can natively read and understand PDF documents:
Read the PDF file at: <pdf_path>
After reading the PDF, manually extract findings by looking for:
Summary/Findings Table - Usually contains:
Detailed Finding Sections - Usually organized by PR or category, containing:
Severity Information - Look for:
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]
---
Use the Write tool to save the markdown file:
audits/[Audit-Name]-Findings.md[ ] for unresolved items (Pending, Awaiting Fix, Partially fixed)[x] for resolved items (Fixed, Acknowledged, Disregarded)Audit reports are typically stored in: audits/
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]