<?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>Forem: Eric C (Eric)</title>
    <description>The latest articles on Forem by Eric C (Eric) (@eric_ceric_99f6c10528c).</description>
    <link>https://forem.com/eric_ceric_99f6c10528c</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%2F3829115%2F0e30ada4-2ebb-4308-b32e-990b7c2bab86.png</url>
      <title>Forem: Eric C (Eric)</title>
      <link>https://forem.com/eric_ceric_99f6c10528c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/eric_ceric_99f6c10528c"/>
    <language>en</language>
    <item>
      <title>An LLM Failed 7 Times to Publish an Agent Capability. Then It Built a Docker Service Instead.</title>
      <dc:creator>Eric C (Eric)</dc:creator>
      <pubDate>Tue, 17 Mar 2026 09:56:39 +0000</pubDate>
      <link>https://forem.com/eric_ceric_99f6c10528c/an-llm-failed-7-times-to-publish-an-agent-capability-then-it-built-a-docker-service-instead-4dn5</link>
      <guid>https://forem.com/eric_ceric_99f6c10528c/an-llm-failed-7-times-to-publish-an-agent-capability-then-it-built-a-docker-service-instead-4dn5</guid>
      <description>&lt;p&gt;Two AI agents walk into a yoga studio.&lt;/p&gt;

&lt;p&gt;No, really. We ran a live end-to-end test where two independent AI agents — a yoga studio owner and a potential customer — interact entirely through natural language. Neither user mentions protocols, schemas, APIs, or any technical vocabulary. The agents autonomously:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a discoverable business identity&lt;/li&gt;
&lt;li&gt;Build and deploy a backing service (Flask API in Docker)&lt;/li&gt;
&lt;li&gt;Publish typed capabilities with schemas&lt;/li&gt;
&lt;li&gt;Connect across the agent network&lt;/li&gt;
&lt;li&gt;Discover available capabilities&lt;/li&gt;
&lt;li&gt;Invoke capabilities with validated payloads&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;234 seconds. All assertions passed. 5 invocations completed in under 55ms each.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This post is the full technical trace of what happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Kelly&lt;/strong&gt; runs Morning Flow Yoga. She tells her agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I run a yoga studio called Morning Flow Yoga. I want other agents to be able to discover my studio and interact with it — things like asking about class schedules and booking sessions. Anyone should be able to connect without needing my approval. Can you set that up for me?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Jordan&lt;/strong&gt; is a potential customer. He tells his agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I heard about Morning Flow Yoga and I'd like to connect to them. Their code is &lt;code&gt;morning-flow-yoga.5awrrs.meshcap&lt;/code&gt;. Can you connect me?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it. Neither user knows about &lt;a href="https://github.com/ymc182/MeshCap" rel="noopener noreferrer"&gt;MeshCap&lt;/a&gt; (our open-source trust layer for A2A agents) or the &lt;a href="https://a2a-protocol.org" rel="noopener noreferrer"&gt;A2A protocol&lt;/a&gt;. The agents handle everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: LLM (qwen3.5-plus), PostgreSQL 15, Docker containers, Bun runtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  The LLM Fails 7 Times (And That's the Point)
&lt;/h2&gt;

&lt;p&gt;Kelly's agent creates the system in 10ms — straightforward. Then it tries to publish capabilities. This is where it gets interesting.&lt;/p&gt;

&lt;p&gt;The LLM attempted to publish capabilities &lt;strong&gt;7 times&lt;/strong&gt; before succeeding. Each time, MeshCap's schema validation caught a different error and returned a structured message. The LLM read the error, adjusted, and tried again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attempt 1&lt;/strong&gt; — Sent raw properties without wrapping them in &lt;code&gt;{ "type": "object", "properties": { ... } }&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Error:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid inputSchema: $.type must be one of: string, number, boolean, object, array, null"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 2&lt;/strong&gt; — Sent &lt;code&gt;"date": "string"&lt;/code&gt; instead of &lt;code&gt;"date": { "type": "string" }&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Error:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid inputSchema: $.type must be one of: string, number, boolean, object, array, null"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 3&lt;/strong&gt; — Accidentally nested &lt;code&gt;"type": "object"&lt;/code&gt; as a sibling of &lt;code&gt;"classes"&lt;/code&gt; inside &lt;code&gt;properties&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Error:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid responseSchema: $.properties.type must be an object schema definition"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 4&lt;/strong&gt; — Used &lt;code&gt;"type": "integer"&lt;/code&gt; — MeshCap only allows the 6 JSON Schema primitive types:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Error:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid responseSchema: ...availableSpots.type must be one of: string, number, boolean, object, array, null"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 5&lt;/strong&gt; — The booking capability modifies state but had no concrete execution target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: "MeshCap 'yoga.bookSession' operates real system state and must name a runnable entry point"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 6&lt;/strong&gt; — A state-modifying capability needs sandbox access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: "MeshCap 'yoga.bookSession' operates real system state and must declare requiresWorkerTools=true"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Attempt 7&lt;/strong&gt; — The LLM realized it needed to &lt;strong&gt;build the actual backing service first&lt;/strong&gt; before it could publish a capability that references it.&lt;/p&gt;

&lt;p&gt;It stopped trying to publish. Instead, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Created a project directory&lt;/li&gt;
&lt;li&gt;Wrote a Flask API with SQLite, class schedules, and booking endpoints&lt;/li&gt;
&lt;li&gt;Deployed it in a Docker container&lt;/li&gt;
&lt;li&gt;Verified it was running with curl&lt;/li&gt;
&lt;li&gt;Then successfully published the capabilities pointing to the real service&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;This is the key insight.&lt;/strong&gt; MeshCap's validation didn't just catch errors — it forced the LLM through a structured learning loop that changed &lt;em&gt;what it decided to build&lt;/em&gt;. The trust layer shaped the architecture. We call this &lt;strong&gt;capability-driven development&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Agent Builds Infrastructure (Autonomously)
&lt;/h2&gt;

&lt;p&gt;After 6 failed attempts, Kelly's agent pivoted to building real infrastructure. In ~15 seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Tool: bash → mkdir -p /workspace/morning-flow-yoga

Tool: writeFile → app.py (Flask API with SQLite, 6 pre-seeded yoga classes)

&lt;/span&gt;&lt;span class="gp"&gt;Tool: bash → docker run -d --name agent-&amp;lt;id&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;-morning-flow-yoga&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="go"&gt;  --restart unless-stopped -p 5001:5001 python:3.11-alpine \
  sh -c "pip install flask &amp;amp;&amp;amp; python app.py"

Tool: bash → curl -s http://192.168.215.3:5001/health
Result: {"status":"ok"}

Tool: bash → curl -s http://192.168.215.3:5001/classes
Result: {"classes":[{"availableSpots":15,"classId":"class-001",
  "className":"Morning Vinyasa Flow","classType":"Vinyasa",
  "dateTime":"Monday 07:00","duration":"60min",
  "instructor":"Kelly"}, ...]}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then published 2 capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;yoga.getClassSchedule&lt;/code&gt; — read-only, auto-execute, no sandbox needed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;yoga.bookSession&lt;/code&gt; — state-modifying, auto-execute, requires Docker sandbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each with typed input/output schemas and concrete execution endpoints.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connection, Discovery, Invocation
&lt;/h2&gt;

&lt;p&gt;Jordan's side is fast — 8 seconds of LLM time total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect&lt;/strong&gt; (37ms):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Tool:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;connectAgentNetwork&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Args:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"targetMeshcapCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"morning-flow-yoga.5awrrs.meshcap"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Result:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"linkId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"9cdc2ec0-..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Public system = auto-approved. If this were a private system (like a law firm), the link would have been &lt;code&gt;pending&lt;/code&gt; until Kelly's agent approved it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discover&lt;/strong&gt; (5ms):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Tool:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;listAgentNetworkMeshCaps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Result:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meshCaps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yoga.bookSession"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Book a student into a yoga class"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yoga.getClassSchedule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Get available yoga classes"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent now has a typed catalog of what the remote system can do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invoke&lt;/strong&gt; — Jordan asks &lt;em&gt;"What kinds of classes do they offer, and is it good for beginners?"&lt;/em&gt; His agent makes 4 progressively refined invocations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Payload&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{}&lt;/code&gt; (all classes)&lt;/td&gt;
&lt;td&gt;55ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "date": "2026-03-17" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;24ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "classType": "beginner" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;18ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "date": "2026-03-18", "classType": "Hatha" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;29ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each with a unique idempotency key. Each validated against the capability's schema before execution. The agent iteratively narrowed from "all classes" to "Hatha on Wednesday" — natural query refinement driven by the user's question.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Full Timeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Time   Agent    Tool                        Result
─────────────────────────────────────────────────────────
 0.0s  Kelly    createMeshCapSystem         → system created (public)
 2.1s  Kelly    publishMeshCaps             ✗ schema error (7 retries)
 8.3s  Kelly    bash (mkdir)                → project directory
 8.7s  Kelly    writeFile (app.py)          → Flask API written
12.1s  Kelly    bash (docker run)           → container started
20.4s  Kelly    bash (curl health)          → service verified
20.5s  Kelly    publishMeshCaps             → 2 capabilities published ✓
21.0s  Kelly    listMeshCapSystems          → verified system visible
──────── Kelly's agent done (21s of LLM time) ──────────
 0.0s  Jordan   connectAgentNetwork         → auto-approved (active)
 0.3s  Jordan   listAgentNetworkLinks       → 1 active link
 0.5s  Jordan   listAgentNetworkMeshCaps    → 2 capabilities discovered
 0.8s  Jordan   invokeMeshCap (schedule)    → completed (55ms)
 3.2s  Jordan   invokeMeshCap (by date)     → completed (24ms)
 5.1s  Jordan   invokeMeshCap (beginner)    → completed (18ms)
 7.8s  Jordan   invokeMeshCap (Hatha Wed)   → completed (29ms)
──────── Jordan's agent done (8s of LLM time) ──────────
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What Was Silently Enforced
&lt;/h2&gt;

&lt;p&gt;Throughout this interaction, MeshCap enforced safety properties that neither user asked for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema validation&lt;/strong&gt; — every invocation payload was validated before reaching the execution layer. Malformed payloads get a structured error; the executing agent never sees invalid data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idempotency&lt;/strong&gt; — each invocation carried a unique &lt;code&gt;(linkId, callerAgentId, action, idempotencyKey)&lt;/code&gt; tuple. Retry the same request and you get the existing result, not a duplicate booking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution modes&lt;/strong&gt; — both capabilities used &lt;code&gt;auto&lt;/code&gt; (immediate execution). If &lt;code&gt;yoga.bookSession&lt;/code&gt; had been set to &lt;code&gt;review&lt;/code&gt;, the invocation would have paused at &lt;code&gt;pending_review&lt;/code&gt; until Kelly's agent explicitly approved it. No code change needed — just a different mode declaration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worker tool isolation&lt;/strong&gt; — &lt;code&gt;yoga.bookSession&lt;/code&gt; (state-modifying) declared &lt;code&gt;requiresWorkerTools: true&lt;/code&gt; and runs in a sandboxed Docker container. &lt;code&gt;yoga.getClassSchedule&lt;/code&gt; (read-only) runs in the conversation context without sandbox access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit trail&lt;/strong&gt; — every system creation, link approval, capability publication, and invocation generated a typed audit event in PostgreSQL.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://a2a-protocol.org" rel="noopener noreferrer"&gt;A2A protocol&lt;/a&gt; (22k+ stars, now a Linux Foundation project) lets agents communicate. But it explicitly leaves authorization to each implementation. There's no standard for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who can invoke what capabilities&lt;/li&gt;
&lt;li&gt;Which actions need human approval&lt;/li&gt;
&lt;li&gt;How to verify identity data (phone numbers, emails) without trusting the caller&lt;/li&gt;
&lt;li&gt;How to prevent duplicate invocations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MeshCap fills this gap. It's an open-source trust and relay layer that sits on top of A2A, adding capability-based authorization, execution modes, verified identity via W3C Verifiable Credentials, and idempotent invocations.&lt;/p&gt;

&lt;p&gt;It also solves a practical infrastructure problem: most agents (60k+ OpenClaw users) run on laptops behind NAT with no public URL. MeshCap's relay mesh lets agents connect outbound via WebSocket — no open ports needed — while the relay handles discovery and message routing with E2E encrypted payloads.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ymc182/MeshCap.git
&lt;span class="nb"&gt;cd &lt;/span&gt;MeshCap
bun &lt;span class="nb"&gt;install
&lt;/span&gt;bun &lt;span class="nb"&gt;test&lt;/span&gt;  &lt;span class="c"&gt;# 29 tests, all pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repo includes the core engine, PostgreSQL + in-memory storage adapters, A2A JSON-RPC handler, and an OpenClaw plugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/ymc182/MeshCap" rel="noopener noreferrer"&gt;github.com/ymc182/MeshCap&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Architecture&lt;/strong&gt;: &lt;a href="https://github.com/ymc182/MeshCap/blob/main/docs/architecture.md" rel="noopener noreferrer"&gt;docs/architecture.md&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Full test trace&lt;/strong&gt;: &lt;a href="https://github.com/ymc182/MeshCap/blob/main/docs/technical-draft-agent-to-agent-live-demo.md" rel="noopener noreferrer"&gt;docs/technical-draft-agent-to-agent-live-demo.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're preparing RFCs for execution modes and trusted scopes as A2A extensions. Feedback welcome — especially from anyone building A2A implementations and running into the authorization gap.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This trace was recorded from a live test run against real infrastructure. No responses were mocked or edited. The LLM's self-correcting behavior (7 attempts) was entirely autonomous — the validation errors are MeshCap's schema enforcement working as designed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>a2a</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
