Skip to main content
Quartermaster replays a mission deterministically or diffs two missions to detect regressions in tool success, cost, and step signature. Both mutating endpoints return 202 Accepted immediately and run the work in a background goroutine; poll List runs for results. See the Quartermaster guide.
All endpoints require authentication and are workspace-scoped. Mutating endpoints (replay, regression) require OWNER or ADMIN role. Mission IDs must belong to the caller’s workspace — cross-tenant IDs return 404 with the same shape as “not found”.

Endpoints


Queueing runs

Replay and regression both return 202 Accepted immediately and perform the work in a 10-minute background goroutine. Poll via List runs.

Queue a replay

Request body:
Response: 202 Accepted
Errors:

Queue a regression

Request body:
Both must be in the caller’s workspace. The handler checks them independently so a partial spoof still 404s. Response: 202 Accepted
Errors: Same as replay, plus 400 if either mission ID is empty.

Results

Poll for run status, results, and per-run token/cost totals.

List runs

Query parameters: Response: 200 OK
The serialized struct (quartermaster.RunRecord) marks mission_id, baseline_mission_id, candidate_mission_id, result, signature, created_by, and completed_at as omitempty — empty values are dropped from the row, not emitted as ""/null. seed, total_tokens, total_cost_usd, and regressed are always present.

Get a run

Fetches a single run by id, scoped to the caller’s workspace. Same shape as one row of List runs — this is the endpoint behind crewship eval get <id> (CLI docs). Request: id is the required run path parameter. Workspace context is supplied by the optional X-Workspace-ID header (or the authenticated session). No request body. Response: 200 OK
Errors: Authentication: Send the normal authenticated session or CLI token with workspace context. Reads require a workspace; there is no additional role gate. The API returns its standard JSON error object for 401, 400, and 500 responses.

Tenancy and role gates

  • All reads + writes scoped to the session’s workspace.
  • Decisions on replay/regression require OWNER or ADMIN.
  • Cross-tenant mission IDs return 404, not 403, to avoid leaking cross-workspace existence.

Journal side-effects

The background worker emits eval.run_started at the start, eval.metric for each computed metric, and eval.regression_detected when a regression run crosses a threshold. Correlate by run_id in the payload.