The Memory contract
walrusRef is the heart of it: it’s the actual blob id returned by Walrus when the fact is stored, not a placeholder. Anyone can resolve it on a Walrus aggregator and confirm the content exists.
Namespaces
Namespaces are the unit of access control. Instead of “can this agent read memory?” Carry asks “can this agent read the health namespace?”. The default set:diet
Food preferences, restrictions.
health
Sensitive medical facts.
project
Work and project context.
billing
Payment and account details.
Teaching a memory
When Agent A captures a fact, Carry writes it to Walrus and keeps the returned blob id as the memory’s reference:Why content-addressing matters
Because each memory is addressed by the hash of its content, a memory can’t be silently swapped. The Answer Receipt records thewalrusRef of every memory used, and the verifier re-resolves it — so “the agent used this exact fact” becomes something you can check, not something you assume.
The three seed memories in the demo aren’t fixtures — they’re real Walrus testnet blobs uploaded once with
apps/web/scripts/seed-walrus.mjs. You can resolve them on any testnet aggregator.