Evaluate your agents.
Without an LLM.
Deterministic checks that catch wrong tools, silent loops, and half-finished runs in your real traces. No judge models, no token cost, no config to start.
# install from the repo (not on PyPI yet)
$ pip install "git+https://github.com/prefactordev/prefactor-open-evals.git#subdirectory=packages/python"
$ export PREFACTOR_API_URL=https://your-host PREFACTOR_API_TOKEN=your-admin-token
$ prefactor-evals-no-llm run --agent <your-agent-id> --since 7dPython & TypeScript · exits non-zero in CI · scores publish to your Prefactor instance
Generic checks. Any agent. Zero config.
Every check measures how the agent behaved, not what it does, so the same set works on a support bot, a voice agent, or a coding agent unchanged. Results are pass, fail, or skip, and skip is never counted as a pass.
core.errorsAny step that failedcore.loop_detectionThe agent stuck repeating itselfcore.redundant_tool_callsThe same call twice, no progresscore.termination_stateRuns that ended cancelled or failedcore.latency_budgetA single step hangingcore.efficiencyFar more steps than this agent’s normalcore.conversation_lengthFar more turns than usual to finishFive more optional checks are just as generic but need one value only you can supply, so they stay off until you set it: core.forbidden_actions, core.tool_arg_schema, core.output_schema, core.cost_budget, core.escalation_rule.
One command per run. Scorecard, JSON report, CI gate.
Export your PREFACTOR_API_URL and an admin PREFACTOR_API_TOKEN (there is no login step), then point it at any agent. It exits non-zero on failure, so it drops straight into CI.
# score the last week of runs (zero config)
prefactor-evals-no-llm run --agent support-bot --since 7d
# turn on the optional checks once configured
prefactor-evals-no-llm run --agent support-bot --pack advanced
# write scores back to Prefactor
prefactor-evals-no-llm run --agent support-bot --publish
# build a browsable HTML dashboard and open it
prefactor-evals-no-llm run --agent support-bot --html ./quality --open$ prefactor-evals-no-llm run --agent support-bot --since 7d
✓ core.errors pass
✓ core.loop_detection pass
✓ core.termination_state pass
! core.efficiency flag 2.4× median steps
42 runs · resolution 0.93 · 6 passed · 1 flagged
report → ./agent-evals-report.json · exit 1Catch a loop on the offending call. Not after.
watch grades a run span by span while it is still going, and can stop one that loops or errors before the damage lands.
- ✓Terminate is never the default. Run
watchwith no--terminateand it only warns, touching nothing. - ✓You name what can stop a run. Policy is per check:
off,warn, orterminate.
$ prefactor-evals-no-llm watch --agent support-bot --terminate loops,errors
watching active runs · policy: loops=terminate errors=terminate
✓ run 5a1f · ok
■ run 5a20 · loop on tools:search → terminatedAdd --publish. The score lands next to the run.
- ✓Quality tab. Each finished run’s score writes into its instance, not a lost log.
- ✓Read-only by default. Publishing is opt-in and writes only the fields it owns. Free dev tier, 25k spans a month.
- ✓Browsable dashboard too.
--htmlwrites a self-contained page per run, no network, safe to share.
Questions
Do I need an LLM or API key?
What license?
Is it on PyPI or npm?
Does it work without Prefactor?
schema/v1 shape.See it on your own agents.
Free for your first 25,000 spans a month. Instrument with the SDK, then run the evals against your own traces.