Agent definition
Judges and candidate selection
Agent definition fields for judges and candidate selection.
For: Plugin authors looking up agent fields.
Look up the fields below when editing an agent definition.
outcome.judge
string
The model that checks each answer against the rubric: a tenant's alias, such as
smart, or <provider>/<model>. Its call is its own, metered on the job, and never part of the agent's conversation. It must resolve to another model than the agent's: a judge on the agent's own model fails the job with JudgeSameModel before it is asked, and so does a reviewer on the writer's model and a best-of's judge on a candidate's. See A judge on another model.outcome.reviewer
string
An agent that checks each answer instead of a model (writer and reviewer): it runs as a child job and answers with a verdict. Set
judge or reviewer, not both; or neither, with a grader. A reviewer has no input_schema or output_schema.outcome.rubric
string
What a good answer must do.
outcome.rubric_file names a file of it instead, relative to the plugin's root. With neither, a judge or a reviewer checks the answer against the default deliverable rubric, whose text the plugin's version carries.outcome.files
string
read lets the judge read, read-only, the files of the job's own tree that the task, the tool results or the answer name, never the conversation; each read is audited (run.file_read). The one value is read; unset, the judge sees the rubric, the task and the answer. Only with outcome.judge: a reviewer reads files with its own tools, and best_of takes no files. See A judge that reads the job's files.outcome.verify_file
string
A harness agent's shell script, relative to the plugin's root, that the session's work directory must pass before the judge looks: it runs in the work directory after each session, and a non-zero exit fails the round with its output. Its text is read when the plugin loads and pinned when the job starts, so a job that rewrites it in its work directory is still judged by the original. See Reviewed changes.
changes
object
A harness agent ends with a changeset of its work directory instead of writing to its target. Its settings are:
review:required, orpolicywithpolicy: {paths, max_files, max_bytes, executables}.apply: the<tool>.<function>that applies an approved changeset, such asoz0_github.push_changes.arguments: more arguments for that call.base,commitandrepository: the job's input fields containing the repository archive, commit and name. Without an archive, a checkout the session makes is diffed against that commit.targetandevidence: the job's input fields containing the target plugin and the findings, eval runs and comparisons supporting the change. The change's record keeps them when they belong to the tenant.
on_recheck
string
What a failed re-check does when an approval resolves after the tenant's threshold (an hour by default):
refuse (the default) refuses the call, which the model reads with why; fail fails the job (RecheckFailed). See Checked again after a long wait.outcome.max_rounds
integer
How many verdicts a job may ask for, the first answer's included. Unset means 3, or one per model with
model.cascade; at most 10. An answer that has not passed by then fails the job with OutcomeNotMet.outcome.anchors_file
string
A YAML file of the judge's anchors, relative to the plugin's root: 3 to 30
{name, task, answer, pass}, the verdict a person gave. The judge judges them again at most daily when an eval routine runs the agent's evals, so a judge that drifted is told apart from an agent that did. Only with outcome.judge. See Anchors.quality.sample
map
Sampled judging of the agent's finished jobs, after the fact:
rate (0 to 1), judge (an alias or <provider>/<model>), rubric or rubric_file, an optional anchors_file, budget_usd per judge job (0.05 by default, at most 1) and daily_budget_usd per UTC day (1 by default, at most 100). A signal and a finding, never a block; jobs about a data subject only where the tenant allows it. Not beside outcome:; a data: local agent's judge must be local. A judge on the agent's own model still judges, with a judge_same_model finding, since its verdict is a weaker signal. See Sampled judging.outcome.grader
map
Checks each round's answer without a model call:
contains, not_contains, equals and one cel expression over output, calls (the job's model requests so far; for a harness agent, every session's turns) and seconds (since the job started), as a best-of's grader does, on every runtime. Alone it needs no rubric; with a judge or a reviewer it runs first, and a failed grader is the round's verdict. See A grader instead of a judge.best_of.n
integer
How many candidates of each job run in parallel, 2 to 10. Unset means one per entry in
models or agents, or 3.best_of.models
string[]
What the candidates run on, in turn: aliases or
<provider>/<model>. Unset runs the agent's own model N times. With data: local, only local/ models. For pydantic-ai, openai-agents and harness agents; a remote agent chooses its own model.best_of.agents
string[]
Other agents, harness agents included, that take the job as candidates instead. They must have the agent's input and output schemas. The agent's own
job_start and job_end hooks run once around them.best_of.judge
string
The model that picks the best candidate against
best_of.rubric (or best_of.rubric_file), or, with neither, the default deliverable rubric. It reads the candidates without their models' or agents' names, in an order shuffled per job.best_of.grader
map
Picks without a model instead:
contains, not_contains, equals and cel (over output, calls and seconds), as an eval case's expect. The cheapest candidate that passes is kept.