Agent skill

Finding Triage

by briiirussell in briiirussell/cybersecurity-skills

Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup.

MITAuto-check: notesSecurity

Install Finding Triage

skills CLI
$ npx skills add briiirussell/cybersecurity-skills --skill finding-triage -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install briiirussell/cybersecurity-skills finding-triage --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/briiirussell/cybersecurity-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/finding-triage .claude/skills/finding-triage && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
finding-triage
GitHub stars
413
Token cost
~3.1k tokens
SKILL.md length
1,207 words
Files
1
Skills in repo
25
Repo updated
First seen
Licence
MIT

At a glance

Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup.

  • Works in 6 steps: Restate the finding in your own words → Is this actually true? → Contextual severity → …
  • The user mentions triage this finding
  • SKILL.md covers Workflow, When to escalate, Output Format and Boundaries, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Finding Triage is an agent skill from briiirussell/cybersecurity-skills. Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup. Use when the user mentions 'triage this finding,' 'is this a real vulnerability,' 'mitigation plan,' 'false positive,' 'accept this risk,' 'compensating controls,' 'risk justification,' 'security ticket,' 'CVSS this,' 'should we fix this,' 'disposition,' 'sign off on,' or has a single security finding and needs to decide what to…

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Security. The repository describes itself as: Cybersecurity skills for AI coding agents (Claude Code, Cursor, Codex). The licence is MIT.

When your agent uses it

  • The user mentions triage this finding
  • Is this a real vulnerability
  • Mitigation plan
  • Accept this risk

Example prompts

  • “triage this finding,”
  • “is this a real vulnerability,”
  • “mitigation plan,”
  • “/finding-triage”

Requirements

  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Bash, WebSearch

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Restate the finding in your own words
  2. Is this actually true?
  3. Contextual severity
  4. Pick the disposition
  5. Write the disposition
  6. Validate the writeup

What it can do on your machine

Read from SKILL.md and the folder at commit c9ade03. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Bash
    • WebSearch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Finding Triage loads about 3.1k tokens when it runs. Until then it costs about 134 tokens; SKILL.md has 1,207 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~134
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Grep, Glob, Bash, WebSearch

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from briiirussell/cybersecurity-skills at commit c9ade03, republished under its MIT licence (© briiirussell). 1,207 words, ~3,064 tokens.

Download SKILL.mdSave it as .claude/skills/finding-triage/SKILL.md (or your agent's skills folder).
name
finding-triage
description
Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup. Use when the user mentions 'triage this finding,' 'is this a real vulnerability,' 'mitigation plan,' 'false positive,' 'accept this risk,' 'compensating controls,' 'risk justification,' 'security ticket,' 'CVSS this,' 'should we fix this,' 'disposition,' 'sign off on,' or has a single security finding and needs to decide what to do.
allowed-tools
Read, Grep, Glob, Bash, WebSearch

Finding Triage — Single-Finding Disposition with Defensible Justification

Every other skill in this repo generates findings. This skill closes the loop — for a single finding, walk through whether it's real, what severity it deserves in your context, and what to do about it. Output is a complete ticket-ready writeup with the right fields, the right justification, and an audit trail that survives a regulator reading it six months later.

The dispositions match owasp-audit's Three-Disposition rule: Fixed, Deferred, or Accepted Risk. False positive is a fourth — but it isn't a disposition for a real finding, it's a determination that there is no finding.

This skill works on findings from any source: SAST output, DAST scanner, dependency advisory, manual audit, threat-hunt hit, pentest report, vendor disclosure, internal red-team writeup, bug bounty submission.

Cross-references:

  • vuln-research for the technical CVE deep-dive that feeds reachability assessment here
  • owasp-audit Three-Disposition rule (the framework this implements per-finding)
  • security-comms for translating the disposition writeup into stakeholder-readable language when the finding has to leave the security context
  • Any audit skill — this consumes their findings as input

Workflow

The agent works through these steps with the user. Stop and ask clarifying questions where the user has context the finding alone doesn't reveal.

Step 1 — Restate the finding in your own words

If the finding came from a scanner, restate what's actually being claimed. Scanners produce noise; restating filters out the boilerplate.

A good restatement names:

  • What the issue is (specific weakness — CWE if applicable)
  • Where it lives (file:line, endpoint, resource ARN, host)
  • How it could be exploited (preconditions, attacker capability needed)
  • Impact if it were exploited (data loss, privilege escalation, availability)

If you can't restate it clearly, you don't understand it yet. Ask the user for context.

Step 2 — Is this actually true?

Half of automated-scanner findings are false positives by volume. The triage:

QuestionIf yesIf no
Does the vulnerable code path exist as described?ContinueFalse positive — scanner found a phantom
Is the code path reachable from any attacker-controllable input?ContinueContinue, but severity drops
Does the exploit precondition match your environment?ContinueSeverity drops or false positive
Is there a public PoC, or has anyone confirmed this in the wild?Severity stays / risesSeverity may drop
Are existing controls (WAF, auth, network segmentation) preventing exploitation?Severity drops; controls become the mitigationSeverity stays

Common false-positive patterns:

  • SAST flag on test files or dead code
  • Dependency scanner flag on package in devDependencies only — runtime-unreachable (see dependency-audit reachability column)
  • DAST flag on a path that returns 404 in your real environment but was confused by SPA routing
  • Outdated advisory — vendor silently fixed it before the CVE; your version contains the fix
  • Pattern match on code that looks vulnerable but is inside a function never invoked

Document a false-positive determination as carefully as a real finding. If a future scanner or auditor flags the same thing, the prior false-positive note saves them the work.

Step 3 — Contextual severity

The scanner's CVSS or severity rating is a starting point, not the answer. Adjust for your context.

Factors that increase severity beyond the rating:

  • Vulnerable endpoint is internet-facing, not internal
  • Authentication preconditions are easy to satisfy (open signup) in your app, even if the CVE assumes "authenticated"
  • Vulnerable data is regulated (PII, PCI cardholder data, PHI) — exploitation has reportable-incident consequences
  • Public PoC exists or active exploitation observed
  • Vulnerable component is in the critical path (every request touches it)
  • Compensating controls are missing or weak

Factors that decrease severity below the rating:

  • Vulnerable code path is unreachable in your usage (read the patch, grep for the function — see vuln-research)
  • Strong compensating controls (WAF blocks the payload pattern, network segmentation prevents reach)
  • Exploit requires preconditions that don't exist in your environment (specific OS version, specific config)
  • Authentication preconditions are hard in your app (closed signup, MFA, employee-only)
  • Component is dev-only or build-only, not runtime-reachable

Severity scale (use the one your org uses; here's a common one):

LevelDefinition
CriticalPre-auth or trivially exploitable; immediate data loss / RCE / takeover; patch within 24-72 hours
HighAuth required but minimal privilege; or post-auth path to significant impact; patch within 1-2 weeks
MediumRequires meaningful privilege or chain; realistic but not trivial; patch within 30 days
LowDefense-in-depth; hard to chain; patch within 90 days
InfoHardening or hygiene; documented behavior; patch when convenient
Show full SKILL.md (491 more words)Show less
Step 4 — Pick the disposition
DispositionWhen to chooseRequired fields
Fix now (synonym: Fixed)Patch / mitigation deployable within the severity's SLAFix description, deploy plan, verification method
DeferSeverity warrants action, but operational constraints make immediate fix infeasibleReason for deferral, new deadline, who owns, alerting if conditions change before deadline
Accept riskFix isn't planned at current configuration(1) Why fix doesn't apply, (2) Compensating controls, (3) Re-evaluation trigger
False positiveNot actually a vulnerabilityEvidence for the determination, scanner rule ID to suppress (with care)

On Defer: severity does NOT change because you decided to defer. Recording a "High deferred to Q3" is honest; downgrading a High to Medium because Q3 is far away is risk-laundering.

On Accept Risk: all three fields are required. An "Accepted Risk" without all three is a real finding being silently dropped. The re-evaluation trigger is the most-skipped field — name a specific condition (plan upgrade, dependency bump, traffic pattern change, audit anniversary).

Step 5 — Write the disposition

Produce a ticket-ready writeup. Use one of these templates depending on disposition.

Template: Fix
markdown
## Finding: [Title]
**Source:** [scanner / audit / advisory]
**Severity:** [contextual] (Scanner reported: [original])
**CWE / CVE:** [if applicable]
**Location:** [file:line / endpoint / resource]

### What
[Plain-English description — what the issue is]

### Why this severity
[Contextual reasoning — what the scanner missed, what your environment adds]

### Fix
[Specific change — code diff, config update, dependency upgrade]

### Verification
[Concrete test — adversarial input + observed result that proves the fix holds]
- Run [command / test case]
- Observe [response / behavior]

### Owner: [name]
### Target deploy: [date]
Template: Defer
markdown
## Finding: [Title] — DEFERRED
**Severity:** [unchanged]
**Original target:** [original SLA date]
**New target:** [date]

### Why deferred
[Operational constraint — release freeze, dependency on third party, etc.]

### Risk during deferral window
[What's the exposure? What controls reduce it?]

### Alerting / conditions that would escalate
[What would force action sooner than the new target?]

### Owner: [name]
### Re-evaluation: [date — usually before new target]
Template: Accept Risk
markdown
## Finding: [Title] — ACCEPTED RISK
**Severity:** [contextual]
**Approver:** [name + role]
**Date accepted:** [date]

### Why fix doesn't apply
[Cost tier, dependency version constraint, deployment topology, vendor limitation, etc. — be specific]

### Compensating controls
- [Control 1 — what it is, why it reduces impact / likelihood]
- [Control 2]
- ...

### Re-evaluation trigger
[Specific condition — plan upgrade, dependency bump, traffic pattern change, calendar anniversary]
- Trigger: [what would change this decision]
- Calendar review: [date — at minimum, annually]

### Approvals
- [ ] Engineering owner: [name, date]
- [ ] Security: [name, date]
- [ ] (if required) Compliance / Legal: [name, date]
Template: False Positive
markdown
## Finding: [Title] — FALSE POSITIVE
**Scanner:** [name + rule ID]
**Original severity:** [as reported]

### What the scanner claimed
[Restate the claim]

### Why it's not real
[Specific evidence — code path not reachable, version contains the fix, etc.]

### Suppression decision
- [ ] Suppress this exact finding (location + rule ID)
- [ ] Add allow-list rule (with care — broad suppression breeds blind spots)
- [ ] No suppression — re-evaluate if it returns

### Determination by: [name, date]
### Reviewed by: [name, date — for non-trivial suppressions]
Step 6 — Validate the writeup

Before submitting:

  • Could a future you (or auditor) reading this in 12 months understand the decision without further context?
  • Is the verification step concrete enough that someone other than the original author could run it?
  • For Accept Risk: are all three required fields filled in with specifics, not platitudes ("standard controls in place" is not a compensating control)?
  • Does the severity reflect your environment, or just the scanner's default?

When to escalate

Findings that should NOT be triaged unilaterally by a single engineer:

  • Anything Critical
  • Anything pre-auth exploitable
  • Anything affecting regulated data (PII / PCI / PHI)
  • Anything with public PoC or active exploitation
  • Anything where the proposed disposition is Accept Risk and the severity is High or above

These get a second reviewer (Tier 3 / security team / approver named in policy).

Output Format

The primary output is the disposition writeup itself (templates above). For a triage session that covers multiple findings or a batch import, summarize:

markdown
# Finding Triage Session
## Source: [scanner / audit / report]
## Date: [date]
## Triaged by: [name]

### Summary
| Finding | Original severity | Contextual severity | Disposition |
|---------|-------------------|---------------------|-------------|

### Detail
[Per-finding writeup using the appropriate template]

### Escalations
[Findings that need senior review or approval]

Boundaries

  • This skill operates on findings the user has authority to triage and dispose of
  • Severity decisions and Accept Risk dispositions affect organizational risk posture — for High+ findings, ensure the listed approver actually approves; don't fabricate sign-offs
  • False-positive determinations should be evidence-based, not "we don't want to fix it" rebranded — push back if the user wants to FP a real finding
  • Refuse to help downgrade severities to avoid disclosure or audit obligations
  • If a finding surfaces an active incident, hand off to incident-triage — disposition triage is for steady-state findings, not fires

References

  • CVSS v4.0 specification — first.org/cvss
  • EPSS — Exploit Prediction Scoring System (FIRST.org)
  • NIST SP 800-30 (Guide for Conducting Risk Assessments)
  • "FAIR" (Factor Analysis of Information Risk) — quantitative risk framework if you need dollar-denominated decisions
  • ISO 27005 — risk management
  • "Measuring and Managing Information Risk" — Jack Freund, Jack Jones (the FAIR book)
  • OWASP Risk Rating Methodology

© briiirussell, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/finding-triage of briiirussell/cybersecurity-skills.

Open the folder on GitHubat commit c9ade03

Compare with similar skills

Finding Triage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Finding Triage compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Finding Triage this skillbriiirussell/cybersecurity-skills413—~3.1kAutomated safety check: NotesMIT
Deepsec Documentation Guidevercel-labs/deepsec8.1k—~956Automated safety check: PassApache-2.0
Skill Scannergetsentry/skills1k4 repos~2.5kAutomated safety check: WarnApache-2.0
Serenity Aleabitoreddityan-labs/serenity-aleabitoreddit4811 repos~3.3kAutomated safety check: PassNone
Security Alert Triageelastic/agent-skills5921 repos~3.5kAutomated safety check: NotesApache-2.0
Shiro Attack CLISummerSec/ShiroAttack22.6k—~945Automated safety check: PassMIT

Similar skills

  • Deepsec Documentation Guide

    vercel-labs/deepsec

    Official

    Points the agent at deepsec's own docs to answer questions about initializing, configuring, resuming, scanning with and extending the vulnerability scanner.

    8.1k GitHub stars~956 tokensUpdated 12 days ago
    SecurityAuto-check passed
  • Skill Scanner

    getsentry/skills

    Official

    Scan agent skills for security issues. An agent skill from getsentry/skills.

    1k GitHub starsUsed in 4 repos~2.5k tokens
    SecurityAuto-check: warnings
  • Serenity Aleabitoreddit

    yan-labs/serenity-aleabitoreddit

    Apply trader Serenity's (@aleabitoreddit) AI/semiconductor supply-chain analytical lens to US-stock ideas and market judgment.

    481 GitHub starsUsed in 1 repo~3.3k tokens
    SecurityAuto-check passed
  • Security Alert Triage

    elastic/agent-skills

    Official

    Triage Elastic Security alerts — gather context, classify threats, create cases, and acknowledge.

    592 GitHub starsUsed in 1 repo~3.5k tokens
    SecurityAuto-check: notes
  • Shiro Attack CLI

    SummerSec/ShiroAttack2

    当用户要求利用、检测或测试 Apache Shiro rememberMe 反序列化漏洞 (Shiro-550, CVE-2016-4437) 时使用。触发词包括 "Shiro"、"rememberMe"、"shiro attack"、"CVE-2016-4437"、"Shiro-550"、"爆破 Shiro key"、"利用 Shiro"、"Shiro…

    2.6k GitHub stars~945 tokensUpdated 4 mo ago
    SecurityAuto-check passed
  • Cve Remediation

    rundeck/rundeck

    Verify if a CVE affects the project and remediate it. An agent skill from rundeck/rundeck.

    6.3k GitHub stars~2.9k tokensUpdated yesterday
    SecurityAuto-check passed

More from briiirussell/cybersecurity-skills

All 25 skills in this repo
  • AI Risk Management

    briiirussell/cybersecurity-skills

    Apply the NIST AI Risk Management Framework (AI RMF 1.0) and adjacent guidance to AI / ML systems — model lifecycle governance, fairness and bias evaluation, robustness, transparency…

    413 GitHub stars~3.7k tokensUpdated 4 mo ago
    Auto-check: notes
  • API Audit

    briiirussell/cybersecurity-skills

    Audit REST, GraphQL, and RPC APIs against the OWASP API Security Top 10 (2023).

    413 GitHub stars~2.8k tokensUpdated 4 mo ago
    Auto-check: notes
  • Breach Patterns

    briiirussell/cybersecurity-skills

    Learn from public breach disclosures — extract the audit question each one implies and check your own stack.

    413 GitHub stars~3.5k tokensUpdated 4 mo ago
    Auto-check: notes
  • Cloud Audit

    briiirussell/cybersecurity-skills

    Audit cloud infrastructure (AWS, GCP, Azure) for misconfigurations, excessive permissions, and security gaps.

    413 GitHub stars~1.3k tokensUpdated 4 mo ago
    Auto-check: notes
  • Container Audit

    briiirussell/cybersecurity-skills

    Audit container images, Dockerfiles, and Kubernetes manifests for misconfigurations, excessive privileges, exposed secrets, and runtime risks.

    413 GitHub stars~2.5k tokensUpdated 4 mo ago
    Auto-check: notes
  • Crypto Audit

    briiirussell/cybersecurity-skills

    Audit cryptography implementation — algorithm choice, key sizes, KDF parameters, IV/nonce handling, signature verification, randomness, TLS configuration, and key rotation.

    413 GitHub stars~2.8k tokensUpdated 4 mo ago
    Auto-check: notes

Categories

Questions about Finding Triage

What does Finding Triage do?

Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup. Finding Triage is an agent skill from briiirussell/cybersecurity-skills. Triage a single security finding — from a scanner, audit, advisory, or report — to a defensible disposition with a mitigation plan, false-positive justification, or accepted-risk writeup.

When should I use Finding Triage?

Finding Triage fits situations like: the user mentions triage this finding; is this a real vulnerability; mitigation plan; accept this risk.

How do I install Finding Triage in Claude Code?

Run `npx skills add briiirussell/cybersecurity-skills --skill finding-triage -a claude-code`. Or copy the skill folder (skills/finding-triage in briiirussell/cybersecurity-skills) into .claude/skills/finding-triage in your project. Claude Code loads it when a task matches its description.

How do I install Finding Triage in Codex?

Run `npx skills add briiirussell/cybersecurity-skills --skill finding-triage -a codex`. Or copy the skill folder (skills/finding-triage in briiirussell/cybersecurity-skills) into .agents/skills/finding-triage in your project. Codex loads it when a task matches its description.

Can I use Finding Triage in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add briiirussell/cybersecurity-skills --skill finding-triage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/finding-triage, .gemini/skills/finding-triage, .github/skills/finding-triage and .opencode/skills/finding-triage in your project.

What does Finding Triage need to run?

SKILL.md names no scripts, command-line tools or credentials: Finding Triage is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Grep, Glob, Bash, WebSearch.

Does Finding Triage access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Finding Triage safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Finding Triage use?

Finding Triage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Finding Triage use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Finding Triage?

Skills that share tags, products or a category with Finding Triage: Deepsec Documentation Guide (vercel-labs/deepsec, 8.1k stars), Skill Scanner (getsentry/skills, 1k stars), Serenity Aleabitoreddit (yan-labs/serenity-aleabitoreddit, 481 stars) and Security Alert Triage (elastic/agent-skills, 592 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Finding Triage?

briiirussell (a GitHub user) maintains it in briiirussell/cybersecurity-skills, which has 413 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on May 27, 2026.

Source: briiirussell/cybersecurity-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.