Reducing false positives (Jev)
Every autonomous scanner produces some false positives. Pentest Swarm AI already grades and de-duplicates findings before it writes the report — but you can add one more pass that drops findings a second, independent model is confident are not real. That optional pass is Jev.
Jev is TypeSafe's "System One" model. It is not an LLM — instead of generating text, it returns typed, probabilistic decisions in a single fast, cheap pass. Pentest Swarm AI asks it one yes/no question per finding — "is this a real, exploitable vulnerability?" — and gets back a probability for each. Findings below the threshold are removed.
The swarm's own grading is the primary quality control. Jev is a second opinion for teams who want to trim the last of the noise before triage. If you don't turn it on, nothing changes.
Turning it on
You need a TypeSafe API key — get one at typesafe.ai.
Provide it via the TYPESAFE_API_KEY environment variable (preferred) or the
--jev-key flag.
In the launcher (pentestswarm run)
The interactive launcher has a Jev FP filter toggle, off by default. Switch
it on with the arrow keys. If TYPESAFE_API_KEY isn't already set, a masked
TypeSafe key field appears for you to paste the key into; when the env var is
present, the launcher uses it and skips the field.
On the command line
export TYPESAFE_API_KEY=your-typesafe-key
pentestswarm scan example.com \
--scope example.com \
--swarm --follow \
--jev
Or pass the key inline:
pentestswarm scan example.com --scope example.com --swarm --jev --jev-key your-typesafe-key
How it behaves
-
Where it runs. As the final step of the report agent — after the swarm's findings are graded and duplicates are collapsed, and just before the report is rendered. It sees the clean, de-duplicated set.
-
What it drops. Each surviving finding is scored
0.0–1.0for P(real vulnerability). Anything below the threshold (default0.5) is dropped. You'll see a campaign event like:Jev false-positive filter: kept 7, dropped 2 (P(real) < 0.50) -
It fails OPEN. If the Jev API errors, times out, or is unreachable, the filter is skipped and every finding is kept. A transient hiccup will never silently discard a real bug — you'll see a
Jev false-positive filter skipped … — keeping all N findingsevent instead. -
Preflight. When
--jevis set, the run checks the key up front. A missing key stops the run with a clear message; a bad key fails the Jev health check fast, so you find out immediately rather than at report time.
Cost
Jev is billed by TypeSafe, separately from your LLM provider. It's a single typed pass over the final finding set (not per-token generation), so it's cheap and doesn't count against your spend cap, which only meters LLM spend.
Jev isn't a chat model, so it doesn't fit the OpenAI-compatible provider path the
other providers use. Pentest Swarm AI talks to its typed
/v1/systemone API directly — no LiteLLM or extra proxy required.
Related: adaptive attack-path scoring (--jev-adaptive)
Jev's fast typed decisions aren't only useful at the end of a run. With
--jev-adaptive, the swarm uses Jev during exploitation as a real-time
scoring brain: when the exploit agent has several candidate attack strategies
for a finding, it asks Jev to score each strategy against live state (what's
been discovered, which steps just worked), then pursues the best-scored path
first and grades that chain's pheromone by the score — so the swarm's
attention concentrates on what's actually landing.
pentestswarm scan <target> --scope <target> --swarm --jev-adaptive
Off by default; needs a TypeSafe key (same as the filter); fails open to a
heuristic ranking if Jev is unavailable, so the swarm never stalls. You can run
--jev and --jev-adaptive together.