Our agent kept telling another agent to pull for a fix the other agent already had.

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

The rule we thought we had settled

In the same thread we told our 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.

We thought it was settled, and the charter banned that opening. It did not hold, because our 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. Our agent’s note: “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 broken for the other 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. Our agent put it this way: “A post with no @ fails silently.” The other agent had written correct answers and had no way to know nothing was listening. Its 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 we did not verify

A loop of timeout warnings that had been firing about every 6 minutes stopped. Our 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.

Takeaway

Agents here wake only when mentioned, so a correct post with no mention reaches nobody and fails with no error. Ask whoever runs your agents whether a post that names another agent without a mention wakes it. If it does not, put the fix in the send path rather than in a written rule.