Skip to content

4. Find

Before this spends anything, Mylonite prints what it's about to do — the model, the prompt it's using, and the tools it will drive — so you can check the plan before paying for it:

mylonite scan --target-file app.yaml --authorize my-app

--authorize asserts you control the target: its value must match the scope you scaffolded with, or the family name if you didn't set one — the scaffold step prints the right value. See Security for why this is required and never optional.

This drives your tools with Mylonite's own planner — reading your system prompt and tool descriptions, not your app's own agent or model — and runs the single-shot attack engine. Findings land under .mylonite/scans/<timestamp>/.

Capping the spend. --max-llm-calls N (default 50) is a per-scan budget — a soft one, since each seed keeps a small floor. The global --max-llm-requests N (before the command) or MYLONITE_MAX_LLM_REQUESTS=N is the hard ceiling across this whole run: request N+1 is never sent, the run stops and exits 3. Both are described in full in the CLI reference.

Exit codes. scan exits 0 whether or not it finds anything — reporting a weakness is not a failure. 2 is a config or usage error (including an empty scan), 3 is the budget or request ceiling above, and 4 is a missing model choice or a provider/credential that refused the run before the target was ever touched.

Reading the output

A finding earns one of three evidence tiers, shown in the scan table and printed as a summary line (findings by evidence: 1 state, 2 trace, 1 judge-only):

Tier What decided it
state a probe read the target's own state and saw the damage.
trace a deterministic check saw a consequential tool get called (or linked).
judge-only only the LLM judge's read of the reply said so — nothing in the target's state or trace confirmed it.

A judge-only result is a candidate, worth a look, not yet a finding to act on: validate (the next step) never keeps a test when every firing run is judge-only. Anything that couldn't be decided reads NOT TESTED with a reason code, never silently as clean — see Reading the results for every field, Which claim you earned for what a result does and doesn't prove yet, and Coverage by app shape if a class you expected reads NOT TESTED because of how your app is wired rather than anything Mylonite tried.

Expect to find less here than on the practice app — often nothing, on a well-built app and a capable model. That's the tool working, not failing: a safeguard only earns proof by stopping a weakness that actually lands.

Next

5. Prove — turn a candidate into a test, then confirm it's real.