lmnr-cli eval run, locally on Docker or in Laminar’s cloud sandboxes, and every trial lands in Laminar with its score next to the agent’s full trace.
Agent evaluations are in beta. The
lmnr-cli eval run command, its flags, and the folder layout may still change.
A trial in Laminar: the score, the agent's model calls and commands, and the verifier output explaining the failure.
Agent evaluations and LLM evaluations
Laminar has two ways to evaluate, named after what they look at:- Agent evaluations (this section) set up a working environment for the agent, let it run, and score the whole outcome, including the state changes, and the agent trajectory.
- LLM evaluations call a function in your process with
evaluate(), then compare its output to target data with evaluator functions.
The two coexist in the same project and share the same evaluation views, run comparison, and SQL access.
Why evaluate the agent in its environment
Unit-style evals become hard once the thing you’re testing is an agent that acts on the world:- The outcome is not just the final message. Agent may issue refunds, write database rows, and affect the world around them. Scoring just the final message misses whether the right thing actually happened, and more importantly whether bugs not happened.
- The bugs are in the integration. Queries time out; downstream services may experience transient issues; agents may or may not self-heal. Fixtures hide these kinds of issues.
- Production failures need their exact context. Reproducing a failure means the same conversation, records, and account state. Each case needs its own data, and cases can’t share a database without interfering with each other.
- Production fidelity. The real code and the real services run in the container, started the way production starts them. You seed them and mock them only if absolutely necessary.
- Isolation. Each case boots its own stack with its own data, so cases run in parallel with no shared state and no ordering.
- No or minimal production changes. The driver calls an entry point the app already has (an HTTP route, a CLI command, a queue message, an exported function), so you test the code path users hit.
- Local and cloud from one folder.
lmnr-cli eval runruns trials on your Docker. Add--remoteand the same folder runs in Laminar sandboxes, one per trial. - No lock-in. The case format is Harbor’s, so tasks, image, agent, and verifier are plain Harbor. Laminar adds the trajectories, run history, comparisons, SQL access, and managed execution.
How a run works
You keep anevals/ folder next to your code. Each case in it is a Harbor task: which image to start, the data for this scenario, and a verifier. When you run lmnr-cli eval run, Laminar:
- Builds your image from the live source tree.
- Starts one container per trial, uploads the case’s data, and runs the driver against your app.
- Runs the verifier over what the app produced and records its reward as the score.
- Attaches the app’s LLM and tool calls to the trial’s trace, so a failing score takes one click to explain.
Next steps
Quickstart
Have your coding agent set it up, or build a two-case suite by hand.
Concepts
Tasks, environments, agents, verifiers, and trials, and how they map to Laminar.
Build a production harness
Run the real services, seed realistic data, and keep the eval honest.
Turn production failures into cases
Close the loop between what breaks in production and what you test.