VERDICT Sign in

Your agent just told a customer their refund was approved. Was it?

Verdict checks what an AI agent produced before it reaches anyone or triggers anything, and returns a ruling you can act on: pass, flag, or block — with the evidence behind it.

One API call per output. No second chat model grading the first one, no paragraph to re-parse into a boolean.

Three rulings

PASS

Nothing to answer for. It ships, and the case is logged.

FLAG

Someone should look. It reaches your review queue, not your customer.

BLOCK

It does not ship until a human says so.

Evidence, not a black box

Every ruling opens into the checks behind it: what was asked, what came back, how confident it was, and the threshold it was scored against.

#04821 agent:support-bot 14:02:11

“Good news — your refund for order #88213 has been approved.”

contradiction 0.93  high_risk_action refund BLOCK

record_state.refund_status = "denied"

Context contradiction probability 0.93 · confidence 0.96 BLOCK
High-risk action gate choice refund · confidence 0.95 FLAG
PII / sensitive data leak probability 0.04 · confidence 0.92 PASS

The verdict is the worst outcome across the checks that ran. If a check cannot be answered, it flags — an unverified output goes to a human rather than silently passing.

One call, wherever your agent runs

Post the output and the context it had. Every active check is batched into a single model call, so the cost scales with calls, not with questions.

$ curl -X POST https://verdict.example.com/v1/verify \ -H "Authorization: Bearer <your-key>" \ -d '{ "context_state": { "record_state": {"refund_status": "denied"} }, "agent_output": "your refund has been approved." }'

What comes back

A typed ruling with the evidence attached — something your code can branch on, not prose it has to interpret.

{ "case_number": "#04821", "verdict": "block", "confidence": 0.94, "checks": [ { "check_type": "contradiction", "probability": 0.93, "outcome": "block" } ] }

Eight checks, switched on per policy

You choose which run, write the rules in plain language, and tune the thresholds. Not every check is allowed to block — the ones that would cost more in false positives than false negatives only route.

Check Asks Strongest ruling
hallucination Is a claim unsupported by the source context? BLOCK
contradiction Does this conflict with the record or the conversation? BLOCK
policy_violation Does this break a rule you wrote? One question per rule. BLOCK
pii_leak Does this expose data the requester does not own? BLOCK
high_risk_action A refund, a deletion, an external send — should a human see it first? routes to review
code_convention Does this diff break a project convention? FLAG
tone_brand_safety Does this sound like your brand, or like a template? FLAG
routing_escalation Which queue, and does this need a human right now? routes to review

Cheap enough to run on everything

Verdict runs on TypeSafe's Jev — a System One model that does not generate text. It takes a state payload and typed questions and answers them directly, at roughly $0.042 per million input tokens. That is what makes checking every output viable instead of sampling a few and hoping.

Verdict never calls an LLM to write anything. It is not a chatbot, not a logging tool, and it runs on your own install against your own Jev key.