| name | omniroute-cli-eval |
| description | Run and manage OmniRoute eval suites from the CLI — create suites, run benchmarks, watch live results, view scorecards, and compare model performance. Use when the user wants to benchmark models, validate quality regressions, or automate LLM evals in CI. |
OmniRoute — CLI Evals
Requires the omniroute CLI. See CLI entry-point skill for install + global flags.
What are evals?
Evals are automated test suites that score LLM outputs against expected answers or rubrics. OmniRoute stores suites and run results in its local database.
Eval suites
omniroute eval suites list
omniroute eval suites list --json
omniroute eval suites get <suiteId>
Create a suite
omniroute eval suites create \
--name "code-quality" \
--rubric "exact-match" \
--samples-file ./samples.jsonl
Rubric options: exact-match, contains, llm-judge, regex.
--samples-file format (one JSON object per line):
{"input": "What is 2+2?", "expected_output": "4"}
{"input": "Translate 'hello' to Spanish", "expected_output": "hola"}
Run an eval
omniroute eval suites run <suiteId> \
--model claude-sonnet-4-6
omniroute eval suites run <suiteId> \
--model gpt-4o \
--watch
The run is asynchronous. Use --watch for a live terminal dashboard or poll manually:
RUN_ID=$(omniroute eval suites run <suiteId> --model claude-sonnet-4-6 --output json | jq -r '.id')
omniroute eval get $RUN_ID
Manage runs
omniroute eval list
omniroute eval list --json
omniroute eval get <runId>
omniroute eval results <runId>
omniroute eval scorecard <runId>
omniroute eval cancel <runId>
Scorecard output
omniroute eval scorecard <runId> --output json
Response fields per sample:
{
"id": "sample-1",
"score": 0.95,
"passed": true,
"input": "What is 2+2?",
"output": "4",
"expected": "4"
}
Comparing models
Run the same suite against multiple models and compare:
for MODEL in claude-sonnet-4-6 gpt-4o gemini-2.0-flash; do
omniroute eval suites run $SUITE_ID --model $MODEL --output json | jq '{model: .model, score: .score}'
done
CI integration
SCORE=$(omniroute eval suites run $SUITE_ID --model claude-sonnet-4-6 --output json | jq -r '.score')
python3 -c "import sys; score=float('$SCORE'); sys.exit(0 if score >= 0.90 else 1)"
Errors
suites create fails with invalid rubric → use one of: exact-match, contains, llm-judge, regex
suites run returns model not found → verify model ID with omniroute models --search <name>
eval get shows status: failed → check omniroute logs --search eval for error details
scorecard returns empty results → the run may still be running; poll omniroute eval get <runId> until status is completed