NiceEval

AI-Native Eval for Agents.

Docs

Read the quickstart guide, then write an eval and run it across targets without building a bespoke harness.

niceeval
$ niceeval exp compare
PLAN ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
8 attempts · 4 evals × 2 configs · concurrency 4
2 of 8 carried in from cache · 6 to run
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
@1bwcxxiy checkout/apply-coupon [compare/gpt-5.4]
gate: cart total reflects the SAVE20 coupon
equals(80) · expected 80 · received 100
FAILED ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 2m 07s
7 passed · 1 failed · 0 errored (2 reused)
330.5k new tok · $0.51
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
FAILURES ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
@1bwcxxiy checkout/apply-coupon [compare/gpt-5.4]
gate: cart total reflects the SAVE20 coupon
equals(80) · expected 80 · received 100
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
NEXT ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Inspect: niceeval show @1bwcxxiy
Eval: niceeval show @1bwcxxiy --source
Trace: niceeval show @1bwcxxiy --execution
Diff: niceeval show @1bwcxxiy --diff
Compare: niceeval view
├─ RESULTS ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
.niceeval/compare/gpt-5.4/2026-07-30T09-14-22-118Z-i080
.niceeval/compare/sonnet-5/2026-07-30T09-14-22-140Z-b3kq
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
$ niceeval show --exp compare/gpt-5.4 --exp compare/sonnet-5
compare · 2 conditions · paired by eval id · baseline compare/gpt-5.4
common 4 · compare/gpt-5.4 only 0 · compare/sonnet-5 only 0
evalgpt-5.4sonnet-5Δ sonnet-5checkout/apply-coupon 84.9k $0.14 61.2k $0.09⇄ -23.7k -$0.05checkout/refund-window 52.4k $0.08 57.9k $0.09+5.5k +$0.01support/order-status ↩ 2h 38.1k $0.06 ↩ 2h 35.2k $0.05-2.9k -$0.01support/escalation 40.3k $0.06 33.8k $0.05-6.5k -$0.01totals3/4 passed 215.7k $0.344/4 passed 188.1k $0.28
common vs baseline · pass rate +25.0pt · tokens -27.6k · cost -$0.06
$
1

Connect

Connect your agent — or CC/Codex — via an adapter plus o11y.

2

Define

Write evals and experiments the way you'd write unit tests.

3

Evaluate

Evaluate in parallel.

Eval examples

eval chats, tool calls, and coding agents

Each card is a runnable defineEval file. Click a highlighted line to peek at replies and assertion notes.

multimodalMulti-turn image Q&A
passed
1import { defineEval } from "niceeval";
2
3export default defineEval({
4 description: "Evaluate an agent's multimodal ability across a multi-turn conversation",
5
6 async test(t) {
13
14 await t.group("follow-ups stay grounded in the image context", () => {
16 });
17
18 t.judge.autoevals
19 .closedQA("Does the assistant keep grounding every answer in the turn-one image, across all three turns, instead of making things up?")
21 },
22});

Agents are users too

turn evals into a loop

The NiceEval CLI is designed for agents as much as for humans — not just an evaluation tool, but a framework that loops: build evals, run them, improve the agent system. Every output has an agent-readable face, so a coding agent drives the whole loop over bash.

evalexp localtriageshow @idtraceshow --sourcerefineclaude
terminalniceeval exp local --output agent --force
$ niceeval exp local --output agent --force
NICEEVAL RESULT failed
summary: 14 passed, 1 failed, 0 errored
failures:
  - @1k2m9qtr weather/brooklyn [local]
      gate: tool was never called
next:
  niceeval show @1k2m9qtr
  niceeval show @1k2m9qtr --execution