Session management in Agno gives you control over how sessions are identified, named, and cached for optimal performance.
Session IDs
Every session has a unique identifier (session_id) that tracks conversations across multiple runs:
- Auto-generated: If not provided, Agno generates a UUID automatically
- Manual: You can provide your own session IDs for custom tracking
- Per-user: Combine with
user_id to track multiple users’ sessions
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.db.sqlite import SqliteDb
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
db=SqliteDb(db_file="tmp/agent.db"),
)
# Use your own session ID
agent.run("Hello", session_id="user_123_session_456")
Session Naming
Session names are human-readable labels that make it easier to identify and manage conversations—perfect for inbox-style UIs, support queues, or linking a conversation back to an external ticket.
Manual Naming
Set custom names using set_session_name():
agent.set_session_name(session_id="session_001", session_name="Product Launch Planning")
name = agent.get_session_name(session_id="session_001")
Tips:
- Treat the session ID as the source of truth; names are just metadata for humans
- Rename conversations whenever the topic shifts—there’s no limit on how often you call the method
- Need guardrails or naming policies? Wrap
set_session_name in your own helper before exposing it to end-users
Auto-generated Names
Let the AI generate meaningful names from conversation content:
session = agent.set_session_name(
session_id="session_123",
autogenerate=True,
)
# Access the generated name
name = agent.get_session_name(session_id="session_123")
print(name) # e.g. "E-commerce API Planning"
Calling set_session_name(autogenerate=True) asks the model to read the first few messages in the session and generate a short (≤5 words) label. The method returns the updated session object. Use get_session_name() to retrieve the generated name.
Best Practices:
- Delay generation until the conversation has meaningful context (e.g., after 2–3 messages)
- Provide a fallback: wrap the call in your own helper that falls back to a human-entered name or a ticket ID if the generation fails
- Batch jobs: loop over session IDs from your database and call
set_session_name(..., autogenerate=True) once for each. The API is synchronous, so plan around model latency
- Costs: Each generation is an extra model call. Use cheaper models via
session_summary_manager or run it out-of-band if you’re cost sensitive
Session Caching
Session caching stores the session object in memory to improve performance. cache_session=True keeps the hydrated session object in memory after the first database read, avoiding extra queries for subsequent runs.
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
session_id="my_session",
cache_session=True, # Enable in-memory caching
)
# First run loads from database and caches
agent.run("First message")
# Subsequent runs use cached session (faster)
agent.run("Second message")
When It Helps
- Many sequential turns in the same session (support chats, copilots, etc.)
- Latency-sensitive deployments where every DB round trip matters
- Resource-heavy databases (remote Postgres, serverless drivers) where connection setup dominates
This is only for development and testing purposes. It is not recommended for production use.