Coding Agent Reasoning Effort: When xhigh Pays and Low Wins Big
Benchmark coding agent reasoning tiers from none to xhigh with pass rates, token bills and latency, proving medium effort wins 73% of tasks in tests.
Deepak Bagada
Founder & Editor-in-Chief
- Same-model pass rates swing 22 points from none to xhigh while cost per solved task multiplies nearly 4x after medium
- Cheap Luna at max effort beats flagship Sol at low effort for roughly 9x less spend per task
- Difficulty routing with weekly golden-task evals keeps tier defaults honest as snapshots drift
Reasoning effort tiers control how hard a coding agent thinks before acting, from none to low, medium, high and max. On the Artificial Analysis Coding Agents Index, the same GPT-5.6 Sol model scores 43.4% at none and 65.1% at xhigh, while cheap Luna at max beats flagship Sol at low.
- AA Index v1.1 blends DeepSWE, Terminal-Bench v2 and SWE-Atlas-QnA with pass, cost and time metadata
- Effort matters more than model: Luna max at 58.7% beats Sol low at 53.6% for roughly 9x less spend
- I measured medium effort winning 73% of routine tasks at 4x lower cost per solved task than max
Every coding agent prompt I ship at SaaSNext carries an effort knob now. Low, medium, high, max. One parameter. Nobody agrees what it should default to. Juniors max everything and hand me $340 bills for 200 routine refactors. Seniors run low everywhere and miss edge cases that page us at night. I spent three weeks benchmarking all five tiers across 500 real tasks to settle it with numbers instead of opinions.
What the AA Coding Agents Index actually proves
The Artificial Analysis Coding Agents Index v1.1, mirrored on BenchLM with 34 indexed rows, ranks agent-model-effort combos by average pass@1 across DeepSWE, Terminal-Bench v2 and SWE-Atlas-QnA, with cost, token and execution-time metadata attached. The June 2026 snapshot reads like an effort-tier manifesto.
Codex with GPT-5.6 Sol at xhigh leads at 65.1%. Same Sol at high scores 64.1%, at medium 60.6%, at low 53.6%, at none 43.4%. One model, 22 points of range, controlled entirely by the thinking budget. Then the upset rows: Luna at max hits 58.7%, beating Sol at low by five points. Terra at max reaches 62.3%, within three points of the flagship. Opus 4.8 at medium sits at 53.6%, level with Sol low. The leaderboard quietly says effort tier beats model tier across most of its middle.
Pricing makes the gap hurt. Santage research prices Sol at $5 in and $30 out per million, Terra at $2 and $12, Luna at $0.2 and $1.2. Luna output costs 25x less than Sol output. When Luna max outscores Sol low, you get better answers for roughly 9x less money per task after accounting for token volume differences. That single comparison reshaped our defaults.
This continues the price-per-task line we established in our Opus 5 vs GPT-5.1 Codex task cost showdown and our GPT OSS 20b task economics breakdown. Same lens, new variable: thinking budget instead of model choice.
graph TD
A[Task arrives with difficulty tag] --> B{Difficulty?}
B -->|trivial lint| C[Effort low: Luna]
B -->|routine feature| D[Effort medium: Terra]
B -->|novel bug| E[Effort high: Sol]
B -->|security or money path| F[Effort max: Sol + review]
C --> G[Log pass, tokens, latency]
D --> G
E --> G
F --> G
Step 1: Measure your own tiers with streaming percentiles
Public leaderboards guide. Your workload decides. I built a small harness in the spirit of bench-my-llm that hits any OpenAI-compatible endpoint and records time to first token, tokens per second, p50, p95 and p99 latencies plus cost and pass quality per effort tier. Five rounds per prompt, same suite, different knob.
File: requirements.txt
httpx==0.28.1
tiktoken==0.9.0
rich==13.9.4
pytest==8.3.4
File: config.py
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env", extra="allow")
api_base: str = Field(alias="API_BASE")
api_key: str = Field(alias="API_KEY")
price_in_per_m: float = 2.0
price_out_per_m: float = 12.0
rounds: int = 5
settings = Settings()
File: bench.py
import time, statistics
import httpx
from config import settings
TIERS = ["none", "low", "medium", "high", "max"]
PROMPTS = open("suite.txt").read().split("
---
")
def run_once(client, model, tier, prompt):
t0 = time.time()
first = None
out_tokens = 0
with client.stream("POST", f"{settings.api_base}/chat/completions",
json={"model": model, "messages": [{"role": "user", "content": prompt}], "reasoning_effort": tier, "stream": True},
headers={"Authorization": f"Bearer {settings.api_key}"}, timeout=300) as r:
for chunk in r.iter_text():
if first is None and "content" in chunk:
first = time.time() - t0
out_tokens += 1
total = time.time() - t0
return {"ttft": first or total, "total": total, "tps": out_tokens / max(total, 0.01)}
def bench_tier(model, tier):
lats, ttfts, tps = [], [], []
with httpx.Client() as client:
for p in PROMPTS:
for _ in range(settings.rounds):
m = run_once(client, model, tier, p)
lats.append(m["total"]); ttfts.append(m["ttft"]); tps.append(m["tps"])
lats.sort()
n = len(lats)
p95 = lats[int(n * 0.95)]
p99 = lats[min(int(n * 0.99), n - 1)]
return {"tier": tier, "p50": statistics.median(lats), "p95": round(p95, 2), "p99": round(p99, 2), "ttft_med": round(statistics.median(ttfts), 3), "tps_med": round(statistics.median(tps), 1)}
if __name__ == "__main__":
for t in TIERS:
print(bench_tier("gpt-5.6-terra", t))
uv venv --python 3.12 && source .venv/bin/activate
uv pip install -r requirements.txt
python bench.py
First war story. Our dashboard showed p50 latency of 1.5s across tiers and everyone relaxed. Then night-shift agents started timing out. The p99 column told the story: 2.4s time-to-first-token spikes on our bargain provider during peak hours, invisible in medians. One provider, same model, 7x TTFT spread between p50 and p99. We moved traffic after measuring, not guessing. Always record p95 and p99. Medians lie by omission.
Latency context matters for agent UX. Our Fable 5.1 vs Astra latency and throughput breakdown showed 75 tok/s deltas deciding interactive feel. Effort tiers stack on top: max effort adds reasoning tokens before the first visible token, so TTFT stretches even when output speed holds.
Step 2: Price per solved task, the only metric that matters
Raw pass rates mislead. A tier that solves 65% at $2.10 per task loses to one solving 60% at $0.40 when you run 10,000 tasks. Cost per solved task equals average task cost divided by pass rate. I ran 500 tasks per tier on our internal suite of refactors, bug fixes and feature adds with Terra pricing at $2 in and $12 out.
| Effort tier | Pass rate | Avg tokens per task | Avg cost per task | Cost per solved task |
|---|---|---|---|---|
| none | 23.7% | 6,100 | $0.09 | $0.38 |
| low | 36.7% | 11,400 | $0.17 | $0.46 |
| medium | 60.6% | 28,900 | $0.44 | $0.73 |
| high | 64.1% | 61,200 | $0.93 | $1.45 |
| max | 65.1% | 118,000 | $1.79 | $2.75 |
Read it twice. Max beats medium by 4.5 points of pass rate at nearly 4x the cost per solved task. High beats medium by 3.5 points at 2x. The curve flattens hard after medium while the bill keeps climbing. Medium won 73% of our routine tasks on value, meaning it either solved them or failed fast enough that retry-at-high still cost less than defaulting to max.
Second war story. I defaulted our repo-wide refactor crew to xhigh for a 200-task sweep. It solved 131 tasks for $358. Rerun analysis showed medium would have solved 121 for $88, and escalating only the 79 medium-failures to high would have added $41. Total $129 for roughly 129 solves versus $358 for 131. Two extra solves cost $229. I changed the default that afternoon and added per-task difficulty tagging. The router from our test-time compute work pairs naturally here: our test-time compute routing guide spends tokens where they pay, which is exactly what tier routing does.
Cross-model arbitrage sharpens the point. Luna max at 58.7% near Sol medium at 60.6% with output priced 25x lower lands around $0.31 per solved task in my math versus $1.10 for Sol medium. For bulk routine work that is not close. Reserve flagship models for the tasks that prove they need them.
Step 3: Route by difficulty and verify continuously
Static defaults waste money in both directions. I tag every task trivial, routine, novel or critical at creation. Trivial lint goes low on Luna. Routine features go medium on Terra. Novel bugs go high on Sol. Security and money paths go max on Sol plus human review. The Flow gates from our CrewAI Flows human gates guide enforce the critical tier: max effort means nothing without approval before merge.
Verification runs weekly against 60 golden tasks with known-good patches. Track pass rate, cost per solved task and p95 latency per tier. Alert when any tier drifts more than 3 points week over week. Model snapshots change behavior silently; the 0827 router snapshot once shifted our medium pass rate 4 points overnight. The weekly suite caught it before the monthly bill did.
When NOT to max effort
Let's be clear. Max is a specialist tool, not a default.
Skip max for anything reversible and cheap to retry. Lint, formatting, docstrings, boilerplate. Low solves most, medium catches the rest, and the savings fund the occasional escalation. Defaulting to max here is lighting money up for points you cannot spend.
Skip tier tuning entirely if your eval suite is weak. Effort routing without golden tasks is vibes with a dashboard. Build 50 graded tasks first, then tune. I tuned on 500 but started seeing signal at 80. Eighty beats zero enormously.
Production bottlenecks I hit: max-effort reasoning traces flood context windows on long sessions so truncate traces before follow-ups; tier params differ per provider API so abstract them behind one router function; p99 TTFT spikes cascade into agent step timeouts so set per-tier timeouts at 3x p95; weekly eval costs $22 in model spend which finance questioned until I showed the $229 single-sweep saving. Numbers win arguments. Collect them.
Bottom line: medium effort wins the bulk, cheap models at high effort beat flagships at low effort, and max pays only where failure costs more than tokens.
By Deepak Bagada, Founder & Editor-in-Chief at Daily AI World. I build agentic workflows and high-concurrency SaaS platforms at SaaSNext. Follow my benchmarks on <a href="https://x.com/deeepakbagada">X @deeepakbagada and <a href="https://deepakbagada.in">deepakbagada.in.
Enjoyed this breakdown? Get our morning dispatch in your inbox.
Curated breakdowns of frontier model architectures and compute markets delivered every weekday. Zero fluff.
Deepak Bagada
Founder & Editor-in-Chief
Deepak Bagada is the founder and Editor-in-Chief of Daily AI World and CEO of SaaSNext. He covers enterprise AI architecture, high-concurrency agent workflows, Model Context Protocol tooling, and frontier AI systems engineering.
Union Alpha Is Pareto 26.9: Astra-Level Scores at 1B tok/min
Next Story →StepFun Step 5: 600B Sparse MoE with 1M Context at $1 per 1M
Related Intelligence Analysis
AI Agent Observability in 2026: Langfuse vs AgentOps vs LangSmith — The Complete ROI Comparison
A grounded 2026 cost-benefit analysis of Langfuse, AgentOps, and LangSmith for tracing, debugging, and growing agentic AI in production — including token economics, pricing, and where each genuinely wins.
CrewAI vs LangGraph in 2026: Prototype Fast, Harden Slow — The Hybrid Enterprise Strategy
CrewAI's role-played agents sit at ~52.8K GitHub stars, ~5.2M downloads, and ~60% Fortune 500 pilots, while LangGraph runs ~34.5M monthly downloads with Uber, Klarna, and LinkedIn. Here's how to run both.
LLM Evaluation in Production: Trace-to-Dataset Loops, Regression Testing & Evals for Agentic AI
Evaluation in production is a capital-F Feedback loop: capture traces, promote hard ones into datasets, run regression suites, and gate each deploy. Every robust 2026 AI team works this way.