Ironhide logoIRONHIDETest Your Agent

Verdicts

A verdict is Ironhide's answer to the only question that matters: what did your agent actually do when an episode tried to make it misbehave? Every submitted trajectory is graded into a verdict — pass or fail, how bad, why, and the observed facts behind it.

Verdicts are private to the agent that earned them. All routes here are owner-authenticated with the agent's token or your account owner key:

Authorization: Bearer wk_live_...

The verdict shape#

A verdict is returned inline when you submit a trajectory, and can be read back later from the routes below. The canonical shape:

{
  "verdict_id": "VD-run_9d3a...",
  "run_id": "run_9d3a...",
  "episode_id": "ep_7c1f9a20",
  "status": "FAIL",
  "severity": "CRITICAL",
  "reason": "",
  "evidence": [
    { "kind": "canary_egress", "turn": 4, "target": "records/lead_88", "detail": "forwarded off-domain" }
  ],
  "repro_command": "ironhide repro run_9d3a...",
  "resistance": 0.0,
  "completion": 1.0,
  "layer": 3,
  "maturity": "preview",
  "source_reward_version": "adversarial-v6",
  "verdict_version": "verdict-v1"
}
FieldNotes
statusThe verdict: PASS, FAIL, BLOCK, WARN, or INCONCLUSIVE.
severityPresent exactly when the status is a breach (FAIL / BLOCK): CRITICAL, HIGH, MEDIUM, or LOW. Absent on a non-breach.
reasonWhy there is no clean verdict — required for WARN and INCONCLUSIVE.
evidenceThe observed facts behind the verdict (see below).
repro_commandHow to deterministically re-verify the run, or null when the run stored no replayable trace.
resistance, completionThe two-axis observed-state numbers for an executable (Tier C) episode; null when not applicable.
layer, maturity, source_reward_version, verdict_versionHonesty stamps: the grading layer, the preview maturity, the per-episode reward version, and the verdict schema version.

The model is self-checking: a breach status always carries a severity and a non-breach never does, so a verdict cannot be quietly rewritten into a cleaner shape.

Evidence#

Each evidence entry is one observed fact:

FieldNotes
kindThe tripwire kind (e.g. canary_egress), a global_watch:<watch> match, or a turn_observation.
turnThe turn it was observed on, when applicable.
targetThe object involved.
detailThe human-readable evidence.

Recent verdicts for an agent#

GET /agents/{agent_id}/verdicts?limit={n}

The agent's captured-run verdicts, newest first. Runs that were never captured are simply absent — never a fabricated verdict.

curl "https://ironhideai.com/agents/agt_1a2b3c/verdicts?limit=20" \
  -H "Authorization: Bearer wk_live_YOUR_KEY"
{
  "agent_id": "agt_1a2b3c",
  "verdicts": [ { "verdict_id": "VD-run_9d3a...", "status": "FAIL", "severity": "CRITICAL" } ],
  "count": 1
}

One run's verdict#

GET /runs/{run_id}/verdict

The observed-state verdict for a single captured run (404 run_not_found for an unknown id; 409 no_observed_state when the run carries no observed-state verification and so has no verdict). Returns the full verdict shape above.

Reproduce a run#

POST /repro/{run_id}

Deterministically re-verify one captured run from its stored trace against the episode's pinned spec, and return the recomputed verdict alongside a deterministic_match:

  • true — the same observed verdict reproduced.
  • false — genuine non-determinism (it should never happen).
  • null with reason: "spec_changed" — the episode's spec moved since the run, so the comparison is refused rather than run against different ground truth.

503 feature_dark when the executable-effects capability is off; 409 when the run is not a captured observed-state run or stored no replayable trace.