Cookbook 12 · Aria — Autonomous
Aria: Evaluation Harness from Intent
One sentence → Aria plans a faithfulness judge + a test set; you create them in the UI.
Aria — AutonomousAria15–25 min
What you build. Give Aria a one-line intent; it decomposes the plan (
judge.create + eval_dataset.create) in the Plans page. You confirm the plan and create the judge and test set in their own UI pages.
Surfaces: Plans Judges Test Sets Evaluations
What you learn
- Use the Plans page to turn an intent into a capability plan
- Read Aria's plan + autonomy dial
- Understand the planner needles (domain words)
- Create the planned artifacts in the Judges / Test Sets UI
- Where full hands-off autonomy stops today
Implementation flow
flowchart LR I[/"Intent: a judge for faithfulness + an eval dataset"/] --> PL[Aria Plans: decompose] PL --> S1[step: judge.create] PL --> S2[step: eval_dataset.create] S1 -.create in UI.-> JU[Judges › New judge] S2 -.create in UI.-> TS[Test Sets › New dataset]
Step-by-step UI only
Each step shows the exact navigation path, the fields to fill, the button to click, and a snapshot of the CALIBER screen you'll be on.
Compose › Planscreates · Aria Plans page openOpen Aria's planner. Click Plans in the left sidebar (under the Compose group). This opens the Aria Plans page, where you hand Aria a one-line goal and it decomposes it into platform steps you approve before anything runs.You'll see: The Aria Plans page with a Goal textarea, an Autonomy selector, and a Decompose goal button.Screen snapshotcaliber · Compose › PlansRead / inspect this surface — no form to fill.- State the intent. Paste the canonical one-line intent from intent.md into the Goal field. The exact wording matters: the default planner keys off the literal domain words
judgeandeval dataset, so keep both in the sentence (a natural phrasing like "test set" would need an LLM planner). Set Autonomy to Stop before each change (this is theask_eachlevel) so Aria pauses to confirm every mutate step.Fill inGoal Create a judge for answer faithfulness and an eval dataset to run it on. Autonomy Stop before each change (ask_each) Click Decompose goalYou'll see: A draft plan appears below the form.Screen snapshotcaliber · Compose › Plans › GoalDecompose goal - Review the decomposed plan. Confirm Aria produced exactly two steps from the one sentence —
judge.createandeval_dataset.create— matching expected-plan.json. This decomposition is the autonomous-orchestration showcase: one intent in, the right governed steps out.You'll see: The draft plan lists two mutate steps:judge.createandeval_dataset.create.Screen snapshotcaliber · Compose › Plans › (draft plan)Read / inspect this surface — no form to fill. Compose › Plans › (draft plan)creates · Approved planApprove the plan shape. With the plan indraftstatus, click Approve plan. This records that you accept the orchestration before any step runs.Click Approve planYou'll see: The plan moves toapprovedstatus and an Execute button appears.Screen snapshotcaliber · Compose › Plans › (draft plan)Approve planCompose › Plans › (approved plan)creates · Plan running, paused at judge.createExecute the plan. Click Execute. Because autonomy is ask_each, Aria pauses at the first mutate step (judge.create) and raises a permission interaction headed "Aria needs your approval" with the prompt "Approve step 1: … (judge.create)?" and two buttons, Approve and Deny. Important caveat (verified): the shippedHeuristicPlannerleaves each step's inputs empty and the interaction answer carries only{approved, choice, value}— it never injects a judge/dataset payload. So Approving a step makes Aria run its handler with empty inputs, which fails validation; the clean path is to Deny each step (which marks it skipped) and then create each real artifact on its own page in the following steps.Click ExecuteYou'll see: The plan starts running and pauses on thejudge.createstep with a pending permission interaction (an Approve / Deny prompt).Screen snapshotcaliber · Compose › Plans › (approved plan)ExecuteCompose › Plans › (interaction prompt)creates · judge.create step resolved (skipped)Resolve thejudge.createinteraction. Because the step has no inputs to run with, click Deny — this marks the step skipped (a terminal state) and advances the plan without a failed handler. (Clicking Approve would instead try to runjudge.createwith empty inputs and fail validation.) You will create the real judge on the Judges page shortly.Click DenyYou'll see: Thejudge.createstep flips to skipped and the plan pauses again on theeval_dataset.createpermission interaction.Screen snapshotcaliber · Compose › Plans › (interaction prompt)DenyCompose › Plans › (interaction prompt)creates · Plan completed (both steps skipped)Resolve theeval_dataset.createinteraction the same way — click Deny to skip it (the empty-inputs step can't run). With both steps now in a terminal state, the plan settles tocompleted.Click DenyYou'll see: Both steps show as skipped and the plan reachescompleted— the orchestration record is done. Now create the two real artifacts on their own pages.Screen snapshotcaliber · Compose › Plans › (interaction prompt)Deny- Create the judge that Aria's plan called for. Open Judges (under Evaluate), click + New Judge, and paste the fields from answer-faithfulness.judge.json — this file IS the
judge.createpayload. The Instructions reference{{ inputs }}/{{ outputs }}/{{ expectations }}(at least one is required); set Returns tobool.Fill inName AnswerFaithfulness Model your configured judge model (e.g. the gateway default) Returns bool Instructions You audit whether an assistant answer is faithful to its evidence. You are given the request {{ inputs }}, the model{{ outputs }}, and the reference{{ expectations }}.
Return true ONLY if every factual claim in{{ outputs }}is supported by{{ expectations }}(or by evidence cited in{{ inputs }}), and the answer makes no unsupported commitments. If any claim is unsupported, contradicted, or hallucinated, return false. Judge faithfulness only — not style.Click Create judgeYou'll see: An active judgeAnswerFaithfulnessappears in the Judges list. It is authored and reusable here, and because the Evaluations page exposes a Custom LLM judges section you can also pick it as aJudge.<id>grader there — which you do a couple of steps from now.Screen snapshotcaliber · Evaluate › Judges › + New JudgeCreate judge Evaluate › Test Sets › + New Test Setcreates · Test set support-faithfulness-eval support-faithfulness.dataset.json ↓Create the eval dataset Aria's plan called for. Open Test Sets (under Evaluate), click + New Test Set, and use the spec from support-faithfulness.dataset.json — this file IS theeval_dataset.createpayload Aria's plan named. The page creates an empty versioned test set (theeval_dataset.createcapability does the same); you add example rows separately afterward.Fill inName support-faithfulness-eval Owner admin Description Held-out support Q/A for faithfulness scoring. Empty versioned test set; add example rows after creation, then run it in Evaluations on the deterministic graders plus the AnswerFaithfulness judge under Custom LLM judges. Click CreateYou'll see: An empty test setsupport-faithfulness-evalappears in the Test Sets list at version 1.Screen snapshotcaliber · Evaluate › Test Sets › + New Test SetCreateEvaluate › Judges + Evaluate › Test Sets + Compose › Planscreates · Verified judge + test set + completed planVerify the end-to-end result. Confirm three things: Judges showsAnswerFaithfulnessactive; Test Sets showssupport-faithfulness-eval; and the Plans page shows the plancompletedwith both steps skipped (the orchestration record). Together these prove Aria turned one sentence into a governed two-step plan, and that you created the two real artifacts the plan called for.You'll see: An active judge, a real test set, and a completed two-step plan (steps skipped) — the scenario gate.Screen snapshotcaliber · Evaluate › Judges + Evaluate › Test Sets + Compose › PlansRead / inspect this surface — no form to fill.Observe › Observability + Evaluate › Evaluationscreates · (follow-up) Scored run + AnswerFaithfulness judge verdicts using the Aria-built harness(Follow-up) Put the harness to work. Add example rows tosupport-faithfulness-eval— either author them in the row editor at/eval-datasets/:id → + Add example, or in Observability open a trace, use its Add to test set panel, pick the test set under Choose test set, and click Add example (or reuse a starter dataset such ascookbooks/01-prompt-regression-lab/assets/dataset/). Then go to Evaluations, click Run evaluation, pick the test set, tick the built-in Graders, and tick yourAnswerFaithfulnessjudge under Custom LLM judges so it runs as aJudge.<id>scorer for an automatic per-row verdict. This is the same scored-run loop as SCN-01 / SCN-10.Fill inTest set support-faithfulness-eval Graders built-in scorers (Contains expected, Token F1, Non-empty) + AnswerFaithfulness under Custom LLM judges Click RunYou'll see: A scorecard run grades the rows on the deterministic scorers plus the AnswerFaithfulness judge column, closing the loop from one intent to a running evaluation harness.Screen snapshotcaliber · Observe › Observability + Evaluate › EvaluationsRun
Assets (copy-paste)
The exact files this cookbook uses — copy each into the matching field. Source: docs-site/cookbooks/12-aria-evaluation-harness/assets/.
# The intent you give Aria
## Canonical (works with the default HeuristicPlanner)
> Create a judge for answer faithfulness and an eval dataset to run it on.
Why this wording: the default planner proposes a step for each capability whose
**domain word** appears in the goal. "judge" → `judge.create`; "eval dataset" →
`eval_dataset.create`. Keep both literal needles in the sentence.
Autonomy: **ask_each** (pauses on every mutate step so you confirm each input).
## Natural-language variant (needs an LLM planner)
> Set up faithfulness scoring for our support answers, with a test set to run it on.
This reads better but relies on an LLM planner to map "test set" → eval_dataset
and "faithfulness scoring" → judge. With the default heuristic planner, use the
canonical wording.
{
"goal": "Create a judge for answer faithfulness and an eval dataset to run it on.",
"autonomy": "ask_each",
"expected_steps": [
{
"capability_key": "judge.create",
"tier": "mutate",
"interaction": "confirm/refine the judge spec (judges/answer-faithfulness.judge.json)"
},
{
"capability_key": "eval_dataset.create",
"tier": "mutate",
"interaction": "confirm/refine the dataset spec (datasets/support-faithfulness.dataset.json)"
}
],
"notes": "Step order follows registry order; there are no inter-step dependencies in the default planner. Under autonomy=ask_each each mutate step raises one interaction before it runs. Under approve_plan/auto_guarded both run automatically once the plan is approved."
}
{
"name": "AnswerFaithfulness",
"model": "set to your configured judge model (e.g. the gateway default)",
"feedback_value_type": "bool",
"instructions": "You audit whether an assistant answer is faithful to its evidence. You are given the request {{ inputs }}, the model {{ outputs }}, and the reference {{ expectations }}.\n\nReturn true ONLY if every factual claim in {{ outputs }} is supported by {{ expectations }} (or by evidence cited in {{ inputs }}), and the answer makes no unsupported commitments. If any claim is unsupported, contradicted, or hallucinated, return false. Judge faithfulness only — not style.",
"notes": "This IS the judge.create payload — POST it to /judges (it is a POST /judges body). Aria's plan proposes the judge.create step, but the shipped interaction answer can't carry the payload (only {approved,choice,value}), so create the judge via its route; an LLM planner would fill the step inputs for full autonomy (see ARIA-AUTONOMY.md). Instructions reference {{ inputs }}/{{ outputs }}/{{ expectations }} — at least one template variable is required."
}
{
"name": "support-faithfulness-eval",
"description": "Held-out support Q/A for faithfulness scoring. Aria creates the empty versioned test set; add example rows after creation, then run it in Evaluations with the deterministic graders plus AnswerFaithfulness ticked under Custom LLM judges (it runs as a Judge.<id> scorer).",
"tags": ["aria-created", "faithfulness", "support"],
"notes": "Answer to the Aria eval_dataset.create interaction (same shape as a POST /eval-datasets body; owner is forced to the acting identity). Example rows are NOT added by Aria — add them via POST /eval-datasets/{id}/examples or harvest-from-trace, e.g. reuse cookbooks/01-prompt-regression-lab/assets/dataset/ as a starting point."
}
Evaluation & quality gates
| Quality gate | Target |
|---|---|
| Plan decomposed from intent | judge.create + eval_dataset.create present |
| Artifacts exist | active judge + test set in the UI |
Developer notes & gotchas
- Aria's planning from intent is real; execution is via the artifact UI pages because the shipped planner emits empty step inputs (see ARIA-AUTONOMY.md).
- The default planner keys off domain words — keep “judge” and “eval dataset” literal in the intent.
eval_dataset.createmakes an empty test set; add rows from Observability afterward.