# Skim evals Evals are repeatable behavior tests. They do not train a model. They reveal whether rule or example changes improve the desired output. Normal users do not run these commands. Use `/skim capture [note]` during normal Pi work, then ask Codex to review captures and improve Skim. ## What exists - `cases.json`: 32 prompts across floor, diagnosis, comparison, plan, research, safety, exact-text, global-cap, language, container, and artifact-handoff cases. - `gold/`: hand-approved outputs defining current taste. - `lint.mjs`: deterministic structure, wording, and required-term checks. - `run.mjs`: repeated headless Pi runs with raw-output preservation. - `compare-cases.json`: balanced stable-origin and v2-origin A/B corpus. - `compare.mjs`: matched literal-skill runner, exact usage capture, optional blind semantic judge, hard-gate adjudication, aggregation, and review generation. - `review.mjs`: static side-by-side review UI with blinded labels and `feedback.json` export. Captured interactions live outside the repository: ```text ~/.pi/agent/skim/captures/*.json ``` When `PI_CODING_AGENT_DIR` is set, captures live beneath that directory. ## Commands Validate hand-written gold outputs: ```bash npm run eval:lint ``` Inspect planned benchmark size without calling a model: ```bash npm run eval:dry ``` Run all 32 cases 3 times with Pi defaults: ```bash npm run eval -- --label baseline ``` Target one case or model: ```bash npm run eval -- --case diagnose-pool --runs 1 npm run eval -- --provider anthropic --model claude-sonnet-4 --label candidate ``` Use an alternate compiled prompt: ```bash npm run eval -- --prompt-file /tmp/skim-candidate.md --label candidate ``` Run the alternate skill: ```bash npm run eval:skim-v2:dry npm run eval:skim-v2 -- --label candidate ``` Inspect the balanced stable-versus-v2 plan: ```bash npm run eval:compare:dry ``` Run 1 matched sample per case with blind semantic judging: ```bash npm run eval:compare:smoke ``` Run the 3-sample promotion comparison: ```bash npm run eval:compare ``` The smoke run makes 24 answer calls plus 12 judge calls. The promotion run makes 72 answer calls plus 36 judge calls. Pin `--provider`, `--model`, and optionally `--thinking` when results must be reproducible: ```bash npm run eval:compare:smoke -- \ --provider openai-codex \ --model gpt-5.5 \ --thinking low ``` Use `--case ` or a comma-separated ID list for a focused comparison. Omit `--judge` when only deterministic linting is needed. Use `--render-only ` to regenerate the Markdown report and HTML reviewer without new model calls. Results land under `evals/results/-