Non-determinism
A judge that returns 0.9, then 0.2, then 0.85 on comparable input is worth nothing.
Temperature 0.1 by default, a fixed output format, and results that pile up so the spread is visible before publishing.
Our metrics could prove an agent called the right tool, not that its answer was any good. I designed a no-code way for builders to turn their own criteria into an LLM judge, and test it before it scores anything that matters.
Describe what good looks like, get a complete judge, test it on something that really happened, and only then publish it.
Process
Five phases, and what each one produced. Pick any of them to jump there.
01Discover
Opened up: who stopped using our metrics, and why
02Define
Narrowed to one person and one hard problem
03Ideate
Opened up again: structure, flow and layout
04Design
Committed: three systems, one prototype
05Deliver
Cut the MVP and decided how we'd know
The problem
They could confirm an agent chose and called the right tool. Customers wanted to know whether the answer was right.
01Discover
UX research interviewed six quality engineers and four managers, an hour each. They build the agents customers get out of the box: if our metrics failed them, they would fail customers too.
A right-or-wrong result won't get a feature approved. Teams rebuilt the same metric on a 1–5 rubric.
“If you tell me it is sixty percent good, I'll be more confident to push the feature out.”
Metrics checked whether the agent called the right tool. Customers ask what it achieved.
“All they want is output eval.”
One definition of completeness can't serve summarisation, security analysis and an HR workflow at once.
A workflow that exits through its own error path still counts as a completed task.
“The agent has taken a failure route but I see that the metric says success”
Results landed above 90% while manual review said the experience was worse.
“None of the customers are interested in tool calling correctness or tool choice accuracy. All they want is output eval. They want to do evaluations with their own criteria and in the manner they want to do it.”
Teams sat at three levels, and each needed something different from us. The design had to serve all three.
Uses built-in metrics as they are, often unaware customising is possible.
Needs from usTo know a better fit exists
A library that shows what already exists
Clones a built-in and rewrites the judge prompt for one use case. Rarely reuses it.
Needs from usA supported clone-and-edit path
Start from a template, edit it safely
Runs on outcome-based custom metrics; keeps built-ins for debugging steps.
Needs from usA library, versions and consistent scoring
Versions, and judges tested before publishing
02Define
The person who knows what a good resolution note looks like is rarely the person who enjoys writing an evaluation script.
Sara
AI practitionerTechnical enough to build an agent, and specific enough to know exactly where it falls short.
The research findings laid out as a journey. Each low point lines up with the part of the design that answers it.
Doing
Feeling
Where the design steps in
What the session settled. An evaluation result has to answer three things: what went wrong, where, and how to fix it. That branch of the map became the testing system.
Four things decide whether anyone trusts an LLM judge. Each one got a mechanism in the product, not a warning in the docs.
A judge that returns 0.9, then 0.2, then 0.85 on comparable input is worth nothing.
Temperature 0.1 by default, a fixed output format, and results that pile up so the spread is visible before publishing.
Without a fixed rubric the model invents a new scale every run, so scores stop being comparable.
The rubric is captured at creation. Dimensions and scale belong to the metric, not the model.
If test inputs don't map to the prompt's variables, the judge scores half the context and fails silently.
Variables come from the execution context. Each becomes its own labelled test field, never one free-text box.
Builders describe quality in domain terms. Judges need evaluator-precise criteria. Reliability is won or lost in between.
Guided questions turn plain-language anchors into structured criteria, and a quality signal flags gaps before testing.
How might we
turn a domain expert's judgement into a judge they can trust, without making them a prompt engineer?
Each closes a failure we watched happen, and each costs the user a little freedom on purpose.
03Ideate
Anything that couldn't be defended by a line on the left of the board didn't leave the room.
One library, a short creation modal, and a single scrolling metric page that the test panel and version history open beside.
Sections, with a rail to move between them
Three systems in strict sequence, and one rule that bends the line back on itself: change the prompt and you test again.
Drawing each as a pair kept the conversation on the trade-off instead of on taste.
Decision 1How much should creating a metric lead you?
Decision 2How should a metric be laid out once it exists?
04Design
A weak answer early becomes a wrong score later, so two checkpoints sit between the systems.
Three short steps, in a fixed order, in a modal over the library.
Agent scope decides which context variables exist. The description shapes the judge most, so it is asked plainly and early.
Templates come from judges that already existed but were never surfaced here. The prompt is previewable before it is added.
Scoring type, categories and a good and a poor example are captured before anything is generated, so rubric, schema and aggregation agree.
This is the translation a domain expert shouldn't have to do by hand. Select an answer to see where it lands.
What Sara answers
What the judge receives
Role and output format are set for you.1 of 4
# ROLE System-owned
You are an expert quality evaluator for IT service management resolution notes.
# GOAL
Evaluate whether the resolution note contains enough detail for a human agent to understand what happened without reopening the ticket.
# CONTEXT
Original incident: {{incident_description}}
Resolution note: {{resolution_note}}
# EVALUATION CRITERIA
Score against three required elements: 1. Action taken 2. Root cause 3. Next steps
# SCORING RUBRIC
1.0 — All three elements present with specific detail0.7 — Two of three · 0.4 — Only one0.0 — None present, or note is generic/vague
# OUTPUT FORMAT System-owned
{"score": <float between 0 and 1>, "justification": "…"}
The choice sets the rubric, the aggregation and the output schema, so it can't come after.
{ "score": 0.72, "justification": "…" }
{ "score": true, "justification": "…" }
{ "score": "Successful", "justification": "…" }
Teams dropped the built-ins partly because a binary result wouldn't get a feature approved. The shape of the answer is why they'll use the metric at all.
The one wait in the flow. What arrives is a complete judge, which is the point of asking structured questions first.
The judge arrives finished. Editing it is reversible, and the parts scoring depends on are locked.
Steps to publish states what's done and what's left, and links to it, so the gate teaches instead of blocking.
Select a passage, refine it with AI, then append or replace, with undo always there. The pattern is borrowed from another team.
Pick a real execution, read the score and its reason, give your own score, and see how often you agree.
Pick a solution, a version and an actual execution. Each prompt variable gets its own labelled input.
The prompt stays beside the result, so diagnosing a strange score never loses your place.
A number says look. The justification says where. Then you give your own score.
You score, the judge scores, and the panel reports how often you agree. A lightweight trust check that needs no labelled dataset.
Published metrics are versioned and pre-selected for the agent they were built for.
{ score, justification, status }the same result shape as every built-in metric, so a custom score renders next to task completeness with no special casing
Fifteen phone screens, grouped by the rule that shaped them.
LibraryEach row keeps status, scope and provider
DefineProgress on top, actions at the bottom
TemplateOptional, so Skip is the main action
ScoringStill chosen before anything is generated
CreatingThe one wait, full screen
Metric promptSections become tabs; actions dock below
ProcessorsOne section per tab
Model settingsSave, Run test and Publish stay in reach
Steps to publishThe sheet names the next step
Prompt editThe passage being refined stays in view
Version detailsPlaceholders say what to write
Run testSearch runs, or tap a recent one
Test resultThe test gets a page of its own
Setup detailsTabs replace side-by-side panels
Score comparisonIts table becomes cards too
04Design, edge cases
Six moments where a quieter design would have left people guessing, and what happens instead.
The panel says so and tells you how to get one, instead of leaving an empty dropdown to interpret.
Publish locks again. A score only describes the prompt that produced it.
That's the point of the check. You see how often you agree and adjust the scoring before anyone else relies on it.
Every test appends a row instead of overwriting the last, and no cross-run average hides the spread.
It shows as an error row, never as a zero, because a zero would read as a verdict.
Editing a published metric creates a new version, and every run records the version it used.
05Deliver
First prove one builder can define, test and reuse one business-specific judge. Everything after that is sequenced, not rejected.
Input-based creation, a generated judge prompt, single-test calibration, the library and versions.
DataKit integration, bulk testing and dataset-based calibration.
Multi-criteria metrics, weighted scoring, building a metric conversationally.
Trace-based context and automated prompt optimisation, once labelled data exists.
| Area | In the MVP | Not yet | Why |
|---|---|---|---|
| Authoring | Structured inputs | Conversational creation | Reliability over ambiguity |
| Validation | Single-test calibration | Bulk judge-the-judge, annotations | Avoid a dataset dependency |
| Context | Execution parser variables | Tools framework, trace dependency | Avoid a platform blocker |
| Optimisation | Metric quality signals | Automated prompt optimisation | Needs labelled datasets |
| Complexity | Single criterion | Multi-criteria, multi-judge | Prove the baseline first |
Custom LLM metrics already exist inside the Skill Kit evaluation experience. Three months of telemetry, June to August 2026, is the number this work has to move.
Sub-production users, June to August 2026
Under 3% of evaluation users reached the page where a metric is defined.
| Signal | Production | Sub-production |
|---|---|---|
| Metric setup page | 6 views, 3 users, 3 customers | 297 views, 41 users, 34 customers |
| Metric playground page | None | 659 views, 26 users, 23 customers |
| Custom metric creation started | None | 7 times, 6 users, 6 customers |
| Metric published | None | 29 times, 6 users, 6 customers |
1,435 sub-production users opened the evaluations page in the same period.
custom metrics started or published in production. Three customers opened metric setup there all quarter.
Sub-production, by month
Setup views
Playground views
Creations started
Publishes
| Month | Setup views | Playground views | Creations started | Publishes |
|---|---|---|---|---|
| Jun | 85 | 82 | 0 | 0 |
| Jul | 103 | 237 | 2 | 11 |
| Aug | 109 | 340 | 5 | 18 |
A builder defines a business-specific metric without scripting or prompt engineering.
Measured by input completion, and how many who start a metric publish oneA builder tests judge behaviour before publishing or reusing it.
Measured by every published metric having a recorded test. The gate works, or it's a defect.The metric runs inside AutoEval and maps to the same result contract as everything else.
Measured by run completion and telemetry coverageThe numeric targets behind these signals are product proposals, not engineering commitments: a starting point for kickoff, and saying so is part of the work.
Reflection
A team should be able to say what good looks like for their agent in their own words, watch a judge apply it to something that really happened, disagree with it, and only then let it score anyone else's work.
That sentence is the test every screen here had to pass.