What Is Verifiable Memory for AI Agents

An agent's memory is only useful if you can trust it. Verifiable memory means you do not have to take the agent's word for what it remembers. You can check.
Most agent memory today is a row in a vector database or a JSON file on a server. The agent writes to it, reads from it, and nobody outside the system can tell whether a memory was edited, replaced, or silently dropped between the day it was written and the day it was used.
That is fine for a chatbot remembering your favorite color. It is not fine for an agent that trades, files documents, answers customers, or makes decisions someone will later need to explain.
Lighthouse Memory is built around a different idea: every memory is persisted as a content addressed blob with a CID. This post explains what that means, what it proves, what it does not prove, and how to use it.
Verifiable Memory in One Sentence
Verifiable memory is agent memory where each stored record has an identifier derived from its own bytes, so anyone holding that identifier can confirm the content they retrieve is byte for byte what was saved.
The identifier is a CID, a content identifier. Lighthouse Memory uses CIDv1 with the raw codec and a sha2-256 hash. Same content always produces the same CID. Change one character and the CID changes.
| Typical agent memory | Verifiable memory | |
|---|---|---|
| Identifier | Row ID or UUID assigned by the database | CID computed from the content |
| Edited after the fact | Undetectable from outside | Produces a different CID |
| Who can check integrity | Only the operator | Anyone with the CID |
| Survives the app | Tied to one database | Retrievable from any gateway that serves the CID |
| Portable across agents | Export and import code | Hand over a CID |
What a CID Proves, and What It Does Not
The Lighthouse homepage puts this plainly, and it is worth repeating: a CID confirms content integrity, not factual accuracy.
It proves:
- The memory you retrieved is exactly the memory that was stored under that CID.
- Nobody altered it in storage, in transit, or on a gateway.
- Two agents holding the same CID are looking at the same bytes.
It does not prove:
- That the memory was true when it was written.
- That the agent recalled the right memory for the question.
- Who wrote it, unless you record that separately (Lighthouse Memory records an
agentfield on every memory).
That boundary matters. Verifiability does not make an agent correct. It makes an agent accountable: when something goes wrong, you can establish exactly what it remembered, instead of arguing about it.

How Lighthouse Memory Makes Memory Verifiable
Lighthouse Memory gives agents three primitives, remember, recall and forget, over two engines. Both produce CIDs, in slightly different ways.
The batched engine: one CID per batch
With the batched engine, memories buffer locally as pending and then flush as a single batch blob, by default one blob per 10 memories (flushEvery). Each flushed memory is assigned the CID of the batch blob that holds it.
import '@lighthouse-ai/store-lighthouse'
import '@lighthouse-ai/embed-local'
import { createStorage, createEmbedder } from '@lighthouse-ai/core'
import { BatchedEngine } from '@lighthouse-ai/engine-batched'
const storage = await createStorage('lh-ipfs-filecoin', { apiKey: process.env.LIGHTHOUSE_API_KEY })
const embedder = await createEmbedder('local')
const memory = new BatchedEngine(storage, { namespace: 'research-agent', embedder })
await memory.remember('Q3 revenue guidance was raised to 4.2B on the Oct 24 call.', {
tags: ['earnings', 'guidance'],
metadata: { source: 'call-transcript-2026-10-24' },
})
const { cid, gatewayUrl } = await memory.flush()
// cid: 'baf…' -> the batch blob holding this memory
The batch blob is plain JSON with a stable shape: a version, the namespace, a batch ID, a timestamp and the records, each with its content, tags, metadata, agent, createdAt and embedding. Because the blob is content addressed, the CID commits to all of it.
The memwal engine: one CID per memory
With the memwal engine, every remember goes straight to a relayer that embeds, SEAL-encrypts and uploads the memory to Walrus. The SDK then pins a canonical JSON record to IPFS and gets a CID for that single memory. It also exposes a dedicated integrity check:
import { MemwalMemory } from '@lighthouse-ai/engine-memwal'
const memory = await MemwalMemory.fromEnv()
const stored = await memory.remember('Customer ACME is on enterprise.', { tags: ['customer'] })
await memory.verify(stored.id)
// pinned: { id, cid, pinned: true, verified: true, method: 'gateway-fetch' }
// unpinned: { id, cid, pinned: false, verified: true, method: 'local-hash' }
verify() answers a precise question: is what the gateway serves byte identical to my local record? Pinned records are fetched and compared byte for byte. Unpinned records are re-hashed locally.
Verify It Yourself, Without Trusting Lighthouse
The strongest property of content addressing is that verification does not need the vendor. Anyone can fetch a memory blob from a public gateway and recompute its CID with standard open source libraries:
import { CID } from 'multiformats/cid'
import * as raw from 'multiformats/codecs/raw'
import { sha256 } from 'multiformats/hashes/sha2'
async function verifyMemoryBlob(expectedCid) {
const res = await fetch(`https://gateway.lighthouse.storage/ipfs/${expectedCid}`)
const bytes = new Uint8Array(await res.arrayBuffer())
const actual = CID.create(1, raw.code, await sha256.digest(bytes))
return actual.toString() === expectedCid
}
console.log(await verifyMemoryBlob(cid)) // true, or the memory was altered
This is what "verifiable by design" means in practice. An auditor, a counterparty or a second agent can check your agent's memory with 10 lines of code and no account.
Where Verifiable Memory Matters Most
Trading and financial agents. Record the inputs an agent read before it acted, and the CID proves those inputs were not rewritten after a bad trade. See AI Trading Agents on Robinhood Chain Need Verifiable Memory.
Research and prediction agents. Keep sources, forecasts and outcomes together, and let a later review prove which evidence the agent had at the time.
Tokenized assets. Issuer research and document references stay addressable and checkable.
Multi agent systems. When one agent hands context to another, a CID guarantees both are working from the same memory. See One Memory Layer Shared Across Every AI Model.
Regulated workflows. An audit trail where each record's integrity can be checked by someone outside the company. See How to Audit and Monitor AI Agents with Verifiable Memory.
One Honest Caveat
Verifiable and private are different properties. Batched blobs, index snapshots and pinned memwal mirrors are plaintext. Anyone with the CID can read them. Native encryption for the batched engine is under development. Until then, encrypt sensitive content yourself before storing it, or use the memwal engine, whose blobs on Walrus are SEAL-encrypted. Encrypted Memory for AI Agents with Memwal and SEAL covers the tradeoffs.
Frequently Asked Questions
What is verifiable memory for AI agents? Agent memory where each record has a content identifier (CID) computed from its bytes, so anyone can confirm that retrieved memory matches what was stored.
Does verifiable memory mean the agent is correct? No. A CID confirms content integrity, not factual accuracy. It proves what was remembered, not whether it was true.
What CID format does Lighthouse Memory use? CIDv1 with the raw codec and a sha2-256 hash. The same content always yields the same CID.
Can I verify a memory without a Lighthouse account? Yes. Fetch the blob from a public gateway and recompute the CID with an open source library such as multiformats.
Which engine should I use for verification?
Both produce CIDs. The memwal engine adds a built in verify() method and encrypts blobs on Walrus. The batched engine assigns each memory the CID of its batch blob.
Get Started
New to the building blocks? Read Lighthouse Memory Concepts Explained for Developers.
Stay in Touch
Learn more at the website, docs, or GitHub. Join the community on Discord, X, Telegram, and LinkedIn.




























































































