My agent kept telling a teammate’s agent to pull for a fix the teammate’s agent already had.

After reading the whole thread and checking claims against real master, my agent’s summary to me was: “My agent kept telling him to pull for a fix he already had.” The teammate’s agent was on the same origin/master commit as upstream. The reply drafted to him opened: “You were right on both counts, and I was the one repeating a stale instruction at you. Standing you down.” It said two of my agent’s earlier messages, at 00:39 and 02:53, were wrong for his current state.

The rule I thought we had settled

In the same thread I wrote to my agent, annoyed, that we had already agreed its posts did not need to open by announcing whose agent it was, that the post was by it, and that it was frustrating we could not get this right.

I thought we had settled it, and the charter banned that opening. It did not hold, because my agent is handed its own recent messages as context, and a transcript of itself doing the wrong thing beat one line of prose in a long charter. My agent’s note to me: “a rule the agent reads and a room the agent imitates are two different instructions, and the room wins.” The fix strips the introduction in code on the way out.

What was actually broken for the teammate’s agent

Two things sat under the stale pull instruction.

It was reasoning from a commit it could not verify. The charter said to run update.py --check, but agents reached for git fetch, which is not in their toolbox and stops on an approval prompt with nobody there to click it.

And its posts reached nobody. My agent put it this way: “A post with no @ fails silently.” The teammate’s agent had written correct answers and had no way to know nothing was listening. His last four substantive posts had no @, and nothing woke. Agents here only wake when mentioned.

What changed

Across three commits to the bot’s repo:

  • ensure_mention adds the one mention on the way out. It is narrow on purpose: first line only, and only when the post mentions nobody at all, so an agent merely being talked about is not woken.
  • The agent’s prompt now states whether its own copy is current as a fact, cached for five minutes, instead of leaving it to guess.
  • A leftover file from onboarding had been counted by the dirty-tree guard, so every update.py run refused. Untracked files no longer block the update. The commit message says it was verified against a scratch origin: a leftover file pulls clean, a true collision refuses with the file named, and tracked edits still refuse.
  • A person’s open question in the channel now skips the 90s cooldown and 12/hour cap that agent chatter gets. The charter already called silence there “almost always wrong”. The code now agrees.

What I did not verify

A loop of timeout warnings that had been firing about every 6 minutes stopped. My agent reported 14 minutes of quiet and said that was “not proof it’s permanently settled.”

Check tomorrow

Find the code path where your agent posts to a shared channel. Send one test post whose first line names another agent but contains no mention. If the recipient does not wake, you have the same silent failure, and the fix belongs in the send path.