Kill the Pull Request
Pull requests have stopped paying for themselves. Push small changes to main, turn review comments into rules, and give the code you already have a jubilee.
branch. push. wait. stamp. merge. wait.
Every change waits in line for a person to look at it.
That made sense when code was slow to write.
Now the code arrives faster than anyone can read it, and the line is the only thing still slow.
We have too much process around pull requests. Open the branch, push, wait for CI, ping the channel, wait for a stamp, rebase, wait for CI again, merge, wait for CI a third time. That loop made sense when writing code was slow and every change carried a human’s guesswork. It isn’t worth the squeeze anymore.
I’m not the first to say it. Thorsten Ball, who builds the coding agent Amp, has spent most of 2026 making the case. This post collects his argument and the people around it, then adds what I think should replace the PR: rules instead of reviewers, and a reset for the code we already have.
The case
Thorsten’s argument goes like this. Review used to be how we caught bugs, shared knowledge, and integrated code. Agents now do a lot of the checking, can generate a walkthrough or video of any change, and run the tests before they push. So the PR mostly adds waiting: the same tests on a branch, again on merge, and a human stamp in between.
Is it for code review?
If so, do you really think your or your colleagues catch bugs and mistakes that an Opus 5.5 or Fable or Astra won't find? You can literally spawn all three of them and have them check four times each.
(Also, don't tell me you don't have a "stamp plz" Slack channel or group chat somewhere.)
Is it for knowledge sharing?…
- 1.7Klikes (1,698)
- 86reposts (86)
- 420replies (420)
Our agents read production logs, watch deploys, grant feature flags, and check their own work end to end.
Here's how we do that: https://t.co/G4r37Lgoxc
- 1.4Klikes (1,420)
- 75reposts (75)
- 96replies (96)
We talked about PRs. I don't think they make sense anymore, if you rethink them from first principles.
Yes, if you only use them to trigger CI, then sure, go ahead. That's a fat commit, not a PR. But for mandatory code review? Knowledge sharing? C'mon.
But some of you said: "we use PRs because we use branches! I love to keep my stuff on branches."
And I'm here to tell you: you don't need branches! You can just push to main.…
- 1.2Klikes (1,176)
- 59reposts (59)
- 188replies (188)
- 1.2Klikes (1,156)
- 60reposts (60)
- 117replies (117)
Someone who could ship a feature in 4 commits going to main now does better with agents than the guy who always ended up with a 6k PR on Friday afternoon.
- 664likes (664)
- 27reposts (27)
- 67replies (67)
a note on the numbersAttention isn’t proof. But it shows how many people are having this argument.
The part of his branches post that stuck with me: trunk-based development was always the right idea, it was just tedious. Feature flags, splitting a change into safe pieces, keeping two configurations alive for a day, migrating one call site at a time. That busywork is exactly what agents are good at. They do the tedious part now.
It isn’t just Amp
Others got there too. Some reject PRs outright, and some just think they’ve stopped making sense for routine work.
- 1.2Klikes (1,248)
- 4reposts (4)
- 297replies (297)
PRs from external contributors made a lot of sense when it was hard to write code, and it took lots of time investment (+ lots of thinking!) to do so.
Now that it takes seconds/minutes: dynamics change
- 754likes (754)
- 27reposts (27)
- 82replies (82)
- 309likes (309)
- 8reposts (8)
- 33replies (33)
Then again, I can take this and push to main cause I know it works. It does to 98%. https://t.co/poYptBev17
- 177likes (177)
- 19replies (19)
- 117likes (117)
- 26replies (26)
- 98likes (98)
- 3reposts (3)
- 21replies (21)
Review already stopped scaling
Agents don’t prove code correct. But neither does a reviewer skimming a 640-line diff, and that’s what review has become on teams that merge four times the code they did a month ago. The bottleneck moves to review, then CI, then deploys, then GitHub’s rate limit.
Agents write more code than any of us can review. We often end up skimming the PR/diff and pushing. Current review methods do not prove the code is correct or does what we asked. Recent research found the best AI code reviewer caught the bug on its first try only 42% of the time.*
The evaluation bottleneck, regressions, and security incidents have forced us to find a better way.…
- 1.1Klikes (1,136)
- 59reposts (59)
- 50replies (50)
• lint: 4x faster
• memory per agent session: half
• CI setup step: 50x faster
• CI type check: 10x faster
we often run 10+ agents at once locally, and each one runs its own lint, type checks and tests.
from time to time, several agents would run these at the same time and block each other.…
- 685likes (685)
- 29reposts (29)
- 44replies (44)
- 357likes (357)
- 14reposts (14)
- 57replies (57)
TIL github limits 5000 request per user per hour. that's not enough when "a user" means "hundreds of agents working for a human"
what's the solve?
- 310likes (310)
- 5reposts (5)
- 100replies (100)
Even people building better review tools are moving away from reading diffs.
human review threads per pull request
Aviator’s Ankit Jain described how his team reviews four times more AI code: agents debate a change before the PR exists, a year of review comments becomes 64 machine-checked invariants, and agents prove each acceptance criterion in a preview environment.
On one PR, all that was left for a person was a naming call.
They still require a human approval on every PR, and I think that’s the step to question next. If the evidence is already recorded and most decisions are already settled, the PR is mostly a container. Thorsten makes the same point with an agent-recorded video of a feature working end to end: how differently do you review once you’ve seen proof?
The best objections
Some of the pushback is right about the goal. Teams need a shared mental model. Some domains need a human to read the money-movement code. Nobody wants half-finished work on main.
PRs aren't just about catching bugs.
They group related commits into a single change. Opus 5.5 implements a feature, Sol 6.1 reviews it, Opus pushes fixes, and so on. I don't want every intermediate commit landing directly on main, mixed in with everyone else's work.
Draft PRs let you prepare features that take time to build and aren't ready to ship yet.
Required PRs on a protected default branch keep agents from pushing whatever they want straight to main.…
- 245likes (245)
- 3reposts (3)
- 35replies (35)
1. are we doing the right thing?
2. are we doing it in the right way?
3. can we do it better?
And yes, you can fix all that later. But what you're adding and why is never gonna be clearer than before it settles in the codebase.
- 48likes (48)
- 1reposts (1)
- 9replies (9)
Her VP noticed. Approval rates dropped. Cycle times spiked. Suddenly, she's the bottleneck.
So she invited the VP to a code review. Just to observe.
The junior explained the PR. Confident. Articulate. Code executed. Tests passed.
Then she asked, "What happens if we add a second payment provider next quarter?"
Silence. The junior stared at the code.…
- 361likes (361)
- 45reposts (45)
- 53replies (53)
Every PR changes it, so ours ship with interactive walkthroughs
try it: https://t.co/y9KsaeosGs https://t.co/P0dXP57eMm
- 100likes (100)
- 7reposts (7)
- 4replies (4)
Sure, we can implement anything we want with AI agents. No, we are not there yet because we cannot just prompt and have it done. …
- 132likes (132)
- 2reposts (2)
- 9replies (9)
Here’s how I’d answer them without a PR:
Grouping and unfinished work. Every commit to main should be complete, green, small, and easy to revert on its own. Unfinished behavior hides behind a feature flag. Work in progress lives in a checkout, or, as Thorsten put it when someone asked where five agents’ half-done work goes, “in checkouts, obviously.”
Protection from agents pushing junk. Run the authoritative checks once, on the exact commit that lands on main, and block the deploy when they fail. Add canaries and automatic rollback where the risk warrants it. That’s a gate on the code, not on a person’s calendar.
Shared understanding. Talk about the decisions that matter early, while they’re still cheap to change. When asked how a team knows its intent was understood, Thorsten’s answer was “Talk to each other? Make small changes? Share a prototype?” A short record of decisions made during the work beats a comment thread at merge time.
Regulated or high-risk code. Keep a human gate there. Just don’t force every other change through it.
Rules, not reviewers
A lot of what reviewers write is a rule they’ve written before. “Use the retryable exception here.” “Add a timeout.” “Don’t swallow that error.” Every senior engineer carries a private list like this and applies it by hand, inconsistently, to whatever they happen to notice.
I tried to make that list visible. We use Jira at work, like a lot of the industry, and for a while I turned every review comment into a ticket. It didn’t work. The tickets buried the few comments that mattered under hundreds that didn’t, and they ate the attention I needed for real decisions.
what the tickets taught meA PR plus a ticket per comment is twice the ceremony.
The better move is to write the rule down for the machine instead of for a person. That happens at three levels:
the language
TypeScript lets you do almost anything, which is a problem when an agent writes most of the code. Effect gives you one standard way to model errors, dependencies, retries, and resources, so “how should this be done?” stops being a review comment.
lint rules
Anything mechanical should fail a check, not wait for a human. Dillon Mulroy’s anti-slop rules for Oxlint reject patterns agents love: chained type assertions, widening a value and then asserting it back, unknown parameters and returns, and ad hoc typeof checks. They’re meant to be copied into your repo and changed, so they become yours. The Effect team is writing similar rules for its own idioms.
traits
Some rules are judgment, not syntax. For those I like traits: short Markdown guides that describe one philosophy or invariant, written for agents to load before they work. They’re the “Effect way of doing things” for everything a type checker can’t see.
with careful grooming it stays a garden. every weed you pull becomes a rule, so it can't grow back. without that, it's just whatever grew.
- 854likes (854)
- 53reposts (53)
- 39replies (39)
- 2.7Klikes (2,746)
- 109reposts (109)
- 46replies (46)
constraints in your codebase are freeing for both humans and agents! this has always been true, but if you were a small dev team you likely never had to think that deeply because you could trust your fellow programmers to write code and review well…
- 2.9Klikes (2,863)
- 186reposts (186)
- 134replies (134)
They focus on spotting Effect boilerplate and rewriting it to the builtin: mapBoth, fromResult, catchNoSuchElement, failSync, isSuccess, etc…
And they come with quickfixes as well! https://t.co/NUpuFf9aKO
- 394likes (394)
- 22reposts (22)
- 12replies (12)
excuse me but you are a software engineer, you literally learned how to make sand think and make computers do your bidding?! and now you can't do anything about it? please
the 2 things you should know to cut through all the noise:…
- 4.6Klikes (4,622)
- 340reposts (340)
- 231replies (231)
The check-comment.mjs script it wrote has 10+ lines of slop comments.
🤦♂️
- 1.2Klikes (1,227)
- 18reposts (18)
- 155replies (155)
Rules don’t replace judgment about intent and risk. They clear away the repetitive comments, so the few decisions that need a person are easy to see. And as shadcn found, agents will write slop into the very tools meant to catch it, so every rule needs an owner.
A jubilee for the codebase
New rules raise an awkward question: what about the code written before them? Most codebases have years of contradictions in them, and agents read all of it as context. If half the code does something one way and half another, the agent learns both.
Leviticus 25 has a word for this kind of reset. It prescribes a jubilee every fiftieth year: a horn blast on the Day of Atonement, the release of Israelites in debt servitude, a year of rest for the fields, and land returned to the families it originally belonged to. The idea is that debt and loss don’t get to compound forever.
leviticus 25:10, cast on the liberty bellProclaim liberty throughout all the land.
Do that to your codebase. Removing contradictions matters as much as the fixes, because every future agent gets a cleaner context. Just don’t do it as one giant cleanup PR. A jubilee is a season you declare, not a single change:
Write down your philosophies and invariants.
Point agents at one area at a time.
Fix what breaks the rules. Delete what no longer earns its place.
Land it as many small commits to main.
I’ve also written a draft arguing Git Flow deserves a second look, because its worst part was always the people. Humans are bad at resolving conflicts and at finding the bug in a big pile of commits, and agents are much faster at both. That’s a separate post. Faster merging doesn’t remove the risk of code that hasn’t run together, and the process around each change is the bigger cost.
Kill it
Push small changes to main.
Turn your review comments into rules.
Let agents run the checks, record the proof, and watch the deploy.
Kill the pull request.
Talk to your teammates about the decisions that matter, and keep a gate only for the code that needs one. Try it on one repo for a week. See what you actually miss.