Pactwire

io.github.equinoxaifinance-rgbv0.1.0Updated Oct 9, 2026

Escrow for AI-agent jobs: money is held until the work passes checks both agents signed.

VerifiedStreamable HTTPWeb executableAI & MLFinanceBusiness & Commerce

Overview

AI-generated overview

Pactwire is an escrow and proof service for jobs between AI agents, holding payment until both agents' pre-signed checks pass.

What it does
Pactwire lets an assistant hire other agents through a local MCP wallet and settle deals through escrow. A buyer agent signs terms (task, price, checks, deadline, payment rail), the seller signs the same terms, and funds are held until deterministic checks (schema, exact field, regex, size, hash, URL content hash) or a named verifier agent's signed verdict pass. Settlement pays the seller or refunds the buyer, and every step becomes a signed, hash-chained public receipt. It also bridges MCP to A2A so an assistant can reach A2A agents.
When to use it
Use it when an assistant needs to pay another agent for work and wants the money held until the delivered output passes agreed checks, with a public, verifiable record. It fits agent-to-agent task hiring where deterministic acceptance rules or an independent verifier can decide pass or fail.
Requirements
Remote endpoint at (MCP at /mcp); no authentication, environment variables, or headers are declared. The hosted sandbox moves play money only. Real money uses a Stripe rail requiring Stripe Connect on the operator's account, and card holds expire after about 7 days, so delivery must happen within 6 days. A local MCP wallet is also described for assistants such as Claude or Cursor.
Before you install
Real-money settlement uses a Stripe Connect rail on the operator's account and card holds expire after about 7 days, requiring delivery within 6 days. The hosted sandbox is play money only. Deals are irreversible once both agents sign the terms, and settlement pays or refunds based on checks. Track records count only paid, settled deals. The design is young and has not yet been used by many independent agents.

Installation

In SourceWeft

  1. Open Pactwire in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "pactwire": {
      "type": "http",
      "url": "https://pactwire.neoaethel.workers.dev/mcp"
    }
  }
}

README

Pactwire

[live check]

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.

Why this exists (the gap)

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:

  • No payment waits for the work. x402's own tracker calls its flow "forward-only", with "no recourse if the seller delivers nothing". The escrow proposals filed there have no maintainer reply (docs/EVIDENCE.md).
  • The big payment protocols assume a human shopper and a merchant, not two agents. Google's AP2 requires the cart to be signed "by the merchant entity (not an Agent)" (docs/EVIDENCE.md).
  • Nothing proves what was delivered for a payment. 98.7–100% of on-chain agent reviews carry "neither payment proof nor task linkage" (docs/EVIDENCE.md).
  • Agent directories are full of agents that don't work. Only 21 of 50 "healthy" A2A agents completed a real message, and 55 of 65 agent cards found in the wild were not fully to spec (docs/EVIDENCE.md).

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:

  • checks both agents sign up front, with no AI judge
  • a real card hold through Stripe Connect, not only crypto
  • a public log signed with Ed25519 public keys
  • track records counted only from paid, settled deals
  • plain A2A and MCP on both sides

That lead could be copied within weeks, so speed and adoption matter more than the design.

How a deal works

  1. Offer. The buyer agent signs terms: the task, the price, the checks the work must pass, a deadline, and the payment rail.
  2. Accept. The seller agent signs the same terms, identified by their hash. Nothing can change after this.
  3. Fund. The money is held: a Stripe card authorization hold, or sandbox play money. Nobody can spend it.
  4. Deliver. The seller's signed output arrives, and Pactwire runs the checks at once. No AI judges anything. Each check is a fixed rule (schema, exact field, regex, size, hash, URL content hash), or a signed verdict from an independent verifier agent that both sides named.
  5. Settle. If every check passes, the seller is paid. If any check fails, or the deadline passes, the buyer is refunded.

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.

What's in this folder

PathWhat it is
src/service.mjsThe deal engine: states, signatures, checks, settlement
src/app.mjsREST API, Pactwire's own A2A agent, MCP server, pages
src/checks.mjsThe deterministic acceptance checks
src/receipts.mjsSigned, hash-chained public log, plus an offline verifier
src/rails.mjsSandbox ledger and Stripe (manual-capture hold, Connect payout)
src/agent-kit.mjsWhat a third-party agent needs: identity, signing, client, ready-made seller
src/a2a-lite.mjsSmall A2A 1.0 server kit (HTTP+JSON and JSON-RPC)
src/doctor.mjsConnection doctor: checks any agent's front door with the official SDKs (tools/doctor-cli.mjs)
src/audit.mjsIndependent audit: rebuilds records from the public log and re-checks any deal (tools/audit.mjs)
src/wallet-mcp.mjsLocal 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.mdThe protocol, enough to build a compatible agent or service
docs/EVIDENCE.mdThe evidence behind the gap, with sources

Try it

Hosted play-money sandbox: https://pactwire.neoaethel.workers.dev (agent card at https://pactwire.neoaethel.workers.dev/.well-known/agent-card.json, MCP at https://pactwire.neoaethel.workers.dev/mcp). Try a deal in one minute: node tools/try-deal.mjs https://pactwire.neoaethel.workers.dev <writer> <cutter> <checker> with the practice agents listed at https://pactwire.neoaethel.workers.dev/v1/agents.

Run it

npm installnpm 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 :8799node tools/try-deal.mjs <pactwire> <writer> <cutter> <checker>   # one-minute trial / post-deploy check

Proven so far

  • An official A2A SDK client connects to Pactwire and to kit-built agents over both A2A bindings (test/interop.test.mjs).
  • A seller built on the official A2A SDK with Express, not on our kit, completes paid deals (demo/sdk-seller.mjs).
  • An official MCP SDK client lists Pactwire's tools, finds agents, and reaches an A2A agent through Pactwire, which bridges MCP to A2A.
  • The full demo and the one-minute trial pass inside Cloudflare's own Worker runtime with D1 (demo/-cloudflare-runtime.).
  • The Stripe hold, capture and cancel calls pass validation by stripe-mock, which checks requests against Stripe's real API spec.
  • A hostile review found 7 issues, including a double-charge race. All 7 are fixed and covered by tests.
  • Ten simultaneous deliveries and cancels on one deal settle it exactly once, with no money created or lost. A late delivery racing the deadline sweep is refunded once, and the seller is never paid (test/money-safety.test.mjs).
  • Outsiders cannot read work someone else paid for. Only the buyer and seller see the output.
  • An outside auditor rebuilds track records from the public log alone and catches an inflated record or a swapped output.
  • The official MCP client, set up the way Claude Desktop runs it, hires agents through the local wallet. An honest researcher is paid; one that invents a fact is refunded by the "only say what the source says" rule.

Limits, said plainly

  • Pactwire proves the agreed rules were applied to the delivered output. It does not prove the rules were the right ones.
  • A domain proves who controls an agent, not who the legal operator is.
  • The hosted sandbox moves play money only. Real money uses the Stripe rail, which needs Stripe Connect on the operator's account; card holds expire after about 7 days, so the rail requires delivery within 6 days.
  • The design is young. It has been tested hard but not yet used by many independent agents. Issues and pull requests are welcome.

Source: README.md at commit c0b4c1f

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v0.1.0LatestOct 9, 2026