Your machine
Every repo, every agent
Git hooks for every repo and the skill for every coding agent it finds. buzzcut setup --uninstall puts it all back.
npm i -g buzzcut && buzzcut setupPull requests written like the good old days
Your agent writes the code. buzzcut makes the commits and PRs it writes say what changed and why, in plain words, so reviewers read the PR itself instead of asking another AI to explain it.
npm i -g buzzcut && buzzcut setup
Claude Code · Cursor · Windsurf · Antigravity · VS Code · Codex · any terminal
01 Try it
Paste a public pull request. buzzcut checks that it says what changed and why, and marks everything a reviewer would skim past. Paste a repo to rank its last merged PRs. It all runs in your browser.
Or pick one of three made-up PRs
02 The problem
Senior engineers keep saying it: AI-written PRs are hard to read. Headers on a nine-line fix, a bold label on every bullet, a tour of files the diff already shows. So reviewers paste them into another chatbot to find out what changed. A PR should just say it, the way good ones always did.
What we found in 1,275 real PRs opened by coding agents this year
PRs from Claude Code, Copilot, Cursor, Devin, Jules, Amp and Codex. The data and the script are in bench/.
03 How it works
Whatever agent you use keeps writing the code, the commit and the PR. buzzcut reads each one before it runs and sends back anything a reviewer would struggle with, with the exact fix. You don't do anything.
Before writing, the agent asks buzzcut what changed: which files, how big the change is, how long the description should be, and how this repo writes its commits.
Every git commit, gh pr create and GitHub tool call is read against the diff before it runs. A form on a tiny change, a missing reason or a claim the diff contradicts goes back with the fix.
A rewrite that drops numbers, error messages, issue links or file:line pointers is sent back with the list of what went missing. Short means no padding, not fewer facts.
04 For teams
Readable PRs matter most to the people reviewing them. Start with your own machine, commit it to a repo, or check every pull request in your org, including ones from people and agents that never installed anything.
Your machine
Git hooks for every repo and the skill for every coding agent it finds. buzzcut setup --uninstall puts it all back.
npm i -g buzzcut && buzzcut setupOne repo
Writes the hooks and the skill into the repo. Commit them and every teammate's agent follows the same rules. Nobody gets locked out if they don't have it.
npx buzzcut initEvery PR in your org
Checks each PR description and its commits, keeps one comment up to date, and fails the check only when something is sent back. Full workflow
uses: Shiva-Xs/buzzcut@v0Works with Claude Code · Cursor · Windsurf · Antigravity · VS Code + Copilot · Codex · Gemini CLI · any terminal
05 Proof
Two tests. buzzcut's checks ran on every PR and commit we downloaded, including work merged between 2018 and May 2021 in 75 projects, from kubernetes and rust to cpython and the Linux kernel: anything flagged there is a false alarm. Then an agent wrote buzzcut's version of real agent PRs from their own diffs, and a blind judge compared each with the original.
Data, scripts and every judged pair: bench/ and bench/eval/corpus/
No. It flags patterns, not authors. A person who writes "leverage" gets the same note as a model that does, and no roast ever names who wrote it.
No. It's a deterministic check that runs on your machine in 20 to 40 ms per hook call. The only network calls go to GitHub, when you roast a PR or run the Action.
Which files changed and how many lines. That's enough to size the description and catch a file-by-file tour, a feat: on a docs-only change, or a claim about files that aren't there. It doesn't read what the code does.
Coding agents get sent back with the fix. People only ever get a warning, unless you set "block": "always", and a teammate without buzzcut can always commit.
No. It asks for the PR a good engineer writes: an opening that says what changed and why in plain words, a few bullets for the changes a reviewer would ask about, and a Tested line. On a small change, headings like "## Summary / ## Changes / ## Notes" count as a form; on a big one, a few short plain headers are fine.
buzzcut setup --uninstall puts every hook, skill and setting back exactly as it was.
npm i -g buzzcut && buzzcut setup
No LLM, no API key, zero dependencies, MIT.