← Blog

The engine

How the engine works

architectureengine 98c06f315 min read

The engine is not a scanner running a checklist. It is an autonomous agent that does its own reconnaissance and exploitation inside a locked, disposable sandbox — and, in the shipped product, a second skeptical agent that re-tests every claim before it counts. This page is the detailed version: what actually happens on a run, why the sandbox is built the way it is, and what makes the benchmark a fair measure of the model rather than of our plumbing. It doubles as the architecture note for the product.

A run, end to end

A run is one complete penetration test. The engine orchestrates the phases — it does not script the pentest. In order:

Target+ scope (RoE)ISOLATED SANDBOXdisposable · no privileges · deny-by-default egressReconmap services · portsHuntautonomous agent · exploitFindingsonly what it provesScoredvs answer key

The results cross the boundary, the methods don't. Commands, payloads, prompts and the agent's reasoning stay inside the sandbox — only proven findings are published.

The sandbox is the security boundary

The agent runs real exploits — real remote code execution, real injection — so containment is not optional; it is the product. Every run gets a fresh container with:

The one host that is notthe target — the model's API endpoint — is the only way data leaves the box. That is an accepted, disclosed part of the design: to be driven by a hosted model, the target's HTTP responses necessarily pass through that model's provider. Self-hosted models close even that gap.

Black-box vs grey-box entry

Labs come in two tiers, matching how real engagements are scoped. On a black-box (surface) lab the agent gets only the URL and must find everything unauthenticated. On a grey-box (authenticated) lab — the exploitation lab is one — the client hands over a genuine low-privilegeaccount: credentials, the login route, and the scope. That foothold is staged into the agent's working notes at the start of the run, exactly as a client would email a tester a viewer account. Higher-privilege roles (operator, admin) exist but their passwords are never provided — reaching them is the point of the engagement, and only exploitation gets you there, never logging in.

Recon, then the hunt

Recon is a mapping phase: the agent enumerates the reachable services, routes, parameters and technologies and builds its own picture of the attack surface. Then the hunt begins, and it is entirely the agent's: it runs standard offensive tooling and its own scripts inside the sandbox, probes for the vulnerability classes it suspects, follows one finding into the next, and iterates over many turns. Nothing about which bug to look for, or how, comes from us — the engine only holds the ring. This is the difference from a scanner: a scanner emits every template that matches; the agent reasons about this target and pursues a line of attack.

How a candidate becomes a finding

A model doesn't get credit for suspecting a bug — it gets credit for proving one. To count, the agent must demonstrate the issue and write a structured finding: the vulnerability type, where it lives, and the proof it used to establish it. The collector that pulls findings out of the sandbox is deliberately tolerant of how the model formats its output (fenced JSON, a bare array, concatenated objects) — a genuinely-hunted finding must never be lost to a formatting quirk, because on the benchmark there is no reviewer downstream to recover it. What it will not do is invent proof: no demonstration, no finding.

Two agents, not one

The hardest problem in automated pentesting isn't generating candidate bugs — it's separating real ones from plausible-looking noise. The shipped engine solves this with a second agent: a skeptical reviewerthat re-runs the hunter's proof in its ownfresh sandbox and votes on each finding. Its instruction is blunt — trust nothing you have not reproduced yourself — and an integrity check makes it impossible to “approve” a finding it never actually re-ran. A finding the reviewer cannot reproduce is downgraded, not shipped.

Hunter agentfinds & proves vulnsclaimsReviewer agentre-tests · own sandboxcritique · ≤2 roundsOperator gateapprove · rejectClientredacted

The benchmark scores the Hunter alone — no reviewer, no gate. That isolates the model's raw hunting ability, which is what a model swap actually changes. The reviewer is what the shipped product adds.

This is our answer to “self-graded homework.”An eval where success is one model's unverified opinion is worthless. In the product, a finding counts only if a second agent reproduces it; in the benchmark, it counts only if it also matches a vulnerability we verified in the target's source code. The verdict is mechanical, not editorial.

The benchmark measures the hunter alone

For the leaderboard we deliberately run the engine hunt-only: the reviewer and the human-approval gate are switched off, and the engine's own deterministic hygiene lane (TLS/header auto-findings) is neutralised, so the score reflects the model's ownfindings and nothing else. This isolates the single thing a model swap actually changes — the model's ability to find and prove vulnerabilities — instead of measuring our filtering. It also means the published number describes a raw hunter, not the shipped product (which is stricter): the reviewer is what the product adds on top, and it is not what we rank.

Three independent runs, averaged

A single pass is a noisy sample — the same model on the same target can find more on one attempt and less on the next. So a benchmark result is not one run but the mean of three independent runs, each a genuine single-shot engagement with no memory of the others.

Same engine, swappable brain

Every model on the leaderboard drives the exact same engine — the same agent driver, the same sandbox, the same phases — pinned to one version and stamped on every result. We are not building a bespoke agent around each model; we hold the harness constant and swap only the brain. That is the only way a ranking of models means anything: if the scaffold changed per model, you would be ranking our engineering, not their hunting.

One clarification, because it looks like a confound and isn't: the provider label on a row (e.g. deepinfra, opencode.ai/zen) is only where the model is served — the inference endpoint. The agent driver and the sandbox are byte-for-byte identical across all of them; only the model behind the API changes. And when we improve the engine, the version string changes and we re-run — old and new scores never mix in the same column.

What leaves the sandbox, and what doesn't

The public site shows what each model found— the vulnerability class and where it lives, per run, on the model's page — and, for exploitation, how far up each chain it got. It never shows the agent's commands, payloads, prompts, or reasoning: those stay inside the sandbox. The results cross the boundary; the methods do not. This is a benchmark, not a how-to — and the targets and their answer keys stay private so no model can be tuned to them.

Next → How we score models, out of 1000