eval-criteria
Skill0 starsChanged 12 days agoApache-2.0View on GitHub
Chooses and configures Google ADK evaluation criteria, and writes the eval config. Covers all 13 configurable prebuilt metrics (and the 4 always-on efficiency ones), thresholds and what a threshold can and cannot prove, trajectory match types (EXACT, IN_ORDER, ANY_ORDER, ignore_args), judge model options and sampling cost, rubric authoring including restraint rubrics that prove an agent held back, groundedness checks, safety and the other Vertex-only metrics, custom metrics, and cost-tiered configs for CI. Use when asked "which metric should I use", "set thresholds", "write rubrics", "add an LLM judge", "check groundedness or hallucinations", "test that the agent refuses", "why is this metric always passing", or to create eval_config.json / test_config.json. Don't use to write eval cases (use `/adk:eval-create`), to validate existing eval files (use `/adk:eval-review`), to run evals (use `/adk:eval-run`), or to set up simulated users (use `/adk:eval-simulation`).
- Reads credentials
1 other project uses a version of this.
Adopted by
Most recently taken up by
- ssv445/claude-skillstheir own version, first seen Mar 24, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- ssv445/claude-skills★ 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-reviewSkill
- eval-runSkill
- eval-simulationSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 24
Every metric answers one specific question.
- Distinctive: line 76
Use an alias id, and 3 samples for a majority vote at moderate cost.
- Very specific: line 77
Rubrics are yes/no claims: No 1-5 scales: graded prompts make scores cluster in the middle, where they decide nothing.
- Very specific: line 87
A
parallelismkey is a promise only main keeps: Every release through 2.13.0 drops a top-level parallelism silently (cases run 4 at a …
≈ “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
Choose and configure ADK evaluation criteria
Every metric answers one specific question. Picking them is choosing which
questions the suite asks, and what each run costs. The two decisions that go
wrong most often: leaving judge_model unset (it defaults to a deprecated model
sampled five times), and gating pull requests on metrics that pay a model.
${CLAUDE_SKILL_DIR} is set by the skill runtime to this skill's own
directory. Use it verbatim in every command below; a sibling skill's scripts
are at ${CLAUDE_SKILL_DIR}/../<skill>/scripts/.
Flow
Discover. What exists, what the backend can serve, what the cases look like:
python3 ${CLAUDE_SKILL_DIR}/../adk/scripts/discover.py <agent-dir> --focus layout,env,agent,evalsets,configs python3 ${CLAUDE_SKILL_DIR}/scripts/validate_config.py <agent-dir> # when a config exists- Report. Current criteria and their cost tier, the backend, whether cases carry reference responses, and what is missing.
Options. Usually a choice among:
Option Cost When deterministic gate free there is no config, or CI needs something to run per change add semantic response matching judge wording is free but meaning is fixed add groundedness judge the agent repeats numbers and ids from tools add restraint guarantees judge the agent can do something it must sometimes refuse add safety vertex the agent talks to end users - Confirm, then generate with
--dry-runfirst, show the config, write it, and validate what you wrote.
Decision rules
- Start deterministic.
tool_trajectory_avg_scoreat 1.0 costs nothing, runs in seconds, and is the only metric that catches a skipped validation. Add paid metrics when there is a question they answer that this one cannot. - Pick the match type deliberately.
EXACTfor a pipeline that must not vary.IN_ORDERwhen a schema retry or a self-correction is legitimate and should not fail the case.ANY_ORDERwhen several calls are genuinely unordered, such as parallel lookups. - Leave
ignore_argsoff in the suite that gates releases. With it on, the right tool called with the wrong claim id passes. response_match_scorecompares wording, not meaning. Set it to 0.0 for a trajectory-first suite, use 0.8 only where the reference text is genuinely stable, and reach forfinal_response_match_v2when the meaning is what matters.- Always set
judge_modelandnum_samples. Unset meansgemini-2.5-flash— which this plugin's policy treats as retiring — at 5 samples per invocation. Use an alias id, and 3 samples for a majority vote at moderate cost. - Rubrics are yes/no claims. No 1-5 scales: graded prompts make scores cluster
in the middle, where they decide nothing. One property per rubric, named in
terms a reader of the transcript could check: a compound sentence grades
inconsistently (
RUB006). - A rubric about actions needs a judge that sees actions. "Did it call /
run / check X" under the final-response metric is graded through the final
answer (its judge reads the tool calls only as evidence for it); put it under
rubric_based_tool_use_quality_v1or beside a trajectory metric (CFG075, info). Through ADK 2.13.0 the multi-turn trajectory judge crashes on an agent with a built-in tool (CFG076, warn; needs--agent-dir). - A
parallelismkey is a promise only main keeps. Every release through 2.13.0 drops a top-levelparallelismsilently (cases run 4 at a time); main after 2.13.0 reads it.CFG077warns on a runner ≤ 2.13, is info on a newer one, and is an error on every version for a value main would reject (below 1, fractional, not a number). It is not the judge'sparallelism_limit. - Through 2.13.0 a rubric the judge skips is averaged away. A missing or
"almost" verdict leaves the rubric out of the mean, so two yeses and a skip
pass 0.7; main scores no such sample. Keep
num_samplesat 3 or more and check the rubric ids in the results. - Through 2.13.0 keep one rubric list on every turn. The judge parses every
reply against the last turn's list, so an earlier turn's own rubrics are
dropped as "not found" and the case can pass with one failing (
EVS121in/adk:eval-review); main after 2.13.0 scores each turn on its own. Put shared rubrics at case level, and give every invocation rubric atype. - Restraint needs its own metric. Trajectory matching and response quality
both pass an agent that does too much.
rubric_based_tool_use_quality_v1at threshold 1.0 with "does NOT call X when Y" is the only check that fails it. - Groundedness is not correctness.
hallucinations_v1asks whether each sentence is supported by what the tools returned. Setevaluate_intermediate_nl_responsesto true or only the last message is read. - Know which metrics go through the Vertex evaluation service.
safety_v1,response_evaluation_scoreand themulti_turn_*metrics need either aGOOGLE_API_KEYor a project and location with ADC, whateverGOOGLE_GENAI_USE_VERTEXAIsays. They are thevertextier because it is a separate, separately billed service that ignoresjudge_model_options— not because a key is insufficient. - The four efficiency metrics cannot be configured. On ADK 2.10+
tool_call_count_v1,inference_call_count_v1,token_usage_v1andinvocation_duration_v1are appended to every eval automatically and reported as informational values. Naming one incriteriais an error at run time, so never write one into a config — there is no flag for it and nothing to add. - Check the range before the threshold.
response_evaluation_scoreruns 1 to 5; a threshold of 0.8 on it can never fail. - Where the file goes matters.
test_config.jsonbeside a single evalset is found automatically; anything else must be passed with--config_file_path.
References
| Question | File |
| All 13 configurable metrics, plus the 4 always-on efficiency ones | metric-catalog.md |
| Criterion fields, judge options, custom metrics, config shape | criterion-schemas.md |
| Writing rubrics a judge can answer consistently | rubric-authoring.md |
| Groundedness and safety in depth | groundedness-and-safety.md |
| What Vertex-backed metrics require | vertex-requirements.md |
| Writing a custom metric function ADK will call correctly | custom-metrics.md |
Templates: assets/templates/configs/ (one per criterion family) and
assets/templates/rubrics/ (restraint, response quality, trajectory quality).
Scripts
| Command | Does | Exit codes |
scripts/metric_info.py [name] [--tier pr|nightly] [--user-sim] [--json] | the catalog (17 entries: 13 configurable, 4 informational), or one metric in detail | 0, 2 unknown name |
scripts/gen_config.py --tier pr|nightly|custom [--metrics ...] [--rubrics-file F] [--judge-model M] [--num-samples N] [--style snake|camel] [--out F] [--dry-run] | writes a config and validates it. No tier emits an efficiency metric and --metrics refuses one (exit 2) — there is nothing to add, so there is no flag for it | 0, 1 contradictory, 2 usage |
scripts/validate_config.py <config|agent-dir> [--agent-dir D] [--no-backend] [--no-probe] [--adk-version V] [--strict] | checks an existing config, and reports the resolved adk_version: CFG070 (error) for an efficiency metric named in criteria, CFG071 (info) that 2.10+ reports the four anyway, CFG072 (info) a multi_run_config only unreleased main reads and CFG073 (error) a malformed one, RUB006 (warn) a compound rubric, CFG075 (info) an action rubric under the final-response judge with no trajectory metric, CFG076 (warn through 2.13, info on a newer runner) the multi-turn trajectory judge with a built-in tool on the agent (needs --agent-dir), CFG077 a top-level parallelism only unreleased main reads (warn through 2.13, info on a newer runner, error for a value below 1 or not a whole number). --no-probe skips resolving the runner, --adk-version states it | 0 clean, 1 findings, 2 bad target |
scripts/gen_rubrics.py --kind positive|restraint|trajectory [--tool T --condition C] [--spec JSON] [--lint F] | builds and lints rubrics | 0 clean, 1 findings, 2 usage |
scripts/gen_custom_metric.py --name N --out F [--kind sync|async|trajectory-precision|trajectory-recall] [--with-args] [--threshold F] [--with-metric-info] [--dry-run] | scaffolds a custom metric that reads criterion.threshold and returns per-invocation results, plus its criteria + custom_metrics config snippet (also kept as CONFIG_SNIPPET); the trajectory kinds score extra or missing tool calls as a fraction, multiset match, order ignored | 0 written, 1 refused, 2 usage |
Completion checklist
- Every judge metric names its model and sample count explicitly.
- No Vertex-only metric is configured without a project and location, or it is deliberately confined to a nightly config.
- Thresholds are inside each metric's range, and none is accidentally 0.
- Rubrics pass the lint: binary, observable, one property each.
- The config is where the command that runs it will actually find it.
validate_config.pyexits 0 on the file that was written.
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.

