The hard part wasn't the code. It was the handoffs.
Description and use
With three AI agents building, verifying, and marketing a product, handoffs were ambiguous until an append-only shared log called Baton replaced chat. Approvals now require the exact commit, CI run, and at least one unchecked item. Since 22 October, Baton recorded 420 entries, 15 release approvals, 2 no-gos, and 7 corrections.
Problem
When multiple AI agents ship a product, handoffs between them are ambiguous: 'done' means done on one agent's machine, 'verified' quietly means verified only the parts the checker checked, approvals don't name which commit they approved, and an agent can even be blocked by its own content filter from receiving its own approval.
Outcome
Since 22 October, 420 entries, 15 release approvals, 2 no-gos, and 7 corrections were recorded in Baton, each correction marked on the entry it fixes.
Workflow
- Set up three AI agents for product shipping: one builds, one verifies, one does marketing.
- Define rules for human-in-the-loop approval.
- Replace chat-based handoffs with a shared append-only log (Baton) that agents write to.
- Enforce that every approval must name the exact commit, the CI run, and at least one thing that was NOT checked.
- Read what agents claimed and what they said they did not check, rather than watching the agents work.
Evidence
Three AI agents ship my product. One builds, one verifies, one does marketing. I set the rules and make the human calls.
"Done" meant done on one agent's machine. "Verified" quietly came to mean "verified the parts I checked". An approval didn't say which commit it approved. And once, our own content filter blocked my "yes" to one agent, so one of them had my approval and the other didn't.
So one of the agents wrote Baton: a shared, append-only log the agents write to instead of chatting.
The rule that changed the most: an approval is refused unless it names the exact commit, the CI run, and at least one thing that was NOT checked.
Since 22 October: 420 entries, 15 release approvals, 2 no-gos, and 7 corrections, each marked on the entry it fixes.
- Record date: 2026-11-02T08:58:47.427Z