EvalGlass

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.

Get the plugin — two commands in Claude Code, then just ask:
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

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:

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%

Five metrics scored, one blocked — a blocked metric shows its state, never a fabricated 0.0. Deltas appear only because the two runs are comparable. No threshold is approved, so the verdict is informational and nothing gates. Illustrative example, not a measured result.

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:

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.

Every discovered metric carries a tier that decides what evidence it needs before it can gate:

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.

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.

It suggests what to measure; it never approves it — every proposed metric lands proposed / informational. Today’s installed plugin finds candidate call sites; the full metric catalog is the next canonical release.

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.”

You set the thresholds and sample sizes; it never picks them for you, and it never claims the AI is safe — only what this run’s evidence supports. Being hardened; not yet in the version the plugin installs.

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.

The typed scorecard.json ships today and stays the machine source of truth; the readable HTML report is the next canonical release. Renderings never recompute the verdict or add authority.

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.

The agent scaffolds, runs, and explains; it does not grant authority or change your app’s behavior. Pre-alpha, vendored from source — not a hosted platform, no SaaS.

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 →

Use cases

Use it when your AI application changes.

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.

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.

verb: /evalglass run --example

“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.

verbs: /evalglass runview

“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.

verb: /evalglass explain

“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.

verb: /evalglass ci

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

Docs
the detailed reference your agent reads
Read a scorecard
what every score means
What green doesn’t mean
what a pass may and may not say
The config it writes
the evaluation setup your agent generates