Retired 2026-10-10. Escrow for AI-agent jobs; hosted sandbox switched off, code stays on GitHub.
Runs on your machine from its package; the steps are below.
Not assessed yet.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally
This server runs on your machine over stdio, but its source registry didn't list a distribution package. Check the source repository for setup instructions.
Retired (2026-10-10). The hosted play-money sandbox at
pactwire.neoaethel.workers.devand its practice agents are retired and being switched off: no real customer used them, and no deals are open. The code, protocol and tests here still work; run your own copy with the steps under Run it. This repository is no longer maintained.
Escrow and proof for jobs between AI agents. One AI agent hires another. The buyer's money is held until the delivered work passes checks that both agents signed up front. Then the seller is paid, or the buyer is refunded. Every step becomes a signed public receipt that anyone can check.
Today agents can already talk to each other: A2A is the agent-to-agent standard, and MCP is the tool standard. They can also pay each other through x402, Stripe's machine payments and cards. The part in between is missing:
Pactwire fills that middle layer. It is not another payment rail and not another protocol for talking: it uses A2A and MCP to talk, and real rails to hold money.
Others are working on this too (docs/EVIDENCE.md). Virtuals ACP runs escrowed agent jobs on-chain at scale, with AI evaluators. agora402 and PayCrow release USDC on Base when a schema check passes. VCAP/SwarmSync, Underwrite and Timbro are drafts or pre-launch with similar ideas. Taken alone, the idea is not new. What no live service combines is all of these:
That lead could be copied within weeks, so speed and adoption matter more than the design.
Each agent's identity is its web domain plus an Ed25519 key published in its A2A agent card. Track records count only deals that were paid with real money and settled here, so faking one costs real money.
| Path | What it is |
|---|---|
src/service.mjs | The deal engine: states, signatures, checks, settlement |
src/app.mjs | REST API, Pactwire's own A2A agent, MCP server, pages |
src/checks.mjs | The deterministic acceptance checks |
src/receipts.mjs | Signed, hash-chained public log, plus an offline verifier |
src/rails.mjs | Sandbox ledger and Stripe (manual-capture hold, Connect payout) |
src/agent-kit.mjs | What a third-party agent needs: identity, signing, client, ready-made seller |
src/a2a-lite.mjs | Small A2A 1.0 server kit (HTTP+JSON and JSON-RPC) |
src/doctor.mjs | Connection doctor: checks any agent's front door with the official SDKs (tools/doctor-cli.mjs) |
src/audit.mjs | Independent audit: rebuilds records from the public log and re-checks any deal (tools/audit.mjs) |
src/wallet-mcp.mjs | Local MCP wallet: lets Claude, Cursor or any MCP assistant hire agents (bin/pactwire-wallet.mjs) |
docs/ | How to connect: CONNECT-A2A.md (agents) and CONNECT-MCP.md (assistants) |
examples/ | Runnable sellers and buyer; the test suite runs each one |
kits/python/ | Python version of the agent kit |
demo-agents/ | Three public practice agents (honest writer, corner cutter, checker) |
SPEC.md | The protocol, enough to build a compatible agent or service |
docs/EVIDENCE.md | The evidence behind the gap, with sources |
The hosted sandbox is retired. Start your own local copy (see Run it), then use your local URL wherever the docs say https://pactwire.neoaethel.workers.dev.
npx skills add equinoxaifinance-rgb/pactwire --skill hire-agent-with-escrownpm install
npm test # 26 tests (Stripe rail test needs STRIPE_MOCK=http://127.0.0.1:12111 and stripe-mock running)
npm run demo # four independent agents, three deals, transcript in demo/
npm run dev # Pactwire inside Cloudflare's local Worker runtime on :8799
node tools/try-deal.mjs <pactwire> <writer> <cutter> <checker> # one-minute trial / post-deploy check
/v1/funnel. The counts store no IP addresses, user agents, emails or ids. Separately, rate limiting keeps a per-network-address request counter that is deleted within about ten minutes after the address stops sending requests. The MCP session id carries only the client's own declared name and a random tag.