Connect
Connect your agent — or CC/Codex — via an adapter plus o11y.
Read the quickstart guide, then write an eval and run it across targets without building a bespoke harness.
Connect your agent — or CC/Codex — via an adapter plus o11y.
Write evals and experiments the way you'd write unit tests.
Evaluate in parallel.
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 judge: imageContext,8 description: "Evaluate an agent's multimodal ability across a multi-turn conversation",910 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?");1718 await t.group("follow-ups stay grounded in the image context", () => {t.check(third.message, pattern(/white/i));20 });2122 t.check({ earlierImageFacts: ["blue background", "white square"], question: third.input, answer: third.message }, imageContext.atLeast(0.7)).gate();},1/0.724});
Agents are users too
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.
niceeval 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 query discover niceeval query run --request runs-list.json