Skip to content
Development
Skill

/cli-eval

Create and run evaluation suites, watch live benchmark progress, view scorecards, compare model performance, and integrate eval runs with CI workflows from the CLI.

From plugin
omniroute
86k46 skills

Claude Code

$ npx -y skills add cheaper-inference/omniroute --skill cli-eval --agent claude-code

SKILL.md

cli-eval.SKILL.md
name: cli-eval
description: Create and run evaluation suites, watch live benchmark progress, view scorecards, compare model performance, and integrate eval runs with CI workflows from the CLI.

<!-- generated by src/lib/agentSkills/generator.ts; manual edits will be overwritten -->

Overview

Create and run evaluation suites, watch live benchmark progress, view scorecards, compare model performance, and integrate eval runs with CI workflows from the CLI.

Quick install

npm install -g omniroute   # or: npx omniroute
omniroute --version

Subcommands

`eval`

**Example:**

omniroute eval

`eval suites`

**Example:**

omniroute eval suites

`eval list`

**Example:**

omniroute eval list

`eval get <suiteId>`

**Example:**

omniroute eval get <suiteId>

`eval create`

**Flags:**

  • `--file <path>`

**Example:**

omniroute eval create

`eval run <suiteId>`

**Flags:**

  • `-m, --model <id>`
  • `--combo <name>`
  • `--concurrency <n>`
  • `--tag <tag>`
  • `--watch`

**Example:**

omniroute eval run <suiteId>

`eval list`

**Flags:**

  • `--suite <id>`
  • `--status <s>`
  • `--since <ts>`
  • `--limit <n>`

**Example:**

omniroute eval list

`eval get <runId>`

**Example:**

omniroute eval get <runId>

`eval results <runId>`

**Flags:**

  • `--failed`

**Example:**

omniroute eval results <runId>

`eval cancel <runId>`

**Flags:**

  • `--yes`

**Example:**

omniroute eval cancel <runId>

`eval scorecard <runId>`

**Example:**

omniroute eval scorecard <runId>

`simulate [prompt]`

**Flags:**

  • `--file <path>`
  • `-m, --model <id>`
  • `--combo <name>`
  • `--reasoning-effort <level>`
  • `--thinking-budget <n>`
  • `--explain`

**Example:**

omniroute simulate [prompt]

<!-- skill:custom-start --> <!-- Migrated from skills/omniroute-cli-eval/SKILL.md (preserved curated content) -->

OmniRoute — CLI Evals

Requires the `omniroute` CLI. See [CLI entry-point skill](https://raw.githubusercontent.com/diegosouzapw/OmniRoute/main/skills/cli-serve/SKILL.md) 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                       # List all eval suites
omniroute eval suites list --json                # JSON output

omniroute eval suites get <suiteId>              # Full suite definition

Create a suite

omniroute eval suites create \
  --name "code-quality" \
  --rubric "exact-match" \
  --samples-file ./samples.jsonl                 # JSONL: {input, expected_output}

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                      # Run suite against a specific model

omniroute eval suites run <suiteId> \
  --model gpt-4o \
  --watch                                        # Live TUI progress (EvalWatch)

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                              # List all eval runs
omniroute eval list --json

omniroute eval get <runId>                       # Run details (status, model, score)
omniroute eval results <runId>                   # Per-sample results
omniroute eval scorecard <runId>                 # Full scorecard with pass/fail per sample
omniroute eval cancel <runId>                    # Cancel a running eval

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

# Run and fail CI if score drops below threshold
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`

<!-- skill:custom-end -->

Read more
@diegosouzapw
Ships withomniroute

Created by Diego Souza

Stars on GitHub

Momentum

stars in total
86.1k
Star history of diegosouzapw/OmniRoute on GitHub, a chart by star-history.com

Other skills on omniroute.

cli-a2a

cli-a2a

Interact with the OmniRoute A2A server from the CLI. Send tasks, inspect skill execution history, and test the JSON-RPC 2.0…

cli-backup-sync

cli-backup-sync

Backup and restore OmniRoute data from the CLI. Trigger incremental snapshots, sync to cloud storage, manage backup schedules,…

cli-batches

cli-batches

Submit and monitor batch inference jobs from the CLI. Upload and manage files for batch processing, retrieve results, and…

cli-chat

cli-chat

Send chat completions, stream responses, and start an interactive REPL session from the CLI. Supports all OmniRoute providers,…

cli-compression

cli-compression

Configure and test prompt compression from the CLI. Manage RTK filters, Caveman rules, stacked compression modes, and preview…

cli-contexts

cli-contexts

Manage context engineering configurations, RTK filter sets, and conversation sessions from the CLI. Apply context-relay settings…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about cli-eval.

Which coding agents can use cli-eval?
cli-eval installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.