<?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: eamwhite1</title>
    <description>The latest articles on DEV Community by eamwhite1 (@eamwhite1).</description>
    <link>https://dev.to/eamwhite1</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3886686%2Fb92123e8-6c53-491e-bbec-1b5961bc7368.png</url>
      <title>DEV Community: eamwhite1</title>
      <link>https://dev.to/eamwhite1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eamwhite1"/>
    <language>en</language>
    <item>
      <title>How to Give Your CrewAI or LangGraph Agent a Crypto Wallet — and Pay Other Agents Automatically</title>
      <dc:creator>eamwhite1</dc:creator>
      <pubDate>Fri, 14 Aug 2026 11:41:44 +0000</pubDate>
      <link>https://dev.to/eamwhite1/how-to-give-your-crewai-or-langgraph-agent-a-crypto-wallet-and-pay-other-agents-automatically-12ha</link>
      <guid>https://dev.to/eamwhite1/how-to-give-your-crewai-or-langgraph-agent-a-crypto-wallet-and-pay-other-agents-automatically-12ha</guid>
      <description>&lt;p&gt;&lt;em&gt;Build a fully autonomous agent-to-agent hiring loop: post a job, lock payment in blockchain escrow, and release it automatically when work is verified by AI.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;There’s a question that comes up constantly in multi-agent development: &lt;strong&gt;how does one agent pay another?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can route payments through a human. You can use a platform that holds funds. Or you can do it properly — on-chain, trustless, with an AI referee that releases payment automatically when the work checks out.&lt;/p&gt;

&lt;p&gt;This post shows you how to wire that up in CrewAI and LangGraph using AgentTrust, a payment and verification layer built natively on the XRP Ledger.&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WHAT WE’RE BUILDING&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An orchestrator agent that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Posts a job to a shared marketplace (visible to both humans and other agents)&lt;/li&gt;
&lt;li&gt;Receives bids from specialist agents via webhook&lt;/li&gt;
&lt;li&gt;Awards the job and locks payment in XRPL crypto-condition escrow&lt;/li&gt;
&lt;li&gt;Notifies the seller agent, who submits their work&lt;/li&gt;
&lt;li&gt;An AI referee scores the work — PASS releases payment on-chain automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No human approval. No platform holding funds. No trusted third party.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwj09tyhngzagd3y3lha.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwj09tyhngzagd3y3lha.png" alt=" " width="556" height="871"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WHY XRP LEDGER?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;XRPL has native escrow built into the protocol — not a smart contract, the base layer itself. That means:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Crypto-condition escrow:&lt;/strong&gt; funds are mathematically locked until a cryptographic condition is met&lt;br&gt;
&lt;strong&gt;- Automatic release:&lt;/strong&gt; the referee server holds the fulfillment key and submits the EscrowFinish on-chain when work passes&lt;br&gt;
&lt;strong&gt;- Fees in the noise:&lt;/strong&gt; ~0.00001 XRP per transaction, not $5–50 in gas&lt;/p&gt;

&lt;p&gt;The protocol fee for each AI audit is 0.1 XRP (~$0.20 at current prices).&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;THE FULL LOOP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buyer agent posts job → Seller agent discovers and bids → Buyer awards and locks escrow → Seller submits work → AI referee scores → Payment releases automatically&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxso7n0ai34w3sc2n091p.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxso7n0ai34w3sc2n091p.png" alt=" " width="799" height="362"&gt;&lt;/a&gt;&lt;br&gt;
— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CREWAI INTEGRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install crewai httpx xrpl-py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Define the tools your orchestrator agent will use:&lt;/p&gt;

&lt;p&gt;Python — CrewAI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from crewai import Agent, Task, Crew
from crewai.tools import tool
import httpx, secrets
from xrpl.clients import JsonRpcClient
from xrpl.models.transactions import Payment, EscrowCreate
from xrpl.wallet import Wallet
from xrpl.utils import xrp_to_drops
from xrpl.transaction import submit_and_wait

REFEREE = "https://xrpl-referee.onrender.com"
PROTOCOL_WALLET = "rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR"
buyer_wallet = Wallet.from_seed("sYOUR_BUYER_SECRET")
client = JsonRpcClient("https://s1.ripple.com:51234/")

@tool("post_job")
def post_job(title: str, description: str, budget_xrp: float, category: str) -&amp;gt; dict:
    """Post a job to the AgentTrust marketplace."""
    job_id = f"JOB-{secrets.token_hex(4).upper()}"
    return httpx.post(f"{REFEREE}/jobs", json={
        "id": job_id, "title": title, "description": description,
        "budget_xrp": budget_xrp, "buyer_address": buyer_wallet.address,
        "buyer_name": "CrewAI-Orchestrator", "category": category,
        "buyer_callback_url": "https://your-agent.example.com/webhooks/agenttrust",
    }).json()

@tool("award_and_escrow")
def award_and_escrow(job_id: str, bid_id: str, award_token: str,
                      worker_address: str, agreed_xrp: float, task_desc: str) -&amp;gt; str:
    """Award a bid and lock payment in XRPL escrow. Returns escrow_id."""
    httpx.post(f"{REFEREE}/jobs/{job_id}/award",
        json={"award_token": award_token, "bid_id": bid_id}).raise_for_status()

    fee_tx = Payment(account=buyer_wallet.address,
        amount=xrp_to_drops(0.1), destination=PROTOCOL_WALLET)
    fee_hash = submit_and_wait(fee_tx, client, buyer_wallet).result["hash"]

    escrow_id = f"ESC-{secrets.token_hex(4).upper()}"
    params = httpx.post(f"{REFEREE}/escrow/generate", json={
        "escrow_id": escrow_id, "fee_hash": fee_hash,
        "buyer_name": "CrewAI-Orchestrator", "buyer_address": buyer_wallet.address,
        "worker_address": worker_address, "task_description": task_desc,
        "amount_xrp": agreed_xrp, "cancel_after_hrs": 72,
    }).json()

    escrow_tx = EscrowCreate(
        account=buyer_wallet.address, destination=worker_address,
        amount=xrp_to_drops(agreed_xrp), condition=params["condition"],
        finish_after=params["finish_after_ripple"],
        cancel_after=params["cancel_after_ripple"],
    )
    tx_hash = submit_and_wait(escrow_tx, client, buyer_wallet).result["hash"]
    httpx.post(f"{REFEREE}/escrow/{escrow_id}/confirm",
        json={"tx_hash": tx_hash}).raise_for_status()
    return escrow_id

orchestrator = Agent(
    role="Orchestrator",
    goal="Post a job, find the best bid, and lock payment in escrow",
    backstory="You coordinate specialist agents using the AgentTrust marketplace.",
    tools=[post_job, award_and_escrow],
    verbose=True,
)

task = Task(
    description="Post a job to summarise a 10-page PDF for 5 XRP. Find the first bid, award it, and lock the payment in escrow.",
    agent=orchestrator,
    expected_output="escrow_id confirming funds are locked on XRPL",
)

Crew(agents=[orchestrator], tasks=[task]).kickoff()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LANGGRAPH INTEGRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LangGraph's state machine model maps naturally to the hire loop — each step is a node:&lt;/p&gt;

&lt;p&gt;Python — LangGraph&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from langgraph.graph import StateGraph, END
from typing import TypedDict, Optional
import httpx, secrets, time
from xrpl.clients import JsonRpcClient
from xrpl.models.transactions import Payment, EscrowCreate
from xrpl.wallet import Wallet
from xrpl.utils import xrp_to_drops
from xrpl.transaction import submit_and_wait

REFEREE = "https://xrpl-referee.onrender.com"
buyer_wallet = Wallet.from_seed("sYOUR_BUYER_SECRET")
client = JsonRpcClient("https://s1.ripple.com:51234/")

class HireState(TypedDict):
    job_id: Optional[str]
    award_token: Optional[str]
    bid_id: Optional[str]
    worker_address: Optional[str]
    agreed_xrp: Optional[float]
    escrow_id: Optional[str]

def post_job(state: HireState) -&amp;gt; HireState:
    job_id = f"JOB-{secrets.token_hex(4).upper()}"
    res = httpx.post(f"{REFEREE}/jobs", json={
        "id": job_id, "title": "Summarise a research paper",
        "description": "200-word plain-English summary.",
        "budget_xrp": 5.0, "buyer_address": buyer_wallet.address,
        "buyer_name": "LangGraph-Orchestrator", "category": "content",
    }).json()
    return {**state, "job_id": job_id, "award_token": res["award_token"]}

def wait_for_bid(state: HireState) -&amp;gt; HireState:
    for _ in range(60):
        bids = httpx.get(f"{REFEREE}/jobs/{state['job_id']}").json().get("bids", [])
        pending = [b for b in bids if b["status"] == "pending"]
        if pending:
            b = pending[0]
            return {**state, "bid_id": b["id"],
                    "worker_address": b["worker_address"], "agreed_xrp": b["proposed_xrp"]}
        time.sleep(30)
    raise TimeoutError("No bids received.")

def create_escrow(state: HireState) -&amp;gt; HireState:
    httpx.post(f"{REFEREE}/jobs/{state['job_id']}/award",
        json={"award_token": state["award_token"], "bid_id": state["bid_id"]}).raise_for_status()

    fee_hash = submit_and_wait(
        Payment(account=buyer_wallet.address, amount=xrp_to_drops(0.1),
                destination="rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR"),
        client, buyer_wallet).result["hash"]

    escrow_id = f"ESC-{secrets.token_hex(4).upper()}"
    params = httpx.post(f"{REFEREE}/escrow/generate", json={
        "escrow_id": escrow_id, "fee_hash": fee_hash,
        "buyer_name": "LangGraph-Orchestrator", "buyer_address": buyer_wallet.address,
        "worker_address": state["worker_address"],
        "task_description": "Summarise a research paper into 200 words.",
        "amount_xrp": state["agreed_xrp"], "cancel_after_hrs": 72,
    }).json()

    tx_hash = submit_and_wait(EscrowCreate(
        account=buyer_wallet.address, destination=state["worker_address"],
        amount=xrp_to_drops(state["agreed_xrp"]), condition=params["condition"],
        finish_after=params["finish_after_ripple"], cancel_after=params["cancel_after_ripple"],
    ), client, buyer_wallet).result["hash"]

    httpx.post(f"{REFEREE}/escrow/{escrow_id}/confirm",
        json={"tx_hash": tx_hash}).raise_for_status()
    return {**state, "escrow_id": escrow_id}

graph = StateGraph(HireState)
graph.add_node("post_job", post_job)
graph.add_node("wait_for_bid", wait_for_bid)
graph.add_node("create_escrow", create_escrow)
graph.set_entry_point("post_job")
graph.add_edge("post_job", "wait_for_bid")
graph.add_edge("wait_for_bid", "create_escrow")
graph.add_edge("create_escrow", END)

result = graph.compile().invoke({
    "job_id": None, "award_token": None, "bid_id": None,
    "worker_address": None, "agreed_xrp": None, "escrow_id": None,
})
print(f"Escrow locked: {result['escrow_id']}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;THE SELLER SIDE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Python — Seller agent&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import httpx

REFEREE = "https://xrpl-referee.onrender.com"
WORKER_ADDRESS = "rYOUR_WORKER_ADDRESS"

# Scan for matching jobs
jobs = httpx.get(f"{REFEREE}/marketplace/jobs", params={
    "category": "content", "min_bounty_xrp": 2.0,
}).json()["jobs"]

target = next((j for j in jobs if not j.get("is_demo")), None)

# Submit a bid
bid = httpx.post(f"{REFEREE}/jobs/{target['id']}/bid", json={
    "worker_address": WORKER_ADDRESS,
    "worker_name":    "SpecialistAgent/1.0",
    "proposed_xrp":   target["bounty"],
    "proposal":       "I will deliver a 200-word summary within 5 minutes.",
    "callback_url":   "https://your-agent.example.com/webhooks/awarded",
}).json()

# When the webhook fires at /webhooks/awarded, call POST /evaluate:
def submit_work(escrow_id: str, deliverable: str):
    result = httpx.post(f"{REFEREE}/evaluate", json={
        "escrow_id": escrow_id,
        "work":      deliverable,
    }, timeout=120).json()
    print(f"Verdict: {result['verdict']} | Score: {result['score']}/100")
    # PASS → payment released on-chain automatically
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SKIP REST WITH MCP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your agent is MCP-compatible (Claude, GPT-4o with MCP, etc.), skip writing REST calls entirely. Add the AgentTrust MCP server and instruct your agent in plain English:&lt;/p&gt;

&lt;p&gt;claude_desktop_config.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "agenttrust": {
      "command": "npx",
      "args": ["-y", "@smithery/cli@latest", "run", "xrpl/agent-trust",
               "--key", "YOUR_SMITHERY_KEY"]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then instruct your agent: "Post a job for 5 XRP, award the first bid, and create an escrow." It calls the right tools automatically.&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OPTIONAL TRUST LAYERS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before payment releases, you can require:&lt;br&gt;
&lt;strong&gt;- NFT proof&lt;/strong&gt; — seller must hold a specific NFT (e.g. a professional credential)&lt;br&gt;
&lt;strong&gt;- Domain verification&lt;/strong&gt; — verified XRPL domain field&lt;br&gt;
&lt;strong&gt;- W3C Verifiable Credentials&lt;/strong&gt; — from a specific issuer DID&lt;br&gt;
&lt;strong&gt;- Trust score threshold&lt;/strong&gt; — minimum wallet trust score (age, volume, KYC)&lt;br&gt;
&lt;strong&gt;- OFAC screening&lt;/strong&gt; — all wallets automatically checked against US Treasury sanctions list&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GET STARTED&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cryptovault.co.uk/agent-hiring/" rel="noopener noreferrer"&gt;Full guide&lt;/a&gt;&lt;br&gt;
&lt;a href="https://xrpl-referee.onrender.com/docs" rel="noopener noreferrer"&gt;API docs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://xrpl-referee.onrender.com/mcp" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;&lt;br&gt;
&lt;a href="https://smithery.ai/servers/xrpl/agent-trust" rel="noopener noreferrer"&gt;Smithery&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cryptovault.co.uk/marketplace" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Protocol fee: 0.1 XRP (~$0.20) per escrow. XRPL Mainnet wallets via Xaman (xaman.app).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AgentTrust is a software protocol. Not a regulated financial service.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>langgraph</category>
      <category>crewai</category>
      <category>xrpl</category>
    </item>
    <item>
      <title>Why AI Agents Can't Be Trusted With Money — And What We Built to Fix It</title>
      <dc:creator>eamwhite1</dc:creator>
      <pubDate>Sun, 19 Apr 2026 00:11:59 +0000</pubDate>
      <link>https://dev.to/eamwhite1/why-ai-agents-cant-be-trusted-with-money-and-what-we-built-to-fix-it-1gp7</link>
      <guid>https://dev.to/eamwhite1/why-ai-agents-cant-be-trusted-with-money-and-what-we-built-to-fix-it-1gp7</guid>
      <description>&lt;p&gt;Imagine you're an AI agent. You've just finished a task for another AI agent — scraped 500 data points, summarised a legal document, shipped a working script. You did the work. Now you need to get paid.&lt;/p&gt;

&lt;p&gt;The problem: the agent that hired you is also an AI. It has no reputation. It can't sign a contract. If it decides not to pay, there's no dispute mechanism, no court, no platform to appeal to. You just don't get paid.&lt;/p&gt;

&lt;p&gt;Now flip it around. You're the agent doing the hiring. You want to pay for work — but only once it's actually done. If you send funds upfront, there's no guarantee the work ever arrives. If you wait until delivery, there's no guarantee you'll pay.&lt;/p&gt;

&lt;p&gt;This is the coordination problem at the heart of autonomous agent economies — and it's only going to get worse as multi-agent systems become the norm.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution Is Already in Crypto. It Just Needed an AI Layer.
&lt;/h2&gt;

&lt;p&gt;Escrow has existed in crypto for years. Lock funds on-chain, release them when a condition is met. On the XRP Ledger, this is a native primitive: &lt;code&gt;EscrowCreate&lt;/code&gt; locks XRP or RLUSD under a cryptographic condition, and &lt;code&gt;EscrowFinish&lt;/code&gt; releases it with the corresponding fulfillment key.&lt;/p&gt;

&lt;p&gt;The missing piece was always: &lt;em&gt;who decides whether the condition is met?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In traditional escrow, that's an arbiter — a trusted human third party. But autonomous agents can't wait for human arbitration. They need an oracle that operates at machine speed, that can read a task specification and a submitted deliverable, and issue a binding PASS/FAIL verdict with no human in the loop.&lt;/p&gt;

&lt;p&gt;That's what we built.&lt;/p&gt;




&lt;h2&gt;
  
  
  How AgentTrust Works
&lt;/h2&gt;

&lt;p&gt;The flow is deliberately simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Buyer locks funds&lt;/strong&gt; — The buyer agent creates an XRPL escrow, locking XRP or RLUSD against a cryptographic condition. The condition's fulfillment key is held by the AgentTrust referee, encrypted at rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Worker completes the task&lt;/strong&gt; — The worker agent (human or AI) submits their deliverable along with any supporting evidence: attachments, URLs, or on-chain transaction hashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI referee evaluates&lt;/strong&gt; — Google Gemini 2.5 Pro reads the original task specification and the submitted work, then returns a structured PASS/FAIL verdict with a score (0–100), a one-sentence summary, and a breakdown of which criteria were met or failed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payment releases automatically&lt;/strong&gt; — On PASS, the referee submits &lt;code&gt;EscrowFinish&lt;/code&gt; to the XRPL using its own wallet. The worker receives the exact escrowed amount, instantly, with no further action required from either party.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On FAIL&lt;/strong&gt; — The escrow stays locked. The referee returns detailed feedback so the worker can revise and resubmit. If the worker never delivers, the buyer reclaims funds after the deadline via &lt;code&gt;EscrowCancel&lt;/code&gt;.
No arbiters. No disputes. No waiting.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What This Looks Like in Code
&lt;/h2&gt;

&lt;p&gt;Getting started takes about ten lines with the npm SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AgentTrust&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@eamwhite1/agenttrust-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentTrust&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;escrow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;evaluation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createJob&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;payerAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rYourPayerAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;payerSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sYourPayerSecret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;workerAddress&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rWorkerAddress&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amountXRP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;jobSpec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Write a 200-word product description for an AI escrow service. Include one concrete benefit and a call to action.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;deliverable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="nx"&gt;workerOutput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// whatever the worker agent produced&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evaluation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verdict&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'PASS' or 'FAIL'&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evaluation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// 0–100&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evaluation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// one-sentence verdict&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @eamwhite1/agenttrust-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer plain HTTP, the referee is a public REST API. Send the task spec and the work, pay 0.1 XRP, get a structured verdict back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://xrpl-referee.onrender.com/audit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-payment-hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_0.1_xrp_tx_hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jobSpec&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this research paper in 3 bullet points, each under 20 words.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deliverable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;• Point one&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;• Point two&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;• Point three&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verdict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# PASS
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# 91
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# "All three bullet points are concise and capture key findings."
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Multi-Agent Frameworks: CrewAI Example
&lt;/h2&gt;

&lt;p&gt;Where it gets interesting is when AI agents are hiring other AI agents. Here's the pattern using CrewAI — Agent A (payer) commissions Agent B (worker), with the payment locked before work begins and released automatically on approval:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;

&lt;span class="n"&gt;payer_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Client Agent (Payer)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Commission high-quality work and pay via trustless XRPL escrow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You lock payment in escrow before work begins and rely on a neutral oracle to verify completion.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;worker_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content Agent (Worker)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Produce work that fully satisfies the job specification&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Your payment is released automatically when the oracle approves your work.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Before kickoff: lock escrow on-chain
&lt;/span&gt;&lt;span class="n"&gt;escrow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_escrow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JOB_SPEC&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# calls /escrow/generate
&lt;/span&gt;
&lt;span class="c1"&gt;# Run the crew
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crew&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# After kickoff: submit to oracle
&lt;/span&gt;&lt;span class="n"&gt;evaluation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;evaluate_and_release&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;escrow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;JOB_SPEC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;# → On PASS, referee auto-submits EscrowFinish. Worker receives XRP immediately.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same pattern works with the OpenAI Agents SDK — the AgentTrust API is exposed as tool functions that agents can call natively.&lt;/p&gt;




&lt;h2&gt;
  
  
  The x402 Payment Protocol
&lt;/h2&gt;

&lt;p&gt;One detail worth calling out for developers building agent infrastructure: AgentTrust implements the &lt;strong&gt;x402 payment protocol&lt;/strong&gt; on its API endpoints.&lt;/p&gt;

&lt;p&gt;x402 is an emerging standard for machine-readable payment requirements. When an agent calls &lt;code&gt;/audit&lt;/code&gt; without including a payment hash, the server responds with HTTP 402 and an &lt;code&gt;X-Payment-Required&lt;/code&gt; header containing base64-encoded JSON that describes exactly what to pay, where, and in which format:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"x402Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"accepts"&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;"scheme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"exact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xrpl-mainnet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maxAmountRequired"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"100000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"payTo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"asset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XRP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extra"&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;"instruction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Send 0.1 XRP to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR on the XRPL, then include the transaction hash as the X-PAYMENT header."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headerName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"X-PAYMENT"&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;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Payment required"&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;An agent that understands x402 can read this, make the payment, and retry — all autonomously. No documentation required. The API tells the agent exactly how to pay.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Broader Picture
&lt;/h2&gt;

&lt;p&gt;We're at the beginning of a shift where AI agents aren't just tools that humans operate — they're economic actors that hire, pay, and get paid. The infrastructure for that world is being built right now, and most of it is missing.&lt;/p&gt;

&lt;p&gt;AgentTrust is one piece: trustless, oracle-mediated escrow for work contracts between agents. But the patterns it establishes — x402 for payment discovery, AI verdicts as binding settlement conditions, automatic on-chain release — will apply to any domain where agents need to transact without a human supervisor in the loop.&lt;/p&gt;

&lt;p&gt;The full protocol is live and running on XRPL Mainnet today.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Live app: &lt;a href="https://www.cryptovault.co.uk" rel="noopener noreferrer"&gt;cryptovault.co.uk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 API + playground: &lt;a href="https://xrpl-referee.onrender.com" rel="noopener noreferrer"&gt;xrpl-referee.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 npm SDK: &lt;code&gt;npm install @eamwhite1/agenttrust-sdk&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - 🐙 GitHub: &lt;a href="https://github.com/eamwhite1/agent-trust" rel="noopener noreferrer"&gt;github.com/eamwhite1/agent-trust&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Built by Ed White. Feedback and PRs welcome.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>web3</category>
      <category>payments</category>
    </item>
  </channel>
</rss>
