entorin

Memory

Identity-scoped, audited storage that survives a run. Backend-pluggable; the shipped reference adapters get out of the way once you have a real backend.

Identity-scoped, audited storage that survives a run. MemoryClient wraps any Memory backend (SessionMemory, FsMemory, your own Postgres / Redis / vector DB) with a capability check and audit events on every read and write.

from entorin.memory import FsMemory, MemoryClient

memory = MemoryClient(backend=FsMemory(Path("memory_root")), bus=bus)
prefs  = await memory.get(ctx, "cross_run", "prefs")           # memory.read
await memory.put(ctx, "cross_run", "prefs", {"theme": "dark"})  # memory.write

Scopes

Two tiers: session (alive for the run only) and cross_run (survives across runs, scoped per principal). Capabilities are memory.session and memory.cross_run. Per-key gates are out of scope — wrap your own Memory impl if you need them.

Reference adapters

  • SessionMemory — in-process dict, no persistence
  • FsMemory — JSON-per-key on the filesystem

Both exist to get out of your way: implement the four-method Memory protocol against your real backend and MemoryClient wraps it the same way.

What the control plane does not ship

Vector DB bindings, embedding pipelines, retention policies, GDPR delete cascades. Those live in your backend.