Cursor Releases Cursor Router: A Request-Level Classifier Delivering Frontier Coding Quality at 30–50% Lower Cost

Cursor has made Cursor Router generally available for Teams and Enterprise plans. The system is a classifier that inspects each request before a model runs, then dispatches it to the model best suited to that specific task. The cursor team reports frontier-quality performance at 60% savings in online A/B tests, and 30–50% savings for early-access enterprise accounts.

The problem it targets is a spend pattern rather than a capability gap. Cursor states that roughly 60% of its developers pick a single model as a daily driver. Routine work therefore gets completed at frontier prices, and AI spend grows faster than output quality. Routing is Cursor’s answer to that mismatch.

What the classifier actually reads

Cursor Router is not a fallback chain or a retry mechanism. It is a classifier trained on 600k+ live requests, evaluated in an online A/B test across millions of live requests, and optimized for user satisfaction (AFC) as its reward signal.

For each request, the router analyzes four inputs: query, context, task complexity, and domain. It combines these with learned knowledge of each model’s behavior. Cursor publishes three routing rules that follow from that classification:

Simple work goes to the most price-efficient models.

UI updates go to the model with the best taste.

Complex, long-horizon problems go to frontier reasoning models.

That third rule carries the weight of the cost argument. The savings do not come from downgrading hard problems. They come from removing routine work from frontier pricing while the difficult tier stays intact.

One implementation detail deserves attention from anyone who has built a router. Cursor Router is cache-aware in both training and evaluation. It is trained on a dataset where routing produces cache misses, and the reported cost savings include the cost of those cache misses. Switching models mid-conversation invalidates prompt cache, and that cost is real. Routers that ignore it overstate their savings.

The classifier was also designed for model churn. Cursor states it can update the router as newer models ship, which matters in a market where the frontier moves monthly.

*{box-sizing:border-box;margin:0;padding:0}
body{background:#0b0b0b;color:#e8e8e8;font-family:-apple-system,BlinkMacSystemFont,”Segoe UI”,Roboto,Helvetica,Arial,sans-serif;padding:0}
#mtp-router-explainer{background:#0b0b0b;border:1px solid #222;border-radius:10px;overflow:hidden}
.hd{padding:18px 20px;border-bottom:1px solid #222;background:#0e0e0e}
.kick{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#76B900;font-weight:700}
.hd h2{font-size:clamp(17px,2.4vw,21px);margin:6px 0 4px;color:#fff;font-weight:650;line-height:1.25}
.hd p{font-size:13px;color:#8a8a8a;line-height:1.5}
.tabs{display:flex;flex-wrap:wrap;gap:0;border-bottom:1px solid #222;background:#0e0e0e}
.tab{flex:1 1 auto;min-width:110px;padding:11px 8px;font-size:12px;font-weight:600;color:#8a8a8a;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-family:inherit;transition:.15s}
.tab:hover{color:#cfcfcf}
.tab.on{color:#76B900;border-bottom-color:#76B900;background:#111}
.pane{display:none;padding:20px}
.pane.on{display:block}
.lbl{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#8a8a8a;font-weight:700;margin-bottom:9px}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:16px}
.chip{padding:8px 12px;font-size:12px;border:1px solid #2a2a2a;background:#141414;color:#cfcfcf;border-radius:6px;cursor:pointer;font-family:inherit;transition:.15s;text-align:left}
.chip:hover{border-color:#3d3d3d;color:#fff}
.chip.on{border-color:#76B900;color:#76B900;background:rgba(118,185,0,.09)}
.flow{display:grid;grid-template-columns:1fr;gap:10px}
.box{background:#111;border:1px solid #222;border-radius:8px;padding:14px}
.box h4{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#76B900;margin-bottom:9px;font-weight:700}
.sig{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:8px}
.sigcell{background:#0d0d0d;border:1px solid #1e1e1e;border-radius:6px;padding:9px 10px}
.sigcell .k{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:#7a7a7a;margin-bottom:3px}
.sigcell .v{font-size:12.5px;color:#e8e8e8;font-weight:600;line-height:1.35}
.arrow{text-align:center;color:#76B900;font-size:15px;line-height:1}
.tier{display:flex;align-items:center;gap:11px;flex-wrap:wrap}
.tierdot{width:9px;height:9px;border-radius:50%;background:#76B900;flex:none}
.tiername{font-size:15px;font-weight:700;color:#fff}
.tierwhy{font-size:12.5px;color:#9a9a9a;line-height:1.55;margin-top:8px}
.rule{font-size:11.5px;color:#76B900;background:rgba(118,185,0,.07);border-left:2px solid #76B900;padding:7px 10px;margin-top:10px;border-radius:0 4px 4px 0;line-height:1.5}
.modebtns{display:flex;gap:7px;margin-bottom:15px;flex-wrap:wrap}
.modebtn{flex:1 1 90px;padding:10px 8px;font-size:12.5px;font-weight:700;border:1px solid #2a2a2a;background:#141414;color:#cfcfcf;border-radius:6px;cursor:pointer;font-family:inherit}
.modebtn.on{border-color:#76B900;color:#76B900;background:rgba(118,185,0,.09)}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:12px}
.stat{background:#111;border:1px solid #222;border-radius:8px;padding:13px}
.stat .n{font-size:24px;font-weight:700;color:#76B900;line-height:1.1}
.stat .n.na{font-size:15px;color:#6a6a6a}
.stat .c{font-size:11.5px;color:#8a8a8a;margin-top:5px;line-height:1.45}
.bar{margin-bottom:11px}
.barhead{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;margin-bottom:5px}
.barhead .nm{color:#e8e8e8;font-weight:600}
.barhead .vl{color:#76B900;font-weight:700;font-variant-numeric:tabular-nums}
.bartrack{height:9px;background:#171717;border-radius:5px;overflow:hidden}
.barfill{height:100%;background:#76B900;border-radius:5px;transition:width .35s ease}
.barfill.alt{background:#3d5c00}
.slider{width:100%;-webkit-appearance:none;appearance:none;height:4px;background:#222;border-radius:3px;outline:none;margin:6px 0 3px}
.slider::-webkit-slider-thumb{-webkit-appearance:none;width:17px;height:17px;border-radius:50%;background:#76B900;cursor:pointer}
.slider::-moz-range-thumb{width:17px;height:17px;border-radius:50%;background:#76B900;cursor:pointer;border:none}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:#7a7a7a;padding:7px 8px;border-bottom:1px solid #222;font-weight:700}
td{padding:9px 8px;border-bottom:1px solid #191919;color:#cfcfcf;line-height:1.45;vertical-align:top}
td strong{color:#fff}
.note{font-size:11.5px;color:#7a7a7a;line-height:1.55;margin-top:13px;padding-top:12px;border-top:1px solid #1c1c1c}
.ft{padding:11px 20px;border-top:1px solid #222;background:#0e0e0e;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:11px;color:#6a6a6a}
.ft b{color:#76B900;font-weight:700}
a{color:#76B900;text-decoration:none}
a:hover{text-decoration:underline}
@media(max-width:640px){.pane{padding:15px}.hd{padding:15px}.tab{min-width:80px;font-size:11px;padding:10px 5px}.stat .n{font-size:20px}}

Interactive Explainer
Inside Cursor Router: classification, tiers and published results
Every figure below is taken from Cursor’s launch post and changelog (July 22, 2026). Values Cursor did not publish are marked as such.

Route a request
Modes
Cost per commit
How it was measured

Pick a task — see how the classifier reads it

Step 1 · Signals read before any model runs

Step 2 · Routing tier selected

Cursor publishes three routing rules and does not name a specific model per task type. The tier shown is Cursor’s own published category; the sample tasks are illustrative applications of those three rules. Cursor states the classifier reads query, context, task complexity and domain, combined with what it knows about each model’s behavior.

Auto mode — three points on the cost–intelligence Pareto frontier

Cost
Balance
Intelligence

Cursor’s description

Published cost per commit (early access measurement)

Linear projection — drag to set monthly commit volume

Volume: 1,000 commits / month

Model / mode$ / commitMonthlyvs Opus 4.8

Cost-per-commit figures are Cursor’s published early-access observations. The projection is straight multiplication of those unit figures — it is arithmetic, not a Cursor forecast, and assumes a constant task mix. Cursor reports GPT-5.6 Sol matched the cost of Intelligence mode but with lower user satisfaction; it did not publish an exact figure for it.

ElementWhat Cursor reports

Training data600k+ live requests
Reward signalUser satisfaction (AFC)
EvaluationOnline A/B test across millions of live requests, not offline evals
Quality metric 1User satisfaction — agent success classified from user responses. Moving to the next feature is a strong positive; correcting the agent is a strong negative.
Quality metric 2Keep rate — how much agent-generated code remains in the codebase over time
Metric track recordBoth metrics used to evaluate every model launch and harness change for the past nine months
Cache handlingCache-aware in training and evaluation. Trained on a dataset where routing causes cache misses; reported savings include cache-miss cost.
Platform scaleCursor routes hundreds of millions of coding requests per week across models and providers
Problem being solved~60% of Cursor developers pick one model as a daily driver, putting routine work on frontier pricing

Cursor’s stated reason for choosing online A/B tests: offline evals are limited by small size, distance from real usage, and the difficulty of reducing success to a rubric — and they omit the extra cache-miss cost incurred when switching models mid-conversation.

Source: cursor.com/blog/router · verified Jul 22, 2026
Built by Marktechpost

var TASKS=[
{t:”Rename a variable across one file”,q:”Short, literal, single-file”,c:”One file in context”,x:”Low”,d:”Refactor / syntax”,tier:0},
{t:”Fix a failing unit test”,q:”Explicit error text supplied”,c:”Test file + source under test”,x:”Low to moderate”,d:”Testing”,tier:0},
{t:”Adjust spacing and states on a settings page”,q:”Visual intent, subjective outcome”,c:”Component + stylesheet”,x:”Moderate”,d:”UI / front-end”,tier:1},
{t:”Build a new dashboard component”,q:”Design-led, taste-sensitive”,c:”Design system + sibling components”,x:”Moderate”,d:”UI / front-end”,tier:1},
{t:”Trace a race condition across services”,q:”Open-ended, hypothesis-driven”,c:”Multi-repo, logs, long history”,x:”High, long-horizon”,d:”Distributed systems”,tier:2},
{t:”Migrate an ORM layer across the codebase”,q:”Multi-step plan with dependencies”,c:”Hundreds of files, schema”,x:”High, long-horizon”,d:”Architecture / migration”,tier:2}
];
var TIERS=[
{n:”Price-efficient models”,w:”Routine work does not need frontier pricing. This is the tier Cursor says the router exists to reclaim — the requests that were previously being paid for at daily-driver frontier rates.”,r:”Cursor’s published rule: u201CSimple work goes to the most price-efficient models.u201D”},
{n:”Best-taste model”,w:”Interface work is judged on subjective quality rather than pass/fail correctness, so the router selects for output taste rather than raw reasoning depth.”,r:”Cursor’s published rule: u201CUI updates go to the model with the best taste.u201D”},
{n:”Frontier reasoning models”,w:”Long-horizon problems keep their full frontier budget. The savings claim rests on this tier staying intact — Cursor states it keeps hard tasks on the most capable models.”,r:”Cursor’s published rule: u201CMore complex, long-horizon problems go to frontier reasoning models.u201D”}
];
var MODES=[
{n:”Cost”,stats:[[“n/a”,”Published quality delta”],[“n/a”,”Published cost delta”],[“n/a”,”Cost per commit”]],
d:”u201CGood quality, reaching the highest available intelligence while optimizing token spend.u201D”,
note:”Cursor published no A/B quality or cost figures for Cost mode, and the changelog specifies routed-model billing only for Balance and Intelligence. Treat Cost mode as undocumented on numbers until Cursor releases them.”},
{n:”Balance”,stats:[[“above”,”User satisfaction vs Opus 4.8″],[“~36%”,”Lower cost than Opus 4.8″],[“$4.63″,”Cost per commit”]],
d:”u201CStrong quality, matching the frontier models that most people like to daily drive.u201D”,
note:”Cursor also reports Balance delivers comparable satisfaction to GPT-5.6 Sol at a lower spend rate. Balance bills at the routed model’s rate.”},
{n:”Intelligence”,stats:[[“~60%”,”Lower cost at near-Fable satisfaction”],[“~15%”,”Satisfaction lift over Opus 4.8, near-equal cost”],[“$6.76″,”Cost per commit”]],
d:”u201CFrontier quality, with performance matching the most expensive and powerful models that might be out of reach for daily use.u201D”,
note:”The two Intelligence figures are separate comparisons: near-Fable satisfaction at ~60% lower cost, and ~15% higher satisfaction than Opus 4.8 at roughly the same cost. Intelligence bills at the routed model’s rate.”}
];
var COMMITS=[[“Auto Balance”,4.63,1],[“Auto Intelligence”,6.76,1],[“Opus 4.8”,7.34,0],[“Fable 5”,12.69,0]];

function $(i){return document.getElementById(i)}
function money(v){return “$”+v.toLocaleString(“en-US”,{minimumFractionDigits:0,maximumFractionDigits:0})}

var chips=$(“taskchips”);
TASKS.forEach(function(t,i){
var b=document.createElement(“button”);b.className=”chip”+(i===0?” on”:””);b.textContent=t.t;
b.onclick=function(){[].forEach.call(chips.children,function(c){c.className=”chip”});b.className=”chip on”;drawTask(i);};
chips.appendChild(b);
});
function drawTask(i){
var t=TASKS[i],T=TIERS[t.tier];
$(“sigrow”).innerHTML=[[“Query”,t.q],[“Context”,t.c],[“Task complexity”,t.x],[“Domain”,t.d]]
.map(function(p){return ”+p[0]+’