Written by Jakub Rusinowski · Last updated 2026-08-04 · Hardware figures computed by our VRAM engine
Public benchmarks tell you which frontier models lead; they do not tell you whether Devstral-2 22B beats Qwen 3.6 27B on your TypeScript monorepo, because scores are Python-heavy and every number assumes a specific agent harness. Build a small eval instead: twenty real tasks from your own git history, each with a deterministic pass/fail check, run three times per configuration. A weekend of setup, and every model and harness decision afterwards is evidence-based.
Two questions come up constantly and only one has a public answer. "Which open model is strongest?" — the benchmark leaderboards handle that, and our dated Report #2 tracks the landscape. "Will this model do *my* work?" — nothing published answers that, and the gap between the two is where most disappointment with local coding agents comes from.
The gap has three causes. Benchmarks skew heavily Python and heavily toward a particular kind of bug-fix task. Every score is produced by a specific harness, and the same weights score very differently under a different one — which is precisely why the harness is worth engineering. And benchmark runs assume a context length and a quantisation that may be nothing like what your GPU serves.
Worth knowing so you can read them correctly rather than dismiss them.
| Benchmark | What it does | What it tells you locally |
|---|---|---|
| SWE-bench Verified | Real GitHub issues; a patch must make the repo's tests pass | The best single predictor of agentic usefulness — but Python-heavy and harness-dependent |
| SWE-bench Pro | Harder, longer-horizon variant | Sorts the frontier; local-tier models compress near the bottom |
| Terminal-Bench | Tasks in a real terminal environment | Closest proxy for terminal-agent work; sensitive to tool-call quality |
| HumanEval / MBPP | Standalone function completion | Near-saturated and mostly uninformative for agents. Ignore for this purpose |
| Aider polyglot | Edit-format adherence across languages | Unusually relevant locally — it measures whether a model can produce applicable diffs |
Two reading rules. Always check which harness produced the number — a model card's score is a model-plus-scaffold score, and swapping the scaffold moves it. Discount for quantisation and context: published numbers are typically full precision with generous windows, while you are running Q4 at 16–32K. That difference is usually small for straightforward work and grows on long, multi-file tasks.
The reasonable use of leaderboards is to shortlist two or three candidates for your tier. The decision comes from your own eval.
Your git history is a labelled dataset nobody else has: every bug-fix commit is a task with a known-good solution and, if you have tests, a built-in verifier.
1 · Mine the tasks. Pick 20 commits that fixed something and touched 1–3 files. Prefer ones where a test changed alongside the fix — that test is your checker.
git log --oneline --no-merges --grep='^fix' -n 60 --format='%h %s'
git show --stat <sha> # keep the ones touching 1-3 files
2 · Turn each into a task. For each commit, record: the parent SHA (the starting state), a one-paragraph task description written the way you would brief a colleague — *without* naming the fix — and the check command that must pass afterwards.
tasks/
001-null-user-session/
base.sha # parent commit
prompt.md # "Sessions for anonymous users crash on refresh. Fix it."
verify.sh # pytest tests/test_session.py -q
3 · Include the boring middle. Twenty tasks that are all hard tells you nothing but "no". Aim for roughly 8 easy (single file, obvious), 8 medium (two or three files, needs a search), 4 hard (cross-cutting). The distribution should look like your actual week.
4 · Add trap tasks. Two or three where the right answer is "this is under-specified" or the fix requires touching a file the rules forbid. Models that confidently do the wrong thing are worse than models that stop, and no public benchmark measures this.
#!/usr/bin/env bash
# eval.sh — run every task against one configuration, 3 seeds
CONFIG="$1" # label, e.g. devstral22b-aider-16k
for task in tasks/*/; do
for seed in 1 2 3; do
git worktree add -f /tmp/ev -b ev-tmp "$(cat "$task/base.sha")" >/dev/null
( cd /tmp/ev && timeout 900 run-agent.sh "$task/prompt.md" )
( cd /tmp/ev && bash "../../$task/verify.sh" ) && r=PASS || r=FAIL
echo "$CONFIG,$(basename "$task"),$seed,$r" >> results.csv
git worktree remove -f /tmp/ev; git branch -D ev-tmp
done
done
The rules that make results comparable:
Pass rate alone hides the differences that decide whether you keep using a setup.
any, or skipped assertions. Run git diff --stat -- tests/ on every result; this is the number that separates a useful agent from an impressive one.Findings that recur often enough to expect:
1. Harness changes beat model changes, up to a point. Raising the served context, adding a rules file and giving the agent a test command routinely move pass rate more than one model tier does — and cost nothing in VRAM. Run those experiments first. 2. The tier below your assumption is often enough. Many teams discover their real distribution is 80% easy-and-medium, where the 16 GB model matches the 24 GB one at twice the speed. 3. Quantisation matters less than context. Q4 versus Q5 is usually within noise on this kind of eval; 8K versus 32K is not. 4. The hard bucket is where local plateaus. Cross-cutting tasks are where frontier models still separate — which tells you exactly where a hybrid fallback earns its keep, and how often you would actually use it. 5. Your eval ages. Re-run it when a new model lands or when you change harness. It takes an hour once it exists, and it turns "the new model feels better" into a number.
If twenty tasks is too much to start, five is not nothing. Take your last five bug-fix commits, write the prompts, use the existing tests as checkers, run each three times against your current setup, and record pass rate and median turns. That single number is already more informative about your repo than any leaderboard — and it gives you a baseline, which is the part that matters. Every configuration change after that is a comparison instead of a guess.
Running the same eval against a model your card cannot hold is the cleanest way to find out whether an upgrade is worth it. Rent the bigger GPU for an evening, run the twenty tasks, and let the pass rate decide.
Full list on the cloud AI directory.