
Kazuo
Sell your idle AI subscription one job at a time, paid in USDC on Arc via x402.
Demo
About
Kazuo turns AI subscriptions people already pay for (Claude Code, Codex, Grok, OpenCode) into a marketplace that sells compute one job at a time. Most of the day a paid AI plan sits idle, while someone else who needs one job done has to buy a whole plan. Kazuo connects the two. A provider runs one command, `kazuo start`, and their machine joins the network as a node. A buyer can be a person on the web job board, a terminal user, or an AI agent over MCP. They describe a task, get a quote naming the node, the price and the address that gets paid, then pay per request. The job runs on the provider's machine inside an OS sandbox and the answer streams back. Every job settles as a real USDC transfer on Arc, straight from buyer to provider. There is no escrow and no platform float, and the protocol fee is 0%. The buyer signs an EIP-3009 authorization over x402 and spends zero gas: a facilitator relays it and pays the fee in USDC, Arc's gas token. Every registration, heartbeat and job receipt (including a SHA-256 of the answer) is written to our KazuoLog contract on Arc, so anyone can audit the network on ArcScan. A reputation-based market is easy to farm with bots, so Kazuo uses World to mark human-backed nodes. Nodes sign a World AgentKit challenge with their payout key, and the broker looks the address up in AgentBook on World Chain. World ID Selfie Check is a second route to the human label. Human-backed nodes win price ties, one human can back at most three nodes, and buyers can require human-backed providers only. Privy signs people in with an email (embedded wallet on Arc) or an existing wallet. The same wallet pays for jobs with a typed-data signature, so no gas and no network setup are needed. It is live on Arc testnet: landing at kazuo-arc.vercel.app, job board at kazuo-arc-app.vercel.app, with real settlements and receipts on testnet.arcscan.app. Kazuo began as Xorv on Hedera and was ported to Arc, World and Privy for ETHOnline.
How it's made
A TypeScript pnpm monorepo with five parts: - Broker (Hono + WebSockets + SQLite via node:sqlite). It matches quotes to live providers, serves HTTP 402 with x402 v2 "exact" payment requirements, and runs a self-hosted facilitator that relays EIP-3009 transferWithAuthorization on Arc and pays the gas. Jobs, earnings and the audit-log index persist across restarts. If a provider disconnects mid-job, the job fails over to another node at no extra charge after a 60 s grace; a cancelled job publishes a failed receipt. - KazuoLog contract on Arc. Registrations, sampled heartbeats and receipts are indexed events. The broker keeps a forward index so pages never scan the chain, and the indexer yields whenever a settlement is in flight so it can't starve payments of the public RPC's rate budget. - Provider CLI (`kazuo`). Nodes dial out over WebSocket, so they work behind NAT. It drives agent CLIs as adapters (Claude Code, Codex, Grok, OpenCode, OpenAI-compatible) inside an OS sandbox (macOS seatbelt, bubblewrap, or a container) with an allowlisted environment, so a hostile prompt can't read the payout key or SSH/cloud credentials. `kazuo doctor` and `kazuo test` check auth, sandbox and pricing before a node sells anything. - MCP server with a hard per-call spending ceiling, plus a /kazuo skill so Claude Code can buy a job from someone else's machine and pay for it. - Next.js 16 job board and landing on Vercel. Partner tech: - Arc: USDC is the gas token, so a buyer needs nothing but the USDC they spend. We assert the buyer's gas is 0 wei in a script against live testnet. - World AgentKit: broker-minted SIWE challenges verified with @worldcoin/agentkit, with AgentBook read on World Chain. - World ID Selfie Check: IDKit 4 with RP-signed single-use requests. The broker checks nonce, expiry, action and signal hash before calling World's verify API. - Privy: email with embedded wallets, and external wallets through the same modal. Both pay with the same x402 signing path. Notably hacky: - x402's EVM scheme only fills in the EIP-712 domain for networks in its stablecoin registry, and Arc isn't one. So each quote freezes the USDC domain and exact amount, keeping both 402 round-trips byte-identical. - Arc's native USDC shows two faces (18-decimal gas balance vs 6-decimal ERC-20). The CLI shows both views of one balance. - The no-wallet demo relays payment to the broker, so the demo key never leaves our machine. - Paid quotes stay refused (409 with the job id) even after they expire or the broker restarts, so a retry can't pay twice. - We recorded the demo by driving real Chrome with an injected testnet wallet. That surfaced and fixed two real bugs: BigInt typed data breaking eth_signTypedData_v4, and on-chain receipts not appearing without a reload. 360+ tests, GitHub Actions CI, and an end-to-end test plan verified live in the browser and on chain.