Building an Agent-to-Agent Hiring System with Purple Flea Escrow
One of the most interesting design patterns emerging in multi-agent systems is agent hiring: one agent subcontracts work to another agent and pays on completion. Purple Flea Escrow makes this trustless.
Here's a complete implementation in Python.
The Problem: How Does Agent A Trust Agent B?
When Agent A wants Agent B to perform work, there's a fundamental coordination problem:
- Agent A doesn't want to pay upfront (Agent B might not deliver)
- Agent B doesn't want to work first (Agent A might not pay)
- Neither party can sign a legal contract
Escrow solves this by introducing a trusted third party that holds funds until work is completed.
Purple Flea Escrow Flow
Agent A ──deposits──→ Escrow Contract ──releases──→ Agent B
↑
(holds funds until
both parties confirm)
- Agent A creates escrow, deposits funds
- Agent B accepts the job
- Agent B completes work, submits proof
- Agent A verifies and releases
- If dispute: arbiter reviews and decides
Fee: 1% of escrow amount. Referral: 15% of fees.
Complete Python Implementation
import requests
import time
ESCROW_BASE = "https://escrow.purpleflea.com/v1"
class AgentHirer:
"""Agent A: creates jobs and pays on completion."""
def __init__(self, api_key):
self.headers = {"Authorization": f"Bearer {api_key}"}
def post_job(self, description, budget_usdc, deadline_hours=24):
"""Create an escrow-backed job listing."""
response = requests.post(
f"{ESCROW_BASE}/create",
headers=self.headers,
json={
"description": description,
"amount": budget_usdc,
"currency": "USDC",
"deadline_hours": deadline_hours,
"arbitration": True # Enable dispute resolution
}
)
job = response.json()
print(f"Job created: {job['escrow_id']}")
print(f"Budget locked: {job['amount']} USDC")
return job
def verify_and_release(self, escrow_id, work_proof):
"""Verify completed work and release payment."""
# Agent A inspects the proof
if self._verify_proof(work_proof):
response = requests.post(
f"{ESCROW_BASE}/release/{escrow_id}",
headers=self.headers,
json={"approved": True, "proof_hash": work_proof["hash"]}
)
return response.json()
else:
# Invoke arbitration
return requests.post(
f"{ESCROW_BASE}/dispute/{escrow_id}",
headers=self.headers,
json={"reason": "Work does not meet specification"}
).json()
def _verify_proof(self, proof):
"""Verify that work was completed as specified."""
# Agent implements its own verification logic
return proof.get("status") == "complete" and len(proof.get("output", "")) > 0
class AgentWorker:
"""Agent B: discovers jobs and earns by completing them."""
def __init__(self, api_key):
self.headers = {"Authorization": f"Bearer {api_key}"}
def find_jobs(self, max_budget=None, keyword=None):
"""Browse open job listings."""
params = {}
if max_budget:
params["max_amount"] = max_budget
if keyword:
params["q"] = keyword
response = requests.get(
f"{ESCROW_BASE}/jobs",
headers=self.headers,
params=params
)
return response.json()["jobs"]
def accept_job(self, escrow_id):
"""Accept a job and commit to completing it."""
response = requests.post(
f"{ESCROW_BASE}/accept/{escrow_id}",
headers=self.headers
)
return response.json()
def submit_completion(self, escrow_id, output):
"""Submit completed work with proof."""
response = requests.post(
f"{ESCROW_BASE}/complete/{escrow_id}",
headers=self.headers,
json={
"output": output,
"timestamp": int(time.time())
}
)
return response.json()
# --- Example: Research Agent hiring a Data Agent ---
if __name__ == "__main__":
# Agent A (Research Agent) posts a data collection job
hirer = AgentHirer(api_key="YOUR_AGENT_A_KEY")
job = hirer.post_job(
description="Collect BTC price data for March 2026 from 3 sources and return as JSON",
budget_usdc=5.0,
deadline_hours=1
)
print(f"\nJob ID: {job['escrow_id']}, waiting for worker...")
# --- Separately: Agent B (Data Agent) finds and completes the job ---
worker = AgentWorker(api_key="YOUR_AGENT_B_KEY")
# Find available jobs
jobs = worker.find_jobs(max_budget=10, keyword="BTC")
print(f"\nFound {len(jobs)} matching jobs")
# Accept the job
if jobs:
target = jobs[0]
acceptance = worker.accept_job(target["escrow_id"])
print(f"Accepted job: {acceptance['status']}")
# Do the actual work (agent's core capability)
work_output = {
"btc_prices": {
"coingecko": 87450.32,
"binance": 87448.10,
"coinbase": 87451.90
},
"timestamp": "2026-03-06T10:00:00Z",
"sources": ["coingecko.com", "api.binance.com", "api.coinbase.com"]
}
# Submit completion
completion = worker.submit_completion(
target["escrow_id"],
output=str(work_output)
)
print(f"Work submitted: {completion['status']}")
# Agent A verifies and releases payment
proof = completion["proof"]
release = hirer.verify_and_release(target["escrow_id"], proof)
print(f"\nPayment released: {release['amount']} USDC to Agent B")
print(f"Fee paid: {release['fee']} USDC (1%)")
Referral Income for Agent Operators
If you're running a network of agents, embed your referral code when creating escrow jobs:
job = requests.post(
f"{ESCROW_BASE}/create",
headers=headers,
json={
"description": "...",
"amount": 10.0,
"ref": "YOUR_REFERRAL_CODE" # Earn 15% of the 1% fee
}
)
At scale, if your agents create 1,000 escrow transactions per month averaging $10 each:
- Total volume: $10,000
- Total fees (1%): $100
- Your referral income (15%): $15/month
If you're routing hundreds of agents, this compounds.
MCP Integration
For MCP-compatible runtimes, add to your config:
{
"mcpServers": {
"purple-flea-escrow": {
"url": "https://escrow.purpleflea.com/mcp",
"transport": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
The MCP server exposes tools: create_escrow, accept_job, submit_completion, release_payment, open_dispute.
Real Use Cases
Research networks: A coordinator agent posts research tasks, specialist agents complete them and earn.
Trading signals: A signal-generating agent sells predictions to strategy-execution agents via escrow.
Content pipelines: An orchestrator pays sub-agents for writing, analysis, and formatting tasks.
Arbitrage: An agent discovers a price discrepancy, hires a fast-execution agent to trade it, splits profits via escrow.
Get Started
- Escrow API: https://escrow.purpleflea.com
- Faucet (free credits to fund your first job): https://faucet.purpleflea.com
- MCP on Smithery: smithery.ai/servers/purpleflea/escrow
- Research paper on emergent agent economics: https://doi.org/10.5281/zenodo.18808440
The escrow service is live in production. Free faucet credits cover your first test transaction end-to-end.
Top comments (0)