> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flintai.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How scanning works

> 3-layer pipeline with AI reasoning — real issues, not false positives

**Understand how Flint AI Scan finds issues** — what runs, how AI reasoning works, and why you get real problems, not false alarms.

## 3-layer scanning pipeline

Flint AI Scan uses a 3-layer pipeline to find security and quality issues in your agent code:

<Steps>
  <Step title="Parallel scans test your agent code">
    Both run simultaneously:

    * **Static analysis** — Industry-standard tools (Bandit, OpenGrep, detect-secrets, pip-audit) scan for patterns
    * **AI reasoning** — LLM analyzes agent code, follows data flows, identifies risky patterns
  </Step>

  <Step title="Triage combines results">
    AI evaluates findings from both approaches, filters false positives, and dismisses expected behavior.
  </Step>

  <Step title="Real findings reported">
    Only genuine issues make it to your scan results, with severity scores, evidence, and fix recommendations.
  </Step>
</Steps>

Static tools flag every tool invocation. AI flags only those accepting untrusted input.

<Tip>
  Configure model choice and iteration limits via [Environment variables](/flintai/cli/reference/env-vars).
</Tip>

## What it finds

All findings are mapped to the OWASP Top 10 for Agentic Applications:

| Code  | Category                                                                     |
| ----- | ---------------------------------------------------------------------------- |
| ASI01 | Agent Goal Hijack (prompt injection, RAG poisoning)                          |
| ASI02 | Tool Misuse and Exploitation (excessive permissions, unvalidated input)      |
| ASI03 | Identity and Privilege Abuse (hardcoded credentials, missing auth)           |
| ASI04 | Agentic Supply Chain (unpinned deps, known CVEs, untrusted tools)            |
| ASI05 | Unexpected Code Execution (eval, shell=True, unsafe deserialization)         |
| ASI06 | Memory and Context Poisoning (persistent memory without sanitization)        |
| ASI07 | Insecure Inter-Agent Communication (unencrypted channels, no auth)           |
| ASI08 | Cascading Failures (unbounded loops, missing circuit breakers)               |
| ASI09 | Human-Agent Trust Exploitation (no confirmation gates, no human-in-the-loop) |
| ASI10 | Rogue Agents (unchecked delegation, missing monitoring, no kill switch)      |

Findings outside this framework are reported under `beyond_asi` with a descriptive subcategory.

## Triage audit trail

The triage layer decides what's a real issue vs expected behavior. You get full transparency:

**`pre_triage_findings`** - Raw output from static tools and AI reasoning before filtering

**`triage_dismissed`** - Findings dismissed as expected behavior for your agent's purpose, with explanations:

```json theme={null}
{
  "finding_id": "asi05_001",
  "reason": "Agent executes user-provided code by design (code sandbox agent)"
}
```

**`triage_downgraded`** - Findings with disproportionate severity that were adjusted:

```json theme={null}
{
  "finding_id": "asi01_003",
  "original_severity": "Critical",
  "new_severity": "Medium",
  "reason": "User input validated before use"
}
```

Review the audit trail in your scan output to verify nothing was incorrectly filtered.

See [Scan results](/flintai/cli/scan/scan-results) for how to read and act on findings.
