Quickstart
1
Install
2
See what's installed
3
Run one — offline, no cloud, no key
status: completed record on stdout. ✅ That’s a full run of the
four-phase lifecycle (prepare → connect → measure → conclude) over a bundled
fixture — no cloud account, no API key. Any run that does not complete prints
a one-paragraph self-explanation on stderr — which stage broke, or which gate
refused — so you never grep the JSON for the failure.4
Point it at a real system (config-connect)
csbench serve opens the web viewer at http://127.0.0.1:8787.The mental model
Three things, each a plugin discovered by an entry point:- A
BenchmarkSuitewraps a recognized harness (or any reproducible workload):resolve → prepare → run → mock_artifacts. - An
Evaluatorturns the run’s artifacts into namespacedMeasurements (and optional per-itemitems) — a pure, offline, re-scorable function. - The system under test is chosen by
--platform+ atarget: a simulated reference, an already-running service you config-connect to (endpoint + credentials), or a cloud the framework provisions.
csbench run --benchmark <id>. See Add a benchmark.
The reproducibility contract
Every record carries aprovenance block (benchmark id, pinned dataset digest,
evaluator id, unmodified flag, scaffold) plus three independent fingerprints
(benchmark / environment / implementation), so you can tell whether two
numbers are even comparable. Every measurement carries a reproducibility_class:
official=true measurements are the benchmark’s own verdict under its
<suite_id>. namespace (a provenance flag, enforced by csbench conformance);
add-on metrics and community evaluators stay in their own space.
Results are always per dimension — never a blended score.
Next
Add a benchmark
Write a Suite + Evaluator and run it.
Metrics
Compose per-item metrics over any run.
Judges (LLM-as-judge)
Reproducible judge-based scoring.
Architecture
The stage machine, record schema, plugins.
pytest & CI
Assert thresholds in your test suite.
Web viewer
Record browser + trace waterfall.
