AI quality control for AI applications
Evaluation discipline, without becoming an eval team.
You’re shipping AI faster than you can check it. EvalGlass gives your AI application
project-specific checks and readable scorecards, operated by your coding agent, running locally in
your repo — so you can stand behind a change in front of a customer.
It measures and reports; you decide and gate.
You
Evaluate my agentic app with EvalGlass — I just switched the model. What improved, what regressed?
Your coding agent · Claude Code plugin
Done — I ran your project-specific checks against your last baseline.
Retrieval faithfulness +0.07, tool selection stable, cost −18%
— but workflow-policy answers −0.11. Deltas show only where the runs are
comparable. The verdict is informational: no threshold is approved, so nothing gates CI yet.
Want the one-line config to make it gate, for you to approve?
Runs locally
Repo-owned truth
No keys
No false green
See what a scorecard looks like →
Why this exists
The block was never belief. It was effort.
You already believe evaluation matters. What stops you is the tax it seems to charge
— datasets, rubrics, labels, judge calibration, baselines, dashboards, CI — and the sense that doing
it right means standing up an eval team you don’t have and don’t want. So the questions
that actually matter go unanswered:
- You swapped the model to cut cost. Did quality hold — or did you just save money and lose the customer?
- The new prompt looked sharper in the demo. Did it improve the product, or only the demo?
- The workflow feels off this week. Is it real drift, or nerves? Today you find out from a user.
EvalGlass removes the effort, not the rigor. Your coding agent does
the standing-up — the checks, the runs, the reading — so you stay a product team and keep the
authority to decide what ships.
What you get
You get an answer — a scorecard, not a vibe.
Those questions come back answered: one scorecard with the verdict, every metric with
its status, what moved since your last run, and a plain statement of what the run does not
claim. It travels — paste it into a PR, hand it to a stakeholder, keep it in the repo. Here is a fuller
one, the typed record behind it, and where its metrics came from.
model-switch run · vs. last baseline
informational
Retrieval faithfulness0.91 +0.07
Answer completeness0.88 +0.03
Tool selectionstable
Workflow-policy answers0.74 −0.11
Citation groundingblocked · judge not calibrated
Cost / 1k calls$2.4 −18%
the same run, as scorecard.json
{
"verdict": { "verdict": "informational", "ci_should_fail": false },
"metrics": [
{ "metric": "retrieval_faithfulness", "value": 0.91, "status": "scored", "validity": "valid" },
{ "metric": "workflow_policy", "value": 0.74, "status": "scored", "validity": "valid" },
{ "metric": "citation_grounding", "value": null, "status": "blocked", "validity": "not_measured" }
],
"status_counts": { "scored": 5, "blocked": 1, "non_evaluable": 0, "skipped": 0, "error": 0 },
"authority": { "citation_grounding": "blocked", "retrieval_faithfulness": "no_approved_threshold" },
"baseline_state": "comparable"
}
The typed scorecard.json is the machine source of truth now; the human card above renders it, and a shareable report.html is the next canonical release. A renderer never recomputes the verdict.
Every value and field is typed — here is what each part of that record says:
- Metric & value. Each project-specific check and its score — one row per metric your agent proposed for your app.
- Status & validity. Whether a metric
scored, was blocked, non_evaluable, skipped, or errored — a non-scored metric is value: null, never coerced to 0.0.
- Delta & baseline. What improved, regressed, or drifted since a run you promoted — shown only when
baseline_state is comparable, so a model or prompt change isn’t called a regression by accident.
- Authority & verdict. Whether each metric
can_gate, and the one typed verdict the build keys on. A fresh run is informational — measured, not approved.
What every scorecard means →
Where the metrics come from
Your agent finds what to measure — for your app.
You never wrote those checks. Your coding agent discovered them for your app — in
two read-only layers, everything it proposes landing proposed / informational, never
approved.
- Call-site discovery. now A conservative, read-only scan (Python
ast, respecting .gitignore) finds candidate LLM call sites, flags trace directories, and surfaces undeclared data-policy boundaries. A candidate inventory, not a guarantee — it never imports or runs your code, and loads no model SDK.
- Metric discovery. next Your agent reads your code, output schemas, prompts, and any traces — across any agentic framework — then derives metrics for how your app actually fails: a typed
MetricCatalog across an eleven-dimension quality taxonomy (faithfulness, completeness, domain-soundness, calibration…). With no traces yet, your output schema alone drafts a contract-tier structural floor. Built in the framework; the next canonical release.
Every discovered metric carries a tier that decides what evidence it needs
before it can gate:
- Runtime-deterministic. A built-in or host check; no reference or judge needed.
- Reference-gold. Compares to validated reference data you own.
- Judge-rubric. An LLM-as-judge metric that must be calibrated before it can gate — until then it produces evidence, not authority (that is the
blocked citation-grounding row above).
Discovered is not approved. A proposed metric is a reviewed-by-you
starting point — informational until you shape it into a check and promote a gate.
How discovery works →
What real evaluation looks like when it’s ordinary
Four things you get — and not a claim more than each earns.
Point it at your app; it tells you what to measure.
next
Your coding agent reads your code, output schemas, prompts, and any traces — across any agentic framework — then derives checks for how your app actually fails, not a generic benchmark bolted on. Even before your first trace, your output schema alone drafts a contract-tier structural floor.
A passing score is earned, not lucky.
experimental
Every score carries its confidence interval, and the gate reads the lower bound — so a perfect three-for-three over too few examples can still fail, instead of quietly slipping through as “good.”
One report, three answers — including what it doesn’t claim.
next
Open one report and see the verdict, what changed since your last run, and — the part most tools skip — what the run does not claim. It travels: paste it into a PR, show a stakeholder, keep it in the repo.
Trustworthy evals without hiring an eval engineer.
now
You stand up project-specific evals without learning an eval framework — your coding agent scaffolds, runs, and explains them, entirely on your machine.
See every capability, with its status →
A green scorecard never means more than the run measured.
EvalGlass measures and reports; you decide and gate. A fresh or example run is
informational, never a false green — it doesn’t fail your build until you promote a
metric to a gate on a threshold you approve. A regression isn’t a claim until two runs are
genuinely comparable. It reads what your AI actually did; it never edits your app. Local-first,
repo-owned truth, no telemetry, no false green.
How scorecards work →
How it works
The way your agent reviews AI behavior.
Code review catches code changes. This reviews what the AI actually does. You’ve
seen what you get — here’s how it arrives: you ask, your coding agent does the work, locally,
inside your repo.
1 · Ask
Tell your coding agent what changed or what you want to know.
2 · Observe
EvalGlass reads repo context, exported traces, prompts, model calls, examples, and tools.
3 · Shape
Your agent proposes and authors project-specific checks: metrics, examples, rubrics, scenarios, judges, baselines.
4 · Run
The vendored runtime evaluates behavior from supplied evidence, locally, inside your repo.
5 · Read
The scorecard explains values, deltas, diagnostics, authority, and what can’t be claimed yet.
6 · Cluster the failures next
Group the run’s failing and non-scored items by shared cause, per metric, so a flat number becomes an actionable failure mode — a non-scored item is grouped by cause, never counted as 0.0.
7 · Watch for drift next
Re-run on a schedule and compare each run to your baseline — a typed drift.json, cron or CI, not a daemon. A no-comparable-regression result never means quality is fine.
8 · Improve
Fix prompts, switch models, add examples, review labels, tune metrics, or wire CI.
This is the loop behind the scorecard above — your agent proposes the checks; you approve what gates.
See the loop in detail →
Getting started
A few things to say to your coding agent.
Install the plugin, then describe what you want in plain language — the right verb
runs underneath.
“Run the EvalGlass example so I can see a scorecard.”
you geta real, informational scorecard in seconds — sample metrics, no setup, no keys.
“I changed the model — compare it to the last run.”
you getper-metric deltas and an honest verdict — informational until you approve a gate, so nothing fails the build yet.
“Explain what regressed since the last run.”
you getwhat each metric means and what it doesn’t claim — a missing field is reported as missing, never invented as 0.0.
“Wire this into CI on a threshold I approve.”
you geta CI workflow that blocks only on a gate you approved — no auto-approval, no false green.
See every verb & prompt →
Install in Claude Code
Two commands, then ask.
/plugin marketplace add Syntelesis-Lab/evalglass
/plugin install evalglass@syntelesis-lab
Claude Code is the primary plugin path; Codex is supported as a second
coding-agent runtime running the same canonical skills (its public marketplace listing is coming).
No install yet? Run the demo first: /evalglass run --example quickstart. To evaluate
real behavior, export your OpenTelemetry, OpenInference, or JSON traces and hand them over — no keys,
nothing phones home. All the ways in →
It’s all open. Read every line.
EvalGlass is Apache-2.0 and built in the open. The runtime is vendored into your repo as plain, readable code — no black box, nothing phoned home. Browse the source, file an issue, or open a pull request.
Evaluation discipline, without becoming an eval team.
Ask your coding agent to evaluate your agentic app. Get back a scorecard you can stand behind.
Runs locallyRepo-owned truthNo keysNo false green
Built for your agent to read
Docsthe detailed reference your agent reads