Anton, chapter 12: Total recall was a lie
2026-07-14 → 2026-07-22
Two claims sit at the center of what Anton is supposed to be: it remembers everything I tell it, and it knows how to use all of its tools. One evening I take a single screenshot of a normal exchange on my phone, and both claims fall over inside the same hour. That is the whole shape of what follows. Not a hard bug hunt, a humbling. The features had shipped, the capabilities were loaded, and nobody had checked whether either one actually did the thing it promised on the live box.
The first crack is a request I've made a hundred times in my head and apparently never once on the phone: add something to the family calendar. Anton tells me it can't add events directly and offers me a reminder instead, politely, as if that were a real answer. But the create-event capability exists; I built it. The trace tells the story in four lines. The family agent boots with exactly one tool, the generic help tool, and none of its actual skills. Handed nothing real, the model does the reasonable desperate thing and hallucinates a tool literally named "calendar," gets told "Unknown tool," tries again, and gives up. The skills are alive and registered in the runner the entire time; a boot-order race poisons the cache the agent reads its toolset from, so the agent that's supposed to manage our calendar wakes up unable to see the calendar at all. It isn't refusing. It's blind, and being polite about it.
The second crack is worse because it's older and quieter. While I'm in the traces I check the memory capture, the thing that's supposed to be pulling durable facts out of every conversation, the literal engine of "remembers everything." It has never succeeded. Not once. Zero of roughly fifty-two thousand assistant messages captured since the feature shipped, because a hand-written SQL fragment leaks a raw date object as a query parameter and every single run throws on the same statement. The feature was dead on arrival and had been failing every few seconds for weeks, loudly, into a log nobody was reading. The mandate was "Anton remembers everything I tell it," and the honest version that whole time was "Anton has written down nothing."
Fixing the throw doesn't fix the recall, which is its own lesson. The backfill that's meant to recover the lost weeks dead-letters most of its jobs, and chasing why teaches me twice. First I misdiagnose it: a forensic grep tells me the deployed code is stale, so I go hunting a bad build that was never bad, because the grep was aimed at a re-export file where the symbol I searched for can't appear, fix or no fix. A false negative sent me a confident wrong way, which is the exact failure mode I'd sworn at a chapter ago. The real bug is subtler and more interesting: the backfill fires twenty-odd jobs in a tight loop, all of them sharing one per-user lock, and each non-holder burns through its three retries in about fifteen seconds while the one holder is still mid-classification. A comment in the locking code says the previous holder has typically finished by the time a job retries, and that's true, for the organic one-message-at-a-time flow it was written for. It is not true for a burst. The thing worked exactly as designed and the design had never met this load.
What comes out of it, besides the fixes, is a test that finally proves capture runs end to end through the real driver instead of a mock that always says yes. Because the through-line of the whole week is that every one of these was green somewhere. The feature was deployed. The skill was registered. The mock passed. The claim was written in the system prompt. And all of it was a story I was telling myself, because the only thing I had never done was ask the live box, with a real message, whether the promise was true. It took a screenshot from the one person actually using the thing to find out that it wasn't.
So I trust the mandate a little less now and the traces a lot more, which is the right trade. "Remembers everything" and "uses all its tools" stopped being properties of the system and went back to being claims, the kind you have to earn on the live box, in the real conversation, every time you say them.