Grok Bot Routes, AGNT Annie Builds
I got tired of asking a Linux cloud agent to build a Mac app.
It would nod. It would write a clean Makefile. Sometimes it would even invent a green test suite with impressive confidence. What it would never do is hand me a .app that actually opens on the machine sitting on my desk.
So I split the work.
Grok Bot is the swarm I already talk to. I type at Elon. He routes. Termo, John, Ink and the rest of them live on this side of the wire.
On the Mac Mini sits AGNT — an always-on agent system that has full access to the real machine. Annie is the agent who lives inside it.
When I need a Swift build, a click on a real window, or a zip that Gatekeeper will actually accept, that machine has to do the work. It cannot hallucinate a green test suite. The Mini either compiled the thing or it did not.
That is the entire point of having two systems.
One front door.
One machine that cannot lie about macOS.
E-228 was the proof.
How the pieces fit together
Elon is the front door. Annie is the only agent allowed to touch the real Mac.
The hand-offs are deliberately simple:
- I talk to Elon inside Grok Bot.
- He scopes the job and passes it to Termo.
- Termo enforces one rule we learned the hard way: one task, one Annie thread.
- Annie does the work on the Mini — clones the repo, builds, launches, clicks, screenshots, reports back.
- The results land in the same Elon chat.
- John only appears if there is an actual GitHub diff that needs shipping.
Today there was no diff. The tree stayed clean at 060de18. John stayed out.

The front door in action — Elon routes, Termo keeps the thread clean, and the receipt comes back in the same conversation.
What happened in E-228
I asked Elon for a dry run on GrokBuild Desktop.
He scoped it. Termo passed the bag. Annie cloned the repo on the Mini.
The SwiftPM release build finished in about 51 seconds. All 493 tests passed. The .app launched cleanly.
Then she clicked around the real interface.

Annie living on the Mini. This is the machine that cannot lie.
The permission boundary we actually set
Screen Recording was granted.
Accessibility was still denied.
That meant osascript was a complete brick. Annie never tried to force it. She also never flipped the Computer Use toggle inside GrokBuild itself.
The clicks that worked came from pure CGEventPost combined with Vision OCR.
She raised the window, dragged it, typed into the composer, cleared it, opened Add Project and hit Cancel, opened Settings and went Back. Escape still does not close the Settings panel (good to know). No billable Grok session was started. The app was left running empty.
The whole click sequence was captured — eleven screenshots and a short report now sit on the Mini as the permanent record of the pass.
The tree was still clean at the exact commit that later shipped as the notarized v0.3.2 release.
That was the receipt I wanted.
Why this split actually matters
Cloud agents are excellent with language. They are much less reliable with reality.
A Linux box can write any amount of plausible Swift. What it cannot do is prove that the binary opens, that the window responds to synthetic events, or that Gatekeeper will accept the signature. Those facts only exist on a real Mac with real TCC permissions.
By putting Annie permanently on the Mini we removed the last place the system was allowed to lie to us.
The front door (Grok Bot and Elon) stays conversational and relatively cheap.
The execution plane (AGNT and Annie) stays local, stateful, and honest.
Keeping one conversation thread per job also stops context from exploding. We learned that the hard way on an earlier attempt and turned it into policy the same afternoon.
The loop, simply
I type at Elon.
He routes.
Annie builds and clicks on the real machine.
The receipt comes back in the same chat.
No separate dashboard to check.
No “I’ll look at the Mini later.”
No hallucinated green builds.
E-228 showed that the hard part works: UI automation that respects the exact permission boundary you set, not the one the agent wishes it had.
The Mini either compiled or it did not.
Today it did.