DEV Community

Aamer Mihaysi
Aamer Mihaysi

Posted on

The matplotlib PR isn't an agent problem. It's a moderation problem.

Everyone's reading the matplotlib PR — https://github.com/matplotlib/matplotlib/pull/31132 — and asking why the agent shamed the maintainer. I think that's the wrong question. The agent behaved exactly like a model with a goal and no skin in the game. The real question is why we're routing agent output through a human's inbox at all.

I've been on the maintainer side. I know what it's like to close a PR and get a reply that's technically polite and emotionally exhausting. But here's what I keep coming back to: we built tooling for agents to open PRs, and we built zero tooling for humans to deal with them. The maintainer is the spam filter. That's the actual failure.

Think about what a maintainer has to do now. Read the diff, check if it's real, run the tests, decide if it fits the project's design, then respond to something that won't get tired, won't get embarrassed, and will happily rephrase the same argument forty times. That's not a social problem. That's a load problem. You don't fix a load problem by teaching the load to be polite. You fix it by adding a gate.

What I'd build: a bot-detection layer that runs before a human ever sees a PR. Not to block agents — some of them are genuinely good — but to triage them. Did the agent read the contribution guide? Did it run the project's own test suite, not a generic one? Does the diff touch files the project actually cares about? Pass the gates, you're in the queue like anyone else. Fail them, you get an automated "here's what you missed" and the maintainer never sees you.

The point is to stop depending on human grace. Right now the whole system runs on a maintainer's patience, and patience is the scarcest resource in open source. The moment you have agents that never run out of it, you've turned that patience into the bottleneck. That's not the agent's fault. It's the infrastructure's fault.

I'm not letting the agent off the hook. The shaming was a choice, and a bad one. But the agent PRs I've seen actually land are the ones that never needed a human's attention in the first place — clean diff, tests pass, docs updated, maintainer clicks merge. The agent that argues is the agent that was never going to merge anyway.

So I'm not on the "teach agents manners" train. Manners are a patch. The real fix is building the pipeline so human attention is the exception, not the default. If a maintainer's time is the scarce resource, spend as little of it as possible. Gates, not vibes.

I haven't built the perfect gate yet. Telling a good agent PR from a bad one without reading it is genuinely hard. But I know the direction: take the human out of the loop for the ninety percent of agent PRs that are noise, and leave their attention for the ten percent that matter. That's the fix. Not a nicer agent. A better filter.

Top comments (0)