Skip to content
Back to skills

Generating Executive Summary

ASecurity

Compose an exec-readable summary from a unified findings JSONL plus the OWASP coverage report. Computes a single engagement risk score (0-100, severity-weighted with OWASP-breadth and governance terms), rolls up findings into headline counts, names the top-3 remediation priorities with effort + impact estimates, and produces a 1-2 page markdown document for a C-level or board audience. Elides technical detail; the vulnerability report is the deep document. Use when: closing an engagement, pre...

  • 2,719 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 21, 2026
ai-agentspythongobashawssecurity

Works with

  • claude code

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill generating-executive-summary --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Generating Executive Summary?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Generating Executive Summary
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jeremylongshore-generating-executive-summary-5b484bc9/badge)](https://www.skillsdirectory.com/skills/jeremylongshore-generating-executive-summary-5b484bc9)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: generating-executive-summary
description: |
  Compose an exec-readable summary from a unified findings JSONL
  plus the OWASP coverage report. Computes a single engagement
  risk score (0-100, severity-weighted with OWASP-breadth and
  governance terms), rolls up findings into headline counts, names
  the top-3 remediation priorities with effort + impact estimates,
  and produces a 1-2 page markdown document for a C-level or board
  audience. Elides technical detail; the vulnerability report is
  the deep document.
  Use when: closing an engagement, preparing the exec-readout
  meeting, packaging for board review, or producing a one-page
  narrative for auditor / insurer / board.
  Threshold: input findings missing produces CRITICAL operational
  finding; otherwise the deliverable is the document itself.
  Trigger with: "generate exec summary", "executive summary",
  "C-level readout", "board pentest summary".
allowed-tools:
  - Read
  - Write
  - Bash(python3:*)
  - Glob
disallowed-tools:
  - Bash(rm:*)
  - Bash(curl:*)
  - Bash(wget:*)
  - Write(.env)
  - Edit(.env)
version: 3.30.0
author: Jeremy Longshore <jeremy@intentsolutions.io>
license: MIT
compatibility: Designed for Claude Code
tags:
  - security
  - reporting
  - executive-summary
  - risk-score
  - pentest
---

# Generating Executive Summary

## Overview

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:

- A single risk score (0-100)
- Headline counts by severity
- Top-3 remediation priorities, each with rough effort + impact
- OWASP Top 10 coverage (where the work landed)
- Engagement scope and authorization summary (what was tested,
  under what authority, in what window)
- Next steps the customer's organization should take

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.

## When the skill produces findings

| 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) |

## Risk score (0-100) composition

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 |

## Top-3 remediation priorities

The skill picks top-3 priorities deterministically by:

1. Severity (CRITICAL > HIGH > MEDIUM > LOW)
2. Reachability — findings affecting many targets weight higher
3. Tie-breaker: alphabetical by title for stable output

Each priority gets:

- A one-line headline
- Estimated effort (Hours / Days / Weeks)
- Estimated impact (Limited / Significant / Material)
- Pointer to the corresponding finding section in the
  vulnerability report

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.

## Prerequisites

- Python 3.9+
- Findings JSONL at `engagement/findings/all-with-owasp.jsonl`
  (output of `mapping-findings-to-owasp-top10`) OR an explicit
  `--source FILE`
- OWASP coverage report at `engagement/reports/owasp-coverage.md`
  (referenced; optional)
- ROE at `engagement/roe.yaml` (referenced for scope summary)

## Instructions

### Step 1 — Verify the inputs are present

```bash
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.

### Step 2 — Generate the summary

```bash
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
```

### Step 3 — Review the risk score

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?

### Step 4 — Hand off

The exec summary is intended as a standalone artifact. Deliver to
the customer's exec readout meeting, along with the full
vulnerability report.

## Examples

### Example 1 — End-of-engagement summary

```bash
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/
```

### Example 2 — Board-ready summary (force-includes governance section)

```bash
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/ \
    --summary-output engagements/acme-2026-q2/reports/board-summary.md
```

### Example 3 — Override priorities

```yaml
# 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.
```

```bash
python3 ./scripts/exec_summary.py engagements/acme-2026-q2/ \
    --priority-overrides priorities-override.yaml
```

## Output

JSON / JSONL / Markdown per `lib/report.py` for operational
findings. PRIMARY output: the executive-summary markdown
document.

Operational Finding includes:

- `id` — `exec::<issue>`
- `severity` — varies
- `category` — `executive-summary`
- `summary` — what was generated
- `evidence` — risk score, finding count, top priorities, output path

## Error Handling

- **No findings source** → CRITICAL operational finding, exits 1.
- **Source JSONL unparseable** → HIGH, exits 1.
- **No findings at all** → emits LOW operational finding noting
  the empty engagement; the document is generated but says so.
- **Coverage report missing** → MEDIUM, document is generated
  without the coverage-narrative section.
- **ROE missing** → MEDIUM, document is generated without the
  scope/authorization section.

## Resources

- `references/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
  models
- `references/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 cadence

Files in this skill

  • SKILL.md8.7 KB
  • references/PLAYBOOK.md6.8 KB
  • references/THEORY.md7.4 KB
  • scripts/exec_summary.py17.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.