Skip to main content
One SDK. Multiple backend behaviors. Every tenant starts on the General Engine. Enable a domain schema when your product needs industry-specific memory — the SDK calls don’t change.
mem.add(...)  →  same call, different backend extraction
mem.get(...)  →  same call, domain-aware context returned

Which engine to use

Product typeUse
Chatbot, assistant, copilot, coding agent, SaaS personalizationGeneral Engine
Tutoring, exam prep, learning app, student coachEdTech Schema
Customer support bot, support copilot, agent-assistSupport Schema
HR, healthcare, agriculture, or other future domainsGeneral Engine today

Available domains

DomainStatusWhat it adds
General EngineAvailableFacts, preferences, goals, procedures, relationships, expertise
EdTech SchemaAvailableStudent profile, grade, curriculum, weak/strong topics, exam context, forgetting stages
Support SchemaAvailableCustomer support profile, open issue, issue history, support type, sentiment, escalation risk
HR TechComing soon
HealthTechComing soon
AgriTechPlanned

Enabling a domain

From the workspace dashboard: Settings → Domain Schema, or via API:
PATCH /v1/tenant/domain-schema
Authorization: ApiKey mem_...
Content-Type: application/json
{ "domain_schema": "edtech" }
{ "domain_schema": "support" }
{ "domain_schema": null }
The last option returns to the General Engine.

What changes on add()

General tenant
  quality gate → extraction → conflict resolution → memories + vectors

EdTech tenant
  quality gate → extraction → conflict resolution → memories + vectors
  → EdTech overlay → edtech_memories

Support tenant
  quality gate → extraction → conflict resolution → memories + vectors
  → Support overlay → support_memories
Your app still sends the same messages and external_user_id.

What changes on get()

General tenant
  retrieval → ContextBuilder → generic system_prompt_addition

Domain tenant
  retrieval → ContextBuilder → domain retriever → domain-aware system_prompt_addition
Your model-call path stays the same:
result = mem.get(query=current_task, external_user_id=external_user_id)

system_prompt = BASE_PROMPT
if result.has_context:
    system_prompt = f"{system_prompt}\n\n{result.system_prompt_addition}"

Dashboard vs. model-call APIs

Use get() for model calls. Use domain profile and tenant endpoints for dashboards.
NeedAPI
Prompt context for an AI responsePOST /v1/memories/retrieve
Store conversation memoryPOST /v1/memories/add
Student profile UIGET /v1/memories/edtech-profile
Support customer dashboardGET /v1/tenant/customers
Tenant domain settingsGET /v1/tenant/domain-schema