crewship eval
Two distinct evaluation surfaces share thecrewship eval namespace:
- Mission-level — replay a single mission deterministically or regression-diff two missions. Uses the Quartermaster engine. See Quartermaster guide.
- Routine-level — sweep the workspace’s
eval-*routines × tier matrix, head-to-head tier compare, save/diff regression baselines. Built on top of the Routines runtime. See Routines guide and Routines cookbook.
replay and regression enqueue work asynchronously and return a run_id (poll completion via crewship eval runs). The runs subcommand itself is a synchronous list query against existing eval runs; get fetches one run’s full record. Routine-level subcommands all run synchronously and emit results inline.
Subcommands
crewship eval replay <mission-id>
Replay a single mission deterministically. Enqueues asynchronously and returns a run_id — poll completion via eval runs.
Sample output:
Requires
OWNER or ADMIN role (403 otherwise). Mission must belong to
your workspace (404 otherwise, same shape as “not found” so existence
isn’t leaked).crewship eval regression <baseline-id> <candidate-id>
Regression-diff two missions. Enqueues asynchronously and returns a run_id.
crewship eval runs
Sample output:
queued -> running -> completed | failed. For regression runs, the result field (now included in --format json/yaml/ndjson, not just the table) contains either no_regression or regressed: <delta summary> like regressed: tool success -8% cost +22%. The table view stays scannable (six columns); use eval get <id> for one run’s full record.
crewship eval get <run-id>
Fetch a single run by id and print what it found — the piece eval runs’ table intentionally leaves out.
crewship eval show <run-id>.
Sample output (replay):
--format json/yaml/ndjson return the full quartermaster.RunRecord — the same shape eval runs rows now include (see Eval API).
A run id that doesn’t exist, or belongs to another workspace, 404s with
the same “eval run not found” message either way — existence isn’t
leaked cross-tenant.
Routine-level eval
The routine-level commands target the eval suite seeded under theeval- slug prefix (see the Routines migration guide for the framework concept and cookbook recipe 6 for the eval-driven promotion workflow).
Unlike the mission commands, these run synchronously and emit pass/fail and stats inline.
crewship eval scenarios
Batch-run the workspace’s eval-* routines across one or more tiers and report a pass-rate matrix. The canonical “weak vs strong agent same outcome?” harness — same DSL, same inputs, only the resolved tier differs across cells.
Output (table format): rows = scenarios, columns = tiers, cells =
pass/total $avg-cost. A cell with 5/5 $0.0012 means every run passed the routine’s gate at that tier. Use the JSON or Markdown formats for downstream tooling.
All eval subcommands (runs, scenarios, compare, baseline list|show|diff) also
honour --format yaml and --format ndjson alongside json; the YAML form of
eval scenarios carries the same generated metadata as the JSON form.
crewship eval compare <slug>
Run ONE eval scenario back-to-back on two tiers and report a head-to-head verdict. Use this when investigating a specific scenario rather than sweeping the whole suite.
Verdict (top of output):
--tier-a and --tier-b MUST differ — passing the same value on both
errors out.crewship eval baseline
File-local snapshots of the eval matrix (~/.crewship/eval-baselines/<name>.json) plus regression diff. Per-developer / per-CI-run state — no server-side migration, no RBAC surface. Designed to be the CI gate that fails the build when a model swap or DSL refactor changes gate-pass behaviour.
baseline save <name>
Run the eval matrix once and persist it as a regression baseline.
Baselines record the source workspace ID at save time.
diff refuses to compare across workspaces — reusing a baseline name in another workspace would silently report bogus regressions.
Names are restricted to [A-Za-z0-9_-]{1,64} to prevent path-traversal in the on-disk file location.
baseline list
NAME, GENERATED, SCENARIOS, TIERS, RUNS/CELL.
baseline show <name>
pass/total $avg-cost). Use -f json for the raw record.
baseline diff <name>
Re-run the matrix against the same scenario / tier / runs combo and diff each cell against the stored baseline. Exits non-zero on any regression beyond --tolerance.
Per-cell verdict:
Cells that exist in NEITHER baseline nor current are skipped (they get no row).
baseline delete <name>
Related
- Quartermaster guide — mission-level replay/regression engine.
- Routines guide — concept of routines + DSL spec.
- Routines cookbook — recipe 6 walks the eval-driven promotion workflow end-to-end.
- Routine CLI —
routine bench,routine doctor(per-routine variance + preflight). - Eval API.