Run it yourself

CompanionCourt is a public docket for pressure-testing AI companions — and the runner that produces its evidence is open source, in the same repository as the rulings it feeds. This page mirrors the repository quickstart: three steps from clone to a diagnostic report of your own.

The runner is not published on npm; cloning the repository is the supported path.

1. Clone and install

git clone https://github.com/holdenhale/companioncourt.git
cd companioncourt
npm install   # the "prepare" script builds the runner (TypeScript -> dist/)

2. Smoke-test the pipeline — zero network

npm run bench:smoke

A deterministic smoke pass over the whole pipeline — persona, judging, scoring, report — using all-fake models and no network at all. If this passes, your checkout works.

3. Run cases against your endpoint

The endpoint must speak the OpenAI-compatible /v1/chat/completions shape. The --key value is never echoed by the CLI — not in errors, not in output files.

# freeze an anchor pack (one reference conversation per corpus case),
# or skip this step and reproduce against a frozen pack in packs/
node dist/bin/cli.js anchor \
  --endpoint https://api.your-provider.example \
  --key "$COMPANIONCOURT_API_KEY" \
  --anchor-model anchor-model-name \
  --persona-model persona-model-name \
  --out anchor-pack.json

# run the bench against a respondent model
node dist/bin/cli.js run \
  --endpoint https://api.your-provider.example \
  --key "$COMPANIONCOURT_API_KEY" \
  --model respondent-model-name \
  --anchor-pack anchor-pack.json \
  --mode dyad \
  --out runs/

# roll all runs into the docket page
node dist/bin/cli.js docket --runs runs/ --out board/

Frozen anchors, full manifests

Runs are judged against frozen anchor packs — reference conversations shipped in the repository's packs/ directory — and every run writes a complete run manifest (model pins, corpus hash, prompt hashes, seed), so any verdict can be traced back to exactly what ran.

What the output looks like

Read the sample diagnostic report produced by this procedure, or start from the reports library. The full runner reference, the frozen anchor packs, and the case corpus live on GitHub.