Agent with Memory

Store user preferences that persist across conversations.

Memory lets your agent remember facts about users across conversations. Unlike storage (which persists conversation history), memory stores user-level information like preferences and context.

Create a Python file

1from kern.agent import Agent
2from kern.db.sqlite import SqliteDb
3from kern.memory import MemoryManager
4from kern.models.openai import OpenAIResponses
5from kern.tools.yfinance import YFinanceTools
6from rich.pretty import pprint
7
8db = SqliteDb(db_file="tmp/agents.db")
9
10memory_manager = MemoryManager(
11 model=OpenAIResponses(id="gpt-5.2"),
12 db=db,
13)
14
15agent = Agent(
16 model=OpenAIResponses(id="gpt-5.2"),
17 tools=[YFinanceTools()],
18 db=db,
19 memory_manager=memory_manager,
20 enable_agentic_memory=True,
21 markdown=True,
22)
23
24user_id = "investor@example.com"
25
26# Tell the agent about yourself
27agent.print_response(
28 "I'm interested in AI and semiconductor stocks. My risk tolerance is moderate.",
29 user_id=user_id,
30 stream=True,
31)
32
33# The agent now knows your preferences
34agent.print_response(
35 "What stocks would you recommend for me?",
36 user_id=user_id,
37 stream=True,
38)
39
40# View stored memories
41memories = agent.get_user_memories(user_id=user_id)
42print("\nStored Memories:")
43pprint(memories)

Set up your virtual environment

1uv venv --python 3.12
2source .venv/bin/activate
1uv venv --python 3.12
2.venv\Scripts\activate

Install dependencies

1uv pip install -U kern-ai openai yfinance sqlalchemy rich

Export your OpenAI API key

1export OPENAI_API_KEY="your_openai_api_key_here"
1$Env:OPENAI_API_KEY="your_openai_api_key_here"

Run Agent

1python agent_with_memory.py

Memory vs Storage

FeatureStorageMemory
What it storesConversation historyUser preferences and facts
ScopePer sessionPer user (across all sessions)
Use case"What did we discuss?""What do you know about me?"

Enabling Memory

  1. enable_agentic_memory=True (used above): Agent decides when to store/recall via tool calls. More efficient.
  2. update_memory_on_run=True: Memory manager runs after every response. Guaranteed capture, higher latency.