NiceEval

Evals built for agents.

Docs

Read the docs and build evals for your agent in 10 minutes.

niceeval
$ niceeval exp compare
╭─ PLAN ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│
8 attempts · 4 evals × 2 configs · concurrency 4
│
│
2 of 8 carried in from cache · 6 to run
│
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
✗ @1MEMY3VCQ6B5B 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 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 failed attempt ╮
│
✗ @1MEMY3VCQ6B5B checkout/apply-coupon [compare/gpt-5.4]
│
│
gate: cart total reflects the SAVE20 coupon
│
│
details: niceeval show @1MEMY3VCQ6B5B
│
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ NEXT ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│
compare/gpt-5.4
│
│
show: niceeval show --run 4c1e9a07-6b2d-4f3a-9e85-2d7f0b6c1a93
│
│
view: niceeval view --run 4c1e9a07-6b2d-4f3a-9e85-2d7f0b6c1a93
│
│
compare/sonnet-5
│
│
show: niceeval show --run b83f2d14-90ce-4a6b-8f17-5e2a9c40d7b8
│
│
view: niceeval view --run b83f2d14-90ce-4a6b-8f17-5e2a9c40d7b8
│
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
$ niceeval show
Current results
Covered 8/8 · Gaps 0 · 7 passed; 1 failed; 0 errored; 0 skipped
ExperimentCoveredGapsPass ratecompare/gpt-5.44/4075.00%compare/sonnet-54/40100.00%
Attempts · compare/gpt-5.4
Eval checkout/apply-coupon @1MEMY3VCQ6B5B failed 41.20 s
3 passed Attempts hidden
$
1

Connect

Connect your own agent, Claude Code, or Codex through an adapter and OpenTelemetry.

2

Define

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

3

Evaluate

Run evals in parallel, then read the results in your terminal or browser.

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, defineJudge } from "niceeval";
2import { pattern } from "niceeval/expect";
3
4const imageContext = defineJudge({ name: "image-context", rubric: "Does the last reply stay grounded in the earlier image?" });
5
6export default defineEval({
7 description: "Evaluate an agent's multimodal ability across a multi-turn conversation",
8
9 async test(t) {
16
17 await t.group("follow-ups stay grounded in the image context", () => {
19 });
20
22 },
23});

Agents are users too

turn evals into a loop

The NiceEval CLI treats coding agents as users too. Build evals, run them, read the failures, and improve your agent. Every step works over bash, and every failure comes with a locator the agent can follow.

evalexp localtriageshow @…evidence--executionrefineclaude
terminalniceeval exp local
$ niceeval exp local
FAILED                                                38s
14 passed · 1 failed · 0 errored  (0 reused)

FAILURES                                 1 failed attempt
✗ @1K1P0VJAPVJ12  weather/brooklyn  [local]
  gate: get_weather was never called
  details: niceeval show @1K1P0VJAPVJ12

NEXT
  show: niceeval show --run 8f3d6f62-1d34-4cf3-99c7-84ba3c483706
  view: niceeval view --run 8f3d6f62-1d34-4cf3-99c7-84ba3c483706