- Adapter: tells NiceEval how to call your application.
- Experiment: says which Adapter to run against and with which model.
- Eval: says which message to send and what counts as correct.
Let a Coding Agent integrate it for you
1
Send the instruction to your Agent
Open the Coding Agent you use in the current project, such as Claude Code or Codex, and send this message:The Agent first explores your project, confirms which interface to test, then writes the three files and runs them once.
2
Run it again yourself
Run with the Experiment ID the Agent listed at the end. If it did not list one, first see which Experiments exist with
pnpm exec niceeval exp list:3
See the results
Integrate it yourself
Prepare the application under test
First start your application and confirm it has an interface you can call. The example below assumes:- the interface is
POST http://localhost:3000/chat; - the request body is
{ "message": "...", "model": "..." }; - the response body is
{ "reply": "..." }.
Install
init creates niceeval.config.ts. It also writes a section into AGENTS.md or CLAUDE.md so your Coding Agent reads the docs that match the installed version.
Write the Adapter
The Adapter does one thing: send the eval’s messages to your application, then hand the reply back to NiceEval.events is how NiceEval understands the reply. Here it hands back only one assistant message; later you can add events for tool calls, usage, and more.
Write the Experiment
my-agent. To compare another model later, copy this file and change model; the evals stay the same.
Write the eval
Run
Read the results
The title tells you the conclusion of this run:
Each failed Attempt has a line
details: niceeval show @<locator> below it. Copy it to see that run’s conversation and assertions in the terminal. To see the whole run, copy the show: command in the NEXT panel; to browse the conversation and durations in the browser, copy the view: line.
For more ways to view results, see View Run Results.
Next steps
This minimal Adapter only supports single-turn conversations: the second turn does not carry the first turn’s history, and tool calls are not visible. Choose based on what you need next:- To test multi-turn conversations, tool calls, or usage: extend the Adapter following Write send; existing evals stay unchanged.
- To write more evals that tell results apart better: read Write Evals.
- To compare two models or two prompt versions: read Organize Experiments.
- To run automatically on PRs: read CI Integration.