·
Last changedVersion:
This version passed the hardening gate. Hardening applied 3 targeted changes and preserved all other text. Classified findings before hardening: 2. Classified findings closed: 0. Classified findings remaining: 2. Unclassified scanner findings remaining: 0. Review findings closed: 4. Review findings remaining: 14.
2
2
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
SKILL.md | Tool & MCP Manipulation | MCP configuration abuse | Medium | Open | |
SKILL.md | Excessive Agency & Rogue Autonomy | — | Medium | Open |
2 findings
Omni ships a first-class eval system (the AI Hub → Prompt sets and Eval runs). This skill drives it through the Omni CLI: define a reusable prompt set, start a judged eval run against a model or branch, and read per-prompt verdicts from Omni's built-in accuracy judge.
Prefer this native system over building your own harness. The judge scores each answer semantically against the full agent conversation — it does not require golden query JSON, and it evaluates the whole agentic workflow (topic selection, queries, results, and the final written answer), not just generated query structure.
You also need the model ID of a shared model to evaluate. Evals require at least Querier access on that model, and at least one topic optimized for AI. See the Evals guide for concepts and prompt-set best practices.
| Concept | What it is |
|---|---|
Prompt set | A reusable, named list of up to 25 natural-language prompts, scoped to one model. Each prompt may carry an optional |
Eval run | Executes a prompt set against a model branch (or |
Accuracy judge | A fixed judge model that reads the evaluated AI's full conversation and returns a pass/fail verdict per prompt, plus confidence and a rationale. It targets high-impact analysis errors (hallucinations, date/time filtering, row-limit handling, mental math, period-over-period mistakes, wrong topic). It does not grade wording or formatting. |
All commands accept -o json (or --compact) to force structured output for parsing, and --profile <name> / --branch-id style global flags. Run omni ai-eval <command> --help for the full flag list. Run any command with --schema to print its args, flags, request-body schema (with a filled example) and response shape instead of guessing.
The response includes the created prompt_set.id (a UUID) — capture it for the run.
| Field | Required | Notes |
|---|---|---|
| Yes | Shared model UUID the set is bound to |
| Yes | ≤ 255 chars |
| Yes | Unique per |
| No | ≤ 1024 chars |
| No | ≤ 25; each needs |
Find or update an existing set instead of recreating:
prompt-sets-update replaces the entire prompts list: omitted prompts are deleted, entries with no id are created, entries with a matching id are updated in place. To add one prompt, send the full desired list (existing prompts carry their id).
expectation only when a prompt has a known answer worth pinning: a value or ranking ("top product should be Aniseed Syrup"), a direction ("revenue should be up YoY"), or a required breakdown. The judge treats a material divergence (wrong numbers, wrong direction, missing required result) as a failure but ignores wording/formatting differences. With no expectation, the judge decides whether the answer is correct on its own terms. The expectation is shown only to the judge — the evaluated AI never sees it.The response returns run.id and job_count (one agentic job per prompt). Omit run_config.branch_id to run against the live shared model.
Poll with backoff (e.g. 5s, 10s, 20s) until the run's status is terminal — COMPLETE or CANCELLED. Track progress with each result's agentic_job.state (QUEUED → EXECUTING → COMPLETE/FAILED). Don't hammer the endpoint.
runs-get returns results[], one row per prompt:
| Field | Meaning |
|---|---|
| Judge verdict for the prompt — pass = |
| Set when the underlying agentic job failed |
| LLM cost (USD) for the answer vs. for judging it |
| Total AI time in ms — all LLM processing and tool calls (matches the "AI time" column in the UI), not wall-clock duration |
| The conversation behind the answer — read it for the judge's full verdict, confidence, and rationale |
Overall accuracy = the pass rate (mean of score across results). Report it with the per-prompt breakdown, and for any failure, point to the conversation_id so the user can read why the judge failed it — that rationale is where the actionable signal lives.
Read that transcript from the CLI rather than sending the user to the UI:
omni ai conversations-list, so the id only ever comes from runs-get, and a user-scoped token reads only runs it created.The core workflow for measuring whether a model change helps. Run the same prompt set twice — once on main, once on the branch — then compare.
omni-model-builder to apply ai_context, fields, joins, ai_settings, etc. on a branch).runs-create with no run_config → baseline run on main.runs-create with run_config.branch_id → branch run.COMPLETE, then diff per-prompt verdicts.Notes for an auditable comparison:
branch_id used and confirm the branch run's run.branch_id matches it — don't claim the branch was exercised without that.expectation later won't change how earlier runs were scored.Archiving is a soft delete — sets and runs are preserved and can be restored. Cancelling a run marks it CANCELLED and archives it; use runs-unarchive to surface it in the default list again. Use --archived true on the *-list commands to see archived items.
error_reason set means the agentic job itself failed (it never produced an answer to score); treat that separately from a judge score of 0.omni models yaml-get <modelId> --compact and omni models validate <modelId>. Branch runs already pin the change to a branch.ai_context, sample_queries, field metadata)Get started with chainctlchainctl skill install public/exploreomni/omni-ai-eval:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/exploreomni/skills/omni-ai-eval:latest
Apache-2.0
HARDENING.md
LICENSE
SKILL.md
evals/evals.json
evals/files/cases.jsonl