For OpenCode 2.0

Benchmarks test single model. Developers often pair them.

A benchmark is an exam: a clean task, a hidden answer key, one model, nobody steering. Real work is the job: a messy repo, your tools, your steering, and increasingly one model planning while another builds. Pragmatikos scores the job, not the exam: every planner → builder pairing, on real sessions, by what actually shipped.

Rankings below are pooled from real developer sessions.

poolShip %One-shot %Verified %Edits/turnTime/stepHours/ship$/shipTool errorsAbortsTurns/shipclaude-fable → muse-spark — score 59 / 100muse-spark → muse-spark — score 59 / 100claude-opus → claude-opus — score 53 / 100claude-fable → deepseek — score 51 / 100gpt → muse-spark — score 51 / 100claude-fable → grok — score 50 / 100claude-fable → claude-fable — score 48 / 100grok → grok — score 41 / 100

claude-fable → muse-spark · 59 / 100

the rankings

Models and pairings, ranked by what ships

Did the work land in a commit, how many nudges did it take, how clean was it, what did it cost. Scored on real sessions, not lab tasks. Scores are expected to change as more data is contributed.

Last update

1,473 Cycles* · 2 contributors

Group by
01
claude-fable → muse-spark
59
02
muse-spark → muse-spark
59
03
gpt → deepseek
53
04
claude-opus → claude-opus
53
05
claude-fable → deepseek
51
06
gpt → muse-spark
51
07
claude-fable → grok
50
08
claude-fable → claude-fable
48
09
gpt → gpt
46
10
grok → grok
41
11
claude-opus → claude-sonnet
39
Higher is betterLower is betterShip %One-shot %Verified %Edits/turnTurns/shipHours/ship$/shipTool err %Abort %Time/step×0.25×0.5pool×2×4← lowerhigher →claude-fable → muse-spark — Ship rate: 99% (pool 91%)claude-fable → muse-spark — One-shot rate: 20% (pool 27%)claude-fable → muse-spark — Verified cycles: 66% (pool 62%)claude-fable → muse-spark — Edits per turn: 12.6 (pool 6.9)claude-fable → muse-spark — Turns per ship: 4.7 (pool 4.5)claude-fable → muse-spark — Hours per ship: 1.0 (pool 0.8)claude-fable → muse-spark — Dollars per ship: $11.46 (pool $15.34)claude-fable → muse-spark — Tool errors: 4.0% (pool 2.8%)claude-fable → muse-spark — Aborts: 7.8% (pool 7.0%)claude-fable → muse-spark — Time per step: 4.1 (pool 8.1)muse-spark → muse-spark — Ship rate: 96% (pool 91%)muse-spark → muse-spark — One-shot rate: 22% (pool 27%)muse-spark → muse-spark — Verified cycles: 64% (pool 62%)muse-spark → muse-spark — Edits per turn: 4.4 (pool 6.9)muse-spark → muse-spark — Turns per ship: 4.1 (pool 4.5)muse-spark → muse-spark — Hours per ship: 0.6 (pool 0.8)muse-spark → muse-spark — Dollars per ship: $8.91 (pool $15.34)muse-spark → muse-spark — Tool errors: 3.3% (pool 2.8%)muse-spark → muse-spark — Aborts: 2.1% (pool 7.0%)muse-spark → muse-spark — Time per step: 4.6 (pool 8.1)gpt → deepseek — Ship rate: 97% (pool 91%)gpt → deepseek — One-shot rate: 14% (pool 27%)gpt → deepseek — Verified cycles: 78% (pool 62%)gpt → deepseek — Edits per turn: 18.8 (pool 6.9)gpt → deepseek — Turns per ship: 6.1 (pool 4.5)gpt → deepseek — Hours per ship: 2.6 (pool 0.8)gpt → deepseek — Dollars per ship: $7.53 (pool $15.34)gpt → deepseek — Tool errors: 3.2% (pool 2.8%)gpt → deepseek — Aborts: 41.2% (pool 7.0%)gpt → deepseek — Time per step: 8.1 (pool 8.1)claude-opus → claude-opus — Ship rate: 93% (pool 91%)claude-opus → claude-opus — One-shot rate: 28% (pool 27%)claude-opus → claude-opus — Verified cycles: 66% (pool 62%)claude-opus → claude-opus — Edits per turn: 4.6 (pool 6.9)claude-opus → claude-opus — Turns per ship: 4.5 (pool 4.5)claude-opus → claude-opus — Hours per ship: 0.7 (pool 0.8)claude-opus → claude-opus — Dollars per ship: $15.81 (pool $15.34)claude-opus → claude-opus — Tool errors: 1.9% (pool 2.8%)claude-opus → claude-opus — Aborts: 5.1% (pool 7.0%)claude-opus → claude-opus — Time per step: 8.7 (pool 8.1)claude-fable → deepseek — Ship rate: 97% (pool 91%)claude-fable → deepseek — One-shot rate: 12% (pool 27%)claude-fable → deepseek — Verified cycles: 67% (pool 62%)claude-fable → deepseek — Edits per turn: 13.3 (pool 6.9)claude-fable → deepseek — Turns per ship: 4.7 (pool 4.5)claude-fable → deepseek — Hours per ship: 1.3 (pool 0.8)claude-fable → deepseek — Dollars per ship: $10.92 (pool $15.34)claude-fable → deepseek — Tool errors: 3.8% (pool 2.8%)claude-fable → deepseek — Aborts: 22.3% (pool 7.0%)claude-fable → deepseek — Time per step: 6.4 (pool 8.1)gpt → muse-spark — Ship rate: 94% (pool 91%)gpt → muse-spark — One-shot rate: 17% (pool 27%)gpt → muse-spark — Verified cycles: 63% (pool 62%)gpt → muse-spark — Edits per turn: 17.2 (pool 6.9)gpt → muse-spark — Turns per ship: 4.2 (pool 4.5)gpt → muse-spark — Hours per ship: 1.3 (pool 0.8)gpt → muse-spark — Dollars per ship: $10.08 (pool $15.34)gpt → muse-spark — Tool errors: 3.9% (pool 2.8%)gpt → muse-spark — Aborts: 14.9% (pool 7.0%)gpt → muse-spark — Time per step: 4.9 (pool 8.1)claude-fable → grok — Ship rate: 77% (pool 91%)claude-fable → grok — One-shot rate: 49% (pool 27%)claude-fable → grok — Verified cycles: 53% (pool 62%)claude-fable → grok — Edits per turn: 10.9 (pool 6.9)claude-fable → grok — Turns per ship: 3.5 (pool 4.5)claude-fable → grok — Hours per ship: 0.6 (pool 0.8)claude-fable → grok — Dollars per ship: $14.46 (pool $15.34)claude-fable → grok — Tool errors: 2.7% (pool 2.8%)claude-fable → grok — Aborts: 7.1% (pool 7.0%)claude-fable → grok — Time per step: 7.2 (pool 8.1)claude-fable → claude-fable — Ship rate: 94% (pool 91%)claude-fable → claude-fable — One-shot rate: 21% (pool 27%)claude-fable → claude-fable — Verified cycles: 54% (pool 62%)claude-fable → claude-fable — Edits per turn: 6.3 (pool 6.9)claude-fable → claude-fable — Turns per ship: 4.9 (pool 4.5)claude-fable → claude-fable — Hours per ship: 0.8 (pool 0.8)claude-fable → claude-fable — Dollars per ship: $32.78 (pool $15.34)claude-fable → claude-fable — Tool errors: 1.3% (pool 2.8%)claude-fable → claude-fable — Aborts: 6.5% (pool 7.0%)claude-fable → claude-fable — Time per step: 9.8 (pool 8.1)gpt → gpt — Ship rate: 96% (pool 91%)gpt → gpt — One-shot rate: 18% (pool 27%)gpt → gpt — Verified cycles: 59% (pool 62%)gpt → gpt — Edits per turn: 5.0 (pool 6.9)gpt → gpt — Turns per ship: 4.6 (pool 4.5)gpt → gpt — Hours per ship: 0.9 (pool 0.8)gpt → gpt — Dollars per ship: $9.52 (pool $15.34)gpt → gpt — Tool errors: 6.4% (pool 2.8%)gpt → gpt — Aborts: 11.3% (pool 7.0%)gpt → gpt — Time per step: 10.3 (pool 8.1)grok → grok — Ship rate: 65% (pool 91%)grok → grok — One-shot rate: 32% (pool 27%)grok → grok — Verified cycles: 32% (pool 62%)grok → grok — Edits per turn: 6.9 (pool 6.9)grok → grok — Turns per ship: 3.7 (pool 4.5)grok → grok — Hours per ship: 0.5 (pool 0.8)grok → grok — Dollars per ship: $9.69 (pool $15.34)grok → grok — Tool errors: 3.9% (pool 2.8%)grok → grok — Aborts: 4.3% (pool 7.0%)grok → grok — Time per step: 6.0 (pool 8.1)claude-opus → claude-sonnet — Ship rate: 86% (pool 91%)claude-opus → claude-sonnet — One-shot rate: 28% (pool 27%)claude-opus → claude-sonnet — Verified cycles: 42% (pool 62%)claude-opus → claude-sonnet — Edits per turn: 5.9 (pool 6.9)claude-opus → claude-sonnet — Turns per ship: 5.1 (pool 4.5)claude-opus → claude-sonnet — Hours per ship: 0.9 (pool 0.8)claude-opus → claude-sonnet — Dollars per ship: $15.98 (pool $15.34)claude-opus → claude-sonnet — Tool errors: 3.7% (pool 2.8%)claude-opus → claude-sonnet — Aborts: 10.0% (pool 7.0%)claude-opus → claude-sonnet — Time per step: 9.9 (pool 8.1)

join in

This is a first answer, not the final one. It's built from the sessions developers have shared so far. The more histories in the pool, the harder the ranking gets to argue with.

why it exists

Three questions. Three instruments.

The first two are useful and stay useful. Developers choosing a model and a workflow are missing the third answer.

question 01 · the lab

Benchmarks ask: how capable is this model?

SWE-bench, Terminal-bench, Aider, LMArena. Controlled tasks, hidden tests, preference votes — the best way to compare models on equal footing and know each model’s ceiling.

signal
pass rate · votes
blind spot
One model, a clean task, nobody steering.
task_0042.pyhidden test · unseenPASS

question 02 · the crowd

Usage rankings ask: what is the market using?

OpenCode Data, OpenRouter Ranking. Tokens, users, retention, dollars per session — the best way to see adoption and where the mix is shifting.

signal
tokens · users · $/session
blind spot
Popular is not productive — and still one model at a time.
tokens this weekModel A24T$0.03 / sessionModel B12TModel C9TModel D3T

question 03 · the recorder

Pragmatikos asks: what ships in real work?

Turns, phases, edits and errors from real sessions, correlated with what shipped. The one instrument that scores the setups developers actually run.

signal
session record × shipped outcomes
blind spot
Anything it never saw. Observational, not a benchmark.
session recordcommits · confirmationshippedcorrelated: record × commits

Capable. Popular. Effective.

Only one of them has a row for the setup you actually run.

the blind spot both miss

Same builder. Different planner. Opposite results.

The build model is identical. One planner got it to a commit in a few turns; the other burned dozens and shipped nothing. A model ranking can't see this. A pairing ranking can.

claude-fable-5 → grok-4.6

0 turns

grok-4.6 → grok-4.6

0 turns

turn 1planturn 3shippedturn 1turn 1turn 2turn 3unshipped
ship rate: 77% vs 57%turns to ship: 3.0 vs 3.2same builder: 1.4× the ship rate

Real sessions. Unshipped work counts against the model.

how the score works

Six tiers, ten axes, one weighted mean

Outcome

weight 30

Ship rate and one-shot rate (prompt plus approval).

Ship %One-shot %

Cost of a ship

weight 20

Turns, hours and dollars per shipped cycle.

Turns/shipHours/ship$/ship

Precision

weight 15

Tool errors and human interventions.

Tool err %Abort %

Discipline

weight 15

Share of cycles verified after the last edit.

Verified %

Efficiency

weight 10

Edits per human turn.

Edits/turn

Latency

weight 10

Median seconds per assistant step.

Time/step

Pool-relative

Every axis is a log distance to the pooled average — log odds for rates — on a fixed ×4 span, so ×2 and ÷2 sit the same distance from the line.

Evidence-weighted

Small groups shrink toward the pool with k = 10 pseudo-cycles. A two-cycle fluke nearly vanishes.

Failure lowers the rate

Unshipped cycles stay in the ship-rate denominator, so few-turn dead ends can never look good. Turns, hours and dollars are priced per shipped cycle.

two records, correlated

The session record comes first

Every turn, plan and build phase, edit, tool error and dollar is read from the agent's own record — that is where every axis is measured. Commits only decide which cycles count as shipped: a window from the previous commit, file overlap decides credit, active-but-absent sessions advised only.

session recordplan → build phasesplanbuildhuman turnsedits · same filesedits · other filescommits · confirmationC1 · file overlap → creditC2 · advised only → no creditt−6ht−3ht
edit landed in commit active, touched nothing → advised only

where it falls short

A hypothesis to try, not a verdict

Pragmatikos reads sessions after the fact, based on voluntarily shared sessions. Nobody assigned pairings to developers or tasks, so the ranking says which setups shipped for the people who ran them — not which setup would ship for you. Here is where that bites, and what we intend to do about it.

Observational, not controlled

The developers who run one pairing are not the developers who run another, and they are not working the same tasks. Skill, repo and task difficulty can move a score as much as the models do. “Ranked by what ships” is a correlation. Read it as one.

Limited data

The sample is still small, and some setups have been used more than others. Rankings may shift as more people contribute. A slightly higher score doesn’t necessarily mean a better setup.

Shipped is a floor, not a grade

Following work through review and merge varies across projects. A git commit is simpler to track, so we use it as the bare minimum for “shipped.” It doesn’t mean the work was reviewed, merged, or released.

More histories

Every new contributor puts the same pairings in front of different developers, repos and tasks. That is what lets a pairing’s effect separate from the developer’s. The scale and the shrinkage were built for a bigger pool; the pool is what is missing.

Share your sessions →

If that is not enough

The pool has one thing going for it: everyone in it is a developer running OpenCode on real work — the population this ranking is for. That does not fix the task and skill mix, but a different approach can start from it. If more histories do not settle the picture, the method changes, and this page will say what changed.

contribute

Add your sessions in two minutes

For OpenCode v2 — other coding agents coming soon.

Install the ocInsights plugin for OpenCode: add "@pfoundation/ocinsights" to the "plugin" list in my global opencode.json config. Then tell me to restart OpenCode, and afterwards verify the plugin loaded and the insights deck answers at http://127.0.0.1:4173/. Also report whether insight contribution is on, without changing that setting.

  1. 1

    Paste the prompt into your OpenCode agent and let it edit your config.

  2. 2

    Restart OpenCode when it tells you to, then open the deck it verifies.

  3. 3

    Preview with Contribute in the deck header — sharing is on by default.

Twenty-five fields per cycle — day, models, effort, harness, turns, edits, cost, shipping. No paths, prompts, session ids or projects. Preview in the deck's Contribute panel before anything leaves your machine.