Research
Benchmark Report: AI Coding Tools for TypeScript Teams
A TypeScript AI coding benchmark should measure review-ready diffs, type safety, test results, package boundaries and reviewer load. This report template publishes the method first. Add results only after the same tasks have run across every tool and people have reviewed each diff, including a check for type errors that were silenced instead of fixed.

On this page
- What method should the benchmark use?
- What limits should the report state?
- What's new in Cursor recently?
- Why should the typecheck be scored separately from the tests?
- Which tasks belong in a TypeScript benchmark?
- How do you tell a real type fix from a silenced one?
- How much of this should a five-person team run?
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 Teams and Enterprise Admin — 6 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 the typecheck be scored separately from the tests?
Because they fail at different scopes. A test tells you one package still behaves the way you asked. The typecheck tells you the rest of the repo still compiles against the change. Roll them into one pass or fail, and you can't tell which of the two a tool cleared.
Take a patch that lands inside one workspace package. Its own tests go green, but a dependent package no longer builds, because an exported type quietly narrowed. If the harness runs only that package's test command, a tool that broke other packages scores as well as one that didn't. That is the opposite of what you wanted to measure. So run the repo-wide typecheck as its own gate, at the cost of one more command, and record both results for every task.
This one choice can make two published TypeScript comparisons disagree. Two teams can run near-identical prompts against near-identical repos and name different winners, because one checked the whole project and the other checked a folder. If neither report says which, the two results can't be reconciled.
Use the typecheck command your CI runs. If CI builds with project references rather than one flat pass, a hand-rolled command measures a configuration nobody ships. It can also pass code that CI would reject, so every score comes out higher by an amount you can't see.
Run both checks on every task, even when the first one fails. A patch that breaks compilation can also crash the test runner, and the crash looks like a test failure. With both results recorded, you can see the type error behind it instead of filing it as a behavior bug.
Which tasks belong in a TypeScript benchmark?
Four types, run in equal numbers. The method above says to fix the task mix before you see any results. This is that mix for a TypeScript repo, with the reason each row is there.
- Task type
- Failing-type repair
- How to set it up
- Start from a real compiler error already in the repo
- What it exposes
- Whether the fix addresses the type or silences it
- Task type
- Behavior change with a test
- How to set it up
- One component or function, one new assertion
- What it exposes
- Whether the tool writes a test that is capable of failing
- Task type
- Refactor across a package boundary
- How to set it up
- Rename or move something two packages import
- What it exposes
- Blast radius, and whether the repo still builds
- Task type
- Dependency bump
- How to set it up
- Upgrade one package and clean up the fallout
- What it exposes
- How a tool handles a pile of errors it did not cause
| Task type | How to set it up | What it exposes |
|---|---|---|
| Failing-type repair | Start from a real compiler error already in the repo | Whether the fix addresses the type or silences it |
| Behavior change with a test | One component or function, one new assertion | Whether the tool writes a test that is capable of failing |
| Refactor across a package boundary | Rename or move something two packages import | Blast radius, and whether the repo still builds |
| Dependency bump | Upgrade one package and clean up the fallout | How a tool handles a pile of errors it did not cause |
Run the same number of tasks in each row, so no single task type tips the result.
Keep the fourth row, even though it is the hardest to set up. A version bump produces many errors with one underlying cause, which is the kind of work agents are supposed to handle well, and small, self-contained tasks never test it. Score the second row against the code before the patch. A new test that passes on the old code proves nothing about the change, so run it once without the patch and confirm it fails.
Keep the repo and the prompts identical across tools, down to the wording.
If one tool needed a rewritten prompt to get enough context, that is a finding about the tool. Log it as a finding instead of fixing the prompt in place.
We would leave greenfield tasks out, though the choice is arguable. You are buying help inside code that already exists. A from-scratch file has no local patterns to break, so every tool looks competent on it.
How do you tell a real type fix from a silenced one?
Read each diff for escape hatches. A type error can be fixed or muted, and both turn the typecheck green. Look for an any, a double assertion through unknown, a return type widened until the mismatch disappears, and a @ts-expect-error parked on the line that used to fail. Each one passes the harness and leaves a regression in the repo.
So an automated score can't carry this report alone. The cheap check is a grep over each diff for those four patterns, plus one reviewer note per task. The expensive check is a second reviewer who never learns which tool produced which patch. If you can afford it, blind the patches, because knowing the vendor changes how generously people read a diff, in either direction.
Pin the checks too. A tool can edit the test file as well as the source, so a green result proves little if the tool could have changed the check. Write the test and the typecheck command before the run, keep both outside the tool's writable scope, and score against the pinned copy.
Pinning also settles an argument you would otherwise have at the end. When one tool's patch fails a pinned test, somebody will suggest the test was wrong. Sometimes it is, so decide that question before you know whose patch failed.
How much of this should a five-person team run?
Less than the method implies. With five engineers you won't reach a sample size that supports a percentage, so don't publish one. Run two tools over the same four tasks, read all eight diffs yourself, and write down which ones you would have merged.
For a small team, that is a better use of a week than a wider matrix. The decision is small and reversible: you are picking a default for a team you can talk to in one room, and you can change it in a month.
A large org has the opposite problem. Sample size stops being the constraint, and representativeness takes its place. Run the benchmark in the pilot team's tidy service repo, and you learn nothing about the monorepo where most of your review time goes. The TypeScript workflow guide covers the package-boundary habits that make that repo the hard case.
So name the repo the numbers came from, next to the results. A reader can only apply your result to repos like the one you tested, and without the name, each reader will assume it was their kind of repo.
Add reviewers with care when you scale up. Ten tasks per tool read by one reviewer can tell you more than a hundred tasks scored by a rota. Each extra scorer brings a slightly different standard, and more runs don't remove that variance.
Frequently asked questions
Who is this guide for?
TypeScript teams planning a fair comparison of AI coding tools on their own repos.
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 score the typecheck separately from the tests?
They fail at different scopes. A package's own tests can pass while a dependent package no longer builds, so run the repo-wide typecheck your CI uses as its own gate, and record both results for every task.
Which tasks belong in a TypeScript benchmark?
Four types in equal numbers: a failing-type repair, a behavior change with a test, a refactor across a package boundary and a dependency bump. Keep the repo and the prompts identical across tools.
How do I spot a silenced type error in an agent's patch?
Grep each diff for an any, a double assertion through unknown, a widened return type and a @ts-expect-error comment on the line that used to fail. Each one turns the typecheck green and leaves a regression in the repo.
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 ships frequently. Facts verified against primary sources on October 28, 2026.