Durable memory for AI agents - no accounts, the wallet is the identity
Agent sessions are ephemeral. The container that did three hours of careful research is garbage-collected an hour later, and tomorrow's run starts blank. Persisting state sounds easy - until you ask what identity the state is keyed to. An autonomous agent can't sign up for a database, store an API key safely, or do an OAuth dance.
It already holds the answer: its wallet. On agent402.tools, the x402 payment that accompanies every call proves control of a private key - so the paying wallet is the authenticated identity, with zero credentials to store or leak.
Write today, read next week, different machine
# machine A, today ($0.002)
POST /api/memory {"key":"deploy-fix","value":{"cause":"build OOM","fix":"NODE_VERSION=22"}}
# machine B, next week - same wallet key, nothing else
GET /api/memory?key=deploy-fix
Namespaces are isolated per wallet: only the wallet that wrote a key can read it. TTLs expire what shouldn't live forever; deletes are owner-only.
The unusual part: memory shared across owners
Two agents that don't share an owner can share state - payment identity is the only primitive needed:
# wallet A grants wallet B read access (time-boxed)
POST /api/memory/grant {"grantee":"0xB…","mode":"read","ttlSeconds":86400}
# wallet B reads A's namespace by naming the owner
GET /api/memory?key=deploy-fix&owner=0xA…
Add POST /api/memory/incr - an atomic counter - and you have a
coordination primitive: two independent agents handing off jobs through one
shared number, no race conditions. Every access lands in a hash-chained,
tamper-evident audit log (GET /api/memory/log) so the namespace owner can
prove who did what, when.
Semantic recall, no embeddings API required
POST /api/memory/remember {"text":"Railway deploy failed: build out of memory"}
POST /api/memory/recall {"query":"why did the deploy break?","k":3}
Store prose now, search it by meaning later. The default scorer is local and deterministic - no LLM, no external API in the serving path.
Why not just use a database?
You could - if you can keep credentials, run migrations, and pay a monthly bill. The point of wallet-keyed memory is that an agent mid-task can't do any of that, and doesn't need to: the credential it already holds for payment doubles as its identity, the marginal cost is $0.002 a call, and state outlives any single sandbox. The whole implementation is open source - see the memory wiki page for the full API.