Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Data breach incident response with ENISA severity scoring, notification timelines, and compliance tracking. Use for breach assessment and response.
.claude/skills/borghei-data-breach-response/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 235% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 158% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-07 | ✓→✗ | ▼ Worse | 101% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 152% | 0% |
> ⚠️ EXPERIMENTAL — This skill is provided for educational and informational purposes only. It does NOT constitute legal advice. All responsibility for usage rests with the user. Consult qualified legal professionals before acting on any output.
Incident response and legal compliance for personal data breaches under GDPR Art. 33/34, CCPA, HIPAA, NIS2, PCI DSS, and other regulations. Calculates breach severity, tracks notification deadlines, and manages response timelines.
Before assessing the breach, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the assessment.
Calculates ENISA breach severity score from breach parameters. Determines notification obligations based on severity verdict.
bash# Calculate severity from parameters python scripts/breach_severity_calculator.py \ --dpc 3 --ei 0.75 \ --confidentiality 0.5 --integrity 0.25 --availability 0 \ --malicious # JSON output python scripts/breach_severity_calculator.py \ --dpc 2 --ei 0.5 --confidentiality 0.5 --json # With T0 timestamp for countdown python scripts/breach_severity_calculator.py \ --dpc 3 --ei 1.0 --confidentiality 0.5 \ --t0 "2026-04-10T08:00:00" --json # Generate input template python scripts/breach_severity_calculator.py --template
Output includes:
Tracks breach response timeline from T0 (moment of awareness). Records events, monitors deadlines, and generates status dashboards.
bash# Initialize a new breach timeline python scripts/breach_timeline_tracker.py init \ --breach-id "BR-2026-001" --t0 "2026-04-10T08:00:00" \ --description "Unauthorized database access" \ --output breach_timeline.json # Record an event python scripts/breach_timeline_tracker.py event \ --timeline breach_timeline.json \ --action "Containment team activated" --category containment # View status dashboard python scripts/breach_timeline_tracker.py status --timeline breach_timeline.json # Check deadlines python scripts/breach_timeline_tracker.py deadlines --timeline breach_timeline.json # JSON status output python scripts/breach_timeline_tracker.py status --timeline breach_timeline.json --json
Tracks:
references/enisa_methodology.md
Complete ENISA breach severity methodology:
references/notification_obligations.md
Multi-regulation notification requirements:
Step 1: Emergency check — is there <12h remaining on any deadline?
→ If yes, skip to Step 4 (emergency notification)
Step 2: Initialize breach timeline
→ python scripts/breach_timeline_tracker.py init --breach-id "BR-2026-001" \
--t0 "2026-04-10T08:00:00" --description "Description"
Step 3: Calculate severity
→ python scripts/breach_severity_calculator.py --dpc N --ei N \
--confidentiality N --integrity N --availability N [--malicious]
Step 4: Based on severity verdict, determine notifications
→ LOW (<2): Internal log only, no external notification
→ MEDIUM (2 to <3): Notify supervisory authority within 72h
→ HIGH (3 to <4): Notify SA + individual data subjects
→ VERY HIGH (>=4): Notify SA + data subjects + consider public notice
Step 5: Execute containment and record events
→ python scripts/breach_timeline_tracker.py event --timeline breach.json \
--action "Action taken" --category containment
Step 6: Monitor deadlines continuously
→ python scripts/breach_timeline_tracker.py deadlines --timeline breach.json
Step 7: Complete notification obligations and documentStep 1: Calculate severity immediately
→ python scripts/breach_severity_calculator.py --dpc N --ei N \
--confidentiality N --t0 "original-t0" --json
Step 2: If MEDIUM or higher, prepare phased notification
→ Art. 33(4) allows phased notification when full information unavailable
→ Initial notification: what is known + promise of update
→ Supplementary notification: full details when available
Step 3: File initial SA notification before deadline expires
Step 4: Initialize timeline for ongoing tracking
→ Continue gathering information for supplementary notification
Step 5: Document emergency timeline and decisionsStep 1: Processor becomes aware of breach
→ T0 for processor = moment of awareness
Step 2: Processor must notify controller "without undue delay"
→ Check DPA for specific contractual deadline (24h/48h common)
Step 3: Controller's T0 starts when controller becomes aware
→ Controller's 72h clock starts at this point
Step 4: Controller assesses severity independently
→ python scripts/breach_severity_calculator.py (controller's assessment)
Step 5: Controller makes notification decisions
→ Processor provides information; controller decides on SA/subject notificationSE = (DPC x EI) + CB| Component | Range | Description | |-----------|-------|-------------| | DPC | 1-4 | Data Processing Context — nature and sensitivity of data | | EI | 0.25-1.0 | Ease of Identification — how easily individuals can be identified | | CB | -0.5 to +1.0 | Circumstances of Breach — additive factors (malicious intent, volume, loss type) |
| Score Range | Verdict | Notification Obligations | |-------------|---------|--------------------------| | <2 | LOW | Internal log only. No SA or subject notification required | | 2 to <3 | MEDIUM | Notify supervisory authority within 72h (Art. 33) | | 3 to <4 | HIGH | Notify SA within 72h + notify individual data subjects (Art. 34) | | >=4 | VERY HIGH | Notify SA + data subjects + consider public notice; crisis management |
Quick reference for notification obligations per regulation and severity.
| Regulation | Authority Notification | Individual Notification | Trigger | |------------|----------------------|------------------------|---------| | GDPR Art. 33 | SA within 72h | N/A | Unless unlikely to result in risk to rights/freedoms | | GDPR Art. 34 | N/A | Without undue delay | When likely to result in high risk | | CCPA | State AG | Affected consumers | Unencrypted personal information compromised | | HIPAA | HHS within 60 days | Affected individuals | Unsecured PHI; >500: notify media | | PCI DSS | Card brands within 24h | Cardholders (via issuer) | Cardholder data compromised | | NIS2 Art. 23 | CSIRT within 24h (early warning), 72h (notification) | N/A | Significant incident | | AI Act Art. 62 | Market surveillance within 15 days | N/A | Serious incident involving AI system |
| Obligation | Controller | Processor | |------------|-----------|-----------| | Notify supervisory authority | Yes (Art. 33) | No (notify controller only) | | Notify data subjects | Yes (Art. 34) | No | | Document all breaches | Yes (Art. 33(5)) | Yes (assist controller) | | Notify controller | N/A | Yes, without undue delay (Art. 33(2)) | | Conduct severity assessment | Yes | Assist (provide information) | | Timeline starts (T0) | When controller becomes aware | When processor becomes aware |
| Problem | Possible Cause | Resolution | |---------|---------------|------------| | Severity score is borderline between MEDIUM and HIGH | Parameters are at threshold boundaries | Score conservatively — if near 3.0, treat as HIGH and notify data subjects; document the borderline analysis | | 72-hour deadline approaching with incomplete information | Complex breach requiring ongoing investigation | Use Art. 33(4) phased notification — notify SA with available information and supplement later | | Processor discovered breach but delayed notifying controller | DPA contractual deadline may have been missed | Document the delay; assess whether processor's delay affected controller's ability to comply; review DPA terms | | Cross-border breach — unclear which SA to notify | Multi-jurisdictional processing with unclear lead SA | Notify the SA of your main establishment (one-stop-shop); if unclear, notify the SA where most affected subjects reside | | Breach involves encrypted data — unclear if notification needed | Encryption may lower severity or eliminate notification | If encryption was effective (strong algorithm, key not compromised), this may make notification unnecessary per Art. 34(3)(a); document the analysis | | AI system involved in breach — unclear additional obligations | AI Act Art. 62 may apply alongside GDPR | Assess whether AI system is high-risk under AI Act; if serious incident, notify market surveillance authority within 15 days in addition to GDPR obligations |
In Scope:
Out of Scope:
Calculates ENISA breach severity score and determines notification obligations.
| Flag | Required | Description | |------|----------|-------------| | --dpc <1-4> | Yes | Data Processing Context: 1=Simple demographic, 2=Behavioral/financial, 3=Sensitive personal, 4=Special category/highly sensitive | | --ei <0.25-1.0> | Yes | Ease of Identification: 0.25=Negligible, 0.5=Limited, 0.75=Significant, 1.0=Maximum | | --confidentiality <0/0.25/0.5> | No | Confidentiality loss score (default 0) | | --integrity <0/0.25/0.5> | No | Integrity loss score (default 0) | | --availability <0/0.25/0.5> | No | Availability loss score (default 0) | | --malicious | No | Flag for malicious intent (adds +0.5 to CB) | | --t0 <ISO datetime> | No | T0 timestamp for deadline calculation | | --template | No | Generate input template | | --json | No | Output in JSON format |
Tracks breach response timeline, events, and regulatory deadlines.
| Subcommand | Description | |------------|-------------| | init | Initialize breach timeline (--breach-id, --t0, --description required, --output optional) | | event | Record event (--timeline, --action, --category required) | | status | View status dashboard (--timeline required, --json optional) | | deadlines | Check deadline status (--timeline required, --json optional) |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 20,916 | 30,739 | +47% | 1 | 1 | 0% | 3,322 | 8,098 | +144% | 0 | 0 | — |
case-02 | fail→fail | 46,717 | 6,806 | -85% | 1 | 1 | 0% | 3,194 | 4,226 | +32% | 0 | 0 | — |
case-03 | fail→fail | 20,480 | 24,101 | +18% | 1 | 1 | 0% | 3,121 | 7,462 | +139% | 0 | 0 | — |
case-08 | pass→pass | 12,979 | 9,313 | -28% | 1 | 1 | 0% | 2,124 | 5,360 | +152% | 0 | 0 | — |
case-04 | fail→fail | 14,889 | 17,681 | +19% | 1 | 1 | 0% | 2,158 | 6,944 | +222% | 0 | 0 | — |
case-05 | pass→pass | 7,113 | 11,738 | +65% | 1 | 1 | 0% | 1,054 | 5,639 | +435% | 0 | 0 | — |
case-06 | fail→fail | 17,202 | 25,219 | +47% | 1 | 1 | 0% | 2,772 | 7,349 | +165% | 0 | 0 | — |
case-07 | pass→fail | 13,099 | 5,902 | -55% | 1 | 1 | 0% | 2,416 | 4,859 | +101% | 0 | 0 | — |
case-09 | pass→pass | 7,362 | 3,268 | -56% | 1 | 1 | 0% | 1,282 | 4,438 | +246% | 0 | 0 | — |
case-10 | fail→pass | 8,087 | 4,721 | -42% | 1 | 1 | 0% | 1,410 | 4,727 | +235% | 0 | 0 | — |
case-11 | pass→pass | 9,774 | 10,347 | +6% | 1 | 1 | 0% | 1,730 | 5,583 | +223% | 0 | 0 | — |
case-12 | pass→pass | 15,957 | 13,064 | -18% | 1 | 1 | 0% | 2,373 | 5,729 | +141% | 0 | 0 | — |
case-13 | pass→pass | 10,647 | 12,514 | +18% | 1 | 1 | 0% | 1,695 | 5,791 | +242% | 0 | 0 | — |
case-14 | pass→pass | 7,592 | 7,200 | -5% | 1 | 1 | 0% | 1,394 | 5,050 | +262% | 0 | 0 | — |
case-15 | pass→pass | 10,013 | 11,751 | +17% | 1 | 1 | 0% | 1,530 | 5,616 | +267% | 0 | 0 | — |
case-16 | pass→pass | 6,006 | 6,997 | +17% | 1 | 1 | 0% | 1,135 | 5,040 | +344% | 0 | 0 | — |
case-17 | pass→pass | 11,266 | 6,963 | -38% | 1 | 1 | 0% | 1,723 | 4,944 | +187% | 0 | 0 | — |
case-18 | pass→pass | 12,503 | 10,432 | -17% | 1 | 1 | 0% | 1,924 | 5,408 | +181% | 0 | 0 | — |
case-19 | pass→pass | 5,991 | 9,059 | +51% | 1 | 1 | 0% | 935 | 5,251 | +462% | 0 | 0 | — |
case-20 | fail→pass | 19,787 | 21,944 | +11% | 1 | 1 | 0% | 2,771 | 7,161 | +158% | 0 | 0 | — |
case-21 | fail→pass | 13,705 | 4,300 | -69% | 1 | 1 | 0% | 2,219 | 4,504 | +103% | 0 | 0 | — |
case-22 | pass→pass | 9,556 | 3,352 | -65% | 1 | 1 | 0% | 1,528 | 4,237 | +177% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.