Research
Benchmark Report: AI Coding Tools for TypeScript Teams
A TypeScript AI coding benchmark should measure review-ready diffs, type safety, test result, package boundary and reviewer load. This report template publishes the method first. Results should only be added after the same task has been run across tools and reviewed by humans.
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 actually run?
What method should the benchmark use?
A benchmark is only as honest as its method. Decide what a fair test looks like before you run it, or the numbers will just flatter the tool you already prefer.
Decide the task mix before you see any results. This sounds like pedantry and isn't: choose which tasks count after the test has run and you'll pick the ones that agree with what you already thought, and you'll do it without ever noticing you did. Writing down the stack, the task types and the sample size in advance is most of what separates a benchmark from an anecdote with a chart attached.
- 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
- AI speed is weak 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 | AI speed is weak 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 modules, free to read.
What limits should the report state?
Every benchmark has limits, and naming them is what makes the rest trustworthy. Be explicit about 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.
What's new in Cursor recently?
Cursor ships often, so here is the current state of the surfaces this page touches. Each row links to the source where you can confirm the detail.
- Surface
- Compile 2026
- What to know
- Cursor's June 16 event highlighted Origin, larger from-scratch model training and Cursor Mobile alongside the broader June release wave.
- Surface
- Origin
- What to know
- Cursor's Origin page says code is moving faster than existing infrastructure was built to handle. The public page is waitlist-first, so migration and security details still need confirmation.
- 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 a larger model is training with SpaceX. Mobile-native details remain beta until Cursor publishes a product page.
- Surface
- Automations
- What to know
/automate, Slack emoji triggers, GitHub issue/comment/review/workflow triggers, 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,/babysitand 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 and finds 10% more bugs per review, and can run locally before push with
/review. Cursor hasn't published Bugbot's underlying model. Don't assert one; treat the figures as perishable.
- 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/custom stores, nested subagents and request IDs; Auto-review Run Mode routes tool calls through safer execution paths.
- Surface
- Enterprise and pricing
- What to know
- Organizations sit above teams, groups scope model/spend/agent permissions and Teams now has Standard/Premium seats with Auto + ComposerCursor's own fast coding model, tuned for the editor and priced well below frontier models; the recommended day-to-day model for executing a plan. Press Enter for the full definition. and third-party API pools.
| Surface | What to know |
|---|---|
| Compile 2026 | Cursor's June 16 event highlighted Origin, larger from-scratch model training and Cursor Mobile alongside the broader June release wave. |
| Origin | Cursor's Origin page says code is moving faster than existing infrastructure was built to handle. The public page is waitlist-first, so migration and security details still need confirmation. |
| 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 a larger model is training with SpaceX. Mobile-native details remain beta until Cursor publishes a product page. |
| Automations | /automate, Slack emoji triggers, GitHub issue/comment/review/workflow triggers, 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, /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 and finds 10% more bugs per review, and can run locally before push with /review. Cursor hasn't published Bugbot's underlying model. Don't assert one; treat the figures as perishable. |
| 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/custom stores, nested subagents and request IDs; Auto-review Run Mode routes tool calls through safer execution paths. |
| Enterprise and pricing | Organizations sit above teams, groups scope model/spend/agent permissions and Teams now has Standard/Premium seats with Auto + ComposerCursor's own fast coding model, tuned for the editor and priced well below frontier models; the recommended day-to-day model for executing a plan. Press Enter for the full definition. and third-party API pools. |
As of July 9, 2026. See Sources below for links.
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/fail and you cannot tell which of the two a tool actually cleared.
Here is the case where that bites, and it is a mundane one. A patch lands inside one workspace package, its own tests go green, and a dependent package no longer builds because an exported type quietly narrowed. If the harness runs the package's test command and records a pass, the tool with the widest blast radiusHow much breaks if a change goes wrong; the scope of potential damage. Press Enter for the full definition. scores best, which is the opposite of what anyone wanted to measure.
Run the repo-wide typecheck as its own gate after the test run and record both results per task. The extra cost is one command.
This is, I'd guess, the biggest single reason published TypeScript comparisons disagree with each other. Two teams can run near-identical prompts against near-identical repos and name different winners, because one of them checked the whole project and the other checked a folder. Neither report says which, so neither can be reconciled with the other.
There is a smaller decision inside this one: which typecheck. If CI builds with project references rather than one flat pass, use CI's command. A hand-rolled invocation measures a configuration nobody ships, and it usually measures it more generously.
Record the ordering too. Tests first, then the repo typecheck, and never the reverse, because a patch that breaks compilation will often break the test runner in ways that look like a test failure and get filed as one.
Which tasks belong in a TypeScript benchmark?
Four types, run in equal numbers. The method above says to fix the task mix before you look at a single result; this is what that mix looks like in a TypeScript repo, with the reason each row is in it.
- 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
- Behaviour 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 |
| Behaviour 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 |
Equal counts per row. Unequal mixes are how a benchmark quietly becomes an argument.
The fourth row is the one teams leave out, and to me it is the row worth most. A version bump produces many errors with a single underlying cause, which is exactly the shape of work agents are supposed to be good at, and it looks nothing like the small self-contained tasks that usually end up in these reports.
Keep the repo identical across tools and keep the prompts identical too, down to the wording. Rewriting a prompt because one tool "needed more context" is a real finding about that tool, so log it as a finding rather than fixing it in place.
Whether to include a greenfield task at all is genuinely arguable. I would leave it out. What you are buying is help inside code that already exists, and a from-scratch file has no local patterns available to violate, so every tool looks competent on it.
How do you tell a real type fix from a silenced one?
You read the diff for escape hatches. A type error can be resolved or it can be muted, and both produce a green typecheck: an any, a double assertion through unknown, a return type widened until the mismatch disappears, a @ts-expect-error parked on the line that used to fail. Each of those is a pass in the harness and a regression in the repo.
Which is why an automated score cannot carry this report on its own. It just cannot.
The cheap version of the check is a grep over each diff for those four patterns, plus one reviewer line per task. The expensive version is a second reviewer who never learns which tool produced which patch. If you can afford the expensive one, blind the patches, because knowing the vendor changes how generously people read a diff and it changes it in both directions.
The rule I would write down first is never to score a task green on a check the tool could have edited. That is not quite the rule either, though, since the tool can edit the test file as easily as the source. The rule that actually holds is to pin the checks. 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. Decide that before you know whose patch it was.
How much of this should a five-person team actually run?
Less than the method implies. With five engineers you will not reach a sample size that supports a percentage, so do not publish one. Run two tools over the same four tasks, read all eight diffs yourself, and write down which ones you would have merged.
That is, I think, a better use of a week than a wider matrix would be, given 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.
The large-org version fails in the opposite direction. Sample size stops being the constraint and representativeness becomes it: run the benchmark in the pilot team's tidy service repo and you will learn nothing about the monorepo where most of your review time is actually spent. The TypeScript workflow guide covers the package-boundary habits that make that repo the hard case.
The most useful sentence in a large-company report is honestly the one naming which repo the numbers came from. Everything downstream leans on it, and it is the line most often missing.
A caution about scaling this up: ten tasks per tool read by one reviewer will beat a hundred tasks scored by a rota, because the variance lives in the scoring rather than the running.
Frequently asked questions
Who is this guide for?
TypeScript teams planning a fair AI coding tool benchmark.
What should I do next?
Start with one real repo task, capture the prompt and review the result before scaling the workflow.
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 July 9, 2026.