Connect
Connect your own agent, Claude Code, or Codex through an adapter and OpenTelemetry.
Connect your own agent, Claude Code, or Codex through an adapter and OpenTelemetry.
Write evals and experiments the way you'd write unit tests.
Run evals in parallel, then read the results in your terminal or browser.
Eval examples
Each card is a runnable defineEval file. Click a highlighted line to peek at replies and assertion notes.
1import { defineEval, defineJudge } from "niceeval";2import { pattern } from "niceeval/expect";34const imageContext = defineJudge({ name: "image-context", rubric: "Does the last reply stay grounded in the earlier image?" });56export default defineEval({7 description: "Evaluate an agent's multimodal ability across a multi-turn conversation",89 async test(t) {const first = await t.sendFile("evals/sample.png", "What is in this image?");await first.succeeded().orStop();first.usedNoTools();const second = await t.send("What color is the background?");t.check(second.message, pattern(/blue|white|square/i));const third = await t.send("What color is the shape in the middle?");1617 await t.group("follow-ups stay grounded in the image context", () => {t.check(third.message, pattern(/white/i));19 });20t.judge({ earlierImageFacts: ["blue background", "white square"], question: third.input, answer: third.message }, imageContext).gate(0.7);≥ 0.722 },23});
Agents are users too
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.
niceeval 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