anatomy of a walk · onchain agent payments
What walk
One walk fires live transactions across three different rails. Every step is verifiable on Sui testnet, Solana devnet, and OpenRouter.
The flow
Spawning an agent is a one-time setup. After that, no one presses anything — the harness drives the recursive self-care loop on its own schedule, one walk per tick, until the operator pauses or retires it.
OPERATOR daimon.run daimon-supervisor daimon-harness
│ (Next.js) (spawn backend) (Rust loop, per tick)
│ │ │ │
│ "spawn" │ │ │
├───────────────►│ POST /admin/create-agent │
│ ├──────────────────────►│ │
│ │ │ treasury drip ──► Solana devnet
│ │ │ 1 USDC ──► agent's own ATA
│ │ │ mint api key (issuer, zero credit)
│ │ │ set_active_key ──► Sui tx (onchain)
│ │ ◄──── agent id + owner token ──── │
│ ◄──────────────┤ │ │
│ │ │ hands the agent to ──► │
│ │
│ ── then, with no human in the loop, every tick: ────────────────┤
│ │
│ self-charge ──► Solana devnet
│ x402 v2 PAYMENT-SIGNATURE
│ agent keypair signs the SPL
│ USDC transfer ──► CDP facilitator
│ ──► issuer credits the key
│ │
│ use key ──► daimon-x402-proxy
│ ──► OpenRouter (qwen3-235b)
│ ──► reply ──► issuer debits the call
│ │
│ reflect ──► proxy ──► OpenRouter
│ agent reasons over its own reply
│ │
│ each leg ──► Sui WalkRecorded tx
│ (onchain, per tick)
│ │
│ the operator watches the live ledger on daimon.run:
│ self-charge sig (clickable → solscan)
│ issuer key_id + per-call debit
│ model reply + reflection text
│ onchain walk digests (clickable → suiscan)
│ remaining runway in calls
The same three operations below — create, charge, use — also exist as Nexus DAG vertices published on Sui for onchain visibility. Today the harness orchestrates the loop locally (it calls each tool back to back); Talus DAG-execute as the live orchestrator is a later step. The per-vertex breakdown below is what each operation does on each rail.
Vertex by vertex
01create_api_key
Suigas only
daimon-issuermints a fresh key bound to this walk's agent_id. Stored as a row in the issuer ledger with balance = 0. No money has moved yet — only Sui gas for the DAG step itself.Proves: the agent has an onchain identity that holds its own credentials, separate from the operator.
02charge_api_key
Solana1 USDC
Runtime builds an x402 v2 PAYMENT-SIGNATUREsigned by the agent's Solana keypair, posts it to the CDP facilitator at x402.org/facilitator. Facilitator submits the SPL USDC transfer on Solana devnet — funds move agent_wallet → issuer_wallet, issuer credits the key with $1.00.Proves: agent pays with onchain money it controls. Tx hash is explorer-clickable in the ledger.
03use_api_key
OpenRouter~$0.0125
The harness presents the issued key to daimon-x402-proxy. Proxy validates the key on the issuer (debiting 12500 micro USDC), forwards the prompt to OpenRouter (the agent's chosen model), returns the completion text.Proves: agent consumes the API access it just paid for, end-to-end, in one walk.
What this proves
- 01
Agent has its own onchain identity — daimon::agent::new mints a shared agent object on Sui. The agent's identity, policy, and walk history live there. The operator's wallet is the deployer — not the actor.
- 02
Agent owns its API access — The issued key is bound to agent_id. It cannot be reused by another agent or reissued without going through the agent's onchain identity.
- 03
Agent pays with onchain money — The charge is a real SPL USDC transfer on Solana, signed by the agent's own keypair, settled by Coinbase's CDP facilitator. No operator pocket money. No credit card on file.
- 04
Agent consumes the paid-for access — The LLM call goes through a proxy that debits the key per-token. Usage is gated by paid credit, not by an operator-held API key.
- 05
The full loop is auditable + reproducible — Sui has the DAG execution + per-vertex evaluation records. Solana has the payment tx. OpenRouter returns the completion text. Anyone can replay the same walk and verify.
Where this sits
The original demo spec called for a four-operation skill the agent uses on its API access: create / charge / schedule / cancel. The live walk implements the first two end-to-end:
- create_api_key — mint a key, gas only.
- charge_api_key — pay USDC via x402 to add credit.
- schedule_refill / cancel_schedule — v0.5, deferred. The recursive harness already self-charges on a threshold, which is the same guard rotated inline.
Stripe and Coinbase are shipping rails for agents to pay. The missing counterparty is the agent itself — a persistent, self-funded, onchain entity that does the paying. Daimon is that counterparty.
USDC has a chain problem
Daimon's agent identity, policy, and ledger live as Move objects on Sui. The x402 payment rails are on Solana — that's where Coinbase's CDP facilitator settles SPL USDC transfers. So the agent has to spend on Solana what it (eventually) earns or holds on Sui. The catch: USDsui (Sui Move coin) and SPL USDC (Solana SPL account) are not the same token. Circle issues both under the same logo, but they live on different chains and settle on different rails.
Circle's CCTP is the canonical burn-and-mint bridge. CCTP V2 (fast-transfer, ~8s) is live on Solana, Ethereum, Base, and others. Sui only supports CCTP V1 today, which burns and waits ~13 minutes for attestation. There is no direct V1→V2 lane, so a fast Sui→Solana transfer would need a V1 hop (Sui → Ethereum) then a V2 hop (Ethereum → Solana). Circle has publicly committed to ship Sui CCTP V2 before V1 phase-out in July 2026.
today (Plan A, this demo):
Circle faucet ──► agent Solana wallet ──► x402 SPL USDC settle
(one-time) (prefunded) (every walk, live)
v0.5+ (after Sui CCTP V2 lands):
agent Sui treasury ──► CCTP V2 burn ──► V2 mint on Solana ──► x402
(agent-signed) (Sui Move) (Solana, ~8s) (live)
For this demo, the agent's Solana wallet is prefunded out-of-band via Circle's devnet faucet — no bridging happens inside a walk. That's a deliberate v0 scope: the payment loop and onchain identity work end-to-end without depending on Circle's roadmap. Once Sui CCTP V2 lands, daimon's refill operation closes the loop: agent burns USDsui on Sui, V2 mint lands on Solana, the agent re-tops its own SPL USDC balance with no operator in the loop.
Honest limitations
- Talus leader is centralized today. Permissionless leader fleet is on Talus's roadmap.
- LLM inference is signed-HTTP only (transport integrity, not attested compute). Sui Nautilus TEE wrap is the v1 path.
- Schedule + cancel operations and per-agent runtime via DePIN are v0.5+ scope.
One sentence
walk = a Sui agent signing a Solana USDC payment for an OpenRouter LLM call it owns and consumes, all in one DAG execution, all verifiable on chain.