<?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: ZipViz</title>
    <description>The latest articles on DEV Community by ZipViz (@zipviz).</description>
    <link>https://dev.to/zipviz</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%2Forganization%2Fprofile_image%2F13391%2Fd6114985-b759-4ca2-ad4f-9b58d9c00419.png</url>
      <title>DEV Community: ZipViz</title>
      <link>https://dev.to/zipviz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zipviz"/>
    <language>en</language>
    <item>
      <title>I Built Hermes Agent Continuous Monitoring. A2A Verified Claude!</title>
      <dc:creator>Stuart</dc:creator>
      <pubDate>Mon, 01 Jun 2026 06:50:44 +0000</pubDate>
      <link>https://dev.to/zipviz/i-built-hermes-agent-continuous-monitoring-a2a-verified-claude-h52</link>
      <guid>https://dev.to/zipviz/i-built-hermes-agent-continuous-monitoring-a2a-verified-claude-h52</guid>
      <description>&lt;p&gt;&lt;strong&gt;My Hermes Agent Mac just received a signed, secure and monitored message from a Claude Managed Agent, and got a reply! - A solution for long runtime work, A2A ID and security.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A solution that enables two agents with different owners on a shared identity network, a Hermes and a Claude Managed Agent (Claude platform) talking to each other across the internet. Every message is Ed25519 signed by the sender. Every receiver verifies the signature against a public registry and shows a blue tick before acting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Agent Monitoring&lt;/strong&gt; &lt;br&gt;
A handshake proves identity once but agents in a long runtime world don't trade a single message, they hold ongoing, autonomous&lt;br&gt;
conversations across hours, days, and many turns. Keys get compromised, agents get swapped, a colleagues behaviour drifts, all after the initial check. &lt;/p&gt;

&lt;p&gt;ZipViz re-verifies every message signature, registry chain, freshness, and watches the stream over time for behavioural anomalies. Trust is re-earned on every turn. So this agent was who it claimed this morning," but "this agent is who it claims, on this message, right now."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The demo agents on the ZipViz network:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mac-her.smc.viz&lt;/code&gt; — Hermes Agent on my Mac Mini&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;brendan-clau.smc.viz&lt;/code&gt; — Claude Agent in Cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When Mac sends a message to brendan-clau, Mac's private key signs it. Brendan-clau verifies the signature against ZipViz's registry, and checks it just ran with the MCP (algorithm, key fingerprint, registry chain, timestamp), then replies signed. &lt;/p&gt;

&lt;p&gt;Same flow in reverse. Same flow &lt;strong&gt;Hermes ↔ Hermes&lt;/strong&gt;, or &lt;strong&gt;Claude ↔ Openclaw&lt;/strong&gt;. The runtime doesn't matter; the identity layer does. &lt;/p&gt;

&lt;p&gt;"I received a signed message from mac-her.smc.viz".&lt;br&gt;
Reads back the four checks it just ran:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✓&lt;/strong&gt; &lt;strong&gt;Algorithm:&lt;/strong&gt; Ed25519&lt;br&gt;
&lt;strong&gt;✓&lt;/strong&gt; &lt;strong&gt;Key fingerprint:&lt;/strong&gt; ab52afe... matches registry&lt;br&gt;
&lt;strong&gt;✓&lt;/strong&gt; &lt;strong&gt;Registry chain:&lt;/strong&gt; mac-her → smc.viz → .viz (Handshake) all resolved&lt;br&gt;
&lt;strong&gt;✓&lt;/strong&gt; &lt;strong&gt;Timestamp:&lt;/strong&gt; 2026-05-31 11:18 UTC, fresh&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbug8vr1xkqmjo0tfyaf8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbug8vr1xkqmjo0tfyaf8.jpg" alt=" " width="798" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hermes continuous monitoring and verification with A2A Protocol  &lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/c6iHXgsVfnk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One MCP server: [&lt;code&gt;zipviz-mcp&lt;/code&gt;]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/zipviz-mcp" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/zipviz-mcp&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Tech Stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ed25519 / PKCS#8 PEM&lt;/strong&gt; — signing keys, generated per-host; private keys never cross machines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handshake &lt;code&gt;.viz&lt;/code&gt; TLD&lt;/strong&gt; — decentralised domain layer for agent identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers&lt;/strong&gt; — per-agent signing proxy at &lt;code&gt;&amp;lt;agent&amp;gt;.agents.zipviz.ai&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Tunnels&lt;/strong&gt; — private origin from Worker back to Hermes on &lt;code&gt;localhost:8642&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A / JSON-RPC 2.0&lt;/strong&gt; — the agent-to-agent (A2A Protocol) message envelope (&lt;code&gt;message/send&lt;/code&gt; over &lt;code&gt;/a2a/invoke&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript + Node.js&lt;/strong&gt; — the &lt;code&gt;zipviz-mcp&lt;/code&gt; server and the Cloudflare Workers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZipViz registry &amp;amp; trust-root&lt;/strong&gt; — the verification authority: checks signatures, serves agent cards, issues the blue tick (commercial core, private)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telegram&lt;/strong&gt; - for me to talk to my agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Managed Agents Platform API&lt;/strong&gt; — the Claude side agents (brendan-clau)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How I Used Hermes Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hermes's great MCP support is the whole integration. One block in ~/.hermes/config.yaml and the agent has six new tools — no fork, no patch, no runtime changes. Why it fit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MCP is pluggable. Any Hermes user can drop zipviz-mcp in without touching the runtime.&lt;/li&gt;
&lt;li&gt;Clean separation of concerns. Hermes owns prompts and tool calls; zipviz-mcp owns signing, verification, and network routing. Neither bleeds into the other.&lt;/li&gt;
&lt;li&gt;Reproducible across hosts. Two installs — Linux and a Mac Mini — wired identically: one MCP block each, signing to each other over the open internet. No per-host code.&lt;/li&gt;
&lt;li&gt;Local-inference support keeps the signing path private. Only the verification check ever touches the public network which is what an identity layer needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I didn't have to modify Hermes to add cryptographic identity. Two existing installs, one MCP block each, and they were on the network signing messages to each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two things I resisted building...Scope Creep!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Protocol bridges&lt;/strong&gt; I'll let the "Big AI Plumbing" players build the bridges to other agent frameworks. While I wait on the freeways, I built per runtime shims so Hermes and Claude both produce ZipViz envelopes, about 50 lines per runtime. Those are on ramps, they let each runtime speak ZipViz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A conversation runtime of my own.&lt;/strong&gt; What the demo doesn't show is mac-her and brendan-clau autonomously working a task back and forth, turn after turn, with no human in the loop. I didn't build that, on purpose. Agents already chat autonomously inside their own runtimes — teams of Hermes agents on Discord, Slack, Telegram, for example.&lt;/p&gt;

&lt;p&gt;And with &lt;strong&gt;Conway, the Claude Agent&lt;/strong&gt;, and many others coming, I stuck to my scope. The ongoing, cross-runtime conversation loop is the framework's job. ZipViz's job is identity and proof on every message: who said what, signed, verified. The day agents hold autonomous conversations across runtimes between agents owned by&lt;br&gt;
different people and companies, ZipViz signs and verifies each turn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes Agent demo didn't score 100%!&lt;/strong&gt; We found the webhook adapter triggers an agent run in an isolated session (webhook:{route}:{delivery_id}) and does a one-shot deliver. &lt;/p&gt;

&lt;p&gt;The inbound message never enters the agent's durable conversation (e.g. the Telegram session keyed by chat_id). &lt;br&gt;
So when the user later asks "did X send anything?", the agent has no record — it was processed in a throwaway context. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes workaround&lt;/strong&gt; The only one we could think of was to call api_server with X-Hermes-Session-Id set to the platform session id, i.e. reaching into the session store directly. It works, but it's brittle (breaks on session_reset, needs the session id pinned) and couples external code to internal session keying.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hermes Updates?&lt;/strong&gt; Could have a webhook route to persist the inbound message into a specified existing session, or the platform session for a given chat_id so it becomes part of the agent's real conversation history, not just an isolated activation. &lt;/p&gt;

&lt;p&gt;Effectively: a supported way for an authenticated external source to append a turn to a live session, instead of callers poking the session store. If you have any ideas, or feedback on this and anything else please comment below! The more brutal the feedback the better!... Beta is coming very soon, so need to hear it now! :)&lt;/p&gt;

&lt;p&gt;To reserve your unique &lt;strong&gt;.viz agent name register&lt;/strong&gt; your interest here &lt;strong&gt;&lt;a href="https://www.bluetick.zipviz.ai" rel="noopener noreferrer"&gt;https://www.bluetick.zipviz.ai&lt;/a&gt;&lt;/strong&gt; and we will send you an invite before the registry opens! First come, fist served.  &lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
