Sessions and memory

Persistent multi-turn conversations and per-user memory.

An agent needs two kinds of state: what was said in this thread and what the agent knows about this user. Agno stores both in its configured database.

from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.models.openai import OpenAIResponses

db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")

agent = Agent(
    model=OpenAIResponses(id="gpt-5.5"),
    db=db,
    add_history_to_context=True,
    num_history_runs=5,
    update_memory_on_run=True,
)

agent.run(
    "My name is Sarah and I prefer email over phone.",
    user_id="sarah@acme.com",
    session_id="thread-42",
)
reply = agent.run(
    "What's the best way to reach me?",
    user_id="sarah@acme.com",
    session_id="thread-99",
).content
# The sessions have separate histories. Stored user memory can carry the preference.

Sessions vs memory

Session history and memory solve different problems and can be used together.

Session historyMemory
StoresThe messages in this conversation threadLearned facts about the user
ScopeOne session_idOne user_id, across all their sessions
Enable withadd_history_to_context=Trueenable_agentic_memory=True or update_memory_on_run=True
Answers"What did we just discuss?""What do I know about this person?"

Identifiers

IdentifierDistinguishesMaps to in your product
user_idThe personYour auth subject (user ID, email)
session_idA conversation thread for that personA chat tab, a Slack thread, a support case

Pass both on every run. session_id scopes conversation threads, while user_id scopes memory.

Memory: automatic or agentic

ModeSetUse when
Automaticupdate_memory_on_run=TrueYou want background memory extraction from the current user input during the run. The manager may decide nothing should be saved. Without a user_id, memories land under the default user.
Agenticenable_agentic_memory=TrueThe agent decides using tool calls.

Reading memory back

For a profile screen or a debug view, pull a user's memories directly.

memories = agent.get_user_memories(user_id="sarah@acme.com")

Long conversations

num_history_runs bounds the history that flows into context. It defaults to 3. Session summaries give the agent recall of the earlier thread on top of that bounded history.

TechniqueEffect
num_history_runs=NOnly the last N stored runs flow into context
enable_session_summaries=TrueA running summary of the session is added to the system prompt, in addition to the history already in context

Next steps

TaskGuide
Put this behind an HTTP APIServe as an API
Carry memory across Slack and webInterfaces
Give the agent external dataConnecting your data

Developer Resources