Skip to content

Persistent Memory

Sandboxes are meant to be thrown away. What the agent learned in one shouldn't be. Memory is a first-class control-plane endpoint — not a database you have to run.

python
client.memory.add("prefers pytest over unittest")
hits = client.memory.search("test framework")
for hit in hits:
    print(hit.memory, hit.score)
ts
await client.memory.add("prefers vitest over jest");
const hits = await client.memory.search("test framework");

Scoping

Memories are scoped per account. Within an account you can partition further with user_id, agent_id, and session_id (all default sensibly):

python
client.memory.add("likes short answers", user_id="customer-42",
                  agent_id="support", session_id="chat-9182")
hits = client.memory.search("tone", agent_id="support")
client.memory.delete(memory_id)

The same scopes exist on list and search, so a support agent never reads a coding agent's context unless you ask it to.

Endpoints

MethodPathPurpose
POST/memoryAdd (text + optional scopes/metadata)
GET/memory/search?query=…&limit=Semantic search
GET/memoryList
DELETE/memory/{id}Forget

Substrates

The storage behind /memory is swappable; the API does not change:

  • sql (default) — durable relational storage with substring search. Survives control-plane restarts.
  • mem0Mem0 as the substrate for LLM-assisted extraction and consolidation. Requires OVRIN_MEMORY_PROVIDER=mem0, OVRIN_MEM0_API_KEY, and installing the platform's memory extra. Self-hosters only — on Ovrin cloud this is already configured.

You manage memories from the console's Memory page: search, inspect what agents remember, and forget entries individually.