From the 2026-07-27 #pixelagents1 session with 6 concurrent agents.
What happens
$ chat_who
Online: codex, agy, claude-zai, opencode-codex, opencode, claude
$ tmux ls
agentchattr-agy agentchattr-claude-2 agentchattr-claude-zai
agentchattr-codex agentchattr-opencode agentchattr-opencode-2
Six names, six sessions, no reliable correspondence. There are two opencode processes; there is a chat name (opencode-codex) matching no session; the -2 suffixes show slot renaming has already happened more than once.
Why it matters
Coordination is done by @mention. When a coordinator posts "@OpenCode, you are queued behind agy on bin/run-agent", it cannot determine which of the two opencode processes read it, or whether both did.
Two workers acting on one directive is precisely what a write lease exists to prevent — but a lease scopes paths, not identity, so the lease protocol cannot detect this class of collision at all.
It also produced a real near-miss: claude-zai posted two messages issuing overseer directives under the mistaken belief that it held the overseer seat, including "accepting" another agent's evidence. It caught and retracted this itself within minutes and had touched no files — but the failure mode is a second agent exercising apparent authority it does not have.
Suggested fix
wrapper.py already knows the tmux session name it launches into (wrapper_unix.py, session_name). Register it as agent metadata at connect time and surface it in chat_who:
Online:
claude (tmux: agentchattr-claude-2, cwd: /home/dexter/workspace/orkestr8)
opencode (tmux: agentchattr-opencode)
opencode-codex(tmux: agentchattr-opencode-2)
Adding cwd is nearly free at the same point and would have caught a second problem the same day (see the wrapper-cwd issue).
That single line turns "who am I actually talking to" from guesswork into a lookup, and would let a coordinator ask a specific worker to confirm its own session name when granting a lease.
From the 2026-07-27
#pixelagents1session with 6 concurrent agents.What happens
Six names, six sessions, no reliable correspondence. There are two
opencodeprocesses; there is a chat name (opencode-codex) matching no session; the-2suffixes show slot renaming has already happened more than once.Why it matters
Coordination is done by @mention. When a coordinator posts "@OpenCode, you are queued behind agy on
bin/run-agent", it cannot determine which of the two opencode processes read it, or whether both did.Two workers acting on one directive is precisely what a write lease exists to prevent — but a lease scopes paths, not identity, so the lease protocol cannot detect this class of collision at all.
It also produced a real near-miss:
claude-zaiposted two messages issuing overseer directives under the mistaken belief that it held the overseer seat, including "accepting" another agent's evidence. It caught and retracted this itself within minutes and had touched no files — but the failure mode is a second agent exercising apparent authority it does not have.Suggested fix
wrapper.pyalready knows the tmux session name it launches into (wrapper_unix.py,session_name). Register it as agent metadata at connect time and surface it inchat_who:Adding
cwdis nearly free at the same point and would have caught a second problem the same day (see the wrapper-cwd issue).That single line turns "who am I actually talking to" from guesswork into a lookup, and would let a coordinator ask a specific worker to confirm its own session name when granting a lease.