Don't Make a Human Do What AI Is Amazing At Developer John Nunemaker merged 113 pull requests over a single weekend using Nunebot, a markdown prompt file stored in a private git repo that directs an AI agent to make one small improvement per pass across his repositories, including Box Out, Fireside, Flipper and Flare. Nunebot tends earlier PRs, gathers context, builds a change in its own worktree, runs /simplify, /qa and /codex review, proves the change works, opens a PR labeled nunebot with CI green, and logs what it did — but never merges or deploys, leaving that to Nunemaker. The setup targets recurring chores such as dependency updates, Honeybadger error fixes and GEO, SEO and security audits, on the argument that AI handles a focused 40-line change with a proving test far better than 3,000-line PRs. Don't Make a Human Do What AI Is Amazing At Last weekend we were camping. Fall break. Glorious northern Indiana weather. My kids were fishing with grandpa, so I went for a walk around the campground to check out the other rigs as dads do . Somewhere along the way I opened T3 https://t3.codes and told Nunebot to do another run. Merge, merge, merge, run it again, merge, merge. Just getting some exercise and enjoying the fall weather. Between Saturday and Sunday I merged 113 pull requests. Definitely the most in a two day span in the two decades I’ve been doing this. I know how that sounds. But I honestly like this more than games, mindless scrolling, or Instagram. It’s relaxing for me. Read a PR, it makes sense, merge. Little dopamine hit. Next. I’ve explained Nunebot to a handful of people now, and every time I think, why am I not writing this down? So here it is. When I lay it all out, it sounds stupidly obvious. But a couple of the details took me a while to figure out, and those are the parts that make it work. What Nunebot Is Nunebot is a prompt https://gist.github.com/jnunemaker/e421523d2508716450d41a5d785e48ce . That’s it. It’s a markdown file in a private git repo I call brain. I tell an agent to read it and run it, and it makes a pass over my repos in priority order. For each repo it: 1. Tends the PRs it opened on earlier runs. 2. Gathers context. 3. Picks one change that’s an obvious yes. 4. Builds it in its own worktree. 5. Runs /simplify https://code.claude.com/docs/en/commands on it, then /qa https://github.com/garrytan/gstack/tree/main/qa , and finally /codex review https://github.com/garrytan/gstack/tree/main/codex with a few rounds of fixes at most . 6. Proves it works. 7. Opens a PR labeled nunebot and gets CI green. 8. Writes down what it did in brain. It never merges, deploys, or changes anything in production yet . I merge. Most of my apps deploy on merge, so that’s the whole job for me for these types of changes. Why the name? I needed something, and Nunebot is funny. Why I Built It The goal is kaizen https://en.wikipedia.org/wiki/Kaizen . Small improvements to every app, all the time, without me ever doing the tedious stuff AI is better at anyway. Three things drove it. The tedium. I’m not trying to get it to build all my features. What I want is to never update a dependency again. I want to never fix a Honeybadger https://www.honeybadger.io error by copying it into an agent and saying “fix this” or by using their great MCP . I don’t want to remember to run a GEO audit, an SEO audit, or a security audit. My teammates and I were doing all of this chore work by hand across Box Out https://boxoutsports.com , Fireside https://fireside.fm , Flipper https://flippercloud.io , and Flare https://flare.am . I want all of it to run all the time and just pop up PRs. And I just say yep, yep, yep, yep, yep. Then it goes again. Getting better without me. None of these PRs moves the needle on its own. That’s exactly why they never got done. But all together? Performance problems get fixed faster. Security holes get closed faster. Customers are happier because things just work. The marketing keeps getting better whether I’m paying attention or not. The prompt opens with the framing I care about most: Software is not a factory. A factory builds identical widgets to a fixed spec and is done. Software changes every day: customers, scale, and requirements shift, so a perfect up-front spec never exists. Treat each repo like a painting you come back to: make one deliberate improvement per pass, and leave it better than you found it. Letting AI do what it’s great at. AI is amazing at a tight, focused, 40 line change with a test that proves it. It’s a lot less amazing at 3,000 line PRs. I know because I kept making them. I’d keep looping review and fix, trying to get to zero findings. Sometimes it never got there. It just kept finding things, the code kept getting more complicated, and pretty soon I had a 3,000 line PR that made my stomach hurt and I was afraid to merge . I never want to be there again. So the whole thing is designed around small. Step One: Give It All the Context Nunebot can’t do much if it can’t see what I see. So the first thing is MCPs for everything that tells me what’s happening in production: Honeybadger https://www.honeybadger.io for errors, Flare https://flare.am for performance, PlanetScale https://planetscale.com query insights, Crisp https://crisp.chat , Help Scout https://www.helpscout.com , and Jelly https://letsjelly.com for support across the apps, plus Cloudflare https://www.cloudflare.com for costs, the Linode CLI https://github.com/linode/linode-cli for the servers behind my personal stuff and Fireside, and the Heroku CLI https://devcenter.heroku.com/articles/heroku-cli for Box Out and Flipper Cloud for now . The second thing is knowing what I care about. That’s brain. It’s a private repo full of markdown: a short Now list, ranked priorities, a file per project, an inbox for random ideas, a list of things only I can do, and a folder for Nunebot. It’s unstructured and wildly inefficient. Justin Searls https://justin.searls.co told me I should use SQLite with Litestream so all my computers share the same database, and he’s probably right. But I already had the repo, agents already know how to commit, and it works. I’ll get this tuned and swap out the component later. Brain is the part that matters most. Nunebot reads it first, and if brain has anything for a repo that a PR can solve or move forward, it works on that, even when something else looks easier or more interesting. Step Two: Decide What to Do The repos are in priority order. Revenue first: Box Out it makes the most and Paint Box Out’s renderer , then Flipper Cloud, Flipper https://github.com/flippercloud/flipper , Flipper Pro, and the Flare repos, then Fireside. Garrett is primary on Fireside, so I just do little things there when I have extra tokens. Then everything else: Pitch In Now https://pitchin.now , PreachIndex https://preachindex.com , HTTParty https://github.com/jnunemaker/httparty , South Bend Watch Co https://southbendwatch.co , workspace https://github.com/jnunemaker/workspace , this site, and so on. When brain has nothing for a repo, it looks everywhere else: - Cheap stuff, every run. The repo’s docs/backlog markdown files of things we want to do, with the research and context ready for when we pull the trigger, like a fleshed-out GitHub issue that lives in the repo , GitHub issues, support conversations, Honeybadger, metrics, and a quick dead code scan. - Saved findings. Every audit’s results land in brain, one file per repo nunebot/findings/