Smart Triage
AI-powered, portfolio-wide vulnerability prioritization. Every open finding across DAST, SAST, SCA, and Secrets is scored 0–100 and sorted into four action buckets — combining fast heuristics with AI (Gemini 2.5) so you fix what matters and dismiss the noise.
What it is
Smart Triage looks at every open finding across all scan types — DAST, SAST, Supply Chain (SCA), and Secrets — and answers the only question that matters when the queue is long: what do I actually do about this one? Each finding gets a priority score (0–100) and a verdict, then lands in one of four buckets.
It runs as a hybrid pipeline: fast rule-based heuristics decide the clear cases instantly and for free; only the genuinely ambiguous findings are sent to an AI model for an expert-style judgement. The result is one prioritized list for your whole portfolio.
The four buckets
| Bucket | Priority score | Meaning |
|---|---|---|
Fix Immediately | ≥ 80 | True positive, highly exploitable, likely critical (often KEV-listed). Drop everything. |
Fix Soon | 50–79 | True positive, moderate impact / likely exploitable. Schedule it. |
Monitor | < 50 | True positive but low exploitability or already mitigated (e.g. blocked by Shield WAF). |
Dismiss | — | Not a real problem: false positive, test/example code, or unreachable. (Confidence in “true positive” below 70%.) |
How it decides
Each finding is scored on two axes: is it real?(confidence it's a true positive) and how much does it matter? (priority 0–100). The heuristics are tuned per scan type, then universal threat-intelligence modifiers are applied on top.
Per-type signals
- DAST — vulnerability class drives it: SQLi / RCE / auth-bypass / IDOR score high; SSRF / open-redirect / TLS issues mid; info-disclosure / missing headers / source maps low. Captured evidence raises confidence.
- SAST — rule + file context: the same rule in
/test,/examples, or docs is scored far lower than in shipping app code. Injection CWEs (89/78/94) rank highest; an AI-flagged false positive is auto-dismissed. - SCA — reachability dominates: an unreachable or dev-only vulnerable dependency is pushed right down; reachable + direct + high CVSS is pushed up. A dev-only and unreachable dependency is treated as negligible.
- Secrets — a verified secret (confirmed live) jumps to immediate; secret type (AWS / DB / private key vs. test/dummy) and string entropy adjust confidence.
Universal threat-intel modifiers
Applied to every finding, regardless of type:
- CISA KEV (Known Exploited Vulnerability) → strong priority + confidence boost.
- EPSS exploit-likelihood → boost when > 0.7 (high), smaller boost 0.3–0.7.
- Public exploit available → priority boost.
- Shield WAF protection → priority reduced — if your edge already blocks the attack path, it's mitigated. See Shield WAF.
- Cross-finding correlation → a SAST finding independently confirmed exploitable by DAST gets a confidence + priority boost. Code and network-reachable = highest confidence.
- Severity → Critical boosts priority and floors confidence; Low/Info reduces both.
Heuristics vs. AI
A finding goes to the AI model only when the heuristic is not confident (below 75%) or sits in the ambiguous middle(priority 35–75) with thin reasoning. Clear-cut findings — “SQL injection with proof”, “unreachable dev dependency” — skip the AI entirely, so most runs cost nothing.
How a run is triggered
- Manual — the Run Triage button on the Smart Triage page (/triage). A re-run within 5 minutes returns the cached result unless you force it.
- Automatic on scan — a completed scan can kick off a focused triage so new findings are prioritized the moment they appear.
- Nightly — a scheduled run (daily, ~03:00 UTC) keeps every eligible org current as CVEs are re-scored. To save cost it skips orgs with no new High/Critical activity in the last ~28h, and won't re-run an org that succeeded in the last ~18h.
Plan requirement
Smart Triage is available on Business and above(Business, Enterprise, MSP, Partner). On lower plans the page shows an upgrade prompt. Runs are metered against your plan's triage-run limit.
The Smart Triage page
Open /triage in the dashboard. After a run you get:
- Bucket cards — Fix Immediately / Fix Soon / Monitor / Dismissed, each with a count; click one to filter the table.
- Run stats — total findings, how many were AI-analyzed vs. heuristic, duration, cost (or “Free”), and last-run time.
- Filters — by action, finding type (DAST/SAST/SCA/Secrets), domain, and free-text search over the reasoning.
- Results table — priority score, type, title + location, target, severity, age, suggested action, and signal badges (Shield-protected, KEV, public exploit, CVE).
- Detail drawer — click any row for the full reasoning, confidence + exploitability, threat signals, context-aware remediation guidance, the model used, and per-finding actions.
Acting on a finding
From the table or the drawer you can:
- Verify Fix (DAST) — replays the original exploit to confirm it's actually fixed (see Vulnerability Management).
- Mark Fixed / Dismiss / Escalate — move the finding through its lifecycle.
- Agree 👍 / Disagree 👎 — tell the system whether its verdict was right.
Your feedback (agree / disagree / fixed / dismiss / escalate) is recorded against each verdict to refine future prioritization.
Cost & model
AI triage uses Gemini 2.5 Flash-Lite, batched 10 findings per call. Heuristic decisions are free; only the ambiguous findings incur AI cost, which is tracked per run and per finding. In practice a full portfolio run is a fraction of a cent — on the order of ~$0.001 per 100 findings.
API
# Trigger a triage run (Business+; force bypasses the 5-min debounce)
POST /api/triage/smart
{"force": true}
# Latest run status + bucket summary
GET /api/triage/smart
# Per-finding results (filter by action / type / scan)
GET /api/triage/smart/results?action=fix_immediately&finding_type=dast
# Give feedback on a verdict
POST /api/triage/smart/feedback
{"result_id": "<id>", "feedback": "agree"}What's next
- Vulnerability Management — the full finding lifecycle and verify-fix.
- Risk Scoring — how the underlying severity/priority signals are computed.
- CVE Detection — where KEV / EPSS / exploit data comes from.
- Shield WAF — why edge protection lowers a finding's priority.