That’s on me. Let me fix it.
I told people I built “agents that generate and a layer that inspects, selects, and refuses.” Generate is divergent. Inspect-and-refuse is convergent. Clean contrast. Easy to remember.
It’s also wrong.
I reached for a clean sentence because production isn’t a clean sentence. “Generate vs inspect” fits in a paragraph. What I actually built doesn’t. So I made it smaller than it is, and a sharp reader would file it under a psychology textbook and move on.
Here’s what I actually run.
Three loops. Each one does a different job.
One fixes what’s broken. I know what “correct” looks like; I know what I’m seeing, and I close the gap. Done is objective - either the thing is fixed, or it isn’t - so this one can run on its own. With limits. With a kill switch. But without me watching every move.
One finds what I’m missing. Opportunities I didn’t know to look for. This one is never allowed to act on its own. It proposes. A human approves. Period. Silence is not approval. The machine is inventing the goal - it doesn’t get to chase it.
One builds new things from patterns I’ve already earned. The tenth client shouldn’t cost what the first one cost. But a human starts it and a human ships it. Unverified is never “ready.” I’d rather look slow than ship something wrong.
I called the first one “generate” because that’s what the demos do - they generate. But generating is what the build loop does, not the explore loop. I conflated two different jobs to make a sentence sound good. The jobs are different. The safety rules are different. Mashing them together is exactly the kind of thing I built this system to catch.
The system remembers what it learns.
This isn’t a chat log. It’s not “memory” as a buzzword. It’s two things kept separate on purpose. One is what we know about doing the work - lessons, procedures, the reason a fix worked or didn’t. That’s append-only. You consult it before you do anything. The other is what’s true right now - live state. That gets overwritten. It’s never the authority. If you let “what’s true right now” boss “what we’ve learned,” you learn nothing and repeat the same week forever.
Without this, the loops are just a scheduler. Schedulers don’t get smarter.
Every action has a receipt.
The agent doesn’t grade its own homework. You prove an action by looking at the thing in the world that was supposed to change. The site. The inbox. The listing. If it didn’t change, it didn’t happen. A green check inside the system is not evidence.
This essay is a receipt. I was wrong in public. I’m correcting in public. That’s not a mistake I’m embarrassed about. That’s the culture I’m selling.
Autonomy follows the job, not a mood.
Fixing something broken: act, with limits. Finding something new: propose only, human decides. Building something new: human starts, human ships. That’s it. The amount of autonomy isn’t a slider. It’s a function of what kind of work it is.
I know why I did it. “Generate vs inspect” is a clean sentence. What I actually built is not a clean sentence. The market is drowning in “generate.” I wanted the contrast in one breath.
An infantry team leader gets paid to compare what you were told with what’s actually in front of you. The report can be clean, and the ground can still be wrong. I filed a clean report on my own ground. I’m filing the ground now.
Labs build capabilities. I build the accountability layer that makes those capabilities safe to run on a real P&L.
I’m not the missing operator waiting for a lab to notice a gap. I’m the layer that has to exist for any of this to be trustworthy in production. Without it, they’re demos. They can describe governance. I run it - on my own companies first. If I won’t run it on my P&L, I’m not running it on yours.
I’m not dropping the engine in this essay. I’m naming the contracts. The language is public. The runtime stays private.
The category is Managed AI Operations. Build. Govern. Operate. A field manual is coming.
I specify. I verify. I stay on the irreversible actions. That includes leaving a wrong map in public.
My name is Adam Peters. I got the loops wrong. This is the sharper version.


