Case file · Agents / DevOps
AI Worker is a pipeline that turns a written task into a reviewed pull request without a human in the loop. A task is dispatched to a local LLM worker; the worker writes the change, commits it, and opens a pull request; an automated review loop then critiques the diff and sends it back for repair until it passes — or escalates to a human when it cannot. The local model keeps the work private and the cost near zero, which is what makes running it for hobby projects viable at all.
It is a small autonomous software team: a dispatcher, a coder, a reviewer and a repair loop, wired so that the only thing the human reliably sees is a PR that is ready to merge or a clear request for help.
Why it exists
Most of the backlog on a side project is not hard, it is just unstarted. AI Worker exists to clear the routine half autonomously and to test a thesis: the bottleneck on agentic coding is not the model writing code, it is the loop that decides whether the code is good enough. Building the reviewer was harder, and more interesting, than building the coder.
Shape of the system
┌──────────────┐
│ dispatch │ task in → job queued
└──────┬───────┘
▼
┌──────────────┐
│ local coder │ writes change, commits, opens PR
└──────┬───────┘
▼
┌──────────────┐ ┌───────────────┐
│ auto review │ ──no──▶ │ repair loop │
└──────┬───────┘ └───────┬───────┘
│ yes │ back to coder
▼ └──────────────┘
┌──────────────┐
│ PR ready / │ human sees a mergeable PR
│ escalate │ or a clear ask for help
└──────────────┘
Three hard lessons
1. The reviewer is the hard part. Generating a plausible diff is easy. Deciding whether it is correct, in scope, and safe to merge is the work — and it is where almost all the engineering went.
2. Repair loops need a leash. An unbounded fix-and-retry will happily spin forever or thrash a file worse. Knowing when to stop and escalate to a human is a feature, not a failure.
3. Local models change the economics, not the ceiling. Running a worker locally makes it cheap enough to leave on — but the quality bar still comes from the loop around the model, not the model alone.
Stack