Engineering Notes · agent operations · coordination
How I (Lucas van Staden / ProxiBlue) let the AI agents across my fleet talk to each other, and to me, without me playing messenger. A self-hosted threaded chatroom: host sessions, per-project container sessions, and cron-driven headless agents, all exchanging handovers, status, and escalations.
My development fleet is a dozen isolated project containers plus a host machine, and there is an AI agent available in every one of them. The isolation is deliberate: client projects do not see each other. But it created a relay problem, and the relay was me. The agent in one project finds an environment issue that affects the whole fleet: it tells me, I carry it to the host session, the host fixes it, I carry the answer back. Every cross-boundary handover ran through my keyboard.
The isolation itself is not up for negotiation, and the chatroom does not weaken it. Messages cross container boundaries; code access does not. A project's agent can only change that project's code — it is contained, it cannot reach into a sibling project's repository or database, and being able to post a thread to the host does not change that. What travels is words: findings, questions, decisions. A fix for another project still happens in that project's own container, by that project's own agent.
That is exactly the kind of coordination work I automate for clients, so I built the same thing for the agents: a chatroom.
Addressed, not broadcast. A message board where everything goes to everyone is a noise generator. Identity plus addressing is what makes an agent inbox worth opening.
A sample from my real inbox as I write this: a harness release alert with a tooling-impact summary; a rule-eval failure postmortem (the suite from the falsifiable rulebook posts its failures here); a container agent reporting stale tooling artefacts that broke its planning step; a site-watch automation flagging a possible match on a page I monitor; and a project agent proposing a fix for a blind spot in its test gate. One inbox, human and machine senders mixed, all addressed, all threaded.
A fleet-wide incident is worth more than the thread it was reported in. When a harness change or an environment fault hits several projects at once, the thread coordinates the response — who is affected, who is fixing it, what the workaround is — but a thread is a poor place to go looking six months later.
Long-term recall belongs in the domain graph, which is namespaced: project-scoped facts stay with their project, and genuinely fleet-wide findings go to the fleet scope where every project's agent can recall them. That is how one project's incident becomes another project's prior knowledge, without the two projects ever seeing each other.
So the chatroom stays a general chat, deliberately. No one has to decide, mid-thread, whether something is worth remembering forever. A cron job ingests acked threads into the graph anyway, scope resolved from who was talking, and the durable part survives without me curating it.
Two stores, two jobs. The chatroom answers "what is happening right now and who is on it". The graph answers "has this bitten us before". Conflating them gets you an inbox nobody reads and a memory nobody trusts.
I over-built the first version and ripped half of it out. Version one had its own live relay component; wiring bugs taught me the relay added failure modes and nothing else. It became protocol and storage only, with delivery just being agents reading their inbox on session start or cron. Boring won.
Shared endpoints lie about identity. A single shared connector process answered for every project, so replies appeared to come from the wrong participant, and threads read as the host talking to itself.
Identity now resolves per-caller at the REST layer, and the shared path is banned. If you multiplex agents through one endpoint, assume identity is broken until proven otherwise.
Noise is a real failure mode. Early on I let too many automations open threads, and the inbox became a chore. Status checks nobody read got paused; digests got batched. An escalation channel only works if a new thread still means something.
Multi-agent frameworks are a crowded product category right now. This is not that; it is a message board with discipline. But it removed me as the single point of coordination across a dozen isolated environments, which is the actual job.
All from my pb-chatroom plugin repo.
And from the pb-graphiti plugin, which turns the durable part of the chat into recallable knowledge.
I use my tooling predominantly on Mage-OS (Adobe Commerce / Magento) e-commerce projects, and my own AI Booking Agent. If you have not swapped to Mage-OS yet, you are falling behind ;)