ESC
Type to search...
S
Soli Docs

Agents on Soli

How we grade models on real Soli work. The table lives on /ai. Numbers only come from www/data/ai_evals.json.

What is compared

The first board freezes three coding CLIs on the same fixture and hidden tests: claude -p (Claude Code / sonnet), opencode run (DeepSeek opencode/deepseek-v4-flash-free), and Grok Build (grok --prompt-file, grok-4.6). It is not Cursor vs Claude Code as products, and it is not Soli vs Rails on the same numbers.

Corpus

Twelve one-capability tasks on evals/app, not this docs site.

Slug Capability
hello-worldharness smoke
scaffold-resourceresources + controller
hash-whereportable hash .where with gt
column-stisubclass + type
job-enqueueperform_later
unless-guardblock unless
csrf-webhookskip_csrf on the webhook only
form-permitpermit
validationvalidates
attachmenthas_one_attached
test-specassert_eq, not assert_equal
llm-streamsse + llm_stream

Grading

  1. Copy evals/app to a fresh worktree.
  2. Apply prompt.md with a single-shot coding agent.
  3. Copy hidden tests in. Run soli lint and soli test hidden.
  4. Scan the diff for identifiers in expect.md (API recall).

Three runs per model. Accuracy is passes / (tasks × 3). Speed is median wall time. Tokens and cost are means. Failures and refusals count as fail.

Cost

About 5 models × 12 tasks × 3 ≈ 180 runs. At $0.50–$2 each, a board refresh is roughly $90–$360. That is why this is not on every pull request.

Reproduce

python3 scripts/evals/run.py --list
python3 scripts/evals/run.py --dry-run --models claude,opencode,grok --tasks hello-world --runs 1
python3 scripts/evals/run.py --models claude,opencode,grok --out www/data/ai_evals.json

Until a paid run is committed, models in the JSON is empty and /ai shows that empty state. Do not invent scores. Token/cost stay null when a CLI does not report them. Harness id: soli-evals/0.2.