Skip to main content
This guide covers the tenant-scoped MemoryOS pattern for one application remembering its own users by external_user_id. If you want the new user-controlled cross-agent flow, see Cross-agent memory sharing. This guide shows the recommended pattern:
  1. write memories as conversation facts emerge
  2. retrieve memories before every model call
  3. append system_prompt_addition only when MemoryOS is not in passthrough

Python

import os

from memoryos import Memory
from openai import OpenAI


def main() -> None:
    memory = Memory(api_key=os.environ["MEMORYOS_API_KEY"])
    openai_client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

    external_user_id = "customer-123"
    latest_user_message = "Can you answer the way I usually prefer?"

    memory.add(
        messages=[
            {
                "role": "user",
                "content": "Please remember that I prefer concise technical explanations with examples.",
            }
        ],
        external_user_id=external_user_id,
        metadata={"channel": "support-chat"},
    )

    memories = memory.get(
        query=latest_user_message,
        external_user_id=external_user_id,
        limit=5,
    )

    system_prompt = "You are a helpful assistant."
    if not memories.is_passthrough and memories.system_prompt_addition:
        system_prompt = f"{system_prompt}\n\n{memories.system_prompt_addition}"

    response = openai_client.responses.create(
        model="gpt-4.1-mini",
        input=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": latest_user_message},
        ],
    )

    print(response.output_text)
    memory.close()


if __name__ == "__main__":
    main()

TypeScript

import OpenAI from "openai";
import { MemoryOS } from "@memoryos/sdk";

async function main(): Promise<void> {
  const memory = new MemoryOS(process.env.MEMORYOS_API_KEY!);
  const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY! });

  const externalUserId = "customer-123";
  const latestUserMessage = "Can you answer the way I usually prefer?";

  await memory.add(
    [
      {
        role: "user",
        content: "Please remember that I prefer concise technical explanations with examples.",
      },
    ],
    externalUserId,
    undefined,
    { channel: "support-chat" },
  );

  const memories = await memory.get(
    latestUserMessage,
    externalUserId,
    5,
  );

  let systemPrompt = "You are a helpful assistant.";
  if (!memories.isPassthrough && memories.systemPromptAddition) {
    systemPrompt = `${systemPrompt}\n\n${memories.systemPromptAddition}`;
  }

  const response = await openai.responses.create({
    model: "gpt-4.1-mini",
    input: [
      { role: "system", content: systemPrompt },
      { role: "user", content: latestUserMessage },
    ],
  });

  console.log(response.output_text);
}

void main();

Production notes

  • keep MEMORYOS_API_KEY on the server
  • do not fail the LLM call when MemoryOS is in passthrough
  • treat system_prompt_addition as optional context, not as a hard dependency
  • use Memory Passport only when the same person is intentionally granting access across multiple agents