eval-run
Skill0 starsChanged 11 days agoApache-2.0View on GitHub
Runs Google ADK evaluations and produces an exit code that means something. `adk eval` prints a pass/fail summary but exits 0 whatever happened through ADK 2.12.0 (from 2.13.0 it exits 1 on a failure, still with no pass-rate, regression or budget gate) and counts NOT_EVALUATED cases as failures, so this wrapper reads the result files it wrote and separates passed, failed and never-scored. Covers the right command for each layout, case selection, detailed results, GCS eval storage, the pytest AgentEvaluator path (including evaluating one sub-agent by name and generating a pytest gate for an existing project), batch runs from a registry manifest that can be generated by discovery, repeated runs kept separate so reliability can be measured, and conformance recording and replay. Use when asked to "run the evals", "run adk eval", "run this evalset", "run it five times", "run the suite in CI", "evaluate just this sub-agent", "add a pytest gate", "record / replay conformance", or "why did adk eval pass when cases failed". Don't use to interpret the results (use `/adk:eval-analyze`), to write cases (use `/adk:eval-create`), to choose metrics (use `/adk:eval-criteria`), or to generate CI workflows (use `/adk:eval-ci`).
- Reads credentials
2 other projects use a version of this.
Adopted by
Most recently taken up by
- confident-ai/eval-skillstheir own version, first seen Oct 13, 2026
- AaravChadha/acstacktheir own version, first seen Jul 30, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- confident-ai/eval-skills★ 11same name
- AaravChadha/acstack★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository10 other files it gives its agents.
- adkSkill
- agent-createSkill
- agent-debugSkill
- agent-reviewSkill
- eval-analyzeSkill
- eval-ciSkill
- eval-createSkill
- eval-criteriaSkill
- eval-reviewSkill
- eval-simulationSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 62
When several evalsets or configs exist, ask which before running.
- Very specific: line 64
Options and cost: Before spending anything, say what it costs.
- Very specific: line 99
Never adk eval alone in CI.
- Very specific: line 120
NOT_EVALUATEDis not a regression: Default --not-evaluated fail in CI, because a suite that silently stops scoring is worse than one that … - Very specific: line 128
A turn with no reply sinks the whole run through 2.13.0: If the agent answers a user turn with no event, adk eval and AgentEvaluator raise …
- Very specific: line 134
Deferred capacity is not an
adk evaloption: No eval entry point takes a RunConfig, so a bulk run on ServiceTier.DEFERRED (2.10+, …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Run ADK evaluations
The thing to know before anything else: through ADK 2.12.0, adk eval exits 0
whatever happened. It prints
Eval Run Summary
expense_claims:
Tests passed: 3
Tests failed: 1and returns success. A CI step calling it directly on a 2.12 or older pin passes
forever. It also counts
NOT_EVALUATED in the failed column, so its own summary cannot distinguish a
regression from an unreachable judge. Everything here runs through a wrapper that
reads the result files and reports the three statuses separately. (From 2.13.0
adk eval exits 1 when a case fails or none ran; the wrapper stays the
recommended command on every version, because only it gates on a pass rate,
regressions or budgets and keeps never-scored apart from failed.)
${CLAUDE_SKILL_DIR} is this skill's directory.
Flow
Discover. Layout, runner, backend, criteria and their cost:
python3 ${CLAUDE_SKILL_DIR}/../adk/scripts/check_env.py <agent-dir> --config <config> python3 ${CLAUDE_SKILL_DIR}/scripts/run_evals.py <agent-dir> --dry-run--dry-runprints the exact commands, before any credential check and without needing ADK installed.- Report. The runner it resolved, the config it will use (and any others it found), the metrics and their cost tier, and how many cases will run. When several evalsets or configs exist, ask which before running.
- Options and cost. Before spending anything, say what it costs. A judge
metric costs one model call per invocation per sample: 20 cases with 2 turns,
two rubric metrics at 3 samples is about 240 judge calls, times
--runs. Offer the cheap subset first. - Confirm, run, hand off. Then send the results to
/adk:eval-analyze.
Which command for which layout
Recipes layout — the config is never auto-discovered, so always pass it:
adk eval <project>/app <project>/tests/eval/evalsets/happy.evalset.json \
--config_file_path <project>/tests/eval/eval_config.jsonFlat layout — test_config.json beside a single evalset is found
automatically; with several evalsets, pass it explicitly:
adk eval <agent> <agent>/happy.test.jsonSelected cases only: append them to the evalset path
(happy.test.json:edge_frozen_cost_centre,edge_over_limit).
The honest gates
| Route | Gate | Use it |
scripts/run_evals.py | real exit code from the result files | anywhere a result must gate something |
pytest with AgentEvaluator | pytest's own code; AgentEvaluator raises | projects with tests/eval/test_eval.py; the only way to evaluate one sub-agent (--agent-name) |
scripts/run_registry.py | one code for a batch of suites | several agents, or several tiers |
scripts/conformance.py test | adk conformance test does raise | drift after a refactor |
Never adk eval alone in CI. A project with no pytest gate gets one from
gen_test_eval.py.
Decision rules
- Repeat runs with
--runs N, notnum_runs.AgentEvaluator(num_runs=N)averages scores across runs, which hides the variance you are measuring.--runs Nkeeps each run's results separate so/adk:eval-analyzecan compute pass@k. - Concurrency is fixed at 4 cases through 2.13.0.
adk evalhas no--parallelismand drops aparallelismconfig key (CFG077); main after 2.13.0 adds both, plusAgentEvaluator.evaluate(parallelism=). To go easier on a quota today, split the evalset;run_evals.py --dry-runsays the same. - An empty suite fails on 2.10+, and used to pass.
AgentEvaluator.evaluateandevaluate_eval_setraiseValueErrorwhen there are no eval cases, no*.test.jsonunder the directory, ornum_runs < 1. On 2.9.2 all three passed silently, so a gate that had lost its cases was green. - Efficiency values are not verdicts. On 2.10+ every run also reports
tool_call_count_v1,inference_call_count_v1,token_usage_v1andinvocation_duration_v1as informational. They cannot be configured and they gate nothing;/adk:eval-analyzekeeps them out of the pass/fail count. NOT_EVALUATEDis not a regression. Default--not-evaluated failin CI, because a suite that silently stops scoring is worse than one that fails. Usewarnlocally, where exit 3 means "inconclusive" rather than "broken".- Check the backend before spending. Metrics scored by the Vertex evaluation
service need
GOOGLE_API_KEY, or a project and location with ADC; without either you get a page of never-scored cases. - A flat-turn legacy file cannot go through
adk eval. It crashes inside ADK; the wrapper refuses it and points atmigrate_legacy.pyor the pytest path. - A turn with no reply sinks the whole run through 2.13.0. If the agent
answers a user turn with no event,
adk evalandAgentEvaluatorraiseValueError: Inferences should match conversations in eval caseand score no case;run_evals.pynames it and exits 2. Give the agent a fallback reply or move the turn; main records it as a turn with no final response, which only a response metric fails (cli-reference.md). - Deferred capacity is not an
adk evaloption. No eval entry point takes aRunConfig, so a bulk run onServiceTier.DEFERRED(2.10+, Preview, allowlisted) is your own runner loop (batch-and-gating.md). - Run the cheap tier first. There is no point paying a judge to score an agent that called the wrong tool.
- Resolve the runner honestly.
$ADK_PYTHON, a project venv, anadkon PATH, thenuv run --with "google-adk[eval]==2.13.*". If none works, say so and give the install command. - Recording conformance needs a running dev server on 127.0.0.1:8000 started with the recordings plugin; the script checks the port and prints the command.
References
| Question | File |
Every flag of adk eval, and what it does not have | cli-reference.md |
The pytest path, num_runs, and sub-agents | pytest-agent-evaluator.md |
| Batch manifests, tiers and gating; deferred (off-peak) capacity | batch-and-gating.md |
| Conformance recording and replay | conformance.md |
| GCS eval storage and live mode | gcs-and-live.md |
| Behavioural pytest assertions and batch pass rates | behavioral-tests.md |
| A global pass threshold and the other merge rules | merge-gates.md |
Templates: assets/templates/{eval_registry.json,test_eval.py.tmpl,test_behaviors.py.tmpl,conformance_spec.yaml}.
Scripts
| Command | Does | Exit codes |
scripts/run_evals.py <agent-dir> [--evalset F] [--config F] [--cases a,b] [--runs N] [--detailed] [--storage gs://] [--not-evaluated fail|warn] [--min-pass-rate P] [--dry-run] | runs and gates; --min-pass-rate also fails a run whose pass rate is below P | 0 clean, 1 failures, 2 env, 3 only never-scored |
scripts/run_registry.py --registry F [--tier pr|nightly] [--suite NAME] / --init [--root D] [--out F] | batch of suites; --init builds the manifest by discovery and writes "frozen": false on each suite (the template marks trajectory_pr frozen, judge_nightly not); a frozen suite's cases are protected by manage_cases.py (EVS120) | 0 clean, 1 failures, 2 env |
scripts/run_pytest_eval.py <path> [-k EXPR] [--num-runs N] [--agent-name N] [--behavioral [--runs N] [--min-pass-rate P]] | the pytest gate; without --behavioral it ignores test_behaviors.py; with it, it runs only that file, each behaviour --runs times (sets ADK_EVAL_RUNS), gated per behaviour on --min-pass-rate (sets ADK_EVAL_MIN_PASS_RATE, default 1.0); failing runs show as xfail and test_pass_rates is the gate | pytest's code, 2 for env |
scripts/gen_test_eval.py [path] [--out F] [--agent-name N] [--behavioral] [--dry-run] | writes a pytest gate for an existing project; --behavioral writes tests/eval/test_behaviors.py instead (run_turn, Turn, three behaviours taken from the happy, edge and no-call cases) | 0, 1 refused, 2 usage |
scripts/conformance.py record <case-dir> [--mode none|sse] / test [dirs] [--generate-report] [--skip-recordings-check] | record and replay through the runner; test --mode replay refuses (CNF020) a case with no generated-recordings.yaml, because ADK skips those with a warning and can still exit 0; refuses a case with input.yaml / test.yaml and no spec.yaml (CNF015; the record --help names those but only spec.yaml is read) and the bidi mode ADK cannot record (CNF021) | 0, 1 failed, 2 env |
Completion checklist
- The runner and ADK version were reported, not assumed.
- The cost tier was stated before anything was spent.
- The recipes layout, or any multi-evalset run, got an explicit
--config_file_path. - Failures and never-scored cases were reported separately.
- Result files were located and handed to
/adk:eval-analyze. - Nothing in CI relies on bare
adk eval(an error before 2.13, a warning from 2.13:CI001).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

