Session Management

Create, list, and manage sessions for agents, teams, and workflows

Create a Python file

session_management.py
import asyncio
import os

from agno.client import AgentOSClient


HEADERS = {"Authorization": f"Bearer {os.environ['OS_SECURITY_KEY']}"}

async def main():
    client = AgentOSClient(base_url="http://localhost:7778")

    # Get available agents
    config = await client.aget_config(headers=HEADERS)
    if not config.agents:
        print("No agents available")
        return

    agent_id = config.agents[0].id
    user_id = "example-user"

    print("=" * 60)
    print("Session Management")
    print("=" * 60)

    # Create a session
    print("\n1. Creating a session...")
    session = await client.create_session(
        agent_id=agent_id,
        user_id=user_id,
        session_name="My Test Session",
        headers=HEADERS,
    )
    print(f"   Session ID: {session.session_id}")
    print(f"   Session Name: {session.session_name}")

    # List sessions
    print("\n2. Listing sessions...")
    sessions = await client.get_sessions(user_id=user_id, headers=HEADERS)
    print(f"   Found {len(sessions.data)} sessions")
    for sess in sessions.data[:5]:
        print(f"   - {sess.session_id}: {sess.session_name or 'Unnamed'}")

    # Run some messages in the session
    print("\n3. Running messages in session...")
    await client.run_agent(
        agent_id=agent_id,
        message="Hello!",
        session_id=session.session_id,
        user_id=user_id,
        headers=HEADERS,
    )
    await client.run_agent(
        agent_id=agent_id,
        message="How are you?",
        session_id=session.session_id,
        user_id=user_id,
        headers=HEADERS,
    )

    # Get session runs
    print("\n4. Getting session runs...")
    runs = await client.get_session_runs(session_id=session.session_id, user_id=user_id, headers=HEADERS)
    print(f"   Found {len(runs)} runs in session")
    for run in runs:
        content_preview = (
            (run.content[:50] + "...")
            if run.content and len(str(run.content)) > 50
            else run.content
        )
        print(f"   - {run.run_id}: {content_preview}")

    # Rename session
    print("\n5. Renaming session...")
    renamed = await client.rename_session(
        session_id=session.session_id,
        user_id=user_id,
        session_name="Renamed Test Session",
        headers=HEADERS,
    )
    print(f"   New name: {renamed.session_name}")

    # Delete session
    print(f"\n6. Deleting session {session.session_id}...")
    await client.delete_session(session.session_id, user_id=user_id, headers=HEADERS)
    print("   Session deleted")


if __name__ == "__main__":
    asyncio.run(main())

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U "agno[os]" openai

Set the server model key

Set this key in the terminal that starts the example server. The client sends requests to AgentOS and does not call OpenAI directly.

export OPENAI_API_KEY="your_openai_api_key_here"

Start an AgentOS Server

Set OS_SECURITY_KEY in the client terminal to the same value used by the server. The code sends it as a bearer credential on each request.

export OS_SECURITY_KEY="your_os_security_key_here"

Start the client example server on port 7778. It registers the SQLite database used for sessions.

Run the Client

python session_management.py