From penetration-tester
Composes exec-readable summary from findings JSONL and OWASP coverage report. Computes risk score, rolls up findings, names top-3 remediation priorities, produces 1-2 page markdown for C-level/board audience.
How this skill is triggered — by the user, by Claude, or both
Slash command
/penetration-tester:generating-executive-summaryThis skill is limited to the following tools:
These tools are removed from Claude's available pool while this skill is active:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The vulnerability report is comprehensive — every finding, full
The vulnerability report is comprehensive — every finding, full detail, every reference. The C-level reader doesn't open it. They ask their security lead "what should I tell the board?" The security lead needs a one-page answer.
That one-page answer is the executive summary. It states the engagement's bottom line:
The summary doesn't omit anything important; it just compresses. The vulnerability report remains the deep artifact for anyone who needs the technical detail.
This skill consumes the enriched findings JSONL (after OWASP mapping) + the OWASP coverage report + the ROE, computes the risk score, picks the top remediation priorities deterministically, and renders the document.
| Finding | Severity | Threshold | Affected control |
|---|---|---|---|
| Input findings file missing | CRITICAL | Source JSONL doesn't exist | (operational) |
| OWASP coverage report missing | HIGH | Coverage referenced but not present | (operational) |
| ROE missing | MEDIUM | Can still generate summary but lacks scope/authz context | (operational) |
| Exec summary written cleanly | INFO | Confirmation | (informational) |
| Risk score >75 (high engagement risk) | HIGH | Computed risk score elevated | (advisory) |
| Risk score >90 (critical engagement risk) | CRITICAL | Engagement exposed material risk; needs urgent action | (advisory) |
The single risk score is the headline number on the exec summary. The composition is deterministic and documented:
risk = clamp(0, 100,
20 * count(CRITICAL)
+ 10 * count(HIGH)
+ 3 * count(MEDIUM)
+ 1 * count(LOW)
+ 0 * count(INFO)
+ 5 * (count(distinct OWASP categories touched) - 5 if >5 else 0)
- 10 * 1 if engagement was authorized cleanly and in-scope (governance bonus)
)
The first five terms weight by severity. The OWASP-coverage term adds 5 points per category beyond 5 (a broader-finding engagement implies broader risk surface). The governance bonus is a -10 adjustment when ROE was clean — explicit recognition that finding problems in a well-governed engagement is HEALTHIER than finding the same problems in a chaotic engagement.
Score interpretation:
| Score | Reading |
|---|---|
| 0-25 | Low risk: clean engagement OR very narrow scope |
| 26-50 | Moderate risk: typical engagement with manageable findings |
| 51-75 | Elevated risk: significant findings, remediation planning required |
| 76-90 | High risk: material findings; executive attention warranted |
| 91-100 | Critical risk: urgent remediation required; consider treating as incident |
The skill picks top-3 priorities deterministically by:
Each priority gets:
Effort + impact are heuristic estimates based on the source
skill's category — operator can override via --priority-overrides
for cases where the heuristic is wrong.
engagement/findings/all-with-owasp.jsonl
(output of mapping-findings-to-owasp-top10) OR an explicit
--source FILEengagement/reports/owasp-coverage.md
(referenced; optional)engagement/roe.yaml (referenced for scope summary)ls engagements/acme-2026-q2/findings/all-with-owasp.jsonl
ls engagements/acme-2026-q2/reports/owasp-coverage.md
ls engagements/acme-2026-q2/roe.yaml
All three should exist for a complete summary. The skill works without the coverage report or ROE but the summary is less complete.
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/
Options:
Usage: exec_summary.py PATH [OPTIONS]
Options:
--source FILE Findings JSONL (default: PATH/findings/all-with-owasp.jsonl)
--coverage FILE OWASP coverage report (default: PATH/reports/owasp-coverage.md)
--roe FILE ROE (default: PATH/roe.yaml)
--summary-output FILE Output path (default: PATH/reports/executive-summary.md)
--output FILE Operational findings output
--format FMT json | jsonl | markdown (default: markdown)
--min-severity SEV default info
--priority-overrides FILE YAML overriding the top-3 priorities
If the score is in 76-100 range, the operator should sanity-check before delivering: did the underlying findings actually warrant the elevated reading, or did a few INFO-tagged findings get mis-categorized as HIGH?
The exec summary is intended as a standalone artifact. Deliver to the customer's exec readout meeting, along with the full vulnerability report.
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/ \
--summary-output engagements/acme-2026-q2/reports/board-summary.md
# priorities-override.yaml
- title: "Hardcoded AWS access key in source"
effort: Hours
impact: Material
rationale: This is the single highest-priority remediation regardless of count.
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/ \
--priority-overrides priorities-override.yaml
JSON / JSONL / Markdown per lib/report.py for operational
findings. PRIMARY output: the executive-summary markdown
document.
Operational Finding includes:
id — exec::<issue>severity — variescategory — executive-summarysummary — what was generatedevidence — risk score, finding count, top priorities, output pathreferences/THEORY.md — Executive-summary writing as a
technical-communication discipline, single-number risk
scoring tradeoffs, why deterministic priority selection beats
human-curated for reproducibility, how the score interpretation
bands were chosen, comparison with CVSS / DREAD / STRIDE risk
modelsreferences/PLAYBOOK.md — Per-audience customizations (board,
C-suite, security leadership, customer auditor), summary length
guidelines, common rewrite patterns, integration with the
composing + mapping skills, post-delivery follow-up cadencenpx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin penetration-testerPenetration test and red team report writing methodology covering executive summaries, technical finding format, CVSS/OWASP scoring, evidence hygiene, and deliverable formats.
Provides a structured report template for external red-team engagements with 6-section finding format (Subject, Observations, Description, Impact, Recommendation, PoC) and severity/status disciplines.
Reads findings JSONL files from security scan skills, deduplicates by fingerprint, groups by severity, and composes a deliverable-grade markdown vulnerability report with per-finding sections and summary table.