Research
Benchmark Report: AI Coding Tools for Python Services
A Python AI coding benchmark should measure failing-test repair, dependency safety, service behavior, review load and cost per accepted change. Score each patch after tests and human review, and ignore how many lines a tool generated. Pin the image, the lockfile and network access, because what the runtime can reach moves the score.

On this page
- What method should the benchmark use?
- What limits should the report state?
- What's new in Cursor recently?
- Why should a Python benchmark start from a failing test?
- How much does the runtime change the score?
- What should cost per accepted change divide by?
- Which Python did you test, and does the report say so?
What method should the benchmark use?
Decide what a fair test looks like before you run the benchmark. If you decide afterwards, the numbers will favor the tool you already prefer.
Fix the task mix before you see any results. If you choose which tasks count after the test has run, you will pick the ones that agree with what you already thought, without noticing. Without a written plan, a benchmark is an anecdote with a chart attached. Write down the stack, the task types and the sample size before the first run.
- Metric
- Cycle time
- How to collect it
- Start from issue open to review-ready diff
- Why it matters
- Shows speed without hiding review cost
- Metric
- Review load
- How to collect it
- Count reviewer comments and rework passes
- Why it matters
- Faster output counts for little if review work rises
- Metric
- Quality
- How to collect it
- Run tests, typecheck and defect review
- Why it matters
- Prevents demo-only productivity claims
- Metric
- Cost
- How to collect it
- Seat cost, model usage and review time
- Why it matters
- Makes ROIReturn on Investment. The value gained versus what it cost, the language an economic buyer funds deals in. Press Enter for the full definition. concrete
| Metric | How to collect it | Why it matters |
|---|---|---|
| Cycle time | Start from issue open to review-ready diff | Shows speed without hiding review cost |
| Review load | Count reviewer comments and rework passes | Faster output counts for little if review work rises |
| Quality | Run tests, typecheck and defect review | Prevents demo-only productivity claims |
| Cost | Seat cost, model usage and review time | Makes ROIReturn on Investment. The value gained versus what it cost, the language an economic buyer funds deals in. Press Enter for the full definition. concrete |
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
This is covered hands-on in Cursor First Hour — 4 short Units, free to read.
What limits should the report state?
Every benchmark has limits. Naming them is what makes the rest of the report credible, so state plainly what the result does not cover.
- Sample size, repo type and task mix.
- Models, tool versions and seat cost used.
- Review time added by AI-generated changes.
- Where the result should not be generalized.
Put each limit next to the result it qualifies, not in a footnote. A result shown without its sample size invites readers to apply it to their own repo.
What's new in Cursor recently?
Cursor ships often, so advice about it can go out of date. The table summarizes Cursor's recent releases, so you can check this page against the current product. For each release's date and sources, see What's new in Cursor 2026.
- Surface
- Compile 2026
- What to know
- Cursor's June conference (June 16, per press coverage) centered on Origin, larger from-scratch model training and Cursor Mobile.
- Surface
- Origin
- What to know
- Early beta since August 17, 2026, on most paid plans: repos, pull requests with Code Tours, GitHub sync and a CLI. Standalone pricing and self-hosting are still unpublished.
- Surface
- Model and mobile
- What to know
- Composer 2.5The current Composer release, better at long-running tasks and at judging when a job needs a light touch versus deep work. Press Enter for the full definition. is available now. Cursor says it is training a larger model with SpaceXAI. Cursor Mobile now has its own product page.
- Surface
- Automations
- What to know
/automate, Slack emoji triggers, GitHub triggers for issue comments, reviews and workflow runs, computer use, PR defaults and memory cleanup.
- Surface
- Cloud AgentsAgents that run in a Cursor-managed virtual machine, check out the repo, do the work and open a pull request, then shut down, with no load on your laptop. Press Enter for the full definition.
- What to know
- Guided cloud environment setup, reusable snapshots,
.cursor/environment.json,/in-cloud,/autopilot(formerly/babysit) and local/cloud handoff.
- Surface
- Review
- What to know
- BugbotCursor's automated PR reviewer that posts inline findings and can push fix commits from isolated VMs. Press Enter for the full definition. averages about 90 seconds per review and finds 10% more bugs per review.
/reviewruns it locally before you push. Cursor's June changelog says Composer 2.5The current Composer release, better at long-running tasks and at judging when a job needs a light touch versus deep work. Press Enter for the full definition. now powers Bugbot, and these figures may change.
- Surface
- Design and Canvas
- What to know
- Design ModeA way to point at an element in Cursor's built-in browser and change it directly, instead of describing it in words. Press Enter for the full definition. supports multi-select and voice queueing. Canvases support Design Mode, context reports, Debug with Agent, full-screen sharing and prompt buttons.
- Surface
- SDK and run modes
- What to know
- SDK agents can use custom tools, auto-review, JSONL or custom stores, nested subagents and request IDs. Auto-review Run Mode runs known-safe calls, sandboxes shell commands where it can and sends the rest to a classifier.
- Surface
- Enterprise and pricing
- What to know
- Organizations sit above teams, and groups scope model access, spend and agent permissions. Teams launched with Standard and Premium seats and two usage pools, Cursor ModelsOn legacy Cursor plans, the monthly usage pool for Cursor's own models (Grok 4.7, Grok 4.6, Grok 4.5 and Composer 2.5), kept separate from the third-party Other Models pool. The X Subscription replaces it with one weekly pool. Press Enter for the full definition. and Other ModelsOn legacy Cursor plans, the monthly pool for supported third-party models from providers such as Anthropic, Google and OpenAI, separate from Cursor Models. On The X Subscription third-party models are billed from prepaid credit instead. Press Enter for the full definition.. Those seats are now legacy, and current Teams seats are Premium, Super and Ultra on The X SubscriptionThe subscription Cursor is sold through: one plan for Grok, Cursor and X, with Free, Plus, Premium, Super and Ultra tiers, per-seat Teams, a weekly included pool for Cursor models shared with Grok, and third-party models billed at API list price from prepaid credit. Press Enter for the full definition..
| Surface | What to know |
|---|---|
| Compile 2026 | Cursor's June conference (June 16, per press coverage) centered on Origin, larger from-scratch model training and Cursor Mobile. |
| Origin | Early beta since August 17, 2026, on most paid plans: repos, pull requests with Code Tours, GitHub sync and a CLI. Standalone pricing and self-hosting are still unpublished. |
| Model and mobile | Composer 2.5The current Composer release, better at long-running tasks and at judging when a job needs a light touch versus deep work. Press Enter for the full definition. is available now. Cursor says it is training a larger model with SpaceXAI. Cursor Mobile now has its own product page. |
| Automations | /automate, Slack emoji triggers, GitHub triggers for issue comments, reviews and workflow runs, computer use, PR defaults and memory cleanup. |
| Cloud AgentsAgents that run in a Cursor-managed virtual machine, check out the repo, do the work and open a pull request, then shut down, with no load on your laptop. Press Enter for the full definition. | Guided cloud environment setup, reusable snapshots, .cursor/environment.json, /in-cloud, /autopilot (formerly /babysit) and local/cloud handoff. |
| Review | BugbotCursor's automated PR reviewer that posts inline findings and can push fix commits from isolated VMs. Press Enter for the full definition. averages about 90 seconds per review and finds 10% more bugs per review. /review runs it locally before you push. Cursor's June changelog says Composer 2.5The current Composer release, better at long-running tasks and at judging when a job needs a light touch versus deep work. Press Enter for the full definition. now powers Bugbot, and these figures may change. |
| Design and Canvas | Design ModeA way to point at an element in Cursor's built-in browser and change it directly, instead of describing it in words. Press Enter for the full definition. supports multi-select and voice queueing. Canvases support Design Mode, context reports, Debug with Agent, full-screen sharing and prompt buttons. |
| SDK and run modes | SDK agents can use custom tools, auto-review, JSONL or custom stores, nested subagents and request IDs. Auto-review Run Mode runs known-safe calls, sandboxes shell commands where it can and sends the rest to a classifier. |
| Enterprise and pricing | Organizations sit above teams, and groups scope model access, spend and agent permissions. Teams launched with Standard and Premium seats and two usage pools, Cursor ModelsOn legacy Cursor plans, the monthly usage pool for Cursor's own models (Grok 4.7, Grok 4.6, Grok 4.5 and Composer 2.5), kept separate from the third-party Other Models pool. The X Subscription replaces it with one weekly pool. Press Enter for the full definition. and Other ModelsOn legacy Cursor plans, the monthly pool for supported third-party models from providers such as Anthropic, Google and OpenAI, separate from Cursor Models. On The X Subscription third-party models are billed from prepaid credit instead. Press Enter for the full definition.. Those seats are now legacy, and current Teams seats are Premium, Super and Ultra on The X SubscriptionThe subscription Cursor is sold through: one plan for Grok, Cursor and X, with Free, Plus, Premium, Super and Ultra tiers, per-seat Teams, a weekly included pool for Cursor models shared with Grok, and third-party models billed at API list price from prepaid credit. Press Enter for the full definition.. |
A summary only. The release tracker linked above gives each release's date and sources.
Why should a Python benchmark start from a failing test?
Because the test suite may be the only automatic verdict you have. Python type hints are optional, and nothing checks them unless your pipeline runs a type checker. Without that gate, a task scored as "did it implement the feature" has no strong machine signal under it, and the score turns into a vote on reviewer taste.
The service still has to boot, and the linter still runs, but both are weak next to a red test going green. A benchmark needs a binary check at the bottom, or its scoring drifts from week to week.
Failing-test repair gives you that binary check. Pull real failures from your own history where the fix is known and small, then hide the fixing commit before the run. Hide it from the container, not only from the prompt: the branch the agent checks out must not contain the fix.
Watch how you choose those failures. Take them all from one module and you have measured one module. Take only the easy ones and every tool passes, the report reads like a tie, and you end up deciding on price because nothing else separated the tools. Spread the set across modules, and include a few failures that took your own team more than one attempt to fix.
Add a second task type next to repair: a behavior change in a service whose suite covers that path thinly. It shows whether a tool writes a test for the path it just changed or leaves coverage where it was.
How much does the runtime change the score?
By double digits, in Cursor's own test. Cursor's June 2026 research audited 731 Opus 4.8 Max trajectories on SWE-bench Pro and found that 63% of successful resolutions retrieved the known fix rather than derived it. In 57% of audited trajectories, the agent found the merged PR or the fixed source file on the public web. In 9%, it mined the bundled .git history for the future fixing commit.
With git history sealed and internet access restricted, Opus 4.8 Max fell from 87.1% to 73.0%, and Composer 2.5The current Composer release, better at long-running tasks and at judging when a job needs a light touch versus deep work. Press Enter for the full definition. fell from 74.7% to 54.0%. Neither model changed between those runs. Only what the runtime could reach changed, and the scores moved by more than 14 points on one model and nearly 21 on the other. The benchmark method page covers the rest of that research.
Python services add a second runtime question: package installation. If one tool's container can reach a package index and another's cannot, you have benchmarked network policy and printed it as a tool comparison.
So pin the image and the lockfile, and record whether the agent could install anything at all. Log every install it attempted, successful or not. An attempted install on a task that needed a two-line fix tells you something about the tool's approach, even when the final patch is correct.
Publish the runtime next to the score: the image tag, the lockfile, whether the package index was reachable, and whether git history was in the checkout. Without that record, the score can't be compared with anyone else's, and barely with your own from last quarter.
What should cost per accepted change divide by?
Accepted changes, counted after human review, and nothing else. The tempting denominator is attempts, because the tooling hands you that number for free.
Follow what attempts do to the ranking. A tool that produces four patches for one task, three of them discarded, looks cheaper per patch than a tool that produced one good patch. The reviewer who read all four appears nowhere in that arithmetic.
Usage spend and seats are easy to count. Reviewer time is harder to collect, and it can decide which tool comes out cheaper. Two tools with the same model spend can differ in how often their patches go back for another round, and each round costs reviewer time you are not counting.
So count review passes rather than minutes: how many times a patch went back before it merged. A per-task timer sounds more precise, but it rarely survives two weeks of real work, and the gaps get filled in from memory. Review passes are coarser, and you will still have the data at the end of the two weeks.
Count the rejected patches in the cost as well. Model spend doesn't refund itself when you throw the work away.
Which Python did you test, and does the report say so?
Name it, because "Python" covers at least two measurement problems that share a language and little else. A service with strict typing and a locked dependency set is not evidence about a data pipeline built from notebook-shaped code and a suite nobody trusts. A result from one says very little about the other.
A team with two services doesn't need this report. Run one task type against two tools on the service you worry about most, read the patches, and pick. A result that small is too thin to publish as a percentage.
A platform org has the opposite priority. Environment discipline matters more than sample size, because a hundred tasks in a runtime you never pinned produce a precise wrong answer, and the precision makes it hard to argue with later.
State the suite's own reliability too. If some of your tests fail intermittently, a few points between two tools can be flaky-test noise. Quarantine those tests before the benchmark instead of explaining them away in the write-up.
Then name the services the tasks came from, in the report itself. A reader who knows your codebase can discount a result that came entirely from the one service everybody agrees is a mess, and a reader who doesn't know it deserves the chance to ask.
Frequently asked questions
Who is this guide for?
Python backend, automation and platform teams comparing AI coding tools on the services they run.
What should I do next?
Write down your task mix, sample size and limits before you run anything, and publish them with the result.
Why start a Python benchmark from failing tests?
Because the test suite may be the only automatic verdict you have. Type hints are optional in Python, so a red test going green gives the benchmark its binary check. Hide the fixing commit from the container, not only from the prompt.
How much can the runtime change a benchmark score?
A lot. In Cursor's June 2026 research, sealing git history and restricting internet access dropped Opus 4.8 Max from 87.1% to 73.0% on SWE-bench Pro, and Composer 2.5 from 74.7% to 54.0%. For Python, also record whether the agent could reach a package index.
What should cost per accepted change divide by?
Changes accepted after human review. Dividing by attempts makes a tool that produced four patches, three of them discarded, look cheaper than one that produced a single good patch. Count review passes, and include rejected patches in the cost.
Sources & last verified
- Google guidance on AI-assisted content
- Google guide to generative AI search
- Cursor product
- GitHub Copilot plans
- Windsurf pricing
- Claude Code overview
- Cursor blog: Reward hacking is swamping model intelligence gains
Cursor ships frequently. Facts verified against primary sources on October 28, 2026.