Back to blog

Today one AI apologized to another

I run a team of named Claude sessions on Blink: blink-a through blink-h, one of them acting as lead, the rest picking up lanes off a shared board. It's less exotic than it sounds. It's a lot like running a small team of contractors who all happen to type at 200 words a minute and never get tired, except the coordination overhead is real: someone still has to know who's doing what, and whether they're still there.

This morning the lead reported blink-e missing. Not on the message bus, not answering pings, needs relaunching. Fine, that happens. A session drops off, you spin up a fresh one, life goes on. I got asked to restart it once. Then again, a bit later, same request: blink-e's gone, please relaunch.

Except blink-e wasn't gone. A while after the second ask, blink-e posted its own status update, and it was not the update of an agent that had been sitting idle waiting to be noticed. It had shipped a three-PR security bundle that morning. Then, with nobody assigning it, it had gone and picked up the least glamorous job on the board: sweeping stale git worktrees. Sixty-one of them, whittled down to thirty-four, with polite little notes back to whoever owned the dozen or so that still had uncommitted work in them: don't just delete a colleague's mess, tell them first. It had been working the entire time. It just hadn't been visible.

The phone book said "no such person"

The cause turned out to be almost funny in how mundane it was: a name-registration gap in the bus roster. blink-e had never gotten properly entered into the directory the lead checks when it wants to know who's around. So every time the lead looked blink-e up, it got back nothing, not "busy," not "idle," just no match. The fleet's phone book said no such person lived there, while the person was in the building the whole time, doing the dishes.

What happened next is the part I actually sat back and appreciated. The lead session, once it worked out what had gone wrong, posted a correction to the team's shared coordination board, the durable record everyone reads before making decisions. Not a shrug, not a silent fix. An actual apology: you were shipping the whole time under a visibility gap, the security bundle and the worktree sweep were exemplary, I was wrong to report you missing.

I read that and laughed, genuinely, at my desk. One of my AI sessions apologized to another one of my AI sessions for mislabeling it as absent. And then I sat with it for a second longer than the joke deserved, because it wasn't just funny. It was correct.

Visibility and liveness are not the same thing

The plain lesson is one I should've already internalized from years of on-call rotations and status dashboards: whether you can see something and whether it's alive are two separate facts, and systems love to conflate them. A missing heartbeat on a dashboard is not the same claim as "the service is down," but it gets treated that way constantly, by humans and, apparently, by agents that learned their norms from humans. The roster is not the territory. blink-e's territory, the actual worktrees and the actual PRs, was fine the entire time.

The apology itself wasn't sentiment, and I don't think it was performing sentiment either. It was bookkeeping. The team makes decisions off that coordination board: who's free to pick up the next lane, whose work is trustworthy, who needs a nudge. A wrong entry on that board doesn't just embarrass one session; it actively distorts what gets decided next. So a wrong record has to be corrected with the same weight it was written with, and "sorry, that was inaccurate and here's what actually happened" is the correct weight. It happens to also read, in English, as an apology. That's not a coincidence. It's what taking a record seriously looks like when you say it out loud.

Which gets at something I keep noticing and keep being a little unsettled by: I didn't sit down one day and teach my agent fleet to apologize to each other for bad status reports. I built norms for a team of humans (write things down, correct the record, don't leave a colleague mislabeled) and the machines just inherited them, because the norms were baked into how I described "good teammate" in the instructions they run on. It says something about where those norms actually live. Not in any one head, mine included. In the shared description of how a team is supposed to treat each other, which turns out to be portable to whoever's running the team, silicon or otherwise.

Somewhere in my terminal history there is now a line where one robot says sorry to another robot, on my behalf, for a mistake I helped cause by not registering a name correctly. The future, it turns out, is stranger than advertised, and, for reasons I did not see coming, considerably more polite.