Skip to main content

Overview

Every benchmark defines a jury --- a cascade of judge tiers that evaluate the agent’s workspace. Judges come from the Agent Judge project. Benchmarks wire them together in benchmark.yaml.

Cascaded Tiers

Tiers run in order. Each tier has a policy that determines whether evaluation continues:
PolicyBehavior
REJECT_ON_ANY_FAILIf any check fails, stop. Lower tiers are not evaluated.
ACCEPT_ON_ALL_PASSIf all checks pass, continue.
FINAL_TIERLast tier. Its result is the overall verdict.
This is how the code-coverage benchmark grades:
If the build fails (T0), coverage is never measured. If coverage regresses (T1), improvement is never checked. This prevents misleading scores from broken code.

Built-in Judge Types

These are registered in JudgeFactory and available in any benchmark:
TypeModuleWhat it checks
file-existsagent-judge-coreA specific file exists in the workspace
file-contentagent-judge-coreFile content matches expected (exact or contains)
maven-buildagent-judge-exec./mvnw <goals> exits successfully
coverage-preservationagent-judge-execJaCoCo coverage >= baseline
coverage-improvementagent-judge-execJaCoCo coverage >= threshold
test-quality-llmagent-bench-agentsLLM evaluates test practice adherence

file-exists

file-content

maven-build

coverage-improvement

test-quality-llm

The LLM judge reads the prompt file, evaluates the workspace, and returns structured scores. Requires running via agent-bench-agents module (which has the Claude SDK dependency).

Writing a Custom Judge

Judges implement the Judge interface from agent-judge-core:
Register it in JudgeFactory:

Benchmark YAML Schema

Task YAML Schema

Each task within a benchmark: