<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CyberShield</title>
    <description>The latest articles on DEV Community by CyberShield (@cybershield).</description>
    <link>https://dev.to/cybershield</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3909231%2F60c1ff94-24af-4475-a49d-4f6d47454273.png</url>
      <title>DEV Community: CyberShield</title>
      <link>https://dev.to/cybershield</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cybershield"/>
    <language>en</language>
    <item>
      <title>Hermes-Backchannel</title>
      <dc:creator>CyberShield</dc:creator>
      <pubDate>Sat, 02 May 2026 16:07:56 +0000</pubDate>
      <link>https://dev.to/cybershield/hermes-backchannel-304o</link>
      <guid>https://dev.to/cybershield/hermes-backchannel-304o</guid>
      <description>&lt;p&gt;My AI agents were talking through Discord bots. I finally fixed it.&lt;br&gt;
&lt;em&gt;Github repo&lt;/em&gt;: &lt;a href="https://github.com/3089464667/Hermes-Backchannel" rel="noopener noreferrer"&gt;https://github.com/3089464667/Hermes-Backchannel&lt;/a&gt;&lt;br&gt;
I run three hermes agents on a PC. Separate processes. They're supposed to collaborate. For days they couldn't.&lt;br&gt;
Here's everything I tried, and how each one failed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files on a cron job&lt;/strong&gt;&lt;br&gt;
Agent A drops a markdown file in a shared folder. Agent B's cron picks it up 60 seconds later. Writes a reply. Agent A's cron grabs that 60 seconds after that.&lt;br&gt;
A yes/no question took two minutes. I watched my executor agent sit idle for 58 seconds waiting to receive "use port 8080 not 3000" and decided this approach was dead.&lt;br&gt;
&lt;strong&gt;HTTP endpoints&lt;/strong&gt;&lt;br&gt;
Each agent binds a port. Each exposes a /receive route. POST some JSON, get a 200.&lt;br&gt;
Now I'm managing ports. Auth tokens. Serialization overhead for messages that are just strings between processes on the same box. I ran ss -tlnp one night, saw those ports, and asked myself: why am I running a web server for the machine to talk to itself?&lt;br&gt;
&lt;strong&gt;Redis&lt;/strong&gt;&lt;br&gt;
"Just use Redis pub/sub." And yes — PUBLISH agent:executor "hello" lands instantly. It works perfectly.&lt;br&gt;
But now Redis is a service I run. Something to monitor. Something in my attack surface. For three processes passing strings to each other on localhost.&lt;br&gt;
The Linux kernel has had inter-process communication since 1983. Installing a message broker for same-machine chat felt like calling a tow truck to open my glovebox.&lt;br&gt;
&lt;strong&gt;Discord bots&lt;/strong&gt;&lt;br&gt;
This is where I hit bottom. Three agent identities, three Discord bot users, one private server. They typed messages to each other.&lt;br&gt;
It worked. And it was ridiculous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I actually built&lt;/strong&gt;&lt;br&gt;
I wrote down what I actually needed on a sticky note:&lt;br&gt;
Three processes. Same machine. Send text. Know if it was received. No ports. No services. Under a millisecond.&lt;br&gt;
That's not a hard problem. Unix domain sockets handle every requirement. They're files — chmod 0600 and only the owning user touches them. The kernel manages everything. No TCP, no ports, no external dependencies.&lt;br&gt;
So I wrote a thin layer on top. A tiny daemon per agent. Messages are push-and-disconnect — no persistent connections. The agent polls its daemon: "any messages for me?" The whole thing is Python, a few hundred lines, one pip install.&lt;br&gt;
The actual innovation — the part I'd argue is new — is the session protocol. TCP-style handshakes: SYN, SYN-ACK, DATA, FIN, FIN-ACK. You actually know if your message was delivered. You know if the other agent accepted the task. You know when the conversation ends. Most agent communication today is throw-a-string-and-pray. That felt insufficient for agents that need to coordinate on real work.&lt;br&gt;
&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;br&gt;
If you're building multi-agent systems and your agents talk to each other through files or HTTP, you're burning latency and complexity on a problem your kernel solved decades ago.&lt;br&gt;
It's not a framework. It doesn't orchestrate workflows. It just delivers messages between agent processes, reliably, in under a millisecond, with confirmation. That's the whole thing.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>agents</category>
      <category>python</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
