opfor run runs the whole pipeline end-to-end — generate attacks, fire them, judge, and write the report.
Run
Effort
Steering the attack
Three optional inputs let you point a run at your specific risk surface instead of the evaluators’ generic goals. Set them in the config (attackObjective, judgeHint, businessUseCase) or override per-run — each flag has a -file variant that reads the text from a file:
These are the same three inputs the browser extension exposes in its popup (objective, custom evaluator hint, business use case).
Single-turn vs multi-turn
By default opfor runs single-turn — one attack, one response, judged. Multi-turn fires a short adversarial conversation: after each response, if the judge still rates the target PASS, the attacker generates a tougher follow-up (up toturns, default 3). It stops early when the judge returns FAIL.
For HTTP agent targets, target.stateful controls how conversation context is delivered:
For multi-turn against a raw LLM API, set
target.stateful: false so opfor replays the whole conversation each turn.MCP mode phases
MCP scans add two phases agent mode doesn’t have:- Resource scan — before attacking, opfor calls
resources/listandresources/read, judging each for secret/PII exposure. - Rug-pull check — after attacking, opfor re-lists tools and diffs their descriptions against the initial snapshot, flagging any mutations.
Reports
Each run lands in its own subfolder:<slug> is the slugified target name; <shortId> is the first 8 hex chars of the run’s report ID. The default parent is .opfor/reports/ — override with --output.
- HTML — cover, executive summary, findings, and per-turn detail for browsing.
- JSON — the same data structured for CI gating and dashboards.
Next
Autonomous mode
Let an agent plan and drive the whole assessment with
opfor hunt.Trace-aware testing
Give the judge visibility into tool calls and retrievals.