A LangGraph checkpointer with provable thread deletion (signed erasure receipts) — feedback welcome

Hey all — sharing something I built for my own agents and finally cleaned up enough to put out there. I’d genuinely value feedback from anyone running stateful LangGraph in production.

The problem that started it. My agent persists user threads with a checkpointer: great. Then a user invokes their right to be forgotten (GDPR/CCPA), I call delete_thread(…), the rows vanish, and… I realized I had no way to prove it happened. If compliance or an auditor asks “show me user X’s thread was actually deleted,” the standard savers (Memory / SQLite / Postgres) sign nothing and attest nothing. Deletion is a side effect with no evidence.

So I wrote langgraph-checkpoint-grafomem — a drop-in checkpointer that wraps the saver you already use and adds two things: every checkpoint is Ed25519-signed (tamper-evident), and delete_thread emits a signed erasure receipt.

Usage — it wraps your existing saver, nothing else about how you build changes:

import sqlite3
from langgraph.checkpoint.sqlite import SqliteSaver
from grafomem_checkpoint import GrafomemSerializer, GrafomemCheckpointSaver

conn = sqlite3.connect(“memory.db”, check_same_thread=False)
inner = SqliteSaver(conn, serde=GrafomemSerializer(private_key, key_id=key_id, trusted_keys=trusted_keys))
saver = GrafomemCheckpointSaver(inner)
graph = builder.compile(checkpointer=saver)

#right to be forgotten, with proof:

saver.delete_thread(“user-123”)
receipt = saver.last_receipt(“user-123”)
assert receipt.verify(public_key) # signed proof of the erasure transition
print(receipt.to_json())

The receipt binds a hash of the thread’s entire checkpoint history before deletion to the empty state after it — so it commits to the specific data that was erased, and anyone with the public key can verify it, no database access required.

Being upfront about what it proves (I think this is the important part): it’s cryptographic proof that the erasure operation occurred, bound to a key and a timestamp. It is not a claim of media-level unrecoverability — your DB backups, WAL, and replicas are outside its control. So the honest statement is “we can prove this thread was erased on this date, signed and independently verifiable” — which, in my experience, is exactly the artifact a compliance review actually asks for. (If you’ve seen tools promise “guaranteed permanent deletion,” this is the version that’s actually true.)

Try it (Python 3.11+):

pip install langgraph-checkpoint-grafomem

Runnable reference agent (chat, /recall, /forget → verified receipt): GitHub - GNS-Foundation/grafomem-langgraph-example · GitHub
It’s Fair Source — free to self-host and modify, your own signing keys, no cloud dependency.

What I’m actually looking for: one or two of you running LangGraph with a real deletion or audit requirement to try it and tell me where the API fights your setup, or where the receipt doesn’t fit your compliance flow. Open an issue or just reply here — that feedback is the thing I want most right now.

(If you’re curious why the underlying memory is designed the way it is — the two-tier, hippocampus-and-neocortex story — I wrote it up here: https://medium.com/@camilo.ayerbe/your-brain-already-solved-ais-two-biggest-memory-problems-a2145e10a7aa.)

Thanks for reading — happy to answer anything.