RU EN

How I cut scan triage from 6–8 to 2–3 hours with AI in CoPilot

CoPilot runs a security scanner report through three engines — an RL model, an LLM and an Advice service — and helps analysts quickly separate real vulnerabilities from false positives. I designed the product from brief to developer handoff.

2025 · Product Designer · In production · Enterprise AppSec platform

Role
Worked through analyst workflows with analysts and the PM. Designed AI check setup, processing status and finding review, including states, errors and expert actions; handed the design off to developers.
Team
9 people: me (designer), PM, analyst, 2 frontend, 2 backend, 2 QA
Product
AppSec Solutions, cybersecurity, B2B SaaS, web
Outcome
≈ −60% time to triage a large scan (from 6–8 to 2–3 hours); ≈ 2 in 3 findings closed without opening the code
CoPilot in dark theme: report list and vulnerability review CoPilot in light theme: report list and vulnerability review Light Dark
Drag the slider to compare the light and dark themes. The screens below follow the site theme.

Context

After every scan an analyst received hundreds of findings, and triaging a single scan took 6–8 hours.

AI could speed this up, but only if the interface answers three questions at any moment:

01What is happening right now?
02How much can I trust the result?
03What should I do next?

Research

I held regular calls with analysts and walked through scenarios with the PM. Key findings:

  • No status, no trust. An expert needs to see which stage a check is at and where it failed.
  • A prediction is easy to mistake for a verdict. The AI's assessment and the human decision must be clearly separated.
  • Hundreds of findings, limited expert time. The evidence for a decision has to live in one place.

Key decisions

Several signals, not one badge. Prediction, Match and each engine's results are shown separately, so the analyst checks the logic instead of taking the conclusion on faith. Any disagreement between signals is visible at once.

A choice of check depth, not always a full analysis. Fast triage and deep review are different jobs, so before starting a check the analyst can run the full pipeline or individual engines.

A human makes the final call, not an auto-close threshold. Auto-closing can't be defended in an audit, and a single false negative means a missed real vulnerability.

Mapping the workflow

The flow is split into two modes: monitoring and reviewing.

Monitoring
01Select report
02Configure check
03Track processing
Reviewing
04Review result
05Inspect finding
06Make decision

01Control before the check starts

Everything that affects the result sits in one dialog: report format, the report itself and check depth — from the full pipeline (RL → LLM → Advice) to individual engines. Each mode has a short explanation, so the choice is clear without documentation.

Check report dialog: format, report and check mode Check report dialog: format, report and check mode

02Making background processing visible

Instead of a generic progress bar, each report has three segments — one per engine. At a glance the analyst sees where the check is, what is done and where it stopped, and knows whether to wait or step in.

Waiting · In progress · Completed · Skipped · Failed · Broken

CoPilot report list with processing states CoPilot report list with processing states
Processing states: waiting, RL, LLM, Advice service, completed, failed Processing states: waiting, RL, LLM, Advice service, completed, failed
One state model shows both the current stage and the status of each step.

03From a result to an investigation

The report opens next to the list, so the analyst keeps the context. The panel follows a clear hierarchy:

  • check summary: Prediction, Match and findings by type
  • the finding and its technical parameters
  • review status and the rule behind the decision
  • the expert's next action
CoPilot report: metrics, vulnerability list and an expanded finding CoPilot report: metrics, vulnerability list and an expanded finding
Finding parameters and rule Finding parameters and rule
Evidence and decision history stay together in one place.

04Keeping the human in the loop

Only an expert can confirm, reject or ignore a finding, and every decision is recorded in the history. Actions are labelled with words instead of hidden behind icons: a decision that has to be defended in an audit shouldn't involve guessing.

Vulnerability review with Confirm, Reject and Ignore actions Vulnerability review with Confirm, Reject and Ignore actions

05Actions with consequences for future scans

Ignore excludes an object from later scans, so it is more than a dismiss: the consequence is shown before confirmation, and afterwards the product confirms that the rule will apply going forward.

Ignore confirmation in the product context Ignore confirmation in the product context
Ignore confirmation modal Ignore confirmation modal
The consequence is explicit before confirmation.
Success notification after ignoring an object Success notification after ignoring an object
The product confirms that the rule applies to following scans.

06A failure is not a dead end

If one of the engines fails, the analyst sees at which stage, why, and what is already done. RL and LLM results stay available, and the check can be restarted right from the error card.

Advice service failure reason and engine timeline Advice service failure reason and engine timeline

Beyond the happy path

I defined 8 states — from waiting and in progress to failed, empty and zero findings — and reused the same logic at every level: the pipeline, the report and an individual finding. Complexity grows without new rules for every screen.

Report status system: pipeline, status and meaning Report status system: pipeline, status and meaning
Reusable semantic states instead of one-off solutions for every screen.
Empty state: no reports yet Empty state: no reports yet
Empty: the first run explains where to start.
Report with no vulnerabilities Report with no vulnerabilities
Zero findings is a result, not a blank screen.
Loading the report list Loading the report list
Loading mirrors the table structure, so the screen doesn't jump.
Error loading reports Error loading reports
Connection error: a clear reason and one next step.

Light and dark themes

The interface is built on semantic tokens — background, surface, border, text, accent and status colours. Both themes come from one system: only colour values change, not the layouts. Status colours are darker in the light theme to stay legible on white.

Outcome

  • ≈ −60% time to triage a large scan: from 6–8 to 2–3 hours.
  • ≈ 2 in 3 findings closed without opening the code: obvious cases are resolved straight from the check results.
  • 100% of decisions are traceable: the triage can be defended in an audit.
  • A single system of 8 states: one specification for development instead of mockups for every case.

What I learned

Complexity doesn't disappear when you simplify an interface — it has to be structured. Triage got faster not because AI decides for people, but because the analyst can see what each conclusion is based on.