commitbench

← all comparisons

Claude Opus 4.8 vs Claude Sonnet 4.6 for coding

Claude Opus 4.8 ranks higher on real GitHub commits. Each agent gets a repository at a past commit and a description of the next change, edits the code on its own, and is graded from 0 to 10. Pick any two models below to switch the comparison.

vs
BT rating · Claude Opus 4.8
-1elo
BT rating · Claude Sonnet 4.6
-23elo
Per-task wins
484234
Tasks · repos
140 · 4
Edge
Claude

What the numbers say

Over 140 benchmarked tasks from 4 public repositories, Claude Opus 4.8 has a Bradley-Terry rating of -1 and Claude Sonnet 4.6 -23 (Elo-scaled, with the human commit anchored at 0). On the 124 tasks where both ran, Claude Opus 4.8 won more often (48 to 34, with 42 tied). On cost, Claude Opus 4.8 runs at about $103.088 and Claude Sonnet 4.6 at about $61.834 per run.

Head-to-head, per task (rubric scores, 0–10)

RepoTaskClaude Opus 4.8Claude Sonnet 4.6
ggml-org/llama.cppsycl : fix the failed UT cases of conv_3d (#24900) · ggml1.59.5
pooled: unsloth-zoo + vllm + llama.cppsycl : fix the failed UT cases of conv_3d (#24900) · ggml1.59.5
pooled: unsloth-zoo + vllm + llama.cppfix(moe_wna16): access tp_size via moe_config for RoutedExperts compatibility (#45404) · vllm8.11.5
vllm-project/vllmfix(moe_wna16): access tp_size via moe_config for RoutedExperts compatibility (#45404) · vllm8.11.5
pooled: unsloth-zoo + vllm + llama.cpp[XPU][MoE] Add WNA16 oracle backend for GPTQ sym-int4 (xpu_fused_moe) (#41426) · vllm2.58.5
vllm-project/vllm[XPU][MoE] Add WNA16 oracle backend for GPTQ sym-int4 (xpu_fused_moe) (#41426) · vllm2.58.5
pooled: unsloth-zoo + vllm + llama.cppFix gptoss 4bit (#524) · unsloth_zoo9.54.0
pooled: unsloth-zoo + vllm + llama.cppfix(moe-fp8): inline weight/quant-state lookup; narrow ImportError scope · unsloth_zoo7.52.0
unslothai/unsloth-zooFix gptoss 4bit (#524) · unsloth_zoo9.54.0
unslothai/unsloth-zoofix(moe-fp8): inline weight/quant-state lookup; narrow ImportError scope · unsloth_zoo7.52.0
ggml-org/llama.cppggml : fix ARM NEON nvfp4 dot product on non-dotprod targets (#21559) · ggml8.53.5
pooled: unsloth-zoo + vllm + llama.cppggml : fix ARM NEON nvfp4 dot product on non-dotprod targets (#21559) · ggml8.53.5
pooled: unsloth-zoo + vllm + llama.cppfix(moe-bnb): dequant Params4bit experts in transformers v5 grouped/batched MoE forward (B6) · unsloth_zoo5.59.6
unslothai/unsloth-zoofix(moe-bnb): dequant Params4bit experts in transformers v5 grouped/batched MoE forward (B6) · unsloth_zoo5.59.6
pooled: unsloth-zoo + vllm + llama.cppAuto-install fused lm_head + cross_entropy forward across transformers · tests10.06.8
unslothai/unsloth-zooAuto-install fused lm_head + cross_entropy forward across transformers · tests10.06.8
ggml-org/llama.cppggml-webgpu: support non-square subgroup matrix configs for Intel GPUs (#21669) · ggml8.55.5
pooled: unsloth-zoo + vllm + llama.cppggml-webgpu: support non-square subgroup matrix configs for Intel GPUs (#21669) · ggml8.55.5
pooled: unsloth-zoo + vllm + llama.cpp[DeepEP V2] Fill invalid recv_topk_idx with -1 (#46432) · vllm9.57.0
vllm-project/vllm[DeepEP V2] Fill invalid recv_topk_idx with -1 (#46432) · vllm9.57.0
pooled: unsloth-zoo + vllm + llama.cppCapture outputs fixes for transformers v5 (#713) · tests9.37.0
unslothai/unsloth-zooCapture outputs fixes for transformers v5 (#713) · tests9.37.0
ggml-org/llama.cppmetal : fix FA support logic (#21898) · ggml8.010.0
pooled: unsloth-zoo + vllm + llama.cppmetal : fix FA support logic (#21898) · ggml8.010.0
pooled: unsloth-zoo + vllm + llama.cppadd fixes for moe · unsloth_zoo10.08.1
unslothai/unsloth-zooadd fixes for moe · unsloth_zoo10.08.1
ggml-org/llama.cpp[SYCL] Add BF16 support to GET_ROWS operation (#21391) · ggml10.08.3
pooled: unsloth-zoo + vllm + llama.cpp[SYCL] Add BF16 support to GET_ROWS operation (#21391) · ggml10.08.3
pooled: unsloth-zoo + vllm + llama.cppFix dense vLLM state dict parity · tests0.01.7
unslothai/unsloth-zooFix dense vLLM state dict parity · tests0.01.7
pooled: unsloth-zoo + vllm + llama.cppfix(peft-param-wrapper): handle merge_and_unload for 4-bit MoE experts (B4) · unsloth_zoo10.08.3
unslothai/unsloth-zoofix(peft-param-wrapper): handle merge_and_unload for 4-bit MoE experts (B4) · unsloth_zoo10.08.3
pooled: unsloth-zoo + vllm + llama.cppFix review findings for PR #3: Gemma4 LoRA/BnB patches, GDN extraction, finalize_huggingface_model · unsloth_zoo9.68.0
unslothai/unsloth-zooFix review findings for PR #3: Gemma4 LoRA/BnB patches, GDN extraction, finalize_huggingface_model · unsloth_zoo9.68.0
pooled: unsloth-zoo + vllm + llama.cppfix(moe-quant): gate v5-only patches · tests7.59.0
pooled: unsloth-zoo + vllm + llama.cppFix LoRA scaling count mismatch on merge for Qwen2.5-VL exports (#2966) (#806) · tests9.07.5
pooled: unsloth-zoo + vllm + llama.cpp[Model]Fix MiniMaxM2ForCausalLM perf regression (#45935) · tests10.08.5
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix][Model Runner V2][Spec Decode] Fix int32 offset overflow in sampler kernels (#46560) · tests9.07.5
unslothai/unsloth-zoofix(moe-quant): gate v5-only patches · tests7.59.0
unslothai/unsloth-zooFix LoRA scaling count mismatch on merge for Qwen2.5-VL exports (#2966) (#806) · tests9.07.5
vllm-project/vllm[Model]Fix MiniMaxM2ForCausalLM perf regression (#45935) · tests10.08.5
vllm-project/vllm[Bugfix][Model Runner V2][Spec Decode] Fix int32 offset overflow in sampler kernels (#46560) · tests9.07.5
ggml-org/llama.cppmetal: Q1_0 backend (#21528) · ggml8.59.9
pooled: unsloth-zoo + vllm + llama.cppmetal: Q1_0 backend (#21528) · ggml8.59.9
pooled: unsloth-zoo + vllm + llama.cppperf(moe-fp8): batched 3D dequant + FP8Experts dispatcher + Trainer guard · unsloth_zoo9.78.5
unslothai/unsloth-zooperf(moe-fp8): batched 3D dequant + FP8Experts dispatcher + Trainer guard · unsloth_zoo9.78.5
ggml-org/llama.cppcuda: Q1_0 initial backend (#21629) · ggml8.09.0
ggml-org/llama.cpp[SYCL] support bf16 on bin_bcast OP and unary OPs (#24838) · ggml9.08.0
ggml-org/llama.cppllama-fit: fix regex pattern for gate_up tensors (#20910) · src7.06.0
pooled: unsloth-zoo + vllm + llama.cppFix ModuleNotFoundError when loading gpt-oss models without triton_kernels (#4088) (#539) · unsloth_zoo8.09.0
pooled: unsloth-zoo + vllm + llama.cppFp8 compressed (#358) · unsloth_zoo9.010.0
pooled: unsloth-zoo + vllm + llama.cpp[XPU] Fix Triton attn fp8/bf16 check failing (#45758) · vllm9.010.0
pooled: unsloth-zoo + vllm + llama.cppHumming support for 2/3/5/6/7-bit pack-quantized weight-only inference (#46389) · vllm9.010.0
pooled: unsloth-zoo + vllm + llama.cpp[DSv4 Perf] DSv4 flashinfer sparse index cache for metadata, 2%~4% TTFT improvement (#45863) · tests9.010.0
pooled: unsloth-zoo + vllm + llama.cppcuda: Q1_0 initial backend (#21629) · ggml8.09.0
pooled: unsloth-zoo + vllm + llama.cpp[SYCL] support bf16 on bin_bcast OP and unary OPs (#24838) · ggml9.08.0
pooled: unsloth-zoo + vllm + llama.cppllama-fit: fix regex pattern for gate_up tensors (#20910) · src7.06.0
unslothai/unsloth-zooFix ModuleNotFoundError when loading gpt-oss models without triton_kernels (#4088) (#539) · unsloth_zoo8.09.0
unslothai/unsloth-zooFp8 compressed (#358) · unsloth_zoo9.010.0
vllm-project/vllm[XPU] Fix Triton attn fp8/bf16 check failing (#45758) · vllm9.010.0
vllm-project/vllmHumming support for 2/3/5/6/7-bit pack-quantized weight-only inference (#46389) · vllm9.010.0
vllm-project/vllm[DSv4 Perf] DSv4 flashinfer sparse index cache for metadata, 2%~4% TTFT improvement (#45863) · tests9.010.0
ggml-org/llama.cppsycl : support MUL_MAT and OUT_PROD with Q1_0 (#24721) · ggml9.08.2
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix] Default tie_weights to sharing the weight (fix tied quantized embeddings, e.g. ModelOpt Gemma4) (#45544) · vllm9.210.0
pooled: unsloth-zoo + vllm + llama.cppsycl : support MUL_MAT and OUT_PROD with Q1_0 (#24721) · ggml9.08.2
vllm-project/vllm[Bugfix] Default tie_weights to sharing the weight (fix tied quantized embeddings, e.g. ModelOpt Gemma4) (#45544) · vllm9.210.0
ggml-org/llama.cppvulkan: Switch MUL_MAT_VEC to 4 K per iteration for F16/32 (#22887) · ggml9.310.0
pooled: unsloth-zoo + vllm + llama.cppvulkan: Switch MUL_MAT_VEC to 4 K per iteration for F16/32 (#22887) · ggml9.310.0
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix][Kernel] Fix mHC fused-RMSNorm big-fuse miscompile for hidden_size != 4096 (#44692) · vllm10.09.5
pooled: unsloth-zoo + vllm + llama.cpp[Perf][1/N] Expand Triton kernel warmup coverage, DSv4 (#46634) · vllm9.09.5
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix] Fix minimax_qk_norm_fusion (#44983) · vllm5.55.0
vllm-project/vllm[Bugfix][Kernel] Fix mHC fused-RMSNorm big-fuse miscompile for hidden_size != 4096 (#44692) · vllm10.09.5
vllm-project/vllm[Perf][1/N] Expand Triton kernel warmup coverage, DSv4 (#46634) · vllm9.09.5
vllm-project/vllm[Bugfix] Fix minimax_qk_norm_fusion (#44983) · vllm5.55.0
pooled: unsloth-zoo + vllm + llama.cppfix(mlx): repair stub injection on Apple Silicon (3 sub-bugs) · unsloth_zoo10.09.7
unslothai/unsloth-zoofix(mlx): repair stub injection on Apple Silicon (3 sub-bugs) · unsloth_zoo10.09.7
ggml-org/llama.cppconvert : minor fixes for numpy 2.x (#23571) · examples8.68.5
pooled: unsloth-zoo + vllm + llama.cppHarden fused-forward AST rewriter and adapter · unsloth_zoo9.29.1
pooled: unsloth-zoo + vllm + llama.cppconvert : minor fixes for numpy 2.x (#23571) · examples8.68.5
unslothai/unsloth-zooHarden fused-forward AST rewriter and adapter · unsloth_zoo9.29.1
pooled: unsloth-zoo + vllm + llama.cppfeat(mlx): add save_method to save_pretrained_merged · unsloth_zoo9.79.8
unslothai/unsloth-zoofeat(mlx): add save_method to save_pretrained_merged · unsloth_zoo9.79.8
ggml-org/llama.cppdflash: refactor draft model conversion (#25110) · conversion10.010.0
ggml-org/llama.cpp[SYCL] Add Q8_0 reorder optimization (~3x tg speedup on Intel Arc) (#21527) · ggml10.010.0
ggml-org/llama.cppggml: support concat for scalar types at cuda backend (#24011) · ggml10.010.0
ggml-org/llama.cppCUDA: Various fixes to `cpy.cu` (#25000) · ggml10.010.0
ggml-org/llama.cppCUDA & CPU: support F32 kernel type for `CONV_TRANSPOSE_2D` (#17094) · ggml10.010.0
ggml-org/llama.cppggml: vectorize ggml_vec_dot_q4_1_q8_1 with WASM SIMD128 (#22209) · ggml10.010.0
ggml-org/llama.cppmodel : support granite multilingual embeddings R2 (ibm-granite/granite-embedding-{97,311}m-multilingual-r2) (#22716) · conversion10.010.0
ggml-org/llama.cppsycl : fix failed ut cases of norm (#25044) · ggml10.010.0
ggml-org/llama.cppggml: `gguf_init_from_callback` and `gguf_init_from_buffer` (#22341) · ggml10.010.0
ggml-org/llama.cppfix: GLM-DSA crash in llama-tokenize when using vocab_only (#22102) · src10.010.0
ggml-org/llama.cppcuda : fix KQ mask offset integer overflow in fattn MMA kernel (#23610) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppfix(moe): loud-fail on silent fallbacks in MoE merge + FP8 forward paths · unsloth_zoo8.08.0
pooled: unsloth-zoo + vllm + llama.cppUse torch.Tensor.reshape for non-contiguous tensor in ce loss function (#591) · unsloth_zoo10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Kernel] Add swap AB optimization to fused_moe_kernel (#36559) · vllm4.04.0
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix] Restrict FlashInfer cuDNN FP8 ViT attention gate to Blackwell (SM 100) (#45251) · vllm10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Kernel][Bugfix] Fix INT8 per-token-head KV cache rounding in Triton reshape-and-cache (#45361) · tests10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix][Quantization] Fix W8A8 int-quantized scheme selection regression (#46860) · tests10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix] Support non-power-of-2 top_k in legacy triton_kernels routing (#46406) · vllm10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Kernel] Enable TritonW4A16LinearKernel as CUDA fallback for non-Marlin-aligned W4A16 shapes (#43731) · vllm10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[Perf] Fix dsv3_router_gemm heuristic (#44217) · vllm10.010.0
pooled: unsloth-zoo + vllm + llama.cppnixl_ep: Skip post-receive quantization for NVFP4 (#45606) · vllm9.59.5
pooled: unsloth-zoo + vllm + llama.cppdflash: refactor draft model conversion (#25110) · conversion10.010.0
pooled: unsloth-zoo + vllm + llama.cpp[SYCL] Add Q8_0 reorder optimization (~3x tg speedup on Intel Arc) (#21527) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppggml: support concat for scalar types at cuda backend (#24011) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppCUDA: Various fixes to `cpy.cu` (#25000) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppCUDA & CPU: support F32 kernel type for `CONV_TRANSPOSE_2D` (#17094) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppggml: vectorize ggml_vec_dot_q4_1_q8_1 with WASM SIMD128 (#22209) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppmodel : support granite multilingual embeddings R2 (ibm-granite/granite-embedding-{97,311}m-multilingual-r2) (#22716) · conversion10.010.0
pooled: unsloth-zoo + vllm + llama.cppsycl : fix failed ut cases of norm (#25044) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppggml: `gguf_init_from_callback` and `gguf_init_from_buffer` (#22341) · ggml10.010.0
pooled: unsloth-zoo + vllm + llama.cppfix: GLM-DSA crash in llama-tokenize when using vocab_only (#22102) · src10.010.0
pooled: unsloth-zoo + vllm + llama.cppcuda : fix KQ mask offset integer overflow in fattn MMA kernel (#23610) · ggml10.010.0
unslothai/unsloth-zoofix(moe): loud-fail on silent fallbacks in MoE merge + FP8 forward paths · unsloth_zoo8.08.0
unslothai/unsloth-zooUse torch.Tensor.reshape for non-contiguous tensor in ce loss function (#591) · unsloth_zoo10.010.0
vllm-project/vllm[Kernel] Add swap AB optimization to fused_moe_kernel (#36559) · vllm4.04.0
vllm-project/vllm[Bugfix] Restrict FlashInfer cuDNN FP8 ViT attention gate to Blackwell (SM 100) (#45251) · vllm10.010.0
vllm-project/vllm[Kernel][Bugfix] Fix INT8 per-token-head KV cache rounding in Triton reshape-and-cache (#45361) · tests10.010.0
vllm-project/vllm[Bugfix][Quantization] Fix W8A8 int-quantized scheme selection regression (#46860) · tests10.010.0
vllm-project/vllm[Bugfix] Support non-power-of-2 top_k in legacy triton_kernels routing (#46406) · vllm10.010.0
vllm-project/vllm[Kernel] Enable TritonW4A16LinearKernel as CUDA fallback for non-Marlin-aligned W4A16 shapes (#43731) · vllm10.010.0
vllm-project/vllm[Perf] Fix dsv3_router_gemm heuristic (#44217) · vllm10.010.0
vllm-project/vllmnixl_ep: Skip post-receive quantization for NVFP4 (#45606) · vllm9.59.5
ggml-org/llama.cppsycl : support nvfp4 type in mul_mat (#21227) · ggml9.7-
ggml-org/llama.cppggml : extend im2col f16 (ggml/1434) · ggml10.0-
ggml-org/llama.cpphexagon: dma optimizations (mostly fixing regressions) (#21137) · ggml7.0-
ggml-org/llama.cppsycl: support reordered Q4_K/Q5_K/Q6_K MoE MUL_MAT_ID (#24452) · ggml-8.1
ggml-org/llama.cppCUDA : Fix CUB's argsort when nrows % block_size == 0 CCCL < 3.1 (#21181) · ggml8.0-
pooled: unsloth-zoo + vllm + llama.cpp[Bugfix] Fix corrupt outputs in MoE FP8 LoRA responses and MoE base model responses when LoRAs are loaded (#42120) · tests-6.5
pooled: unsloth-zoo + vllm + llama.cpp[AMD][OCP MX][CI] Fix tests to not dispatch on `UNFUSED_TRITON` backend on MI300, improve w_mxfp4_a_fp8 emulation support (#46142) · tests-8.0
pooled: unsloth-zoo + vllm + llama.cppAdd weights padding for fp8 per-block online quantization (#44763) · vllm-9.0
pooled: unsloth-zoo + vllm + llama.cppsycl : support nvfp4 type in mul_mat (#21227) · ggml9.7-
pooled: unsloth-zoo + vllm + llama.cppggml : extend im2col f16 (ggml/1434) · ggml10.0-
pooled: unsloth-zoo + vllm + llama.cpphexagon: dma optimizations (mostly fixing regressions) (#21137) · ggml7.0-
pooled: unsloth-zoo + vllm + llama.cppsycl: support reordered Q4_K/Q5_K/Q6_K MoE MUL_MAT_ID (#24452) · ggml-8.1
pooled: unsloth-zoo + vllm + llama.cppCUDA : Fix CUB's argsort when nrows % block_size == 0 CCCL < 3.1 (#21181) · ggml8.0-
vllm-project/vllm[Bugfix] Fix corrupt outputs in MoE FP8 LoRA responses and MoE base model responses when LoRAs are loaded (#42120) · tests-6.5
vllm-project/vllm[AMD][OCP MX][CI] Fix tests to not dispatch on `UNFUSED_TRITON` backend on MI300, improve w_mxfp4_a_fp8 emulation support (#46142) · tests-8.0
vllm-project/vllmAdd weights padding for fp8 per-block online quantization (#44763) · vllm-9.0

Scores run from 0 to 10. Head-to-head counts only the 124 tasks where both models ran. Bold marks the winner on that task.

By area of the codebase

AreaTasksClaude Opus 4.8Claude Sonnet 4.6
ggml448.98.9
vllm328.48.3
unsloth_zoo289.08.1
tests248.47.7
src48.58.0
conversion410.010.0
examples28.68.5

How the benchmark works

A task here is a single commit. CommitBench checks out the repository one commit before the change, writes a short description of the work from the diff, and gives the agent nothing but that description and the codebase. The agent navigates and edits the files itself, the same way it would on a real ticket.

Every agent's change is then compared head-to-head against every other one — and against the human commit — by a blind judge that never sees which model wrote which diff. Those pairwise wins become a Bradley-Terry rating (Elo-scaled, with the human commit anchored at 0), which is the ranking shown here. A fixed rubric still scores each change for the per-task detail. Cost and speed come from each run's own token and timing reports, priced at one consistent rate so the numbers line up across agents.

Common questions

Which is better for coding, Claude Opus 4.8 or Claude Sonnet 4.6?

Claude Opus 4.8 ranks higher overall across 140 tasks from 4 public repositories. On the pairwise Bradley-Terry rating (Elo-scaled, anchored on the human commit at 0), Claude Opus 4.8 sits at -1 and Claude Sonnet 4.6 at -23. Claude Opus 4.8 costs about $103.088 per run, Claude Sonnet 4.6 about $61.834 per run.

How is the ranking calculated?

Each task is a real commit from a public repository. The agent gets the code at the commit before the change and a written description of the work, then edits the files itself. Every agent's diff is then compared head-to-head against every other one — and against the human commit — by a blind judge that never sees which model produced which diff. Those pairwise wins and losses become a Bradley-Terry rating (Elo-scaled), so the ranking reflects which changes actually win comparisons, not whether they match the original wording.

Could the agents have seen the answers already?

Two things limit that. The task description is rewritten from the change rather than copied from the commit message, and the grader is given the rubric instead of the original answer. Building tasks from recent commits also reduces how much a model could have trained on the result.

Can I compare Claude Opus 4.8 and Claude Sonnet 4.6 on my own code?

Yes. Point CommitBench at your repository and it builds the same kind of tasks from your own commit history, so the ranking reflects the code you actually work on.

Other comparisons

Claude Opus vs GPT-5.5Claude Opus vs GLM-5.2Claude Sonnet vs GPT-5.5Claude Sonnet vs GLM-5.2GPT-5.5 vs GLM-5.2
Run this on your codebase

Public repos give the general picture. Benchmark Claude Opus 4.8 against Claude Sonnet 4.6 on your own commit history to see which one does better on the code you actually ship.

Benchmark your repo →