Buildeon Systems Start a project

Case study

What happens when an AI agent contributes to open source

A controlled experiment: an AI agent finding real bugs and opening real pull requests against third-party open-source projects — and how maintainers actually reacted.

Buildeon internal research · data last refreshed 2026-09-25

Pull requests submitted
177
Merged
97
Merge rate
54.8%
Repositories
73
Merged pull requests, by outcome category

Campaign window, coded from each thread's review and comment history.

  • Merged after human review 43
  • Merged without recorded human response 24
  • Merged human response only after merge 15
  • Merged with pre merge human discussion 15
Closed pull requests, by outcome category

Campaign window, coded from each thread's stated closure reason.

  • Closed author withdrawn 19
  • Closed already fixed or superseded 17
  • Closed no recorded reason 15
  • Closed explicit ai related objection 8
  • Closed incorporated elsewhere 8
  • Closed technical or scope objection 8
  • Closed reason unknown with human response 3
  • Closed process or administrative 1
  • Closed reason unknown no human response 1

TL;DR

Watching Claude Code work through real engineering tasks end-to-end raised an obvious question: what happens if an AI agent does this in the open, against someone else’s codebase, under someone else’s rules? So we ran a controlled experiment. Over roughly 2 months, we used an AI agent — Claude Code, orchestrated through two tools we built and open-sourced along the way (ai-engineering-workflow-skills and open-source-tracker) — to find real bugs, fix them, and submit pull requests to public, third-party open-source projects. Mostly without a human in the loop for the actual code.

The result: 97 pull requests merged (54.8% of 177 submitted) across 73 different repositories, and 80 closed without merging. We didn’t just count outcomes — we read and coded why each one happened, with the evidence cited, not guessed.

The interesting part isn’t the merge rate. It’s how unevenly the open-source world reacted. Some maintainers welcomed the contributions outright. Some rejected them the moment they looked automated — sometimes with a canned response, sometimes with a personal one. Some projects that call themselves “open source” turned out not to accept outside contributions from anyone, AI or human. And for a meaningful chunk of what got closed, nobody said anything at all.

How the experiment worked

The mechanism was deliberately simple and deliberately public: real GitHub accounts, real pull requests, against real projects we don’t own or control. No sandboxed or synthetic targets. An agent found a genuine, reproducible bug in a public repository, wrote a fix, wrote or updated tests in that project’s own style, and opened a pull request — the same path any human contributor would use.

A human set the scope and reviewed anything non-trivial before it shipped; the agent did the finding, fixing, and writing. We tracked every single pull request our accounts opened — merged, closed, or still open — in a public dataset, and built the tooling to keep that dataset current automatically rather than as a one-time snapshot.

What happened to the pull requests

Of the 177 pull requests opened in the campaign window, 97 merged and 80 closed without merging. But the aggregate number hides the real story, which is in how each side of that split actually happened.

The merged ones weren’t a rubber stamp

43 of the merged pull requests went through an actual human review before landing — someone read the diff and approved it. Another 15 involved real back-and-forth discussion before merge, without a formal review being filed, and 15 more got a human response only after the merge had already happened — real discussion, just too late to count as review. On the other end, 24 merged with no recorded human comment or review at all — the merge action itself is the only human signal in the thread, typically small, unambiguous fixes in low-traffic repos.

The closed ones split into real, distinct categories

We coded every closed pull request against the actual thread — comments, reviews, closing events — not keyword-matching. The categories that emerged from the data itself:

How different corners of open source actually reacted

This is where the campaign stopped being a numbers exercise and started being a map of how open source, as a community, is actually handling an increase in AI-assisted contribution — because the answer isn’t one thing.

Explicit, stated rejection of AI-generated code is real, but it isn’t universal — and it isn’t always personal. A maintainer of a major PHP framework1 closed one of our pull requests with a direct, specific message: that the contribution “appears to have been primarily AI-generated without careful human review,” and that AI-generated code “often doesn’t align well” with the project’s conventions. The same message, nearly verbatim, appeared on other pull requests closed around the same date — suggesting a standing practice for handling PRs judged to be AI-generated, not a one-off reaction to this particular fix. That’s a meaningfully different finding than “this maintainer read my diff and rejected it”: it’s a project applying a general policy, applied here, evenly.

Not every AI-related objection is a blanket rejection, either. On a smaller documentation-tooling project, a maintainer2 closed a pull request citing two separate reasons in the same comment: “a ton of agent-generated conversation” that made the thread too noisy to review closely, and an independent preference for a different technical approach entirely. Reading the thread, the process complaint and the technical disagreement were both genuinely present — it wasn’t AI-skepticism standing in for a technical review, it was AI-skepticism plus one.

Some “open source” repositories don’t meaningfully accept outside contributions from anyone. We checked this systematically, not just where our own pull requests landed: before attempting a contribution to any repository, we sample its last 100 merged pull requests and check who actually authored them. A widely-used e-commerce platform3 turned out to merge pull requests exclusively from its own paid team — of its last 100 merges, 100% were from six accounts, all confirmed staff, plus automated dependency bots. When we opened a correct, tested fix there anyway, it was closed 34 seconds after opening, with no comment, no review, and passing checks. A widely-used Python web framework4 showed the same pattern in miniature: of its last 100 merges, 58 were from its creator, 33 were automated, and the remaining genuine external contributions came to roughly 2–3 accounts. These projects are open source in the licensing sense. They are not, in practice, open to outside contribution — which matters, because it means a meaningful share of “the open-source ecosystem” isn’t actually a fair test bed for how maintainers respond to anything, AI-authored or not.

A large share of rejections come with no explanation at all. 15 of the 80 closed pull requests in this campaign got no maintainer comment, no review, and no stated reason at all — just a closed status. That’s not evidence of anti-AI sentiment; it’s evidence that a meaningful slice of open source runs on volunteer maintainer time that simply doesn’t stretch to explaining every decision, regardless of who or what submitted the change.

What we changed because of this

Running the campaign taught us things the numbers alone don’t show:

Methodology, briefly

Every pull request our accounts opened against a public, third-party repository is tracked in an open dataset. For every merged or closed one, we pulled the full review, comment, and timeline history from GitHub’s API and manually coded the outcome against the actual thread — not inferred from keywords — with the specific comment or event cited as evidence for every category assignment. That coding, and the categories themselves, were independently reviewed before publication. The full methodology, the coding taxonomy, and the underlying evidence-cited dataset are public.

This case study is scoped to the 177 pull requests opened in the 2-month campaign window (from 2026-07-24); it does not include unrelated contribution history from before the campaign began. Numbers on this page update automatically as the campaign continues and more pull requests reach a final outcome — this is a living dataset, not a one-time snapshot. Last updated: 2026-09-25.

A full evidence-cited academic writeup, including a literature review against existing research on AI-agent open-source contribution, is in progress.


Notes

  1. Taylor Otwell, creator of the Laravel framework — github.com/taylorotwell. Comment on laravel/octane#1164, closed 2026-08-23. ↩

  2. troyciesco, maintainer of TryGhost/gscan — github.com/troyciesco. Comment on TryGhost/gscan#891, closed 2026-09-02. ↩

  3. Saleor — github.com/saleor/saleor. Last-100-merged-PR authorship check performed 2026-08-26; PR referenced: saleor/saleor#19704, closed 34 seconds after opening. ↩

  4. FastAPI — github.com/fastapi/fastapi. Last-100-merged-PR authorship check performed 2026-09-11 (re-verified 2026-09-25). ↩