“Yes.” isn’t a check
A customer’s “yes” doesn’t check the database write. RiskGate checks every reading of the conversation before the write runs.
Before an AI agent changes something real, RiskGate plays the action forward in every situation the evidence can’t rule out. It runs only if it’s safe in all of them. Otherwise it checks first, sends it back, or asks a person.
kubectl scale deploy/checkout-api --replicas=28Breaks the SLO in all 5 plausible causes. Blocked and sent back to the agent.
We replayed public runs on Sierra’s τ-bench and τ²-bench, from GPT-4o in 2024 to eight frontier agents on the 2026 leaderboard, and checked every change they made to orders and bookings against the ground truth.
were wrong: 5.0–9.6% in retail, 8.9–26.5% in airline.
of the 2026 agents’ wrong retail writes came straight after the customer agreed.
Two years of model progress later, the agent still asks, the customer still agrees, and the action is still wrong, because the request fit more than one order, item or variant. RiskGate checks the action in every reading before it runs.
Public τ-bench (2024) and τ²-bench leaderboard (2026) trajectories (Sierra Research, MIT licence), replayed offline. Strict count: the write took effect, matched no ground-truth write and the task failed (2026 retail: 363 of 4,855 writes). The examples are GPT-4o runs from 2024. Reproduce with engine/tau_bench_replay.py and riskgate/benchmarks/tau2.
Every explanation the evidence still allows: a traffic surge, a slow query, a failing cache.
Your digital twin, dry-run or simulator predicts what the action does in each world.
The worst world must clear a bar learned from past outcomes, so unsafe approvals stay under the rate you set.
Each is a short narrated video built on public data, with a written walkthrough. Every one says what is real, what is an offline replay and what is simulated.
Before an AI agent changes something real, RiskGate lists every situation the evidence can’t rule out, plays the action forward in each, and lets it run only if it is safe in all of them.
A customer’s “yes” doesn’t check the database write. RiskGate checks every reading of the conversation before the write runs.
When the conversation can’t tell which booking the customer means, RiskGate asks instead of guessing.
The booking is clear; which cancellation rule applies to it is not. RiskGate reads the reservation first and lets the refund run only if the policy allows it in every reading that still fits.
The same “item missing” complaint can hide different truths. RiskGate checks the ledger before paying, so duplicate refunds stop and genuine customers get paid in seconds.
A defective appliance needs a 7-day replacement on a first defect but a cash refund when a replacement already failed. RiskGate checks the return ledger so the right remedy runs the first time.
“Money deducted, order not placed” has several endings, and refunding right now loses money in most of them. RiskGate checks the payment switch first and certifies a different action per ending.
“I don’t recognise this payment” is four different situations, and blocking the card is wrong in three of them. Blocking is also an action.
Many returns from one address is either a serial returner or a hostel with forty residents. A label on a person must not be a guess.
Shopping agents can now place real Instamart orders through Swiggy's published MCP tools. RiskGate makes the agent ask one short question when the order is ambiguous instead of guessing at checkout.
One alert often fits several root causes. Act only if the fix works for every cause that still fits; otherwise check first or ask a person.
When two faults look the same on the sensors, RiskGate widens its doubt instead of guessing, and lets an operator action through only if it is safe for every fault that still fits.
A VM idle for three weeks may be about to do the one thing it exists for. RiskGate deletes only what is dormant in every plausible world and deallocates the rest, reversibly.
Nobody files a ticket per idle VM. RiskGate's error budget is a dial: tightening it shifts work from irreversible delete to reversible deallocate, not to humans.
An instruction hidden in a file, e-mail or web page must not be able to move money, while normal work goes through.
When you swap the AI model, yesterday's safety evidence expires. RiskGate notices the swap and asks a person until it is recalibrated.
Each square is one incident. Set how many in 100 you can live with going wrong: RiskGate learns from past outcomes where to draw the line, runs what is safe and hands the rest to a person.
Where the numbers come from: riskgate’s published simulated domains with scripted, LLM-like agents, measured on cases held out from calibration. The limit is a long-run rate, not a promise about any single decision; if conditions drift, the gate gets stricter and asks to be recalibrated.
What was proposed, which worlds were checked, why it ran, and which calibration vouched for it.
The guarantee knows when it stops applying, and says so. The agent is told why it was stopped, never the threshold or the margins: those stay in the audit log, so a manipulated agent can’t aim just above the line.
Adapters for the frameworks your agents already use. numpy-only, Apache-2.0, runs in your VPC.
import riskgate as rg gate = rg.Gate( CheckoutTwin(), SLO_SPEC, Diagnoser(), probes=[PG_STATS], alpha=0.05) gate.load_calibration( "checkout.cal.json", key=KEY) @rg.guard(gate, context=read_dashboards) def kubectl_scale(deployment, factor): ... # CERTIFY runs it; anything else goes # back to the agent with the reason
Logging and human oversight that help evidence EU AI Act Articles 12 and 14. A supervisory layer: it does not replace interlocks, safety instrumented systems or access control.
Tool calls with their arguments, and what the read tools returned: OpenTelemetry, LangSmith or MCP logs.
Reversals, chargebacks, incidents, QA audits, joined by trace id. Outcomes, never an LLM’s opinion.
The action your agent isn’t allowed to take today, and how often a wrong approval is acceptable.
Traces and outcomes for one action. A few hundred labelled runs is enough to start.
We find the plausible worlds, the checks that tell them apart and the rules, on a sealed share of your traces.
Your experts edit and lock the draft. Calibrated on held-out traces: a value report in your numbers.
Decisions logged next to the humans, never enforced.
Safe actions run; the rest check first, re-plan or ask.
Discovery and calibration use separate traces, so the bound is earned on data the draft never saw. No LLM is on the approval path, and a rough draft never makes it unsafe: it only asks a person more often.
Send us its traces and what happened afterwards. We’ll show how often it could have run safely, and what it would have stopped.
The SDK is open source (Apache-2.0): pip install --pre riskgate, with full documentation. If it helps, a star on GitHub helps others find it.
Try it from your own agent: agent skills for Claude, Gemini CLI and Codex (/plugin marketplace add reallysaurabh/riskgate in Claude Code).