Evaluation

How we measure whether an agent's work is actually good

· May 7, 2026 · 7 min read

We publish one quality metric: 91% of agent deliverables are accepted without major revision. That number does a lot of work in our sales conversations, which means it deserves scrutiny — what counts, what doesn't, and how it is measured. This post is the long answer. It also explains why "passes tests" is the wrong bar for agent output, especially for a code review agent, where the tests measure the code and not the review.

The short version: quality measurement at FuturOne is three systems stacked on each other. Rubrics score artifacts. Calibration makes the agent's confidence mean something. Escalation thresholds decide what ships at all. The 91% only makes sense once you understand all three.

Rubric-based artifact scoring

Every artifact type has a rubric, versioned in our repo next to the workflow definitions, because an unversioned rubric drifts into whatever the loudest reviewer wanted last month. A code review is scored on finding correctness (is each flagged issue real?), severity calibration (does "critical" mean critical?), coverage (did it miss what a strong human reviewer would have caught?), convention adherence, and actionability of the suggested fixes. A research memo is scored on claim-source linkage, source quality, coverage of disconfirming evidence, and recency. Each dimension is scored 0–4 against anchored descriptions, not gut feel:

dimension: finding_correctness
weight: 0.35
scale:
  4: finding is real; root cause correctly identified
  3: finding is real; root cause partially identified
  2: finding is real; severity off by one level
  1: finding is technically real but immaterial in context
  0: finding is not a real issue

Who grades matters as much as the rubric. Graders are separate model passes with fresh context: they see the artifact, the inputs, and the rubric — never the producer's reasoning. When we let the producing model grade its own work in the same context early in the beta, scores ran roughly 0.6 points hot on a 4-point scale; the grader inherits the producer's blind spots along with its context. We also route grading to a different model than the one that produced the step where practical, which the model-agnostic routing layer makes cheap.

Model graders are themselves audited. A sample of runs is human-graded every week, and we track model–human agreement per domain; when agreement drops below our floor, that rubric gets revised before we trust another week of its scores. Humans do not agree perfectly with each other either — inter-reviewer agreement tops out well short of 1.0 — which is worth remembering: there is a ceiling on how precise any of this can be, and pretending otherwise is its own failure mode.

Confidence calibration

Every deliverable ships with confidence scores — per section for research memos, per finding for code reviews. A confidence score is only information if it is calibrated: when the agent says 90%, the acceptance rate of those items should be about 90%. So we treat calibration as a measured property, not an aspiration. Stated confidence is binned, plotted against actual acceptance outcomes, and tracked per domain alongside a Brier score.

It drifts. Last fall, the research agent ran about twelve points overconfident on claims supported by sparse sources — it confused "I found nothing contradicting this" with "this is well supported." The fix was twofold: the source verification pass that shipped this week now distinguishes corroborated claims from merely uncontradicted ones, and we re-fit the calibration map (isotonic regression over rolling 90-day outcomes) per domain. Calibration is also re-fit any time model routing changes, because a confidence map tuned for one model's habits does not survive a model swap.

Escalation thresholds: permission to say "I'm not sure"

Below a confidence threshold, the agent does not deliver with a shrug — it escalates. An escalation names the specific sections or findings in doubt and what would resolve them: a source it could not verify, a requirement that reads two ways, a test it could not run. The reviewer starts from the doubt, not from scratch.

Setting the threshold is a product decision wearing a statistics costume. Too low, and junk ships with a confident face. Too high, and the agent escalates everything, saving nobody any time — an agent that always asks is a search engine with extra steps. We tune thresholds per domain to hold escalations in roughly the 7–10% band of production runs, and we revisit the band when calibration shifts.

This is the part most evaluations skip: the 91% acceptance number is only trustworthy because the agent is allowed to decline to deliver. Remove escalation and acceptance falls — you would be forcing the agent's most uncertain work into reviewers' hands stamped as done.

What the 91% actually counts

Precisely: 91% of delivered artifacts are accepted without major revision, measured on production runs over a trailing quarter — not on a benchmark set we curated.

One more honesty requirement: acceptance alone is gameable. An agent optimized purely for acceptance learns to make fewer, safer claims — short reviews full of unfalsifiable observations get accepted at wonderful rates while catching nothing. So acceptance is always read against the coverage dimensions of the rubric. Acceptance up while coverage drifts down is not improvement; it is the agent learning to flatter its graders, and we treat it as a regression.

Why "passes tests" is not enough

For coding agents the industry default is to lean on CI: if the tests pass, the work was good. For a code review agent this is a category error — green CI tells you about the code under review, nothing about the review itself. The failure modes that actually destroy a review agent's value are invisible to tests:

The same logic generalizes. "The memo compiles" was never the bar for human analysts; "the code runs" should not be the bar for agents whose deliverable is judgment.

What we still get wrong

Three open problems, so this does not read like a victory lap. Our graders favored longer reviews for months before we noticed and added length-controlled scoring — verbosity bias is the most persistent grader pathology we have found. Rubric versioning makes longitudinal comparison messy: when the rubric improves, history scored under the old one is not strictly comparable, and we annotate rather than rescore. And the human-agreement ceiling means small quarter-over-quarter movements in any of these numbers are noise; we try hard not to celebrate them.

Every run in the dashboard shows its rubric scores and confidence next to the deliverable — the same data described here, per run, including in the demo. We think any vendor publishing an acceptance number owes you this level of detail about what it means. Ask for it.

See the scores on a real run

The live demo shows rubric scores, confidence, and verification output alongside the deliverable — the same evaluation pipeline described above.

Watch a Run
← Previous post
Zero retention is an architecture decision, not a policy promise