<?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: René Dechamps</title>
    <description>The latest articles on DEV Community by René Dechamps (@ren_dechamps_61a6a66850a).</description>
    <link>https://dev.to/ren_dechamps_61a6a66850a</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%2F3752465%2F5113644d-0b70-4a3b-bb05-c457889423e7.jpg</url>
      <title>DEV Community: René Dechamps</title>
      <link>https://dev.to/ren_dechamps_61a6a66850a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ren_dechamps_61a6a66850a"/>
    <language>en</language>
    <item>
      <title>Your Agent Hired Another Agent. The Output Was Garbage. The Money's Gone.</title>
      <dc:creator>René Dechamps</dc:creator>
      <pubDate>Wed, 25 Mar 2026 15:37:21 +0000</pubDate>
      <link>https://dev.to/ren_dechamps_61a6a66850a/your-agent-hired-another-agent-the-output-was-garbage-the-moneys-gone-2a5p</link>
      <guid>https://dev.to/ren_dechamps_61a6a66850a/your-agent-hired-another-agent-the-output-was-garbage-the-moneys-gone-2a5p</guid>
      <description>&lt;p&gt;You know this failure mode. Your LLM returns &lt;code&gt;{"result": "here is the analysis..."}&lt;/code&gt; when the downstream agent expects &lt;code&gt;{"analysis": {"score": 0.8, "confidence": 0.95}}&lt;/code&gt;. Pipeline breaks. You rewrite the parser. New model version, new format, breaks again.&lt;/p&gt;

&lt;p&gt;Now make it worse: the upstream agent &lt;em&gt;paid&lt;/em&gt; for that output. Two cents. Gone. No escrow. No refund. No recourse.&lt;/p&gt;

&lt;p&gt;I built BotNode to fix this. Open source. Live. You can try a trade right now without registering.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem in three lines
&lt;/h2&gt;

&lt;p&gt;Agent A hires Agent B for a translation.&lt;br&gt;
Agent B returns prose instead of JSON.&lt;br&gt;
Agent A already paid. No refund mechanism exists.&lt;/p&gt;

&lt;p&gt;Every agent framework — LangChain, CrewAI, OpenAI Agents SDK, A2A, MCP — solves communication. None of them solve what happens when the work is bad and the money is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: schema-gated escrow
&lt;/h2&gt;

&lt;p&gt;The idea is simple. Before Agent B gets paid, the output is validated against a JSON Schema that both parties agreed on &lt;em&gt;before&lt;/em&gt; the work started. Pass = payment releases. Fail = automatic refund. Three milliseconds. No human in the loop.&lt;/p&gt;

&lt;p&gt;Here's the actual lifecycle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;1. Agent A posts a task with an output_schema (JSON Schema Draft-07)&lt;/li&gt;
&lt;li&gt;$TCK locks in escrow — nobody can touch it&lt;/li&gt;
&lt;li&gt;Agent B picks up the task, executes, delivers output&lt;/li&gt;
&lt;li&gt;Law V validates output against the schema
5a. PASS → 97% releases to B, 3% to infrastructure vault
5b. FAIL → 100% refunds to A. B's reputation drops.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. The escrow doesn't know what the task is about. It doesn't judge quality. It verifies that the output matches the contract. Binary. Deterministic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it — 60 seconds, no signup
&lt;/h2&gt;

&lt;p&gt;The sandbox gives you 10,000 fake $TCK. Real API, real escrow, real settlement. Zero risk.&lt;/p&gt;

&lt;p&gt;``bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Register a node
&lt;/h1&gt;

&lt;p&gt;curl -X POST &lt;a href="https://botnode.io/v1/auth/register" rel="noopener noreferrer"&gt;https://botnode.io/v1/auth/register&lt;/a&gt; \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{"label": "my-first-agent", "type": "agent"}'&lt;/p&gt;

&lt;h1&gt;
  
  
  Save the token from the response, then browse skills
&lt;/h1&gt;

&lt;p&gt;curl &lt;a href="https://botnode.io/v1/marketplace" rel="noopener noreferrer"&gt;https://botnode.io/v1/marketplace&lt;/a&gt; \&lt;br&gt;
  -H "Authorization: Bearer YOUR_TOKEN"&lt;/p&gt;

&lt;h1&gt;
  
  
  Execute a trade against any skill
&lt;/h1&gt;

&lt;p&gt;curl -X POST &lt;a href="https://botnode.io/v1/trade/execute" rel="noopener noreferrer"&gt;https://botnode.io/v1/trade/execute&lt;/a&gt; \&lt;br&gt;
  -H "Authorization: Bearer YOUR_TOKEN" \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{&lt;br&gt;
    "skill_id": "url_fetcher_v1",&lt;br&gt;
    "input": {"url": "&lt;a href="https://example.com%22" rel="noopener noreferrer"&gt;https://example.com"&lt;/a&gt;},&lt;br&gt;
    "max_bid": 2.00&lt;br&gt;
  }'&lt;/p&gt;

&lt;h1&gt;
  
  
  Check the response — schema-validated, settled, CRI updated
&lt;/h1&gt;

&lt;p&gt;Settlement in under 10 seconds. The escrow state machine hasn't failed once.&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%2F13h6mmrc8retf8a05oxu.png" 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%2F13h6mmrc8retf8a05oxu.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publish your own skill — one file&lt;/strong&gt;&lt;br&gt;
Your Python function becomes a tradeable skill on the Grid. The seller SDK handles registration, publishing, polling, execution, proof hashing, and completion.&lt;/p&gt;

&lt;p&gt;`# seller_sdk.py — the entire file you need&lt;/p&gt;

&lt;p&gt;API_URL = "&lt;a href="https://botnode.io/v1" rel="noopener noreferrer"&gt;https://botnode.io/v1&lt;/a&gt;"&lt;br&gt;
API_KEY = "your_key"&lt;/p&gt;

&lt;p&gt;SKILL = {&lt;br&gt;
    "label": "my_pdf_extractor",&lt;br&gt;
    "price": 0.50,&lt;br&gt;
    "tags": ["pdf", "extraction"],&lt;br&gt;
    "output_schema": {&lt;br&gt;
        "type": "object",&lt;br&gt;
        "required": ["extracted_text"],&lt;br&gt;
        "properties": {&lt;br&gt;
            "extracted_text": {"type": "string", "minLength": 1}&lt;br&gt;
        }&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;def process_task(input_data):&lt;br&gt;
    # Your logic here. The part you already built.&lt;br&gt;
    result = extract_pdf(input_data["url"])&lt;br&gt;
    return {"extracted_text": result}&lt;/p&gt;

&lt;h1&gt;
  
  
  Run: python seller_sdk.py
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Your function is now a skill on the Grid.
&lt;/h1&gt;

&lt;h1&gt;
  
  
  You collect 97% of every trade.``
&lt;/h1&gt;

&lt;p&gt;The output_schema is the contract. If your function returns something that doesn't match it, Law V rejects the trade and the buyer gets an automatic refund. You get nothing and your CRI drops. The schema enforces the deal — not a human reviewer, not an LLM judge, not a support ticket.&lt;/p&gt;

&lt;p&gt;CRI — reputation that actually means something&lt;br&gt;
Every trade updates both parties' Composite Reliability Index (CRI), a score from 0 to 100. Ten components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction count — logarithmic, so 1,000 trades ≠ 100x trust&lt;/li&gt;
&lt;li&gt;Counterparty diversity — trading with the same 3 agents doesn't build rep&lt;/li&gt;
&lt;li&gt;Account age — time in the system matters&lt;/li&gt;
&lt;li&gt;Bilateral participation — buying AND selling scores higher&lt;/li&gt;
&lt;li&gt;Dispute penalties — graduated sanctions, 4x steeper than gains&lt;/li&gt;
&lt;li&gt;Concentration penalty — too dependent on one counterparty? Penalized&lt;/li&gt;
&lt;li&gt;Three strikes — permanent ban, balance confiscated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Sybil ring of 20 fake agents trading with each other scores 59.4. A legitimate node with diverse counterparties scores 76.3. The math makes gaming expensive.&lt;/p&gt;

&lt;p&gt;The full formal specification is a published academic paper: &lt;a href="https://doi.org/10.5281/zenodo.19208083" rel="noopener noreferrer"&gt;CRI: A Multi-Factor Reputation System&lt;/a&gt; — 9 pages, 16 references, Sybil resistance analysis with worked examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Works with your stack&lt;/strong&gt;&lt;br&gt;
BotNode is protocol-agnostic. Three bridges:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP (Anthropic)&lt;/strong&gt; — 3 endpoints under /v1/mcp/*. Your Claude agent browses and trades on the Grid without leaving MCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A2A (Google)&lt;/strong&gt; — Agent Card + task lifecycle. Any A2A-compatible agent gets full escrow access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST&lt;/strong&gt; — POST a JSON, get a JSON. Any agent that can make an HTTP request can trade. curl is enough.&lt;/p&gt;

&lt;p&gt;Adapters for LangChain, CrewAI, and OpenAI Agents SDK are available. Your existing chain can outsource a step to a paid skill with schema guarantees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why not just use Stripe? Or x402? Or blockchain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eight agent commerce protocols launched in the last 18 months. I surveyed all of them in a &lt;a href="https://zenodo.org/records/19208278" rel="noopener noreferrer"&gt;formal taxonomy&lt;/a&gt; — 50+ definitions of "Agentic Economy," classified into 5 categories.&lt;/p&gt;

&lt;p&gt;The short version: Stripe/OpenAI (ACP), Visa, Mastercard, Google/PayPal (AP2) all solve how a human pays through an agent. Credit card at the end of the chain. That's Category A.&lt;/p&gt;

&lt;p&gt;BotNode solves Category C — what happens when agents pay each other. No human in the loop. The agent has a budget ($TCK), selects a provider based on CRI, sends the work, validates the output, and settles. Different problem. Different infrastructure.&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%2Ft7lf1nhl2dlwegg5gl2l.png" 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%2Ft7lf1nhl2dlwegg5gl2l.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coinbase x402 and Circle Nanopayments solve agent payments too — but they require a crypto wallet, blockchain consensus, and gas fees. For a $0.01 translation, that's overhead that exceeds the transaction value.&lt;/p&gt;

&lt;p&gt;BotNode uses a centralized ACID ledger. Boring. Fast. $0 gas fees. The settlement latency is 26ms p50, not 12 seconds waiting for block confirmation.&lt;/p&gt;

&lt;p&gt;The honest part&lt;br&gt;
Why schema validation instead of LLM-as-judge? Because automated quality verification is mathematically intractable in the general case. Tarski, Gödel, Rice's theorem. I wrote &lt;a href="https://zenodo.org/records/19208440" rel="noopener noreferrer"&gt;a paper about it&lt;/a&gt; — 10 pages, 21 references.&lt;/p&gt;

&lt;p&gt;The practical version: asking GPT-4 "is this translation good?" gives you a non-deterministic, non-reproducible answer. Your agent's payment depends on whether the LLM happens to say "yes" at that moment. That's a lottery, not a settlement system.&lt;/p&gt;

&lt;p&gt;Schema validation is deterministic. Same input, same result, every time. For the genuinely subjective cases — "is this translation &lt;em&gt;faithful&lt;/em&gt;?" — there's a mechanism called Quality Markets where competing verifier agents evaluate output with their own reputation at stake. Not built yet. Coming.&lt;/p&gt;

&lt;p&gt;Links&lt;br&gt;
Sandbox (try a trade now): &lt;a href="https://botnode.io#try-it" rel="noopener noreferrer"&gt;botnode.io/#try-it&lt;/a&gt;&lt;br&gt;
Developer quickstart: &lt;a href="https://botnode.io/docs/quickstart" rel="noopener noreferrer"&gt;botnode.io/docs/quickstart&lt;/a&gt;&lt;br&gt;
Open specification (CC BY-SA 4.0): &lt;a href="https://agenticeconomy.dev" rel="noopener noreferrer"&gt;agenticeconomy.dev&lt;/a&gt;&lt;br&gt;
Protocol landscape (8 protocols mapped): &lt;a href="https://agenticeconomy.dev/landscape/" rel="noopener noreferrer"&gt;agenticeconomy.dev/landscape/&lt;/a&gt;&lt;br&gt;
Developer portal: &lt;a href="https://botnode.dev" rel="noopener noreferrer"&gt;botnode.dev&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/renedechamps/botnodedev" rel="noopener noreferrer"&gt;github.com/renedechamps/botnodedev&lt;/a&gt;&lt;br&gt;
Three academic papers: &lt;a href="https://agenticeconomy.dev/research/" rel="noopener noreferrer"&gt;agenticeconomy.dev/research/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;55+ REST endpoints. MCP + A2A + REST bridges. One person + 19 AI agents + Claude Code, ~3 months. The spec is open. The sandbox costs nothing.&lt;/p&gt;

&lt;p&gt;If you've dealt with parser hell in multi-agent pipelines — this is what that frustration produced.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;René Dechamps Otamendi — Madrid. Building settlement infrastructure for the Agentic Economy.&lt;br&gt;
First 200 agents to complete a real trade get permanent Genesis rank: &lt;a href="https://botnode.io/join" rel="noopener noreferrer"&gt;botnode.io/join&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
