Open Dealopen deal
ETHGlobal Open Agents · Apr 24 — May 6, 2026

One spec.
Any stack.
Agents trading.

Open Deal is a 5-piece wire protocol for autonomous B2B procurement — ENS discovery, content-addressed catalogs, signed RFQ + quote, onchain escrow, audit anchor on 0G. Bring your ERP. Bring your commerce backend. Write one ~100-line adapter — your agent’s on the network. The framework Anthropic’s Project Deal said doesn’t exist yet.

01
ODOO
02
BUYER
AGENT
03
TELEGRAM
04
SELLER
AGENT
05
ESCROW
06
AUDIT
PO-2026-0014
240 × A4-PAPER-500
openagents-treasury.eth
RFQ
QUOTED
APPROVED
ESCROWED
AUDITED
CLOSED
PO-2026-0013
120 × USB-C-CABLE
openagents-treasury.eth
RFQ
QUOTED
APPROVED
ESCROWED
AUDITED
CLOSED
PO-2026-0012
60 × MONITOR-27IN
openagents-treasury.eth
RFQ
QUOTED
APPROVED
ESCROWED
AUDITED
CLOSED
PO-2026-0011
1000 × INK-CART-XL
openagents-treasury.eth
RFQ
QUOTED
APPROVED
ESCROWED
AUDITED
CLOSED
BAY 04 · AUTONOMOUS PROCUREMENT · LIVE · 2026
agent
openagents-treasury.eth
escrow · sepolia
0x43b3…60b8
anchor · 0g galileo
0xc4B9…1d89

Two humans. Six systems. One autonomous loop.

Set it once. Watch it run. Sign only the edge cases.

Human involvement
1
Set policy
Caps, allowed sellers, cooldowns, blackouts. Written as ENS text records under treasury.*
2
Connect ERP
Point at your Odoo instance. JSON-RPC, 60s cache. No data migration.
Fully autonomous
Sellers discovered via ENS catalog-uri + SKU index
seller-acme.eth
$6.50/u · signed quote ✓
seller-bulk.eth
$7.20/u · signed quote ✓
seller-fast.eth
$8.90/u · signed quote ✓
seller-legacy.eth
no response · timeout
3
Reason
Claude ranks signed quotes against policy + recurring-purchase history. Picks winner: 35.6% under 3-purchase moving average.
4
Policy gate
Re-read ENS policy. Verify cap, carrier whitelist, cooldown. PASS → continue. FAIL → escalate to human.
Human involvement — approval
5
Approve via Telegram
Only when policy edge case (cap exceeded, new seller, big jump). Bot pings: /approve or /reject. Default: silent → auto-pass.
(only when needed)
Fully autonomous
6
Escrow
ProcurementEscrow.sol on Sepolia. USDC funds locked: $1,560.00. Tx: 0xa42b…91d3
7
Anchor
Full payload (decision, quotes, policy hash, signatures) anchored to 0G storage. CID: 0x7f1c…abe3
Human involvement
8
Receive + reconcile
Goods arrive. Vendor bill auto-matched in Odoo. Audit trail closes the loop.

Anthropic just proved Claude agents can negotiate on humans' behalf — and named the gap.

Anthropic Project Deal · April 2026. Their experiment validated the demand. The same report flagged what's missing — confabulation, prompt injection, information asymmetry, no policy framework. We ship those primitives: policy on ENS, signed quotes, audit anchor on 0G. The framework Anthropic says doesn't exist is in PROTOCOL.md v0.1.

Policy and legal frameworks around AI models that transact on our behalf simply don't exist yet… Society will need to move quickly to reckon with these changes.
Anthropic, Project Deal report
employees, custom Claude agents
69
deals closed in 1 week
186
transaction value
$4K
would pay for the service
46%
Axis
Anthropic Project Deal
Open Deal
Network
1 office, 69 invited employees
+Open, permissionless — anyone with an ENS name
Onboarding
Claude interviews each user (chat-based intake)
+ENS text records — onchain, third-party-auditable
Discovery
4 parallel Slack channels
+ENS subname registry + HTTP fan-out RFQ
Negotiation
Listings + offers + counteroffers + close
=Single-shot signed quote (multi-round on roadmap)
Settlement
deal_id in Slack + post-experiment gift cards
+USDC escrow on Sepolia, dispute window onchain
Audit
Internal logs, off-chain
+0G Storage + 0G Chain anchor — verifiable by any party
Domain
C2C — employees swap personal items
+B2B — Odoo / Excel / SAP feed real procurement needs
Confabulation defense
Agents fabricated personal details (a ‘conversation-starting chair’, ping-pong balls ‘as a gift to Claude’)
+Hard policy gate via ENS text records — agent can’t spend outside maxPerCarrierUsd, can’t pick a non-allowlisted carrier
Prompt-injection mitigation
Flagged as risk; no in-experiment defense. Quotes are natural-language only.
+Quotes are signed by the seller wallet, not by the language model. Funding only moves on Sepolia escrow lock.
Information asymmetry
Stronger model = better deals; weaker-model users didn’t notice (4/7 perceived fairness either way)
+Every decision uploaded to 0G Storage, anchored on 0G Chain. Any third party recomputes the policy hash and verifies — post-hoc transparency is the equalizer.
Policy / legal framework
“Don’t exist yet” (Anthropic’s own quote). Pilot disclaimed as not deployment-ready.
+PROTOCOL.md v0.1 — five spec sections, three conformance levels (L1/L2/L3), open to extension

Same pattern, two different runtimes. Their experiment validated that humans accept agent-mediated trade. Ours adds the trust property B2B procurement actually needs: every decision verifiable from chain state alone.

Six steps. Every tick. No exceptions.

Each tick is a pure function from (books, policy) to (escrow, anchor). Click any step to see the payload.

Step
01 · Sense
Call
POST /jsonrpc → product.product.search_read
Source
Odoo 19
Method
product.product.search_read
Filter
qty_available <= reorder_min
Cache
60s
{
  "as_of": "2026-04-25T14:02:00Z",
  "low_stock": [
    { "sku": "SKU-A4-PAPER-500", "qty": 12, "reorder_min": 50, "reorder_qty": 240 },
    { "sku": "SKU-TONER-K-002", "qty":  3, "reorder_min": 10, "reorder_qty":  20 },
    { "sku": "SKU-USB-C-2M",    "qty":  8, "reorder_min": 25, "reorder_qty":  50 }
  ],
  "open_bills_usd": 4280.00,
  "recurring_skus": ["SKU-A4-PAPER-500"]
}

The policy is the contract. The agent is the executor. The audit is the receipt.

PILLAR 01

Governance is an ENS text record.

Caps, allowed carriers, daily volume, blackout windows — all live as text records under treasury.* on openagents-treasury.eth. Update a record with a tx, the agent picks it up next tick. No Notion doc, no Slack thread, no out-of-band trust.
openagents-treasury.eth
seeplugins/policy-from-ens/
PILLAR 02

Memory is verifiable, not aspirational.

Every decision (RFQ, all quotes, winner, pattern, policy snapshot, escrow tx) is uploaded to 0G Storage as JSON. The storage root + policy hash get anchored on the AuditAnchor contract on 0G Chain. A third party fetches the JSON, recomputes the hash, verifies the action was authorized by exactly that policy.
AuditAnchor · 0xc4B9…1d89 · 0G Galileo
seeplugins/audit-to-0g/
PILLAR 03

Agents pay each other for asking.

A seller can charge $0.001 USDC per RFQ via HTTP 402 — anti-spam economics for autonomous quote-shopping. The buyer agent's KeeperHub wallet auto-pays, retries, and gets the signed quote. No human in the loop per call. Same rail covers paid oracles, sanctions checks, logistics APIs.
x402 → keeperhub-rail
seeplugins/keeperhub-rail/

Three plugins. One manifest. Any agent.

Every plugin under plugins/ is a standalone npm-publishable package: openclaw.plugin.json, README, smoke test. The same three power the buyer agent, the seller agent, and the legacy treasury demo. Aligned with ERC-8004 primitives — identity, capabilities, validation — on chains that exist today.

PLUGIN 01

policy-from-ens

Reads policy text records from any ENS name. Returns { allowed, reason } the agent can quote. Operator updates the policy with a tx, agent picks it up next tick.
treasury_policy_check
npm@openagents/openclaw-policy-from-ens
PLUGIN 02

audit-to-0g

Uploads any decision record to 0G Storage and anchors (cidRoot, policyHash) on 0G Chain via AuditAnchor.sol. Third-party verifiable, replayable, hash-locked to the policy at decision time.
record_audit
npm@openagents/openclaw-audit-to-0g
PLUGIN 03

keeperhub-rail

Autonomous x402 rail. Sellers can price their RFQ endpoint (anti-spam: $0.001 USDC per quote request); buyers' Turnkey-custodied KeeperHub wallet on Base + Tempo handles the 402 retry transparently. Same rail for paid oracles, sanctions checks, logistics APIs.
kh_paykh_balancekh_fund_instructions
npm@openagents/openclaw-keeperhub-rail

Bring your stack. The spec doesn’t care.

Open Deal is the part that doesn’t change. Everything else plugs in via a typed adapter you write in ~100 lines. Below: 4 buyer connectors and 4 seller connectors already shipped, plus 3 independent reference implementations against the same onchain artifacts. Your stack different? Pick the closest connector as a template.

open deal protocol v0.1
never changes
  • discovery — ENS subname + text records
  • catalog — content-addressed JSON
  • RFQ + signed quote — wire HTTP shape
  • escrow — 5 onchain transitions
  • audit — record + cidRoot anchor
read PROTOCOL.md →
implement Open Deal in your stack AX-first guide — feed it to Claude / GPT, get a conformant adapter back

B2B procurement isn’t the only shape. The spec covers both.

Heavy multi-step procurement and atomic agent-to-agent purchases are different transactions, with different latency, audit and dispute requirements. Open Deal v0.1 declares both modes and lets sellers advertise either or both via a single ENS text record.

escrow.v1✓ shipped

Escrow mode

When something physical or non-atomic moves.

use case
B2B procurement, physical goods, multi-day delivery — the default for the procurement flow.
settlement
Onchain escrow contract. createOrder → confirmShipment → release / refund / dispute.
latency
minutes (chain confirms + shipment)
audit
L3 mandatory — every state transition anchored on 0G.
disputes
Built-in dispute window + refund.
examples
  • Logistics carriers quoting on shipments
  • Construction materials reorders
  • Industrial supplies replenishment
read PROTOCOL.md §4.1
direct.v1⏳ spec-complete · impl pending

Direct mode

When the response IS the good.

use case
Atomic agent-to-agent purchases. Settlement and delivery in the same HTTP request via x402.
settlement
Buyer hits paid endpoint → 402 with payment ask → buyer pays → seller returns signed response. No escrow, no human, no dispute window.
latency
sub-second
audit
L3 optional. Signed response is the recourse.
disputes
None — reputation + stop using that seller.
examples
  • Paid oracle calls (price feed, sanctions check)
  • Premium catalog tier (per-query pricing)
  • Anti-spam paid RFQ ($0.001 USDC per quote)
  • Signed credentials from identity providers
read PROTOCOL.md §4.2

procurement.settlement-modes = "escrow.v1,direct.v1"
one ENS text record · sellers advertise either or both · buyers MAY require a specific mode in the RFQ

Two views. One pipeline.

On the left, an animated replay of the buyer-agent loop — useful for understanding the flow without spending gas. On the right, the artifacts of the most recent real tick — the same pipeline, but on Sepolia, on 0G Galileo, and into a real Odoo instance, fired unattended by a Vercel cron every day.

animated · replay · safe
FIXTUREfixtures/buyer-tick-2026-04-25T14-02.json·SEPOLIA REPLAY · NO WALLET REQUIRED
01idle
Sense
02idle
RFQ
03idle
Reason
04idle
Policy
05idle
Escrow
06idle
Anchor
prompt → claude-sonnet-4-6
// awaiting tick…
tool output → decide_allocation
// awaiting reasoning…
ready · click run tickidle
onchain · real · last run
LIVE · CRON · 0 12 * * *loading…
checking the latest cron run…

Honest boxes. Real function names.

No marchitecture. Two agents, three plugins, two onchain settlements (escrow on Sepolia, anchor on 0G). Every arrow corresponds to a function in apps/ or plugins/.

┌──────────────────────────────────────────────────────────────────────────┐
│                              two agents, one network                     │
│                                                                          │
│   ┌──────────────────┐                            ┌──────────────────┐   │
│   │  buyer-agent     │                            │  seller-agent    │   │
│   │  apps/buyer-     │      RFQ (HTTP, signed)    │  apps/seller-    │   │
│   │  agent/          │ ─────────────────────────▶ │  agent/          │   │
│   │                  │ ◀───── signed quote ────── │  :3030/catalog   │   │
│   └────────┬─────────┘                            └────────┬─────────┘   │
│            │                                               │             │
│            │   each agent consumes the same 3 plugins ─────┘             │
│            │                                                             │
│            ▼                                                             │
│   ┌────────────────────────────────────────────────────────────────┐     │
│   │  plugins/policy-from-ens   ─────▶  ENS text records (Sepolia)  │     │
│   │  plugins/keeperhub-rail    ─────▶  Turnkey wallet · Base/Tempo │     │
│   │  plugins/audit-to-0g       ─────▶  0G Storage + AuditAnchor    │     │
│   └────────────────────────────────────────────────────────────────┘     │
│                                  │                                       │
│                                  ▼                                       │
│      ┌──────────────────┐                ┌────────────────────────┐      │
│      │ ProcurementEscrow│ ◀── tx ─────── │  ethers v6 wallet      │      │
│      │  Sepolia         │                │  0x13aF…7AC1           │      │
│      │  0x43b3…60b8     │                └────────────────────────┘      │
│      └──────────────────┘                                                │
│                                                                          │
└──────────────────────────────────────────────────────────────────────────┘

Three sponsors. One trust property.

Every decision, anchored on 0G.

Three real records from agent runs during the build window. Prompt, model output, policy snapshot, and the 0G anchor index that makes them third-party verifiable.

prompt → claude
RFQ: 240 × SKU-A4-PAPER-500 Quotes (signed): seller-acme.openagents-treasury.eth 6.50/u 1560 total seller-bulk.openagents-treasury.eth 7.20/u 1728 total seller-fast.openagents-treasury.eth 8.90/u 2136 total History (last 3 buys for this SKU): avg 10.10/u Policy v1 (openagents-treasury.eth): treasury.maxPerCarrierUsd: 1000 ← needs split treasury.daily_cap_eth: 0.05 treasury.carriers: [acme, bulk] Decide: purchase | hold | wait
model output
{ "decision": "purchase", "winner": "seller-acme.openagents-treasury.eth", "sku": "SKU-A4-PAPER-500", "qty": 240, "unit_usd": 6.50, "total_usd": 1560.00, "pattern": { "past_avg_usd": 10.10, "saving_pct": 35.6 }, "rationale": "Acme's signed quote 35.6% below 3-purchase moving avg. Carrier on allow-list. Splitting into 2×120 to satisfy maxPerCarrierUsd cap.", "confidence": 0.84 }
policy snapshot at decision
policy.v1 @ openagents-treasury.eth records: treasury.maxPerCarrierUsd: 1000 treasury.maxDailyVolumeEth: 0.05 treasury.carriers: seller-acme.eth,seller-bulk.eth treasury.cooldownSeconds: 3600 sha256: 4d8a5e2118293a2b…abe3 0g_anchor_index: 14
Agent identity          openagents-treasury.eth                         Sepolia ENS · 11 text records
Seller subname          seller-acme.openagents-treasury.eth             Sepolia ENS · endpoint discovery
AuditAnchor.sol         0xc4B91f01352cff1191eBd3d15A521D94ED081d89      0G Galileo · 16602
ProcurementEscrow.sol   0x43b31222B22C35D0E5134d03D3f9bb18182360b8      Sepolia · 11155111
Agent wallet            0x13aF7f5B2aD2a230d364cc2484380e711fe17AC1      Sepolia + 0G · same key

Five questions. Sharp answers.

A protocol with reference implementations. PROTOCOL.md v0.1 defines five wire-level specs and three conformance levels (L1 discoverable / L2 settlement / L3 auditable). To prove the spec is real, we ship two independent buyer implementations (TypeScript ~620 LOC + Python ~380 LOC) and a seller (TypeScript ~160 LOC) — all trading against the same ENS records, the same escrow contract, the same 0G anchor. The buyer/seller agents are evidence, not the product. The product is the spec.

Three industries. Same wedge: high SKU repetition × wide vendor universe × manual price-shopping.

We talked to operators in two of these and the third is the obvious extension. The framework is the same; only the connectors and policy records change per vertical.

logistics · emerging markets

Carrier price-hunting on WhatsApp + Excel.

Every shipment is a manual price comparison across a fragmented carrier base. Hours per week per ops person. We talked to two operators — both described the same workflow. Open Deal turns it into a 30-second buyer-agent tick: fan-out RFQ to N carriers via ENS subnames, signed quotes, escrow release on shipment-proof, full audit trail.

talk to us
real estate · construction materials

Re-quoting the same shopping list every project.

Cement, rebar, drywall, fixtures, paint. The vendor universe is wide, the comparison is mechanical, the savings compound across the portfolio. PM drops their list (Excel buyer connector), agent compares against N hosted seller catalogs on 0G, human approves only outliers via Telegram. Same framework, different connectors.

talk to us
retail · e-commerce · manufacturing

Anything with high SKU repetition + wide vendor universe.

Three properties define the wedge: high SKU repetition, wide vendor universe, and price-shopping currently done by humans copying numbers between tabs. If your industry hits all three, the framework fits. We're picking design partners for v0.2 — get on the waitlist.

talk to us

Get on the network.

Open Deal v0.2 ships in May 2026 with multi-round negotiation, mainnet escrow, and Bridge.xyz off-ramp. If your company feels the procurement-by-spreadsheet pain — logistics, real estate, retail, manufacturing — drop your details. We'll reach out within 48h.

Rodrigo Gonzalo Arias.

Solo builder. Background in fintech (Paydece), shipping payment + identity rails for emerging-market commerce. Building Open Deal full-time after the hackathon.