Appearance
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
| Method | Path | Purpose |
|---|---|---|
POST | /memory | Add (text + optional scopes/metadata) |
GET | /memory/search?query=…&limit= | Semantic search |
GET | /memory | List |
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.mem0— Mem0 as the substrate for LLM-assisted extraction and consolidation. RequiresOVRIN_MEMORY_PROVIDER=mem0,OVRIN_MEM0_API_KEY, and installing the platform'smemoryextra. 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.