Evaluations

Score agent runs with judges, not scorers.

Point a rule at any trace, conversation, agent, or dataset. Get back a pass, a score, and the reason why. No hand-rolled scorers, no benchmark project.

01 · WHAT IT MEASURES

The three signals every agent owner asks for.

Pick the one that hurts most. Add the others when the first starts paying off.

OUTCOME

Track task completion.

The rule reads the trace and decides if the agent actually finished the work, versus claiming it did. Catches stub responses, partial loops, and silent skips.

USER SIGNAL

Track CSAT.

An LLM judge scores tone, helpfulness, and resolution from the conversation. Surfaces the runs your users would have rated low, without waiting for the survey.

QUALITY

Track output quality.

Agent Judge opens the files the run produced and checks them against your rubric. Catches the failures a transcript never shows: a wrong number in a report, a missing field, a contract clause that should not be there.

02 · AGENT JUDGE

Judge the work, not just the transcript.

Some failures never show up in a chat log. The report has the wrong total. A field is missing. A refund went out without approval. Agent Judge spins a fresh sandboxed agent for each run, opens the files it produced, and scores them against your rubric.

Deterministic gate first.

Structural checks (files present, JSON valid, fields counted) run before any sandbox. Format failures come back as an instant fail, with zero tokens spent.

A fresh agent per row.

Each dataset entry gets its own isolated, sandboxed agent. It reads the bundle the way a reviewer would, then commits to pass or fail with a score.

An auditable trail.

Every file the judge opened and every check it ran is recorded on the verdict. No black-box numbers, no guessing what it looked at.

A verdictFail · 0.30
refund-policy-judgeAGENT

A $4,200 refund was issued with no manager approval. policy.md section 3 requires sign-off above $1,000, and the approval field in decision.json is empty.

What the judge inspected
  1. 01read_filedecision.json
  2. 02read_filepolicy.md
  3. 03grepapproval
  4. 04read_fileaudit.log
03 · THE LOOP

Eval is the on-ramp to enforcement.

Every verdict is one click from a guard rule. Every guard rule is one click from re-evaluation. Same data, same instruction, compounding — that's the loop.

01trace

Run lands

Spans, tool calls, and conversation, captured automatically by the SDK or CLI.

02guard

Block in real time

Static and LLM judges enforce at the tool boundary, in under 50ms, before a bad action ships.

03eval

Score after the fact

Async judges read each run and return a pass, a fail, a score, and the reason.

04self-heal

Diagnose root cause

A sandbox replays the failing run and returns a root-cause diagnosis.

04 · HOW TO RUN IT

On demand, sampled, or backfilled.

ON DEMAND

Run it now.

Point a run at a trace, a conversation, an agent, or a dataset and get verdicts back. Useful for spot checks before you trust a rule.

SAMPLED

A slice of traffic.

Scope a run to an agent or a time window and sample N% of its traces. Continuous quality signal without scoring every single run.

BACKFILL

Over history.

Replay a past time window for an agent and score traces that already happened. The fastest way to validate a rule you just wrote.

05 · PYTHON SDK

Three lines from agent run to verdict.

staso.init wires tracing. conversation() groups the run. Verdicts come from the dashboard or from staso.evals.run — your call.

scripts/run_with_evals.pypython
01import staso
02 
03staso.init(agent_name="my-agent", agent_version="v1")
04 
05with staso.conversation("run-001"):
06 run_my_agent()
07 
08# Trigger an eval explicitly
09verdicts = staso.evals.run({
10 "session_id": "run-001",
11 "zero_config_names": ["task_completion_rate", "hallucination"],
12}).verdicts
06 · Get started

Stop spot-checking. Start scoring.

Wire the SDK in a minute. Attach a rule. Watch verdicts arrive on every run — no benchmark project, no scorer code, no engineer yak-shaving.