Coding agents opened 33,596 of the 37,623 labelled pull requests in this study, against a human baseline drawn from the same repositories in the same months. Pooled together, agent code looks slightly safer than human code. Split by vendor, one agent's merged work was reverted 6.1% of the time and another's 14.5%, against 11.5% for people — a spread far wider than the agent-versus-human gap anyone is arguing about.
The question everyone asks is “is agent-written code worse”, and the honest pooled answer here is no. Across 1.3 million added lines in Python, JavaScript and TypeScript, agent pull requests were less likely than human ones to contain a risky pattern, and the difference is concentrated in exactly the two habits you would expect a model to have been trained out of.
Switch between the three classes.
That is the whole of the reassuring story, and it is the last useful thing the pooled view does. Every number below it comes apart the moment you ask which agent.
If “agent code” were a real category, the five agents would line up roughly together and the humans would sit somewhere else. They do not. Step through the measures and watch the order scramble — the cleanest agent on risky patterns is not the one that gets merged most, and the one that gets reverted least is not the one that writes the smallest changes.
Across the structural measures, 44 of 60 pairwise vendor comparisons came back significant after correction, and every agent differs from at least two others on at least one measure. There is no “agent style” here. There are five products with different defaults.
Risky patterns are a proxy and comment density is a preference. A revert is a fact: the change landed, and then a person decided it had to come back out. The study followed every merged pull request for 90 days and counted them.
Pick a vendor and read its odds against the humans working in the same repositories.
Read the intervals, not the point estimates. Two of the five genuinely differ from the human baseline in opposite directions; the other three sit on top of it with intervals wide enough to cover anything. And the one with the fewest merged pull requests has the widest interval of all — on 267 merges, “no difference” means “not enough evidence”, not “no effect”.
Agents do not wait. Reviewers do. The review measures scatter as widely as the quality ones, and they scatter along a different axis — one agent's pull requests pull three and a half human reviews each and half a change request, another's get looked at by a human on 5.4% of pull requests at all.
One confound runs through all of this and the paper is straight about it. The agent with the most risky patterns, the deepest nesting, the slowest first review and the lowest churn per line also ships pull requests about eight times the median size of everyone else's — 495 changed lines against 52 for a human. Bigger changes attract more of everything. Nobody randomised which agent got which job, so every gap here mixes the tool with the work people choose to give it.
The odds ratios are the transferable part — they are measured against a human baseline in the same repositories, so you can apply them to your own. Set your merge volume and your own revert rate, and see what the difference between the best and worst measured agent would cost you in rollbacks a quarter.
Which is the point to take away, and it is smaller than the headline. These odds ratios come from public repositories with more than a hundred stars, in three languages, in a window that ended in July 2025, with agent versions that have all shipped several times since. They are not a league table you can buy from. They are an argument that the variable worth logging is which tool opened this pull request — because over a quarter, on your own work, that column will tell you more than any benchmark will.