Agno
v3.0.4 open-sourceBuild, run, and manage agent platforms.
from agno.tools.knowledge import KnowledgeManagementTools
km_tools = KnowledgeManagementTools(
knowledge_base=my_kb,
ingest_url=True,
ingest_text=True,
ingest_path=True, # opt-in: exposes any path the server process can read
remove_content=False,
)
from agno.agent import Agent
from agno.tools.knowledge import KnowledgeManagementTools
agent = Agent(
tools=[KnowledgeManagementTools(scope="shared")],
)
agent.print_response("Ingest https://docs.agno.com and list all loaded pages.", stream=True)
curl -X POST https://<agentos-host>/knowledge/content/<id>/refresh
curl 'https://<agentos-host>/knowledge/content?parent_id=<parent_id>'
from agno.agent import Agent
from agno.tools.wavespeed import WaveSpeedTools
agent = Agent(
tools=[WaveSpeedTools(poll_interval=2, timeout=60)],
markdown=True,
)
agent.print_response("Generate an image of a futuristic city at night", stream=True)
from agno.agent import Agent
from agno.tools.atomicmail import AtomicMailTools
agent = Agent(
tools=[AtomicMailTools(pow_timeout=300)],
markdown=True,
)
agent.print_response("Register me an inbox, then check for any new messages.", stream=True)
from agno.tools.pubmed import PubmedTools
from agno.agent import Agent
agent = Agent(
tools=[PubmedTools(timeout=10)],
)
agent.print_response("Latest research on CRISPR gene editing", stream=True)
from agno.tools.studio_runner import StudioRunnerTools
router = Agent(
name="Router",
tools=[StudioRunnerTools()],
...
)
from agno.tools.studio_runner import StudioRunnerTools
from agno.agent import Agent
router = Agent(
name="router",
tools=[StudioRunnerTools()],
instructions="Dispatch user requests to the appropriate Studio component.",
)
from agno.tools.smallest import SmallestTools
from agno.agent import Agent
agent = Agent(tools=[SmallestTools(voice_id='<voice_id>', model='lightning_v3.1', output_file='output.wav')])
agent.run('Convert this text to speech: Hello from Agno!')
curl -X POST 'http://localhost:8000/metrics/refresh?background=true'
# Then poll until completed:
curl 'http://localhost:8000/metrics/refresh/status'
from agno.vectordb.opensearch import OpenSearch
vectordb = OpenSearch(
host='localhost',
port=9200,
index='my-index',
search_type='hybrid'
)
import time
from agentos_client import AgentOSClient
client = AgentOSClient()
client.post("/metrics/refresh?background=true")
while True:
status = client.get_metrics_refresh_status()
if status["state"] in ("completed", "failed"):
print(status)
break
time.sleep(2)
from agno.models.moonshot import Moonshot
model = Moonshot(use_thinking=True)
agent = Agent(model=model)
agent.print_response('Analyze the security implications of this architecture')
from agno.agent import Agent
from agno.tools.agentos import AgentOSTools
ops_agent = Agent(
tools=[AgentOSTools()],
instructions="You are a platform operations assistant. Use AgentOSTools to answer questions about agent health, schedules, and pending approvals.",
)
if __name__ == "__main__":
ops_agent.print_response("Show me any pending approvals and recent failures.", stream=True)
from agno.agent import Agent
from agno.models.moonshot import Moonshot
agent = Agent(
model=Moonshot(id="kimi-k3", use_thinking=True),
instructions="Reason step by step before answering.",
)
if __name__ == "__main__":
agent.print_response("Explain the trade-offs between RAG and fine-tuning.", stream=True)
slack_agent = Agent(
tools=[SlackTools(respond_to_other_agents=True)],
...
)
learning_store = LearningStore(
extraction_tool_call_limit=5,
...
)
from agno.agent import Agent
from agno.tools.slack import SlackTools
agent = Agent(
tools=[SlackTools(respond_to_other_agents=True)],
)
agent.print_response('Check if any peer agents have posted updates in #alerts', stream=True)
from agno.learning import LearningStore
store = LearningStore(
extraction_tool_call_limit=10,
)
results.to_sft_jsonl("passing_attempts.jsonl")
from agno.agent import Agent
from agno.tools.superserve import SuperserveTools
agent = Agent(tools=[SuperserveTools()])
agent.print_response('Write and execute a Python script that processes this dataset')
from agno.agent import Agent
from agno.tools.plivo import PlivoTools
agent = Agent(tools=[PlivoTools()])
agent.print_response('Send an SMS to +15551234567 saying the nightly scan is complete')
from agno.agent_os import AgentOS
agent_os = AgentOS(mcp_auth=...)
uvx agno connect --name ci-bot
agno tokens revoke agno_pat_abc123xyz
from agno.tools.twelvelabs import TwelveLabsTools
tools = TwelveLabsTools()
agent = Agent(tools=[tools])
from agno.tools.local_file_system import LocalFileSystemTools
tools = LocalFileSystemTools(
target_directory="/data/agent-workspace",
enable_read_file=True,
restrict_to_base_dir=True,
)
from agno.models.litellm import LiteLLM
model = LiteLLM(
model="openai/gpt-4o",
supports_native_structured_outputs=True,
)
from agno.models.openai import OpenAIChat
from agno.agent import Agent
agent = Agent(model=OpenAIChat(id="gpt-4o"))
response = agent.run("What happened in AI news today?")
print(response.citations)
from agno.guardrails import PIIDetectionGuardrail
guardrail = PIIDetectionGuardrail(
custom_patterns=[r'\b\d{3}-\d{2}-\d{4}\b', r'\bACCT-\d{8}\b']
)
from agno.agent import Agent
from agno.tools.you import YouTools
agent = Agent(tools=[YouTools()], show_tool_calls=True)
agent.print_response('What are the latest AI model releases this week?')
def my_post_hook(run_response):
approval = run_response.metadata.get("approval")
if approval:
print(approval["resolved_by"], approval["resolved_at"])
from agno.utils.path_safety import safe_join, PathSecurityError
try:
safe_path = safe_join("/var/app/uploads", user_input_filename)
except PathSecurityError as e:
print(f"Blocked unsafe path: {e}")
from agno.models.gemini import GeminiInteractions
model = GeminiInteractions()
from agno.knowledge.url import URLKnowledgeBase
kb = URLKnowledgeBase(
urls=["https://docs.example.com/sitemap.xml"],
allowed_hosts=["docs.example.com"],
)
from agno.tools.llms_txt import LLMsTxtTools
tools = LLMsTxtTools(allowed_hosts=["docs.example.com", "api.example.com"])
from agno.context.slack import SlackContextProvider
provider = SlackContextProvider(enable_media_tools=True)
from agno.context.slack import SlackContextProvider
provider = SlackContextProvider(enable_workspace_search=True)
context = provider.get_context()
from agno.models.anthropic import Claude
model = Claude(id="claude-opus-4-5", cache_tools=True)
import os
from agno.agent import Agent
from agno.tools.web_context import WebContextProvider
from agno.tools.mcp.parallel import ParallelMCPBackend
os.environ["PARALLEL_API_KEY"] = "<your-key>"
agent = Agent(
tools=[WebContextProvider(backend=ParallelMCPBackend())]
)
curl -X GET 'https://<agentOS-host>/sessions?type=workflow' \
-H 'Authorization: Bearer <token>'
AGNO_LOG_TRACEBACKS=true python my_agent.py
from agno.memory import SessionSummaryManager
summary_manager = SessionSummaryManager(
last_n_runs=10,
conversation_limit=4000
)
agent = Agent(
model=OpenAIChat(id="gpt-4o", base_url="http://localhost:1/v1", retries=0),
fallback_models=[Claude(id="claude-sonnet-4-20250514")],
)
from agno.interface.slack import SlackInterface
slack = SlackInterface(
agent=my_agent,
show_member_tool_calls=True,
)
workflow.run(
metadata={"run_label": "nightly"},
dependencies={"db": my_db_client},
add_dependencies_to_context=True,
add_session_state_to_context=True
)
from agno.models.gemini import Gemini
model = Gemini(id="gemini-2.0-flash", timeout=30)
agent = Agent(
model=...,
datetime_format="%Y-%m-%dT%H:%M:%S"
)
def my_pre_hook(run_context, tool_call):
history = run_context.messages
for msg in history:
print(msg)
agent = Agent(
model=...,
tool_hooks=[my_pre_hook]
)
from agno.tools.gitlab import GitlabTools
agent = Agent(
tools=[GitlabTools()],
...
)
from agno.embedder.openai_like import OpenAILikeEmbedder
embedder = OpenAILikeEmbedder(
base_url="http://localhost:4000",
api_key="sk-...",
model="text-embedding-3-small",
)
from agno.tools.google import GmailTools
tools = GmailTools()
vector_db = PgVector(
table_name="embeddings",
db_url="postgresql://user:pass@localhost/db",
similarity_threshold=0.75,
)
tools = DuckDuckGoTools(
timelimit="w",
region="us-en",
backend="html",
)
from agno.document.reader.pdf import PDFReader
reader = PDFReader(sanitize_content=False)
docs = reader.read("report_with_tables.pdf")
from agno.team import Team, TeamMode
team = Team(
mode=TeamMode.broadcast,
members=[analyst, researcher, summarizer],
)
team.run('Summarize the latest threat intelligence report')
from agno.knowledge import Knowledge
vuln_kb = Knowledge(
name='vulnerabilities',
isolate_vector_search=True,
)
patch_kb = Knowledge(
name='patches',
isolate_vector_search=True,
)
# Both can point at the same DB/table; searches will only return their own documents.
from agno.agent import Agent
from agno.models.neosantara import Neosantara
agent = Agent(model=Neosantara(id="<model-id>"))
agent.print_response("Halo, apa kabar?")
Condition(
condition=my_condition,
steps=[primary_step],
else_steps=[fallback_step]
)
from agno.agent import Agent
agent = Agent(
knowledge=my_knowledge_base,
add_search_knowledge_instructions=False,
)
agent.run('What are our internal policies on data retention?')
from agno.agent import Agent
from agno.tools.seltz import SeltzTools
agent = Agent(
tools=[SeltzTools()],
)
agent.run('Find recent research on LLM reasoning benchmarks.')
from agno.tools.unsplash import UnsplashTools
agent = Agent(tools=[UnsplashTools()], ...)
from agno.document.reader.excel import ExcelReader
reader = ExcelReader()
documents = reader.read("data/threat_intel.xlsx")
from agno.tools.tavily import TavilyTools
tools = TavilyTools(api_base_url="https://tavily.internal.example.com")
from agno.agent import Agent
agent = Agent(
instructions=["Always respond in bullet points."],
add_instruction_tags=True
)
from agno.tools.python import PythonTools
# Production: default sandboxed behaviour (restrict_to_base_dir=True)
tools = PythonTools(base_dir="/app/workspace")
# Local dev: opt out of sandboxing
tools_open = PythonTools(base_dir="/app/workspace", restrict_to_base_dir=False)
from agno.tools.crawl4ai import Crawl4aiTools
tools = Crawl4aiTools(
proxy_config={
"server": "http://proxy.corp.example.com:8080",
"username": "user",
"password": "pass"
}
)
from agno.document.chunking.markdown import MarkdownChunker
chunker = MarkdownChunker(split_on_headings=True)
from agno.tools.mcp import MCPTools
def my_header_provider():
token = fetch_current_auth_token() # your token-refresh logic
return {"Authorization": f"Bearer {token}"}
tools = MCPTools(url="https://my-mcp-server.example.com", header_provider=my_header_provider)
from agno.middleware.jwt import JWTMiddleware
middleware = JWTMiddleware(
secret="<your-secret>",
audience="https://api.myapp.example.com"
)
agent.set_cancellation_manager(my_custom_cancellation_manager)
serve(reload_includes=['*.yaml', '*.yml'], reload_excludes=['tests/*', 'docs/*'])
agent = Agent(
model=OpenAIChat(id='gpt-4o'),
output_schema={
'type': 'json_schema',
'json_schema': {
'name': 'result',
'strict': True,
'schema': {
'type': 'object',
'properties': {'answer': {'type': 'string'}},
'required': ['answer'],
'additionalProperties': False
}
}
}
)
from agno.tools.shopify import ShopifyTools
agent = Agent(tools=[ShopifyTools()], markdown=True)
agent.print_response('What were my top-selling products last month?')
result = agent.run(
"Enumerate open ports on 10.0.0.1",
run_id="pentest-2025-07-01-recon"
)
import asyncio
from agno.memory import MemoryManager
memory_manager = MemoryManager(user_id="user_123")
# Sync
memory_manager.optimize_memories()
# Async
asyncio.run(memory_manager.aoptimize_memories())
from agno.agent import Agent
from pydantic import BaseModel
class SummaryOutput(BaseModel):
summary: str
key_points: list[str]
agent = Agent(model=...)
result = agent.run("Summarise this document", output_schema=SummaryOutput)
from agno.models.google import Gemini
from agno.agent import Agent
agent = Agent(model=Gemini(thinking_level="high"))
agent.run("Explain the proof of Fermat's Last Theorem")
from agno.tools.nano_banana import NanoBananaTools
agent = Agent(tools=[NanoBananaTools()], ...)
team.print_response("Summarise the threat landscape", show_member_responses=True)
slack_interface = SlackInterface(agent=my_agent, reply_to_mentions_only=False)
from agno.tools.parallel_tools import ParallelTools
agent = Agent(
tools=[ParallelTools()],
...
)
agent.run('Find and summarize the latest research on LLM context management')
from agno.workflow import Workflow, RunContext
def my_step(run_context: RunContext) -> str:
run_context.state['processed'] = True
return 'done'
wf = Workflow(steps=[my_step])
wf.run()
for event in agent.run('Summarise this report', yield_run_output=True, stream=True):
print(event)
from agno.agent import RunContext
def my_tool(query: str, run_context: RunContext) -> str:
previous = run_context.state.get("last_query", "none")
run_context.state["last_query"] = query
return f"Previous query was: {previous}"
from agno.agent import Agent
agent = Agent(model="openai:gpt-5")
agent = Agent(
...
num_history_messages=5,
)
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id='gpt-4o', cache_response=True),
description='A cost-efficient research assistant',
)
agent.print_response('Summarize the history of the Roman Empire')
from agno.agent import Agent
from agno.storage.sqlite import AsyncSqliteDb
storage = AsyncSqliteDb(db_path='tmp/agent_sessions.db')
agent = Agent(storage=storage)
import asyncio
asyncio.run(agent.aprint_response('Hello!'))
agent = Agent(
tools=[...],
max_tool_calls_from_history=5
)
async for event in agent.arun('Summarize the latest reports', stream=True, stream_events=True):
print(event)
await agent.aupdate_session_state({'last_topic': 'network anomalies', 'alert_level': 'high'})
curl -X GET 'https://<agentOS-host>/sessions/<session-id>/runs/<run-id>' \
-H 'Authorization: Bearer <token>'
from agno.workflow import Condition
def my_evaluator(step_output, session_state):
return session_state.get('user_tier') == 'premium'
condition = Condition(evaluator=my_evaluator, ...)
agent = Agent(
...,
store_history_messages=False,
store_tool_messages=False,
)
workflow.run(
...,
stream_intermediate_events=True,
stream_executor_events=False,
)
serve(access_log=True)
agent_os = AgentOS(app=my_fastapi_app, enable_mcp_server=True)
agent = Agent(..., overwrite_db_session_state=True)
from agno.tools.mcp import MultiMCPTools
tools = MultiMCPTools(
servers=["npx -y @modelcontextprotocol/server-github", "npx -y @modelcontextprotocol/server-slack"],
allow_partial_failure=True
)
from agno.agent import Agent
from agno.tools.file_generation import FileGenerationTools
agent = Agent(
tools=[FileGenerationTools()],
description="An agent that can generate and save file artifacts.",
)
agent.print_response("Summarise this dataset and save it as a CSV report.")
def custom_function_step(step_input: StepInput, session_state):
session_state["last_processed"] = step_input.message
return step_input
from typing import TypedDict
from agno.agent import Agent
class ScanInput(TypedDict):
target: str
depth: int
agent = Agent(input_schema=ScanInput)
from agno.client.discord import DiscordClient
from pydantic import BaseModel
class AnalysisResult(BaseModel):
summary: str
risk_level: str
client = DiscordClient(agent=my_agent, response_model=AnalysisResult)
from agno.agent import Agent
from agno.tools.neo4j import Neo4jTools
agent = Agent(
tools=[Neo4jTools(uri='bolt://localhost:7687', user='neo4j', password='<password>')],
show_tool_calls=True,
)
agent.print_response('Find all nodes connected to the user with id 42')
from agno.agent import Agent
from agno.models.openai import OpenAIResponses
agent = Agent(
model=OpenAIResponses(id='o3', summary='auto'),
markdown=True,
)
agent.print_response('Explain the steps to assess a phishing email')
from agno.tools.memori import MemoriTools
agent = Agent(tools=[MemoriTools()], ...)
from agno.models.openai import OpenAIChat
model = OpenAIChat(id="gpt-4o", verbosity=2)
from agno.storage.memory import InMemoryStorage
from agno.agent import Agent
agent = Agent(
storage=InMemoryStorage(),
)
agent.run('Summarize the latest threat intel report.')
from agno.agent import Agent
from agno.tools.trafilatura import TrafilaturaTools
agent = Agent(
tools=[TrafilaturaTools()],
)
agent.run('Extract the main article text from https://example.com/blog/post')
from agno.models.dashscope import DashScope
from agno.agent import Agent
agent = Agent(
model=DashScope(id='qwen-max'),
)
agent.run('List the top five open-source SIEM platforms.')
from agno.team import Team
research_team = Team(
name='Research Team',
role='Gather and synthesize information from web sources to answer factual questions',
members=[...]
)
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id='o3'),
output_model=OpenAIChat(id='gpt-4o-mini'),
)
agent.print_response('Summarise the quarterly results.')
from agno.models.openai import OpenAIChat
model = OpenAIChat(id='gpt-4o', service_tier='flex')
pip install agno[arxiv]
from agno.document.chunking.row import RowChunking
from agno.document.reader.csv_reader import CSVReader
reader = CSVReader(chunking_strategy=RowChunking())
documents = reader.read('alerts.csv')
from agno.tools.bitbucket import BitbucketTools
from agno.agent import Agent
agent = Agent(
tools=[BitbucketTools(username="<username>", password="<app-password>", workspace="<workspace>")],
markdown=True,
)
agent.print_response("List all open pull requests in the agno repo")
from pydantic import BaseModel
from agno.agent import Agent
class ScanRequest(BaseModel):
target: str
depth: int
agent = Agent(model=...)
agent.run(ScanRequest(target="example.com", depth=3))
agent.run('Continue the investigation', session_state={'case_id': 'INC-4821', 'severity': 'high'})
from agno.eval.performance import PerformanceEval
from agno.agent import Agent
eval = PerformanceEval(agent=Agent(), memory_growth_tracking=True)
eval.run()
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(model=OpenAIChat(id="o3-deep-research"))
agent.print_response("Research the latest advances in quantum error correction.")
from agno.agent import Agent
agent = Agent(
model=my_model,
debug_level=2,
)
from agno.models.gemini import Gemini
model = Gemini(
id="gemini-2.0-flash-thinking-exp",
thinking_budget=1024,
include_thoughts=True,
)
from agno.agent import Agent
from agno.tools.valyu import ValyuTools
agent = Agent(tools=[ValyuTools()])
agent.print_response("Find recent papers on retrieval-augmented generation")
agent = Agent(tools=[existing_tool])
agent.add_tool(new_tool)
team = Team(
members=[...],
stream_member_events=False
)
response = agent.run('Analyze the logs')
if response.status == 'CANCELLED':
print('Run was cancelled before completion')
elif response.status == 'PAUSED':
print('Run is awaiting input')
from agno.knowledge.pdf_bytes import PDFBytesKnowledgeBase
import httpx
pdf_bytes = httpx.get('https://example.com/report.pdf').content
kb = PDFBytesKnowledgeBase(pdf_bytes=pdf_bytes)
kb.load()
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id='gpt-4o'),
add_location_to_instructions=True,
)
agent.print_response('What businesses near me are open right now?')
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.serper import SerperTools
agent = Agent(
model=OpenAIChat(id='gpt-4o'),
tools=[SerperTools()],
)
agent.print_response('What are the latest CVEs disclosed this week?')
from agno.agent import Agent
from agno.tools.visualization import VisualizationTools
agent = Agent(
name="ChartAgent",
tools=[VisualizationTools()],
)
agent.print_response("Plot a bar chart of monthly sales: Jan=120, Feb=95, Mar=140")
from agno.agent import Agent
from agno.tools.brave_search import BraveSearch
agent = Agent(
name="WebSearchAgent",
tools=[BraveSearch()],
)
agent.print_response("What are the latest CVEs disclosed this week?")
from agno.agent import Agent
from my_tools import search_tool
agent = Agent(
tools=[search_tool],
tool_call_limit=10,
)
agent.run('Research the latest CVEs in OpenSSL')
agent = Agent(
...
search_previous_sessions_history=True,
)
storage = RedisStorage(
...
expire=3600,
)
from agno.agent import Agent
from agno.tools.user_control_flow import UserControlFlowTools
agent = Agent(
tools=[UserControlFlowTools(), ...],
...
)
from agno.vectordb.mongodb import MongoDBVectorDb
vector_db = MongoDBVectorDb(
connection_string="<your-cosmos-vcore-connection-string>",
database_name="agno_kb",
collection_name="embeddings",
cosmos_compatibility=True,
)
from agno.tools import Toolkit
class MyTools(Toolkit):
def __init__(self):
super().__init__(
stop_after_tool_call_tools=["run_query"],
show_result_tools=["run_query", "fetch_report"],
)
from agno.storage.redis import RedisStorage
storage = RedisStorage(
host="my-redis-host",
port=6380,
ssl=True
)
from agno.vectordb.milvus import Milvus
vdb = Milvus(
collection="my_collection",
hybrid_search=True,
)
agent = Agent(
knowledge=knowledge_base,
enable_agentic_knowledge_filters=True
)
agent.run("Tell me about John Doe's performance review")
knowledge_base = PDFKnowledgeBase(path=[
{"path": "alice_records.pdf", "metadata": {"user_id": "alice"}},
{"path": "bob_records.pdf", "metadata": {"user_id": "bob"}}
])
async def my_retriever(query: str, **kwargs):
results = await async_search(query)
return results
agent = Agent(retriever=my_retriever, ...)
await agent.arun('What does the policy say about data retention?')
from agno.models.openai import OpenAIChat
from agno.agent import Agent
from agno.media import File
agent = Agent(model=OpenAIChat(id='gpt-4o'))
agent.run('Summarize this report.', files=[File(filepath='report.pdf')])
from agno.models.google import Gemini
from agno.agent import Agent
from agno.media import Video
agent = Agent(model=Gemini(id='gemini-2.0-flash'))
agent.run('Describe what happens in this video.', videos=[Video(url='https://example.com/incident.mp4')])
from agno.tools.some_toolkit import SomeToolkit
agent = Agent(
tools=[SomeToolkit(include_tools=["search", "fetch"])],
)
from agno.embedder.azure_openai import AzureOpenAIEmbedder
embedder = AzureOpenAIEmbedder(
client_params={
'api_version': '2024-02-01',
'azure_deployment': 'my-embedding-deployment'
}
)
summary = agent.get_session_summary()
user_memories = agent.get_user_memories()
print(summary)
print(user_memories)
agent.run("What did I order last time?", user_id="user-42", session_id="session-abc123")
team = Team(
members=[agent1, agent2],
knowledge=knowledge_base,
retriever=my_custom_retriever,
search_knowledge=True,
)
agent.print_response(stream_intermediate_resp=True)
from agno.agent import Agent
agent = Agent(
timezone_identifier="America/New_York",
# ... other params
)
from agno.agent import Agent
from agno.tools.reasoning import ReasoningTools
agent = Agent(
tools=[ReasoningTools()],
# ... other params
)
from agno.tools.knowledge import KnowledgeTools
agent = Agent(
knowledge=knowledge_base,
tools=[KnowledgeTools(knowledge=knowledge_base)],
)
from agno.tools.mcp import MultiMCPTools
tools = MultiMCPTools(
commands=[
"npx -y @modelcontextprotocol/server-filesystem /tmp",
"npx -y @modelcontextprotocol/server-brave-search"
]
)
agent = Agent(tools=[tools], ...)
from agno.tools import Toolkit
class MySearchToolkit(Toolkit):
def __init__(self):
super().__init__(
name="my_search",
instructions="Always prefer recent results. Limit queries to 10 words.",
add_instructions=True,
)
def search(self, query: str) -> str:
...
import asyncio
from agno.knowledge.pdf import PDFKnowledgeBase
kb = PDFKnowledgeBase(path='reports/')
asyncio.run(kb.aload())
MCPTools(include_tools=['read_file', 'list_dir'])
Team(members=[...], tools=[my_tool], tool_call_limit=5)
@tool(post_hook=async_post_hook)
async def fetch_data(url: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()
from agno.team import Team
from agno.agent import Agent
research_agent = Agent(name='Researcher', ...)
writer_agent = Agent(name='Writer', ...)
team = Team(
mode='route',
members=[research_agent, writer_agent],
response_model=MyOutputModel,
debug_mode=True,
)
team.print_response('Summarise the latest AI papers')
from agno.agent import Agent
from pydantic import BaseModel
class Report(BaseModel):
title: str
summary: str
agent = Agent(
response_model=Report,
use_json_mode=True,
)
agent.print_response('Generate a threat report')
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.utils.audio import write_audio_to_file
agent = Agent(
model=OpenAIChat(
id="gpt-4o-audio-preview",
modalities=["text", "audio"],
audio={"voice": "alloy", "format": "wav"},
),
)
agent.print_response("Tell me a 5 second story")
if agent.run_response.response_audio is not None:
write_audio_to_file(
audio=agent.run_response.response_audio.base64_audio,
filename="response.wav"
)
from agno.tools.gmail import GmailTools
tools = GmailTools()
thread = tools.get_emails_by_thread(thread_id="<thread_id>")
tools.send_email_reply(thread_id="<thread_id>", message="Thanks, I'll follow up shortly.")
embeddings = GeminiEmbedder("text-embedding-004").get_embedding(
"The quick brown fox jumps over the lazy dog."
)
from agno.agent import Agent
from agno.models.openai import OpenAIChat
agent = Agent(
model=OpenAIChat(id='gpt-4o'),
exponential_backoff=True,
)
agent.print_response('Summarize the latest AI research trends.')
from agno.models.perplexity import Perplexity
from agno.agent import Agent
agent = Agent(model=Perplexity())
agent.print_response('What are the latest developments in AI safety?')
from agno.tools.todoist import TodoistTools
from agno.agent import Agent
agent = Agent(tools=[TodoistTools()])
agent.print_response('Add a task to review the quarterly report by Friday.')
from agno.tools.exa import ExaTools
exa = ExaTools()
results = exa.find_similar('https://example.com/threat-report')
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.pgvector import PgVector
from agno.embedder.ollama import OllamaEmbedder
knowledge_base = PDFUrlKnowledgeBase(
urls=['https://phi-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf'],
vector_db=PgVector(
table_name='recipes',
db_url='postgresql+psycopg://ai:ai@localhost:5532/ai',
embedder=OllamaEmbedder(id='llama3.2', dimensions=3072),
),
)
knowledge_base.load(recreate=True) Summary
Agno is an open-source framework and runtime for agent platforms that allows building, running, and managing agent stacks, with data and memory remaining under the user's control via JWT-based RBAC. It is accessible via an SDK for building agents, an AgentOS runtime, and a web UI for management. This tool targets platform engineers, and its documentation describes it as enabling users to own their agent stack, contrasting it with tools that require outsourcing control. The project maintains active setup instructions demonstrating local deployment via Docker containers.
Build, run, and manage agent platforms.
What Agno answers
How do I set up the platform environment?
A coding agent can set up the platform locally using Docker by following a prompt that directs it to a starter template repository.
What data and state is persisted?
The system uses a Postgres database for storing data and traces.
What components are included in a local setup?
A local setup includes a REST API for serving agents, an MCP server, and a control plane.
What are the options for deploying beyond local Docker?
You can adapt the setup by pointing the deployment prompt to different repository templates like those for AWS, GCP, or Azure.
How do I manage the agents after setting up the platform?
Management is handled through a dedicated web UI component.
What mechanisms enforce who can access what?
Access control is managed using JWT-based Role-Based Access Control (RBAC).
Examples
Command line
No option matches that search.
| option | found in | since | description |
|---|
No option matches that search.
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Release history
- v3.0.4
KnowledgeManagementTools gets granular opt-in flags and per-tool names; AtomicMail warm calls drop from ~35 s to under 3 s
└──▷ GET THIS VERSION$ git clone --branch v3.0.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.4
└──▷ USE ITEnable only safe ingestion tools and explicitly opt in to path ingestion for an agent that needs to load local files into a shared knowledge base.from agno.tools.knowledge import KnowledgeManagementTools km_tools = KnowledgeManagementTools( knowledge_base=my_kb, ingest_url=True, ingest_text=True, ingest_path=True, # opt-in: exposes any path the server process can read remove_content=False, )- ›Renames
KnowledgeManagementToolsconstructor flags to match the tools they register —ingest_url,ingest_path,ingest_text,remove_content— giving per-tool opt-in control;ingest_pathnow defaults to off because underscope='shared'it exposes loaded content to every agent on the knowledge base. - ›Moves
KnowledgeManagementToolstoagno.tools.knowledge;KnowledgeTools(read-only) andKnowledgeManagementTools(write) now share that package, mirroring theagno.tools.mcpandagno.tools.financelayout. - ›Makes
agno.tools.fileandagno.tools.knowledgelazy-loading packages so importingFileToolsno longer pulls inreportlabandpython-docx— saves 44.8 ms on everyFilesystemContextProviderimport. - ›Adds
pow_workersargument to AtomicMail (default min(4, cpu_count())) to parallelise scrypt nonce search across a bounded thread pool, cutting mean solve time from 25.9 s to 10.4 s at difficulty 10. - ›Caches AtomicMail auth context (capability JWT, API URL, account and inbox IDs) on the instance until token expiry, reducing warm tool call latency from ~35 s to 0.4–3 s in both sync and async paths.
└──▷ BREAKING ON UPGRADE- !The
enable_ingestandenable_removeflags onKnowledgeManagementToolsare removed and silently ignored if passed; replace them with the new per-tool flagsingest_url,ingest_path,ingest_text, andremove_content. - !
KnowledgeManagementToolsmoved fromagno.tools.knowledge_managementtoagno.tools.knowledge; anyfrom agno.tools.knowledge_management import KnowledgeManagementToolsimport will break. - !
ingest_pathonKnowledgeManagementToolsnow defaults to off; existing code that relied on it being enabled by default must now passingest_path=Trueexplicitly.
- ›Renames
- v3.0.3
Agno v3.0.3 adds per-page website/folder ingestion, SitemapReader, KnowledgeManagementTools, and new AgentOS knowledge API routes.
└──▷ GET THIS VERSION$ git clone --branch v3.0.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.3
└──▷ USE ITAttach knowledge management tools to an agent so it can ingest, list, and remove knowledge base content at runtime.from agno.agent import Agent from agno.tools.knowledge import KnowledgeManagementTools agent = Agent( tools=[KnowledgeManagementTools(scope="shared")], ) agent.print_response("Ingest https://docs.agno.com and list all loaded pages.", stream=True)Trigger a background re-ingest of a specific knowledge content row via the AgentOS API.$ curl -X POST https://<agentos-host>/knowledge/content/<id>/refresh
List all child rows belonging to a previously ingested site or folder to inspect per-page status.$ curl 'https://<agentos-host>/knowledge/content?parent_id=<parent_id>'- ›Adds
KnowledgeManagementToolswith operationsingest_url,ingest_text,ingest_path,list_content,ingest_status, andremove_content(confirmation required by default), supportingscope="shared"|"user", JSON envelopes, and sync/async variants. - ›Adds AgentOS API route
GET /knowledge/content?parent_id=to list a site's or folder's content rows with correct totals. - ›Adds AgentOS API route
POST /knowledge/content/{id}/refreshto re-run ingest for a URL or path-sourced row in the background. - ›Adds
SitemapReaderthat discovers pages via the sitemap protocol (robots.txtSitemap:lines,/sitemap.xml,/sitemap_index.xml, gzip and nested indexes) with canonical dedup and amax_pagescap; auto-selected for bare sitemap*.xml(.gz) URLs and available in the UI reader dropdown. - ›Adds
HttpxPageFetcherandParallelPageFetcheras fetch seams below URL readers;ParallelPageFetcherresolves Parallel's keyed SDK, then its keyless MCP endpoint, then plain httpx, honoringretry-afterwith exponential backoff and recording per-pageextractorandattemptsprovenance.
+4 moreshow less
- ›Per-page website ingestion stores one content row per page with
content_idmatching its vectors, supporting individual list, refresh, and delete; digest-driven re-ingest skips unchanged pages, replaces only changed pages' vectors, retries failed pages, and prunes removed sitemap entries. - ›Folder ingestion stores a folder row with one child row per file (nested folders flattened), with byte-digest refresh (unchanged files skip read and embed), failure isolation per file, pruning of deleted files, and cascade delete.
- ›
HttpxPageFetcherroutesapplication/pdfresponses and%PDF-bytes served under a wrong content type through PDFReader; a missingpypdfsurfaces as a per-page error namingagno[pdf]. - ›Adds cookbook examples
cookbook/07_knowledge/01_getting_started/05_website_per_page.py(per-page website ingestion) andcookbook/91_tools/knowledge_management_tools.py(management toolkit including folder ingestion).
- ›Adds
- v3.0.2
Agno v3.0.2 adds Synthorai, WaveSpeed, Serply, and AtomicMail integrations plus MCP toolkit publishing and per-provider reasoning detection.
└──▷ GET THIS VERSION$ git clone --branch v3.0.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.2
└──▷ USE ITAdd WaveSpeed image generation to an agent for text-to-image workflows in a script or notebook.from agno.agent import Agent from agno.tools.wavespeed import WaveSpeedTools agent = Agent( tools=[WaveSpeedTools(poll_interval=2, timeout=60)], markdown=True, ) agent.print_response("Generate an image of a futuristic city at night", stream=True)Give an agent its own disposable inbox for automated email tasks — inbox is provisioned once and reused from~/.atomicmail/credentials.json.from agno.agent import Agent from agno.tools.atomicmail import AtomicMailTools agent = Agent( tools=[AtomicMailTools(pow_timeout=300)], markdown=True, ) agent.print_response("Register me an inbox, then check for any new messages.", stream=True)- ›Adds Synthorai model provider (
agno.models.synthorai) readingSYNTHORAI_API_KEY, defaulting tohttps://synthorai.io/v1; resolvesmodel='synthorai:<model-id>'strings via the provider lookup table. - ›Adds
WaveSpeedTools(pip install agno[wavespeed], key fromWAVESPEED_API_KEY) withgenerate_imageandgenerate_videomethods that accept a text prompt, poll withinpoll_intervalandtimeout, and returnToolResultcarrying Image/Video artifacts. - ›Adds
SerplyToolsfor Google web, News, and Scholar search via the Serply API, readingSERPLY_API_KEY; web search is on by default, withsearch_news,search_scholar, andall=Trueenabling additional surfaces. - ›Adds
AtomicMailToolswithregister_inbox,send_email, andlist_inboxover JMAP;register_inboxprovisions a new inbox via proof-of-work signup, credentials cached to~/.atomicmail/credentials.json, withpow_timeout(default 300s) capping the solve. - ›Adds
MCPConfig.toolssupport for Agent, Team, Workflow instances, remote proxies, and component factories, publishing each as its own named MCP tool; component.as_tool(name=..., description=...) lets you control the published name.
+7 moreshow less
- ›Adds
MCPConfig.toolssupport for Toolkit instances, publishing one MCP tool per registered method filtered byenable_*/include_tools/exclude_tools;ToolResultis rendered as MCP content blocks including text, image, audio, embedded resource, andresource_link. - ›Adds
titleandannotationsparameters to as_tool() and@tool/Function, published over MCP for exposed components and built-in tools; unknown annotation keys raise at construction. - ›Adds
query_timeoutparameter to every context provider, applying a wall-clock deadline to eachquery_<id>tool call (requires Python 3.11+), and addswrite_toolsto the five write-capable providers to replace the default write sub-agent toolset. - ›Adds headless Google OAuth support: Google toolkits accept AuthConfig(interactive=False) or env var
GOOGLE_OAUTH_NONINTERACTIVE=1to raise instead of blocking on a browser flow. - ›Adds ScheduleManager.list_all() and alist_all() to page the full schedule catalog, backed by a new
raise_on_errorargument onget_schedules; listings now breakcreated_atties byid. - ›Adds sync, async, and streaming reasoning handlers to
MoonShot(Kimi) readingreasoning_content; routesOpenRouterthrough the OpenAI reasoning path. - ›Native reasoning detection now queries the provider first before falling back to model-id matching; result is cached on the reasoning manager with a 10-second timeout on the Ollama, OpenRouter, and Moonshot paths.
└──▷ BREAKING ON UPGRADE- !MCPConfig/
MCPServerConfignow raise on unrecognised keyword arguments at construction instead of silently ignoring them (e.g. a typo liketool=will fail at boot). - !
BaseRemote.acancel_rungained a requiredauth_tokenkeyword parameter; third-partyBaseRemotesubclasses must accept it. - !
metadataprecedence on Agent, Team, and Workflow changed: ametadata=passed to run() now wins over the component-levelmetadata; code that readagent.metadataafter a run to observe session values now sees only the constructor value. - !Reasoning detection now queries the provider via a blocking HTTP call before model-id matching; a Gemini or Claude model configured for thinking may now be classified as non-reasoning when the provider reports thinking unsupported. Id-based fallbacks also changed:
gpt-5variants match on OpenAI and Azure OpenAI, Groq and Ollama matchgpt-ossandqwen3, andqwen2.5-coderon Ollama is no longer treated as a reasoning model.
- ›Adds Synthorai model provider (
- v3.0.1
Agno v3.0.1 adds a
timeoutparameter toPubmedTools, exportsQueueConfigfromagno.os, and caches tool schemas across runs for faster large-toolkit agents.└──▷ GET THIS VERSION$ git clone --branch v3.0.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.1
└──▷ USE ITPrevent a slow PubMed API response from stalling an agent tool call by setting an explicit request timeout.from agno.tools.pubmed import PubmedTools from agno.agent import Agent agent = Agent( tools=[PubmedTools(timeout=10)], ) agent.print_response("Latest research on CRISPR gene editing", stream=True)- ›Adds
timeoutparameter toPubmedTools, passed to both NCBI E-utilities requests so a stalled PubMed response cannot block a tool call indefinitely. - ›Exports
QueueConfigfromagno.os, making it importable directly from that module. - ›Tool schemas are now derived once and cached across runs, cutting per-run overhead for agents that carry large toolkits.
- ›Session history is now loaded incrementally per turn, keeping response time flat as a conversation grows rather than scaling with its length.
- ›Adds
- docs update
Agno agents gain
media_storageanddelete_mediaoptions to offload and manage session media externally.- ›Adds
media_storageparameter (typeOptional[Union[MediaStorage, AsyncMediaStorage]]) to Agent, enabling offloading of media to external storage while keeping only a reference in the database. - ›Adds
delete_mediaparameter (bool, default False) to Agent, which when True also deletes a session's offloaded media frommedia_storageon session deletion.
- ›Adds
- docs update
Agno adds media storage backends for sessions: local filesystem, Amazon S3, and Google Cloud Storage.
- ›New Media Storage subsystem for persisting session media, with backends for local filesystem, Amazon S3 (S3 Media Storage), and Google Cloud Storage (GCS Media Storage).
- v3.0.0a5
Adds opt-in
self_dispatchknob to the Studio dispatch guard in Agno v3.0.0a5.└──▷ GET THIS VERSION$ git clone --branch v3.0.0a5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.0a5
- ›Adds
self_dispatchopt-in knob to the Studio dispatch guard, allowing agents to be explicitly configured to dispatch to themselves.
- ›Adds
- v3.0.0a4
Agno v3.0.0a4 adds MiniMax video generation tools and switches all telemetry calls to fire-and-forget.
└──▷ GET THIS VERSION$ git clone --branch v3.0.0a4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.0a4
- ›Adds MiniMax video generation tools, extending the 100+ integrations toolkit with AI video synthesis.
- ›Makes all telemetry calls fire-and-forget, eliminating blocking waits on telemetry I/O during agent runs.
- v3.0.0a3
Agno v3.0.0a3 adds CodeMode, media offloading, SuperGrok OAuth, workflow registry, and MigrationRequiredError for stale schemas.
└──▷ GET THIS VERSION$ git clone --branch v3.0.0a3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.0a3
- ›Adds
MigrationRequiredErrorto surface stale database schema errors with an actionable migration path instead of a silent table failure. - ›Adds
CodeModefor agents and teams, enabling result offloading and aresult_storehandle with kernel fixes and execution bounds (3.0 S1). - ›Adds media offloading from the database to local, S3, or GCS storage backends.
- ›Adds SuperGrok OAuth device-code authentication for the xAI model.
- ›Adds workflow registry and zero-config Studio integration for workflows.
+1 moreshow less
- ›Makes
LearningMachinethe sole Studio memory surface, consolidating memory management.
- ›Adds
- v3.0.0a2
Agno v3.0.0a2 adds FinanceTools, RampRouter, user-isolated evals/schedules/knowledge, reliable background execution, and Studio 3.0.
└──▷ GET THIS VERSION$ git clone --branch v3.0.0a2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v3.0.0a2
- ›Adds
FinanceTools— a unified finance toolkit with swappable data providers, replacing scattered individual finance tool integrations. - ›Adds
RampRoutermodel class for the Ramp Router (router.com) provider. - ›Adds
idfield to Toolkit, allowing toolkits to be referenced and tracked by identifier. - ›Requires
human_review=HumanReview(...) for human-in-the-loop configuration — replaces flat HITL kwargs. - ›Adds user-isolation to evals, so evaluation runs are scoped per user.
+7 moreshow less
- ›Adds user-isolation to schedules, metrics, knowledge, and vector DB resources.
- ›Introduces reliable background execution for AgentOS — bounded, observable, and durable agent job processing.
- ›Introduces Studio 3.0, a governed control plane for agents that build agents.
- ›Consolidates AgentOS metadata routes into a unified surface.
- ›Denormalizes the sessions table in the database for improved query performance.
- ›Makes Team and Workflow constructors keyword-only, enforcing explicit argument passing.
- ›Improves
agno createonboarding flow for new platform setup.
└──▷ BREAKING ON UPGRADE- !The
enable_user_memories,search_session_history,num_history_sessions, andnum_past_session_runsparameters are removed; any code passing these will break on upgrade. - !Flat HITL kwargs are removed; callers must now pass
human_review=HumanReview(...) instead. - !The
reasoning=Trueshortcut is removed; callers must now pass an explicitreasoning_modelargument. - !The
culturefeature (experimental) is removed with no replacement. - !The MistralAI v1 compatibility layer is removed; code relying on it will break.
- !Team and Workflow constructors are now keyword-only; positional arguments will raise errors on upgrade.
- !Deprecated v3.0 API surface and unannounced compat surface are removed.
- ›Adds
- v2.9.0
Agno v2.9.0 adds StudioRunnerTools for identity-aware dispatch and hardens MCP tool security and cache isolation
└──▷ GET THIS VERSION$ git clone --branch v2.9.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.9.0
└──▷ USE ITMount StudioRunnerTools on a router agent so it can discover and invoke Studio-built agents and teams on behalf of the authenticated user, without exposing create/edit/delete operations.from agno.tools.studio_runner import StudioRunnerTools router = Agent( name="Router", tools=[StudioRunnerTools()], ... )- ›Adds
agno.tools.studio_runner.StudioRunnerTools, an identity-aware dispatch toolkit that lets any component (team lead, router) discover and run Studio-built agents, teams, and workflows — without exposing Studio's create/edit/delete surface — threading the caller'suser_idinto sub-runs for correct per-user state. - ›Adds a
namefilter parameter tolist_componentsfor narrowing component discovery by name. - ›MCP tool entrypoints no longer accept a call-time
tool_nameoverride; the executed tool name is now closed over fromtool.name, closing a bypass of allow-lists,requires_confirmation, HITL approval, and logging gates. - ›Rehydration of persisted components with unresolvable references now raises
ComponentRehydrationError(anAgnoError,status_code=422) on strict paths — AgentOS lookups and all dispatch paths (POST /runs, continue, MCP run tools, StudioRunner) default tostrict=Trueand return a 422 naming the unresolvable piece instead of silently running a degraded component; publicfrom_dict/loaddefault tostrict=False.
└──▷ BREAKING ON UPGRADE- !MCP tool call-time
tool_nameoverrides are now ignored and forwarded as ordinary arguments instead of selecting the tool to execute; any integration that relied on passingtool_nameat call time to route to a different tool will no longer work as before. - !Tool result cache keys now include
user_idandsession_id, so all prior cache entries composed without those fields will not produce hits after upgrading. - !AgentOS lookups and all dispatch paths (
POST /runs, continue, MCP run tools, StudioRunner) now defaultstrict=Truefor rehydration and return a 422ComponentRehydrationErrorfor unresolvable references instead of silently degrading and running the component.
- ›Adds
- v2.9.0
Agno v2.9.0 adds StudioRunnerTools for identity-aware agent dispatch and hardens MCP tool security and cache isolation.
└──▷ GET THIS VERSION$ git clone --branch v2.9.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.9.0
└──▷ USE ITMount StudioRunnerTools on a router agent so it can discover and run any Studio-built agent or team on behalf of the calling user without gaining create/edit/delete access.from agno.tools.studio_runner import StudioRunnerTools from agno.agent import Agent router = Agent( name="router", tools=[StudioRunnerTools()], instructions="Dispatch user requests to the appropriate Studio component.", )- ›Adds
agno.tools.studio_runner.StudioRunnerTools, a new identity-aware dispatch toolkit that lets any component (team lead, router) discover and run Studio-built agents, teams, and workflows without exposing the Studio's create/edit/delete surface; threads the caller'suser_idinto sub-runs for correct per-user state. - ›Adds a
namefilter parameter tolist_componentsfor targeted component lookup. - ›Rehydration now raises
ComponentRehydrationError(AgnoError,status_code=422) on unresolvable references instead of silently degrading;from_dict/loaddefaultstrict=False, while AgentOS lookups and all dispatch paths (POST /runs, continue, MCP run tools,StudioRunner) defaultstrict=Trueand return a 422 naming the unresolvable piece.
└──▷ BREAKING ON UPGRADE- !MCP tool entrypoints no longer accept a call-time
tool_nameoverride; model-suppliedtool_namearguments are forwarded as ordinary arguments rather than used to select the tool to execute. - !Tool result cache keys now include
user_idandsession_id, so existing cache entries will not match under the new key composition — prior cache hits will not line up. - !AgentOS lookups and all dispatch paths (
POST /runs, continue, MCP run tools,StudioRunner) now defaultstrict=Truefor rehydration and return a 422ComponentRehydrationErrorinstead of running a degraded component when references are unresolvable.
- ›Adds
- v2.8.7
Agno v2.8.7 adds AdvisorTools, OpenRouteService toolkit, and overridable FileSystemTools names
└──▷ GET THIS VERSION$ git clone --branch v2.8.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.7
- ›Adds
AdvisorToolsclass for querying advisor models for feedback on agent outputs. - ›Adds
OpenRouteServicetoolkit for accurate geospatial routing. - ›Allows overriding the
FileSystemToolstoolkit name via the toolkit's name parameter. - ›Adds component-aware schedule tools and history parameters to
StudioTools.
- ›Adds
- v2.8.7
Agno v2.8.7 adds AdvisorTools, OpenRouteService toolkit, and component-aware StudioTools with history parameters.
└──▷ GET THIS VERSION$ git clone --branch v2.8.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.7
- ›Adds
OpenRouteServicetoolkit for accurate geographic routing. - ›Adds component-aware schedule tools and history parameters to
StudioTools. - ›Allows overriding the
FileSystemToolstoolkit name at instantiation time.
- ›Adds
- v2.8.6
Agno v2.8.6 adds Smallest AI TTS tools, OpenSearch vector DB, and a new AgentOS metrics-refresh status endpoint.
└──▷ GET THIS VERSION$ git clone --branch v2.8.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.6
└──▷ USE ITAdd Smallest AI text-to-speech capability to an agent and save audio output to disk.from agno.tools.smallest import SmallestTools from agno.agent import Agent agent = Agent(tools=[SmallestTools(voice_id='<voice_id>', model='lightning_v3.1', output_file='output.wav')]) agent.run('Convert this text to speech: Hello from Agno!')Poll AgentOS for completion of a background metrics refresh instead of waiting for a blocking response.$ curl -X POST 'http://localhost:8000/metrics/refresh?background=true' # Then poll until completed: curl 'http://localhost:8000/metrics/refresh/status'
Use OpenSearch as a vector database backend for hybrid search in a retrieval workflow.from agno.vectordb.opensearch import OpenSearch vectordb = OpenSearch( host='localhost', port=9200, index='my-index', search_type='hybrid' )- ›Adds
SmallestToolstoolkit inagnofor Smallest AI text-to-speech, exposingtext_to_speech(returns audio as aToolResultartifact, optionally saved to disk) andget_voices; supportslightning_v3.1andlightning_v3.1_promodels. - ›Adds
OpenSearchvector database support atagno.vectordb.opensearch, installable via theagno[opensearch]extra, with vector, keyword, and hybrid search in both sync and async variants; includes arun_opensearch.shscript for local setup. - ›Adds
GET /metrics/refresh/statusendpoint to AgentOS to poll the state of a background metrics refresh, returningidle,running,completed, orfailedwithstarted_at,finished_at, anderrorfields. - ›Exposes AgentOSClient.get_metrics_refresh_status() as the client-side counterpart to
GET /metrics/refresh/status. - ›Adds
?background=truequery parameter toPOST /metrics/refresh, returning HTTP 202 immediately and running the refresh as a single-flight background task per database.
+1 moreshow less
- ›Caches the Pydantic version lookup during tool wrapping, cutting repeated-wrap overhead from 65.9 ms to 11.0 ms per 100 wraps.
- ›Adds
- v2.8.6
Agno v2.8.6 adds SmallestAI TTS tools, OpenSearch vector DB support, and a new AgentOS metrics-refresh status endpoint.
└──▷ GET THIS VERSION$ git clone --branch v2.8.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.6
└──▷ USE ITPoll AgentOS for background metrics-refresh completion instead of timing out silently.import time from agentos_client import AgentOSClient client = AgentOSClient() client.post("/metrics/refresh?background=true") while True: status = client.get_metrics_refresh_status() if status["state"] in ("completed", "failed"): print(status) break time.sleep(2)- ›Adds
OpenSearchvector database backend atagno.vectordb.opensearchwith vector, keyword, and hybrid search in sync and async variants; installable via theagno[opensearch]extra. - ›Adds
GET /metrics/refresh/statusAgentOS endpoint reportingidle,running,completed, orfailedstates withstarted_at,finished_at, anderrorfields so clients can poll for completion. - ›Exposes the new metrics-refresh status endpoint on the Python client as AgentOSClient.get_metrics_refresh_status().
- ›Adds
?background=truequery parameter toPOST /metrics/refreshto return HTTP 202 immediately and run the refresh as a single-flight background task per database.
- ›Adds
- v2.8.5
Agno v2.8.5 adds AgentOSTools for platform observability and Moonshot thinking-mode toggle with file/video input support.
└──▷ GET THIS VERSION$ git clone --branch v2.8.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.5
└──▷ USE ITEnable Moonshot extended reasoning for a complex analysis task.from agno.models.moonshot import Moonshot model = Moonshot(use_thinking=True) agent = Agent(model=model) agent.print_response('Analyze the security implications of this architecture')- ›Adds
AgentOSToolsclass, a read-only platform operations toolkit that reports on AgentOS usage, latency, failures, schedules, evals, components, and pending approvals. - ›Adds
use_thinkingparameter to the Moonshot integration to toggle thinking mode. - ›Adds file and video input support to the Moonshot integration.
- ›Adds latency and error stats grouped by agent, team, workflow, or endpoint — plus tool and model call stats — to Traces, implemented for
PostgresDbandSqliteDb.
└──▷ BREAKING ON UPGRADE- !The Moonshot integration default model is changed to
kimi-k3; any setup relying on the previous default model will now usekimi-k3without an explicit override.
- ›Adds
- v2.8.5
Agno v2.8.5 adds AgentOSTools for platform observability, Moonshot thinking mode, and file/video input support.
└──▷ GET THIS VERSION$ git clone --branch v2.8.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.5
└──▷ USE ITEmbed AgentOSTools in an agent to query live platform status — pending approvals, failures, and schedules — from within a conversation.from agno.agent import Agent from agno.tools.agentos import AgentOSTools ops_agent = Agent( tools=[AgentOSTools()], instructions="You are a platform operations assistant. Use AgentOSTools to answer questions about agent health, schedules, and pending approvals.", ) if __name__ == "__main__": ops_agent.print_response("Show me any pending approvals and recent failures.", stream=True)Enable extended reasoning on a Moonshot-backed agent to get chain-of-thought responses for complex tasks.from agno.agent import Agent from agno.models.moonshot import Moonshot agent = Agent( model=Moonshot(id="kimi-k3", use_thinking=True), instructions="Reason step by step before answering.", ) if __name__ == "__main__": agent.print_response("Explain the trade-offs between RAG and fine-tuning.", stream=True)- ›Adds
AgentOSToolsclass providing a read-only platform operations toolkit to report on AgentOS usage, latency, failures, schedules, evals, components, and pending approvals. - ›Adds
use_thinkingparameter to the Moonshot integration to toggle thinking mode. - ›Adds file and video input support to the Moonshot integration.
- ›Adds latency and error stats grouped by agent, team, workflow, or endpoint — plus tool and model call stats — to Traces, implemented for
PostgresDbandSqliteDb. - ›Changes the Moonshot default model to
kimi-k3.
└──▷ BREAKING ON UPGRADE- !The Moonshot integration now defaults to
kimi-k3instead of the previous default model; any setup relying on the former default will silently switch models on upgrade.
- ›Adds
- v2.8.4
Agno v2.8.4 adds TrustedRouter as an OpenAILike model class and revamps entity memory for the second brain.
└──▷ GET THIS VERSION$ git clone --branch v2.8.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.4
- ›Adds
TrustedRouteras anOpenAILikemodel class, enabling use of TrustedRouter as a model backend. - ›Revamps entity memory for the second brain, enhancing how agent memory stores and retrieves entities.
- ›Adds
- v2.8.4
Agno v2.8.4 adds TrustedRouter as an OpenAILike model class and revamps entity memory for the second brain.
└──▷ GET THIS VERSION$ git clone --branch v2.8.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.4
- ›Adds
TrustedRouteras anOpenAILikemodel class, enabling use of TrustedRouter as a model provider within the Agno SDK. - ›Revamps entity memory for the second brain, improving how agents store and recall structured entity information across conversations.
- ›Adds
- v2.8.2
Agno v2.8.2 adds FileSystem, a durable per-agent persistent filesystem with pluggable DB/local backends.
└──▷ GET THIS VERSION$ git clone --branch v2.8.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.2
- ›Adds
FileSystem, a new durable agent filesystem primitive giving agents a private, persistent filesystem with pluggable DB or local backends and fail-closed per-user namespace isolation.
- ›Adds
- v2.8.2
Agno v2.8.2 adds FileSystem, a durable per-agent private filesystem with pluggable DB/local backends and per-user namespace isolation.
└──▷ GET THIS VERSION$ git clone --branch v2.8.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.2
- ›Adds
FileSystem, a new durable state primitive that gives agents a private, persistent filesystem with pluggable database or local backends and fail-closed per-user namespace isolation.
- ›Adds
- v2.8.1
Agno v2.8.1 adds Marengo video embeddings, Slack peer-agent comms flag, and a loop-guard for Learning Stores.
└──▷ GET THIS VERSION$ git clone --branch v2.8.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.1
└──▷ USE ITEnable a Slack-connected agent to respond to messages from other agents in the same workspace.slack_agent = Agent( tools=[SlackTools(respond_to_other_agents=True)], ... )Cap extraction tool calls in a Learning Store to avoid infinite loops during knowledge ingestion.learning_store = LearningStore( extraction_tool_call_limit=5, ... )- ›Adds
respond_to_other_agentsflag to the Slack integration to enable peer-agent communication between Slack-connected agents. - ›Adds
extraction_tool_call_limitto Learning Stores to cap runaway tool calls and prevent infinite loops. - ›Adds
stream_sub_agent_eventssupport across all Context Providers. - ›Adds Marengo video embeddings support to
TwelveLabsTools.
└──▷ BREAKING ON UPGRADE- !The
google_searchmethod inScavioToolsnow targets the Scavio Google v2 API, changing parameter mapping togl,hl, andstartfor localization and paging — existing integrations relying on the v1 API will break.
- ›Adds
- v2.8.1
Agno v2.8.1 adds Marengo video embeddings, a Slack peer-agent flag, and loop-prevention limits for learning stores.
└──▷ GET THIS VERSION$ git clone --branch v2.8.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.1
└──▷ USE ITEnable a Slack-connected agent to respond to messages from other agents in the same workspace.from agno.agent import Agent from agno.tools.slack import SlackTools agent = Agent( tools=[SlackTools(respond_to_other_agents=True)], ) agent.print_response('Check if any peer agents have posted updates in #alerts', stream=True)Cap tool calls during knowledge extraction to prevent runaway loops in a learning store.from agno.learning import LearningStore store = LearningStore( extraction_tool_call_limit=10, )- ›Adds
respond_to_other_agentsflag to the Slack integration to enable peer-agent communication between Slack-connected agents. - ›Adds
extraction_tool_call_limitto Learning Stores to cap tool calls and prevent infinite extraction loops. - ›Adds
stream_sub_agent_eventssupport across all Context Providers. - ›Adds Marengo video embedding support to
TwelveLabsTools.
└──▷ BREAKING ON UPGRADE- !The
google_searchtool inScavioToolsnow targets the Scavio Google v2 API, changing localization and paging behavior for any existing integrations.
- ›Adds
- v2.8.0
Agno v2.8.0 adds a scorer framework, rollout environments for pass@k evaluation, and new Gmail/Adanos/file-generation tools.
└──▷ GET THIS VERSION$ git clone --branch v2.8.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.8.0
└──▷ USE ITExport passing rollout attempts as conversational-SFT JSONL for fine-tuning, with a provenance sidecar automatically included.results.to_sft_jsonl("passing_attempts.jsonl")- ›Adds
agno.scorermodule withCodeScorer(wraps any callable returningbool | float | Score),JudgeScorer(LLM judge with numeric verdicts normalized via(score - 1) / 9), andToolCallScorer(deterministic check of tool executions, rejecting refused, errored, or HITL-rejected calls) — all three ship sync and async variants. - ›Adds
agno.environmentswith Environment, Task, and run_rollouts(env, k=8) to run each task K times in full isolation (fresh db/session/user, no memory/knowledge/learning writes, cache off), enabling pass@k evaluation with a live per-attempt grid and real pass-rate tracking. - ›Adds to_sft_jsonl(...) on the rollout environment to export passing attempts as conversational-SFT JSONL with a provenance sidecar.
- ›Adds
save,load,diff, and learning_zone() methods to the rollout environment for managing and comparing evaluation runs. - ›Adds
Case.scorerfield to plug any scorer into an eval Case alongsideCase.expected; SuiteResult.to_dict() gains additivescore_value,score_passed, andscore_reasonkeys.
+3 moreshow less
- ›Adds
max_results_per_requestparameter and pagination support to Gmail Tools. - ›Adds optional Adanos market sentiment tools.
- ›Adds code file generation capability to
FileGenerationTools.
└──▷ BREAKING ON UPGRADE- !
ReliabilityEvalnow satisfies tool expectations only on a clean execution viaRunOutput.tools(withtool_call_errornot set), not on message-side requests — verdicts that previously passed may flip red after upgrading, with missing entries annotated '... (requested but refused/errored — execution matching, new in 2.8.0)'. Argument checks move toToolExecution.tool_args. - !Every
AgentAsJudgeEvalnow fences judged output behind a per-call random nonce; a literal</output>no longer escapes the block. Judge verdicts and token counts may shift after upgrading.
- ›Adds
- v2.7.4
Agno v2.7.4 adds SuperserveTools, PlivoTools, The Context Company observability, and expanded Telegram/Tavily/Google toolkit methods.
└──▷ GET THIS VERSION$ git clone --branch v2.7.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.7.4
└──▷ USE ITRun agent-generated code in an isolated Firecracker sandbox for a long-running agent task.from agno.agent import Agent from agno.tools.superserve import SuperserveTools agent = Agent(tools=[SuperserveTools()]) agent.print_response('Write and execute a Python script that processes this dataset')Send an SMS or make a voice call from an agent using Plivo credentials.from agno.agent import Agent from agno.tools.plivo import PlivoTools agent = Agent(tools=[PlivoTools()]) agent.print_response('Send an SMS to +15551234567 saying the nightly scan is complete')- ›Adds
SuperserveToolsclass to run agent-generated code and manage files inside Superserve, a Firecracker-based sandbox platform designed for long-running agents. - ›Adds
PlivoToolsclass to send SMS, make voice calls, and look up phone numbers via Plivo. - ›Adds
pin_message,get_chat,get_file, andreact_with_emojimethods toTelegramTools, plussave_downloadsandoutput_directoryoptions to save downloaded files to disk. - ›Adds domain, date range, topic, and country filter parameters to
TavilyToolssearches. - ›Adds observability integration to trace agent runs with The Context Company.
+3 moreshow less
- ›Enhances
agno createwith interactive starter template and project name prompts, four new starters (Azure, Helm, Modal, Render), and automatic.envseeding. - ›Enables
OxylabsToolsto return full page content as Markdown. - ›Workflows now accept
run_contextin Router selectors and Condition evaluators (deprecatingsession_state).
- ›Adds
- v2.7.3
Agno v2.7.3 adds ValkeyDb storage and vector store, RedmineTools, TokenLab provider, and AG-UI human-in-the-loop support
└──▷ GET THIS VERSION$ git clone --branch v2.7.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.7.3
- ›Adds
ValkeyDbas a fast in-memory database backend for agents, teams, and workflows. - ›Adds
ValkeyDBvector store with both vector and keyword search capabilities. - ›Adds
RedmineToolsto manage issues, comments, and time logs against a Redmine project management instance. - ›Adds
TokenLabas a new OpenAI-compatible model provider. - ›Extends AG-UI with human-in-the-loop confirmation, input, and feedback flows.
- ›Adds
- v2.7.2
Agno v2.7.2 adds OAuth on the AgentOS MCP endpoint, AG-UI client tools, and multi-target agno connect enhancements.
└──▷ GET THIS VERSION$ git clone --branch v2.7.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.7.2
└──▷ USE ITEnable OAuth-protected MCP access on an AgentOS instance so only authenticated clients can connect.from agno.agent_os import AgentOS agent_os = AgentOS(mcp_auth=...)
- ›Adds
mcp_authparameter to AgentOS(...) to configure OAuth support on the AgentOS MCP endpoint. - ›Renames
AgentOSparameterenable_mcp_servertomcp_serverand folds inmcp_config. - ›Adds
client_toolssupport for AG-UI frontend tools. - ›Enhances
agno connectwith multi-target select,disconnect, restart hints, and identity-named entries.
└──▷ BREAKING ON UPGRADE- !The
enable_mcp_serverparameter onAgentOSis renamed tomcp_server; existing code usingenable_mcp_serverwill break.
- ›Adds
- v2.7.0
Agno v2.7.0 adds service account PATs, a full CLI (
agnoctl), MCP Interface v2, an eval suite runner, and a discovery endpoint.└──▷ GET THIS VERSION$ git clone --branch v2.7.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.7.0
└──▷ TRY ITWire up all supported coding-agent MCP clients (Claude Code, Cursor, Codex, etc.) to a running AgentOS in one step, minting a named shared PAT.$ uvx agno connect --name ci-bot
Rotate a compromised PAT without touching your AgentOS deployment.$ agno tokens revoke agno_pat_abc123xyz- ›Adds
agno connectcommand (viauvx agno connect) that discovers an AgentOS, mints per-client PATs (--namefor a shared token), writes MCP config for Claude Code, Claude Desktop, Cursor, Codex, and ChatGPT, and verifies each connection — no manual JSON editing. - ›Adds
agno tokens create/list/revokecommands to mint, inventory, and rotate Personal Access Tokens (agno_pat_...machine identities) with SHA-256-hashed storage, per-user scoping, and revocation support. - ›Adds
agno createcommand to scaffold a new AgentOS project from a template (agentos-<provider>). - ›Adds
agno up,agno down,agno restart, andagno statuscommands for lifecycle management of local AgentOS deployments. - ›New
agnoctlCLI distributed on PyPI and invoked asagno— the unified command surface for all of the above.
+6 moreshow less
- ›New
agno.evalpackage introducing Case andrun_caseswith a CLI runner supporting team subjects and numeric judge scoring. - ›New
GET /infodiscovery endpoint reportingagno_version,mcp.enabled,mcp.path, andauth_modeso external tooling can inspect an AgentOS before connecting. - ›New MCP Interface v2 exposes an 8-tool operator surface at
/mcp:get_agentos_config,run_agent,run_team,run_workflow,continue_run,cancel_run,get_sessions, andget_session_runs; includes MCP progress notifications for long-running tools and a HITL continue/cancel lifecycle. - ›Adds
result_mode="full"escape hatch inMCPServerConfigto opt out of the new trimmed run-result shape. - ›Single
AuthMiddlewareon the parent app now covers REST,/mcp, and WebSocket transports; JWTMiddleware is preserved as an alias for backward compatibility. - ›A2A/AGUI routes now enforce authorization (scope-mappings merged per-interface at the mount prefix, gating custom prefixes too).
└──▷ BREAKING ON UPGRADE- !MCP surface shrunk from 19 to 8 tools — session-write and memory-CRUD tools are no longer exposed via MCP; MCPServerConfig(include_tags={"memory"}) now fails Pydantic validation and callers must use REST endpoints instead.
- !MCP run results are trimmed by default — clients consuming the raw
RunOutputshape must handle the new trimmed shape or setresult_mode="full"inMCPServerConfig. - !AgentOS(authorization=True) without JWT keys now raises
ValueErrorat construction instead of silently serving an open instance; setJWT_VERIFICATION_KEYorJWT_JWKS_FILEenv vars, or passverification_keys/jwks_fileviaauthorization_config. - !The
AGNO_OS_URLenvironment variable is renamed toAGENTOS_URL; any environment or CI config referencing the old name must be updated.
- ›Adds
- v2.6.22
Agno v2.6.22 adds TwelveLabsTools, SofyaTools, and SearchApiTools plus a base Toolkit timeout parameter.
└──▷ GET THIS VERSION$ git clone --branch v2.6.22 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.22
└──▷ USE ITIntegrate TwelveLabs video analysis into an Agno agent to analyze uploaded video content.from agno.tools.twelvelabs import TwelveLabsTools tools = TwelveLabsTools() agent = Agent(tools=[tools])
- ›Adds
TwelveLabsToolsclass for video analysis and multimodal text embedding generation via the TwelveLabs API. - ›Adds
SofyaToolsclass exposing search, extract, and research capabilities. - ›Adds
SearchApiToolsclass with Google, News, Images, and YouTube search methods. - ›Adds
timeoutparameter to the base Toolkit class, wiring HTTP timeouts across tools and extending timeout support to additional toolkits.
- ›Adds
- v2.6.21
LocalFileSystemTools gains file-read support and directory confinement controls via new flags.
└──▷ GET THIS VERSION$ git clone --branch v2.6.21 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.21
└──▷ USE ITAllow an agent to read files while keeping all operations inside a sandboxed directory.from agno.tools.local_file_system import LocalFileSystemTools tools = LocalFileSystemTools( target_directory="/data/agent-workspace", enable_read_file=True, restrict_to_base_dir=True, )- ›Adds
enable_read_fileflag toLocalFileSystemToolsto expose a read-file tool to agents. - ›Adds
restrict_to_base_dirflag toLocalFileSystemToolsto confine all file operations withintarget_directoryby default; setrestrict_to_base_dir=Falseto opt out.
- ›Adds
- v2.6.20
Agno v2.6.20 adds ClickHouse trace storage, Scavio search, LiteLLM structured outputs, and OpenAI web-search citations.
└──▷ GET THIS VERSION$ git clone --branch v2.6.20 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.20
└──▷ USE ITEnable native structured outputs for a LiteLLM provider that supports the feature natively.from agno.models.litellm import LiteLLM model = LiteLLM( model="openai/gpt-4o", supports_native_structured_outputs=True, )Read citations returned from an OpenAI web-search response to attribute sources in your application.from agno.models.openai import OpenAIChat from agno.agent import Agent agent = Agent(model=OpenAIChat(id="gpt-4o")) response = agent.run("What happened in AI news today?") print(response.citations)- ›Enables
supports_native_structured_outputsandsupports_json_schema_outputsper-provider flags on LiteLLM to activate native structured outputs and JSON schema outputs. - ›Surfaces web-search citations on
response.citationsforOpenAIChatandOpenAILikeproviders. - ›Adds ClickHouseDB as a backend for high-volume trace ingest and OLAP scans.
- ›Adds a new Scavio search toolkit integration.
- ›Removes the hard cap on
quick_prompts(previously limited to 3) per agent, team, or workflow in AgentOS.
+1 moreshow less
- ›Supports
FastAPI >= 0.137so get_routes() lists every registered route.
- ›Enables
- v2.6.19
Agno v2.6.19 adds tool-batch checkpointing with a unified
/continueendpoint and a newStudioToolfor dynamic agent/team/workflow composition.└──▷ GET THIS VERSION$ git clone --branch v2.6.19 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.19
└──▷ USE ITUse raw regex strings in PII guardrail patterns without pre-compiling them.from agno.guardrails import PIIDetectionGuardrail guardrail = PIIDetectionGuardrail( custom_patterns=[r'\b\d{3}-\d{2}-\d{4}\b', r'\bACCT-\d{8}\b'] )- ›Adds
StudioTooltoolkit for dynamic composition of agents, teams, and workflows at runtime. - ›Adds tool-batch-level checkpointing and a unified
/continueendpoint supporting both regenerate and fork-a-run workflows, plus session forking support. - ›Extends
custom_patternsonPIIDetectionGuardrailto accept raw regex strings in addition to compiled patterns. - ›ClickHouse and Pinecone vector DBs now expose their supported search types via get_supported_search_types().
- ›Adds
- v2.6.15
Agno v2.6.15 adds identity-aware, scoped MCP tool registration via a single
MCPServerConfigobject└──▷ GET THIS VERSION$ git clone --branch v2.6.15 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.15
- ›Adds
MCPServerConfigto configure the AgentOS MCP server (/mcp): register custom tools (plain callables or Agno@tool/Functions), scope built-ins withenable_builtin_tools=False, filter withinclude_tags/exclude_tags, inject the authenticated caller's JWT subject via a declareduser_idparameter (hidden from the client schema), gate calls with anauthorizefunction, and enable DNS-rebinding protection viaallowed_hosts/allowed_origins— all in data, no custom middleware classes required.
- ›Adds
- v2.6.14
Agno v2.6.14 adds CRUD endpoints for learnings on AgentOS.
└──▷ GET THIS VERSION$ git clone --branch v2.6.14 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.14
- ›Adds create, read, update, and delete endpoints for learnings on AgentOS.
- v2.6.13
Agno v2.6.13 adds sub-agent event streaming, AgentOS registry auto-population, socket-based HITL workflows, and a Slack app manifest.
└──▷ GET THIS VERSION$ git clone --branch v2.6.13 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.13
- ›Sub-agent events from the context provider update tool now stream through to the parent run, enabling real-time observability of nested agent activity.
- ›The AgentOS registry now auto-populates from agents, teams, and workflows, eliminating manual registration.
- ›Adds socket support for human-in-the-loop (HITL) workflows, enabling interactive pause-and-resume over persistent socket connections.
- ›Adds a Slack app manifest for the AgentOS interface, simplifying Slack app setup and deployment.
- v2.6.12
Agno v2.6.12 adds HTML file generation, AG-UI state events, and Tuning Engines as a new model provider
└──▷ GET THIS VERSION$ git clone --branch v2.6.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.12
- ›Adds Tuning Engines as a new model provider, expanding the range of backends agents can target.
- ›Adds AG-UI state events support, enabling state change signaling within the AG-UI protocol.
- ›Adds HTML file generation support with an example app, allowing agents to produce HTML file outputs.
- ›Adds Latitude via OpenInference as an observability integration example.
- ›Adds WorkOS example for role-based access control (RBAC).
+1 moreshow less
- ›Upgrades MiniMax default model to M3.
- v2.6.11
Agno v2.6.11 adds Task API and Monitor API tools for parallel web plus a new Manifest for AgentOS UI metadata.
└──▷ GET THIS VERSION$ git clone --branch v2.6.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.11
- ›Adds Manifest for per-entity AgentOS UI metadata configuration.
- ›Adds Task API and Monitor API integration tools for parallel web workflows.
- v2.6.10
Agno v2.6.10 adds four new model providers, YouTools, DOCX generation, context-provider streaming, and a
filesfield onRunCompleted.└──▷ GET THIS VERSION$ git clone --branch v2.6.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.10
└──▷ USE ITUse You.com search inside an agent to ground responses in live web results.from agno.agent import Agent from agno.tools.you import YouTools agent = Agent(tools=[YouTools()], show_tool_calls=True) agent.print_response('What are the latest AI model releases this week?')- ›Adds
filesfield on theRunCompletedevent, exposing generated files at run completion. - ›Adds
YouToolsclass for You.com Search API integration. - ›Adds DOCX file generation support.
- ›Adds
google-interactionsprovider to the model string parser. - ›Adds knowledge and managers support in the agent registry.
+6 moreshow less
- ›Streams sub-agent events from context providers.
- ›Persists cancelled runs properly for agents, teams, and workflows.
- ›Adds Inception Labs model provider integration.
- ›Adds Xiaomi MiMo model provider.
- ›Adds MiniMax model provider (M2.7).
- ›Adds Cloudflare AI Gateway model provider.
- ›Adds
- v2.6.9
Agno v2.6.9 exposes full resolved approval records to post-hooks via
run_response.metadata["approval"]└──▷ GET THIS VERSION$ git clone --branch v2.6.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.9
└──▷ USE ITInspect who approved (or rejected) a run inside a post-hook — useful for audit logging or conditional downstream actions.def my_post_hook(run_response): approval = run_response.metadata.get("approval") if approval: print(approval["resolved_by"], approval["resolved_at"])- ›Adds
cookbook/07_knowledge/04_advanced/06_prefix_search.pydemonstrating the help-center typeahead use case for PgVector(prefix_match=True).
- ›Adds
- v2.6.8
Agno v2.6.8 adds Antigravity API support, Gemini managed agents (Deep Research + Antigravity), and centralized path-safety utilities.
└──▷ GET THIS VERSION$ git clone --branch v2.6.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.8
└──▷ USE ITUsesafe_jointo safely resolve user-supplied paths and avoid path-traversal vulnerabilities in custom tools.from agno.utils.path_safety import safe_join, PathSecurityError try: safe_path = safe_join("/var/app/uploads", user_input_filename) except PathSecurityError as e: print(f"Blocked unsafe path: {e}")- ›Adds
AntigravityAgent(aBaseExternalAgentserved through AgentOS with native sessions, streaming, and UI) for first-party Google Antigravity API integration. - ›Adds
AntigravityTools(a Toolkit) so any Agno agent can delegate sub-tasks to a managed Antigravity sandbox. - ›Adds
GeminiInteractionssupport for Google's managed Deep Research agent — autonomous research with citations, background streaming with reconnect, andlast_event_idresume. - ›Adds
GeminiInteractionssupport for Google's managed Antigravity agent — general-purpose agent running in a managed Linux sandbox. - ›Adds
agent,agent_config, andenvironmentfields toGeminiInteractionsfor selecting and configuring managed agents, with per-agent forcing ofbackgroundandstore.
+5 moreshow less
- ›Adds
mcp_serversandfile_search_store_namessupport on theGeminiInteractionsagent path. - ›Introduces
agno.utils.path_safetymodule withsafe_joinandsafe_join_subpath, hardeningFileGenerationTools,SlackTools,Toolkit._check_path,agno.skills.utils.is_safe_path, andFileTools.check_escapeagainst path traversal, symlink escape, control-char injection, Windows MagicDot, and Unicode normalization attacks. - ›Introduces
PathSecurityError(raised on path-safety violations);FileGenerationSecurityErroris kept as a deprecation alias. - ›Adds 18 self-contained data-labeling workflows to
cookbook/data_labeling/, covering text, image, audio, video, document, and composed (LLM-as-judge, quality review) labeling primitives. - ›Adds a deterministic Slack HITL incident-commander demo to
cookbook/, demonstrating structured pauses viatool_choice='required', user-input echo, and clean termination viastop_after_tool_call=True.
└──▷ BREAKING ON UPGRADE- !The
available_modelsfield is removed fromEvalsDomainConfig; the only supported source for the Evals UI dropdown is nowAgentOSConfig.available_models.
- ›Adds
- v2.6.7
Agno v2.6.7 adds GeminiInteractions model, per-user AgentOS data isolation, and an
allowed_hostsguard on URL-fetching knowledge readers.└──▷ GET THIS VERSION$ git clone --branch v2.6.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.7
└──▷ USE ITInstantiate the new stateful Gemini interactions model when you need multi-turn conversation state managed server-side by Google.from agno.models.gemini import GeminiInteractions model = GeminiInteractions()
Restrict a URL-fetching knowledge reader to only allowed domains, preventing unintended outbound SSRF-style fetches.from agno.knowledge.url import URLKnowledgeBase kb = URLKnowledgeBase( urls=["https://docs.example.com/sitemap.xml"], allowed_hosts=["docs.example.com"], )- ›Adds
GeminiInteractionsmodel class to leverage Google's stateful interactions API. - ›Adds
allowed_hostsparameter to URL-fetching knowledge readers to restrict which hosts agents may fetch from. - ›Adds opt-in per-user data isolation layer for AgentOS authenticated endpoints.
- ›Adds
- v2.6.6
Agno v2.6.6 adds Slack HITL multi-row approvals and a NotionDatabaseBackend for wiki context.
└──▷ GET THIS VERSION$ git clone --branch v2.6.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.6
- ›Adds
NotionDatabaseBackendto theWikiContextProvider, enabling Notion databases as a knowledge source for agents. - ›Adds HITL multi-row approvals with all pause types to the Slack interface.
- ›Warns on duplicate tool names when registering tools on an agent or team.
- ›Adds
- v2.6.5
Agno v2.6.5 adds Gemini multimodal file search, Gmail/Calendar context providers, Mongo scheduler support, and new workflow error handling.
└──▷ GET THIS VERSION$ git clone --branch v2.6.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.5
└──▷ USE ITRestrict an agent's LLMsTxt fetching to only trusted domains to prevent SSRF-style abuse in agentic pipelines.from agno.tools.llms_txt import LLMsTxtTools tools = LLMsTxtTools(allowed_hosts=["docs.example.com", "api.example.com"])
Enable file download and upload capabilities in a Slack-connected agent for workflows that need to handle attachments.from agno.context.slack import SlackContextProvider provider = SlackContextProvider(enable_media_tools=True)
- ›Adds
allowed_hostsparameter toLLMsTxtToolsso agents only fetch from explicitly trusted hosts. - ›Adds
enable_media_toolsflag (default: False) toSlackContextProviderto control file download/upload; when enabled, exposesdownload_filein read tools andupload_filein write tools. - ›Adds
on_errorhandling to the Condition workflow step, giving control over error propagation when sub-steps fail. - ›Adds
GmailContextProviderandCalendarContextProvider, following the same pattern as existingGDriveContextProvider,SlackContextProvider, andDatabaseContextProvider. - ›Extends
GDriveContextProviderto support OAuth authentication in addition to service account auth.
+2 moreshow less
- ›Adds scheduler support for
MongoDbandAsyncMongoDbbackends, enabling agents, teams, and workflows to run on a cron schedule in AgentOS. - ›Adds multimodal support in the Gemini File Search API (requires
google-genai>=1.75.0), enabling image and other media types alongside text in file search workflows.
- ›Adds
- v2.6.4
Agno v2.6.4 adds WikiContextProvider with filesystem, git, and web backends plus read/write control.
└──▷ GET THIS VERSION$ git clone --branch v2.6.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.4
- ›Adds
WikiContextProviderclass with filesystem and git backends, web ingestion support, and read/write flags for controlling access.
- ›Adds
- v2.6.3
Agno v2.6.3 adds WorkspaceContextProvider for project-aware repo context and expands SlackContextProvider with opt-in workspace search.
└──▷ GET THIS VERSION$ git clone --branch v2.6.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.3
└──▷ USE ITEnable Slack workspace search in SlackContextProvider for broader channel discovery without using the removed factory methods.from agno.context.slack import SlackContextProvider provider = SlackContextProvider(enable_workspace_search=True) context = provider.get_context()
- ›Adds
WorkspaceContextProvider, a project-aware context provider for repository roots backed by the read-only Workspace toolkit instead of genericFileTools; centralizes local filesystem exclude patterns so bothFileToolsand Workspace skip.context,.venvs, and other agent/dependency/build noise by default. - ›Adds
exclude_patternsparameter toFilesystemContextProviderfor explicit opt-out or customization of filesystem exclusions. - ›Adds opt-in
enable_workspace_searchparameter toSlackContextProvider; tools are now self-documenting viaSlackTools, removing runtime agent switching. - ›Removes for_bot_read(), for_assistant_search(), and for_write() factory methods from
SlackContextProviderin favor of explicit flags for direct construction.
└──▷ BREAKING ON UPGRADE- !The for_bot_read(), for_assistant_search(), and for_write() factory methods have been removed from
SlackContextProvider; callers must switch to explicit flags on construction.
- ›Adds
- v2.6.2
Agno v2.6.2 adds a Workspace toolkit giving agents read/write/shell access to a local directory tree with HITL confirmation gates.
└──▷ GET THIS VERSION$ git clone --branch v2.6.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.2
- ›Adds
WorkspaceToolstoolkit exposingread,list,search,write,edit,move,delete, andshelloperations scoped to arootdirectory tree, with destructive operations gated by Agno's built-in human-in-the-loop confirmation by default.
- ›Adds
- v2.6.1
Agno v2.6.1 adds multi-block Claude prompt caching, a ParallelMCPBackend for web search, and deterministic tool ordering across all model providers.
└──▷ GET THIS VERSION$ git clone --branch v2.6.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.1
└──▷ USE ITEnable tool-prefix caching on Claude so repeated calls with the same tool set skip re-encoding the tool definitions.from agno.models.anthropic import Claude model = Claude(id="claude-opus-4-5", cache_tools=True)
Use ParallelMCPBackend for web search and fetch inside an agent, with a higher-rate-limit API key.import os from agno.agent import Agent from agno.tools.web_context import WebContextProvider from agno.tools.mcp.parallel import ParallelMCPBackend os.environ["PARALLEL_API_KEY"] = "<your-key>" agent = Agent( tools=[WebContextProvider(backend=ParallelMCPBackend())] )- ›Adds
system_prompt_blocks: List[SystemPromptBlock]field on Claude — each block carriestext,cache, and an optional per-blockttl("5m"or"1h") that overrides the model-levelextended_cache_timeflag. - ›Adds
cache_tools: boolfield on Claude (Anthropic, AWS Bedrock, and VertexAI) to attachcache_controlto the last tool so the tool prefix is cached. - ›Adds
ParallelMCPBackendas a new web backend forWebContextProvider, connecting tosearch.parallel.ai/mcpand exposingweb_searchandweb_fetch(compressed markdown output); keyless by default, Bearer-auth viaPARALLEL_API_KEYfor higher rate limits, and optional OAuth viause_oauth=True; defaults to a 30s timeout. - ›Deterministic tool ordering in
Model._format_tools(sort by name) keeps request prefixes stable across runs so prompt caches actually hit; applies across Anthropic, OpenAI, Gemini, and Bedrock. - ›Maps the
"openai:"model string prefix toOpenAIResponses(e.g. Agent(model="openai:gpt-5.4") resolves to OpenAIResponses(id="gpt-5.4")); adds"openai-chat:"prefix as a fallback for users who still needOpenAIChat.
- ›Adds
- v2.6.0
Agno v2.6.0 adds HITL for Teams and Workflows, runtime Factories, multi-framework AgentOS support, and a new Context Provider API.
└──▷ GET THIS VERSION$ git clone --branch v2.6.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.6.0
└──▷ TRY ITFilter the/sessionsendpoint by type to retrieve only workflow sessions after the default-all-types change.$ curl -X GET 'https://<agentOS-host>/sessions?type=workflow' \ -H 'Authorization: Bearer <token>'
- ›Adds
AgentFactory,TeamFactory, andWorkflowFactoryfor dynamically creating Agents, Teams, and Workflows at runtime, enabling multi-tenant use cases. - ›Adds
agno.context— a first-party API for plugging external sources (filesystem, web, SQL database, Slack, Google Drive, MCP server) into an agent as a natural-language tool. - ›Adds an API layer for Team human-in-the-loop (HITL) with support in the
AgentOSchat page, including Team Approvals. - ›Adds executor-level HITL support for Workflow steps (
WorkflowExecutor) when a pause-tool flow is configured on an agent or team within a workflow step. - ›Adds reconnection and resume capability for Agent/Team runs using SSE in AgentOS, allowing interrupted sessions to continue from where they left off.
+1 moreshow less
- ›Adds multi-framework support (Beta) in AgentOS for
ClaudeAgentSDK, Langgraph, and DSPy via a unifiedAgentProtocolbackbone.
└──▷ BREAKING ON UPGRADE- !The
/sessionsendpoint now returns all session types (agent, team, and workflow) by default instead of a filtered subset; existing callers that relied on a single type must add?type=agent,?type=team, or?type=workflowto their requests to restore the previous behaviour.
- ›Adds
- v2.5.17
Agno v2.5.17 adds per-request GitHub repo targeting and a toggle to disable Claude file citations.
└──▷ GET THIS VERSION$ git clone --branch v2.5.17 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.17
- ›Adds option to disable Claude file citations (PR #7511).
- ›Allows
GitHubConfigrepo to be specified per request rather than only at configuration time (PR #7496).
- v2.5.16
Agno v2.5.16 adds LLMsTxtTools, SalesforceTools, Azure AI Foundry Claude, and OpenAI Responses background mode
└──▷ GET THIS VERSION$ git clone --branch v2.5.16 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.16
- ›Adds
LLMsTxtToolsandLLMsTxtReaderclasses for consuming the llms.txt standard, enabling agents to index LLM-friendly documentation from sites that expose a/llms.txtendpoint (e.g.https://docs.agno.com/llms.txt). - ›Adds
SalesforceToolsfor integrating Salesforce CRM data and actions into agents. - ›Adds Azure AI Foundry Claude as a new model provider.
- ›Adds background mode support for the OpenAI Responses API.
- ›Adds
- v2.5.15
Agno v2.5.15 adds Team skills, nested workflows, post-execution HITL output review, and new SessionSummaryManager controls.
└──▷ GET THIS VERSION$ git clone --branch v2.5.15 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.15
└──▷ TRY ITEnable full tracebacks in error logs during development to diagnose agent failures without changing code.$ AGNO_LOG_TRACEBACKS=true python my_agent.pyLimit how much history is fed into session summaries to keep token costs predictable for long-running sessions.from agno.memory import SessionSummaryManager summary_manager = SessionSummaryManager( last_n_runs=10, conversation_limit=4000 )- ›Adds
requires_output_reviewon Step, Router, and Loop to pause a workflow after a step runs and allow human review, approval, rejection with feedback, retry, or output editing before execution continues. - ›Consolidates HITL parameters into a
HumanReviewconfig class — passhuman_review=HumanReview(...) on Step, Loop, and Router instead of flat params; fully backward compatible. - ›Adds
last_n_runsandconversation_limitparameters toSessionSummaryManagerto control how much conversation history is included when generating session summaries. - ›Adds
AGNO_LOG_TRACEBACKSenvironment variable (opt-in, off by default) to enable full tracebacks inlog_errorandlog_warning. - ›Adds skills support to Team, enabling teams to use shared skill sets.
+1 moreshow less
- ›Supports nested workflows — a Workflow can now be used as a step inside another Workflow.
- ›Adds
- v2.5.14
Agno v2.5.14 adds fallback model chains for Agents and Teams, SAS token auth for Azure Blob, and a Slack workspace search tool.
└──▷ GET THIS VERSION$ git clone --branch v2.5.14 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.14
└──▷ USE ITRoute traffic to Claude automatically when a primary OpenAI-compatible endpoint is unavailable — useful for self-hosted or rate-limited model endpoints in production.agent = Agent( model=OpenAIChat(id="gpt-4o", base_url="http://localhost:1/v1", retries=0), fallback_models=[Claude(id="claude-sonnet-4-20250514")], )- ›Adds
fallback_modelsparameter to Agent and Team constructors, letting you specify an ordered list of backup models (e.g. Claude) that are tried automatically when the primary model fails. - ›Adds SAS token authentication support to
AzureBlobConfigfor Azure Blob Storage connections. - ›Adds a workspace search tool to
SlackTools.
- ›Adds
- v2.5.13
Agno v2.5.13 adds a
/infometadata endpoint, richer/sessionslist fields, Slack show_member_tool_calls param, and ReliabilityEval subset matching.└──▷ GET THIS VERSION$ git clone --branch v2.5.13 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.13
└──▷ USE ITShow member tool calls inline when streaming agent responses to a Slack channel.from agno.interface.slack import SlackInterface slack = SlackInterface( agent=my_agent, show_member_tool_calls=True, )- ›Adds
show_member_tool_callsparam to the Slack Interface, plus automatic card overflow rotation that starts a new message when text exceeds the threshold. - ›Enhances the AgentOS
/sessionslist API to return additional fields:user_id,agent_id,team_id,workflow_id,session_summary,metrics,total_tokens, andmetadata. - ›Adds the AgentOS
/infoAPI endpoint — a lightweight, unauthenticated call that returns agent, team, and workflow counts as instance metadata. - ›Adds subset matching, argument validation, and missing tool call tracking to
ReliabilityEval, with multi-round tool call collection support. - ›Implements dynamic batch splitting for large upsert/query operations in ChromaDB.
+2 moreshow less
- ›Propagates
chunk_sizeto default chunking strategies in reader classes. - ›Enables channel summarization in the Slack interface.
- ›Adds
- v2.5.12
Agno v2.5.12 adds Docling tool integration and a new SchedulerTools toolkit for agent-driven schedule management.
└──▷ GET THIS VERSION$ git clone --branch v2.5.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.12
- ›Adds
SchedulerToolstoolkit, enabling agents to programmatically manage schedules. - ›Adds
DoclingToolintegration with tests and cookbook example for document parsing and conversion within agents.
- ›Adds
- v2.5.11
Agno v2.5.11 adds Google Slides toolkit, GoogleAuth, PerplexitySearch, cross-model tool call compatibility, and custom prompts for AgenticChunking.
└──▷ GET THIS VERSION$ git clone --branch v2.5.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.11
- ›Adds
GoogleAuthtoolkit and shared auth decorator to unify authentication across Google toolkits. - ›Adds
GoogleSlidesToolstoolkit for creating, editing, and managing Google Slides presentations. - ›Adds
PerplexitySearchtoolkit for integrating Perplexity-powered web search into agents. - ›Adds custom prompt support to
AgenticChunking, allowing callers to control how chunks are split. - ›Adds cross-model tool call compatibility to support interchanging models within the same agent pattern.
+1 moreshow less
- ›Rewrites
GoogleDriveToolswith smart export and async support.
- ›Adds
- v2.5.10
Agno v2.5.10 adds Telegram interfaces, Docling document reader, MLflow tracing, WhatsApp V2 media/interactive support, and Vertex AI parallel search.
└──▷ GET THIS VERSION$ git clone --branch v2.5.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.10
└──▷ USE ITPass run-level dependency and session-state context when triggering a workflow programmatically.workflow.run( metadata={"run_label": "nightly"}, dependencies={"db": my_db_client}, add_dependencies_to_context=True, add_session_state_to_context=True )Set a request timeout on a Gemini model to avoid hanging agent runs in production.from agno.models.gemini import Gemini model = Gemini(id="gemini-2.0-flash", timeout=30)
- ›Adds
enable_encryptionparameter to the WhatsApp Interface V2 for encrypting phone numbers. - ›Adds
versionquery parameter toGET /workflows/{id}to fetch specific workflow versions. - ›Adds run-level parameters
metadata,dependencies,add_dependencies_to_context, andadd_session_state_to_contextto Workflow.run() and arun(). - ›Adds
timeoutparameter to the Gemini model class. - ›New Telegram interfaces for AgentOS supporting agents, teams, and workflows, with multi-modal support and
/newcommand to start fresh conversations.
+6 moreshow less
- ›New Telegram Tools enabling agents to send photos, documents, videos, audio, animations, and stickers.
- ›WhatsApp Interface V2 adds media support (images, video, audio, documents), interactive messages (reply buttons, list menus, locations, reactions), Team/Workflow support, and
/newcommand for fresh conversations. - ›Integrates the Docling library as a new reader for advanced document processing across multiple file formats.
- ›Extends observability support with MLflow for full trace visibility into agent runs.
- ›Adds Parallel AI Search support for Vertex AI via native
ToolParallelAiSearchintegration. - ›Adds
mistralaiv2 support while maintaining backward compatibility with v1.
- ›Adds
- v2.5.9
Agno v2.5.9 adds built-in followup suggestions,
datetime_format, message history in tool hooks, and extended GoogleCalendarTools.└──▷ GET THIS VERSION$ git clone --branch v2.5.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.9
└──▷ USE ITUse ISO-8601 datetime formatting in an agent so its system prompt always receives a consistently formatted timestamp.agent = Agent( model=..., datetime_format="%Y-%m-%dT%H:%M:%S" )Inspect or log the full message history inside a tool hook to audit what the agent has seen before a tool call fires.def my_pre_hook(run_context, tool_call): history = run_context.messages for msg in history: print(msg) agent = Agent( model=..., tool_hooks=[my_pre_hook] )- ›Adds
datetime_formatparameter to Agent and Team for customstrftimeformatting of datetime context (e.g., ISO-8601, date-only, localized). - ›Exposes the current run's message history to tool pre/post hooks and agent-level
tool_hooksviarun_context.messages, with mutation safety. - ›Adds built-in followup suggestion support to Agent and Team.
- ›Extends
GoogleCalendarToolswith new tools and service account authentication support.
- ›Adds
- v2.5.8
Agno v2.5.8 adds GitlabTools, human-readable agent IDs, GmailTools service-account auth, and AgentOS env-var overrides.
└──▷ GET THIS VERSION$ git clone --branch v2.5.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.8
└──▷ USE ITUse GitlabTools to give an agent read access to a GitLab instance for repository inspection or CI pipeline queries.from agno.tools.gitlab import GitlabTools agent = Agent( tools=[GitlabTools()], ... )- ›Adds
AGENT_OS_HOSTandAGENT_OS_PORTenvironment variables as fallbacks to serve(), simplifying container and orchestrated deployments. - ›Adds
GitlabToolswith read-focused GitLab integrations, async support, and cleaner tool configuration. - ›Extends
GmailToolswith new tools and service account authentication. - ›Agents and teams now generate Docker-style human-readable IDs (e.g.,
brave-falcon-7x3k) instead of UUIDs, making debugging and monitoring more intuitive.
- ›Adds
- v2.5.7
Agno v2.5.7 adds OpenAILikeEmbedder and a two-step session search pattern with configurable depth limits.
└──▷ GET THIS VERSION$ git clone --branch v2.5.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.7
└──▷ USE ITUse OpenAILikeEmbedder to connect to a LiteLLM proxy or any OpenAI-compatible embedding endpoint.from agno.embedder.openai_like import OpenAILikeEmbedder embedder = OpenAILikeEmbedder( base_url="http://localhost:4000", api_key="sk-...", model="text-embedding-3-small", )- ›Adds
OpenAILikeEmbedderclass for providers with OpenAI-compatible embedding endpoints (e.g. LiteLLM proxy). - ›Adds a
search_past_sessions+read_past_sessiontwo-step pattern so agents and teams can browse previous sessions, withnum_past_sessions_to_searchandnum_past_session_runs_in_searchto control search scope and preview depth. - ›Adds
num_runsparameter toread_past_sessionso the model can fetch a subset of turns from long sessions instead of pulling full conversation history. - ›Session previews in
search_past_sessionsnow show per-run user/assistant pairs instead of a single message.
- ›Adds
- v2.5.6
Agno v2.5.6 adds GitHub App auth for knowledge sources, HEIC/HEIF uploads, approval endpoints, and advanced trace filtering DSL.
└──▷ GET THIS VERSION$ git clone --branch v2.5.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.6
└──▷ USE ITImport Gmail tools from the new sub-package structure after the Google tools restructure.from agno.tools.google import GmailTools tools = GmailTools()
- ›Adds GitHub App authentication to
GitHubConfigviaapp_id,installation_id, andprivate_keyparameters, with thread-safe token caching and both sync/async variants, in addition to existing personal access token support. - ›Adds
image/heicandimage/heifMIME type support to file upload endpoints. - ›Adds an approval status endpoint and admin-gated continue-run enforcement for agent workflows.
- ›Adds advanced filtering DSL support for Traces in Agent OS.
- ›Restructures Google tools into the
agno.tools.googlesub-package, enabling imports such asfrom agno.tools.google import GmailTools; old import paths remain functional via backwards compatibility.
+1 moreshow less
- ›Adds
tasks: List[TaskData]field (containingid,title,description,status,assignee,dependencies,result) andcompletion_summarytoTaskStateUpdatedEventfor structured task data inTeamMode.tasksstreaming.
- ›Adds GitHub App authentication to
- v2.5.5
Agno v2.5.5 adds real-time Slack streaming, per-bot credentials, and image generation to ModelsLabTools.
└──▷ GET THIS VERSION$ git clone --branch v2.5.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.5
- ›Adds
tokenandsigning_secretper Slack instance, enabling multiple independent bots to run on the same server. - ›Extends
ModelsLabToolsto support image generation (PNG/JPG) via ModelsLab's text-to-image API, completing the full ModelsLab media suite. - ›Slack interface now streams responses in real-time with live progress cards for tool calls, reasoning, and workflow steps.
- ›Adds
- v2.5.4
Agno v2.5.4 adds workflow step-level HITL, PgVector similarity filtering, team task streaming, and richer per-component metrics.
└──▷ GET THIS VERSION$ git clone --branch v2.5.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.4
└──▷ USE ITFilter PgVector knowledge-base searches to only return results above a meaningful similarity threshold, reducing noise in RAG pipelines.vector_db = PgVector( table_name="embeddings", db_url="postgresql://user:pass@localhost/db", similarity_threshold=0.75, )Restrict DuckDuckGo web searches to recent results in a specific region via the newly exposed parameters.tools = DuckDuckGoTools( timelimit="w", region="us-en", backend="html", )- ›Adds
similarity_thresholdparameter toPgVectorto filter search results by a minimum similarity score. - ›Exposes
timelimit,region, andbackendparameters inDuckDuckGoToolsfor more controlled web searches. - ›Adds Human-in-the-Loop (HITL) support at the Step level in Workflows, enabling pauses for confirmation and user input during execution.
- ›Adds streaming event support for
TeamMode.tasks, enabling real-time event emission during autonomous task execution. - ›Redesigns the metrics system to provide per-model, per-component granular tracking across the full agent/team/workflow lifecycle.
- ›Adds
- v2.5.3
Agno v2.5.3 adds remote S3 knowledge endpoints, PDF content sanitization, and OpenTelemetry extras.
└──▷ GET THIS VERSION$ git clone --branch v2.5.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.3
└──▷ USE ITDisable PDF sanitization when extracting structured content like code blocks or tables where whitespace is semantically significant.from agno.document.reader.pdf import PDFReader reader = PDFReader(sanitize_content=False) docs = reader.read("report_with_tables.pdf")- ›Adds
sanitize_contentparameter toBasePDFReader(enabled by default) to normalize fragmented PDF text extraction — collapses word-per-line artifacts while preserving paragraph breaks; setsanitize_content=Falseto preserve structured content like code or tables. - ›Adds API endpoints for listing remote knowledge contents and enables uploading content in S3 buckets via AgentOS.
- ›Adds
is_component,current_version, andstagefields to list endpoints. - ›Adds OpenTelemetry and Agno instrumentation dependencies to the
osextras.
- ›Adds
- v2.5.1
Agno v2.5.1 adds CodingTools and UserFeedbackTools toolkits for agents.
└──▷ GET THIS VERSION$ git clone --branch v2.5.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.1
- ›Adds
CodingToolstoolkit for code-related operations in agents. - ›Adds
UserFeedbackToolstoolkit for collecting user feedback from within agents.
- ›Adds
- v2.5.0
Agno v2.5.0 adds TeamMode execution strategies, an @approval decorator for HITL workflows, cron scheduling, and vector-search isolation for shared Knowledge stores.
└──▷ GET THIS VERSION$ git clone --branch v2.5.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.5.0
└──▷ USE ITRun a team in broadcast mode to fan a single task out to all members simultaneously and collect their responses.from agno.team import Team, TeamMode team = Team( mode=TeamMode.broadcast, members=[analyst, researcher, summarizer], ) team.run('Summarize the latest threat intelligence report')Share one vector database across multiple Knowledge instances while keeping their search results isolated from each other.from agno.knowledge import Knowledge vuln_kb = Knowledge( name='vulnerabilities', isolate_vector_search=True, ) patch_kb = Knowledge( name='patches', isolate_vector_search=True, ) # Both can point at the same DB/table; searches will only return their own documents.- ›Adds
TeamModeenum with four execution modes:coordinate(default supervisor pattern),route(routes to a specialist and returns response directly),broadcast(delegates the same task to all members simultaneously), andtasks(autonomous task decomposition into a shared task list). - ›Adds
isolate_vector_searchflag to the Knowledge class — when enabled, documents are tagged withlinked_tometadata at insert time and searches filter by that tag, letting multiple Knowledge instances share one vector database with isolated results; defaults to False for backward compatibility. - ›Adds
store_history_messagesconfig key to Agent/Team — setstore_history_messages=Trueto restore the previous behavior of persisting conversation history (now defaults to False). - ›New
@approvaldecorator enables human-in-the-loop approval workflows: @approval(type='required') pauses a run until resolved via the Approvals API; @approval(type='audit') records a non-blocking audit trail for compliance and logging, with persistent status tracking (pending, approved, rejected, expired, cancelled). - ›New Approvals API for listing, inspecting, and resolving approval records created by the
@approvaldecorator.
+3 moreshow less
- ›Adds cron-based scheduling for agents, teams, and workflows with retry, timeout, and timezone support.
- ›Adds
LearningMachinesupport for Teams, enabling persistent learning across team runs. - ›Adds AWS EFS volume and mount point support for AWS app infrastructure.
└──▷ BREAKING ON UPGRADE- !
store_history_messagesnow defaults to False — existing setups that rely on persisted conversation history must explicitly setstore_history_messages=Trueor history will no longer be stored. - !Knowledge instances now require a unique combination of database, table, and knowledge name — multiple Knowledge instances cannot share the same table without distinct names, breaking any setup that reused a table across instances without differentiating names.
- ›Adds
- v2.4.8
Agno v2.4.8 adds CEL expression support for serializable workflow steps, a Neosantara LLM provider, and a visual Studio editor for AgentOS.
└──▷ GET THIS VERSION$ git clone --branch v2.4.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.8
└──▷ USE ITTarget the Neosantara Indonesian LLM gateway in an Agno agent without changing the rest of your OpenAI-compatible workflow.from agno.agent import Agent from agno.models.neosantara import Neosantara agent = Agent(model=Neosantara(id="<model-id>")) agent.print_response("Halo, apa kabar?")- ›Adds CEL (Common Expression Language) expression support as evaluators in Condition, Loop, and Router workflow steps, making steps fully serializable as strings.
- ›Adds
step_choicessupport in the Router step's selector function, enabling the router to return a group of steps as a single choice. - ›Adds Neosantara as a new model provider — an Indonesian LLM gateway with an OpenAI-compatible API.
- ›Adds shebang parsing and Windows command building to Skills for cross-platform script execution.
- ›Introduces Studio: a visual drag-and-drop editor in AgentOS for building Agents, Teams, and Workflows, with a Registry for managing tools, models, databases, and schemas.
+1 moreshow less
- ›
WebsiteReadernow defaults toFixedSizeChunkinginstead of Semantic chunking, removing the implicit dependency on an OpenAI API key.
- v2.4.7
Agno v2.4.7 adds
else_stepsfor workflow conditions, a newAwsBedrockReranker, and HITL confirmation support for MCPTools.└──▷ GET THIS VERSION$ git clone --branch v2.4.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.7
└──▷ USE ITDefine a fallback path in a workflow condition step when the primary condition is not met.Condition( condition=my_condition, steps=[primary_step], else_steps=[fallback_step] )- ›Adds
else_stepsto workflow condition logic, enabling an alternative execution path instead of skipping when a condition is not met. - ›New
AwsBedrockRerankerclass supporting Cohere Rerank 3.5 and Amazon Rerank 1.0. - ›Enables MCPTools to work with
requires_confirmation_tools, adding human-in-the-loop confirmation support for MCP tool calls. - ›Extends
AwsBedrockEmbedderto support Cohere v4 Embed.
- ›Adds
- v2.4.5
Agno v2.4.5 adds Seltz Search toolkit and a new parameter to suppress knowledge search instructions in system prompts.
└──▷ GET THIS VERSION$ git clone --branch v2.4.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.5
└──▷ USE ITSuppress auto-injected knowledge search instructions in the system prompt when you want full control over prompt content.from agno.agent import Agent agent = Agent( knowledge=my_knowledge_base, add_search_knowledge_instructions=False, ) agent.run('What are our internal policies on data retention?')Equip an agent with Seltz Search to let it query the Seltz search engine during reasoning.from agno.agent import Agent from agno.tools.seltz import SeltzTools agent = Agent( tools=[SeltzTools()], ) agent.run('Find recent research on LLM reasoning benchmarks.')- ›Adds
add_search_knowledge_instructionsparameter to Agent and Team classes to control whether knowledge search instructions are injected into the system prompt. - ›New
SeltzToolstoolkit integrating Seltz Search as a tool source for agents.
- ›Adds
- v2.4.4
Agno v2.4.4 adds UnsplashTools image search, Moonshot model provider, and a new
external_execution_silenttool decorator param.└──▷ GET THIS VERSION$ git clone --branch v2.4.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.4
└──▷ USE ITGive an agent access to high-quality royalty-free images from Unsplash for content generation or research workflows.from agno.tools.unsplash import UnsplashTools agent = Agent(tools=[UnsplashTools()], ...)
- ›Adds
external_execution_silentparameter to the tool decorator to suppress placeholder strings from run response content during external tool execution. - ›Adds
UnsplashToolstoolkit for searching and retrieving royalty-free images via the Unsplash API. - ›Adds Moonshot (moonshot.ai) as a new model provider.
- ›Adds
- v2.4.3
Agno v2.4.3 adds ExcelReader for .xls and .xlsx knowledge ingestion
└──▷ GET THIS VERSION$ git clone --branch v2.4.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.3
└──▷ USE ITIngest an Excel spreadsheet as a knowledge source for an agentfrom agno.document.reader.excel import ExcelReader reader = ExcelReader() documents = reader.read("data/threat_intel.xlsx")- ›Adds
ExcelReaderclass for ingesting.xlsand.xlsxfiles as knowledge sources
- ›Adds
- v2.4.2
Agno v2.4.2 adds Azure Blob Storage knowledge support and OpenAI Responses API compatibility for Ollama and OpenRouter.
└──▷ GET THIS VERSION$ git clone --branch v2.4.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.2
- ›Adds Azure Blob Storage as a private file-loading source for Knowledge, alongside the existing SharePoint and GitHub integrations.
- ›Adds support for the OpenAI Responses API specification for providers that implement it, including Ollama v0.13.3+ and OpenRouter (beta).
- v2.4.1
Agno v2.4.1 adds N1N model provider, Excel knowledge ingestion, and private GitHub/SharePoint file support.
└──▷ GET THIS VERSION$ git clone --branch v2.4.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.1
- ›Adds
collect_metrics_on_completionflag to streaming runs, collecting metrics only from the final chunk rather than every streamed chunk. - ›Adds
tool_call_idtoCustomEventobjects yielded from tools, enabling trace events to be linked back to their originating tool calls. - ›Adds n1n.ai as a new OpenAI-compatible model provider.
- ›Adds first-class Excel ingestion (
.xlsx/.xls) to Knowledge, parsing workbooks per sheet into separate documents with sheet metadata by routing through the existing CSV reader. - ›Adds support for files in private GitHub and SharePoint repositories to be added to Knowledge, available in both the SDK and API.
- ›Adds
- v2.4.0
Agno v2.4.0 adds KnowledgeProtocol, Agent Builder persistence, new lifecycle events, and GCS file inputs for Gemini
└──▷ GET THIS VERSION$ git clone --branch v2.4.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.4.0
└──▷ USE ITPoint TavilyTools at a self-hosted Tavily endpoint instead of the public API.from agno.tools.tavily import TavilyTools tools = TavilyTools(api_base_url="https://tavily.internal.example.com")
Restore XML-tagged instructions for an agent that relies on structured<instructions>blocks in its system prompt.from agno.agent import Agent agent = Agent( instructions=["Always respond in bullet points."], add_instruction_tags=True )- ›Adds
api_base_urlparameter toTavilyToolsto point at custom-hosted Tavily instances. - ›Adds
add_instruction_tags=Trueoption on Agent and Team to restore wrapping instructions in<instructions>XML tags (now omitted by default). - ›Introduces
KnowledgeProtocolinterface so any custom knowledge implementation can be used with Agent and Team (only the main Agno implementation supports AgentOS Knowledge management). - ›Introduces Agent Builder: Agent, Team, and Workflow configurations can now be persisted and managed in a database via new AgentOS endpoints for programmatic creation, retrieval, and updates.
- ›Adds new lifecycle events:
ModelRequestStarted,ModelRequestCompleted,CompressionStarted, andCompressionCompleted; updatesMemoryUpdateCompletedto include memory content.
+5 moreshow less
- ›Adds direct GCS URI and external URL support for Gemini file inputs.
- ›Adds
dbparameter to theAgentOSclass that propagates to all agents, teams, and workflows without a database set, and also serves as the tracing database. - ›Introduces
update_memory_on_runas the replacement for the deprecatedenable_user_memories. - ›Replaces DDG web search tool with a generic
WebSearchToolsas the new default for web search in cookbooks and docs. - ›Renames Knowledge.add_content() and its variants to insert() and insert_many() (old names still work but will be phased out of docs).
└──▷ BREAKING ON UPGRADE- !Removed deprecated fields
session_state,dependencies, anduser_idfrom tool functions and hooks whereRunContexthas replaced them. - !
stream_intermediate_stepshas been removed; usestream_eventsinstead. - !
yield_run_responsehas been removed; useyield_run_outputinstead. - !
delegate_task_to_all_membershas been removed from the Team class. - !
tracing_dbonAgentOSis deprecated in favor of the newdbparameter. - !Instructions are no longer wrapped in
<instructions>XML tags by default for Agent and Team; setadd_instruction_tags=Trueto restore the previous behavior. - !DDG web search tool is replaced by
WebSearchToolsas the default web search tool.
- ›Adds
- v2.3.26
Agno v2.3.26 adds per-request isolation for agents, teams, and workflows in shared FastAPI processes.
└──▷ GET THIS VERSION$ git clone --branch v2.3.26 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.26
- ›Improves request-level isolation for agents, teams, and workflows running in shared FastAPI processes, preventing state bleed between concurrent requests.
- v2.3.25
Agno v2.3.25 adds LearningMachine for per-interaction agent learning and an AST-based CodeChunking strategy.
└──▷ GET THIS VERSION$ git clone --branch v2.3.25 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.25
- ›Adds
LearningMachine, a unified learning system that coordinates multiple learning types — each with its own storage backend and retrieval pattern — so agents can learn from every interaction. - ›Adds
CodeChunkingstrategy that uses ASTs to split code into contextually relevant segments, complementing existing text-based chunkers.
- ›Adds
- v2.3.24
Agno v2.3.24 adds proxy support for Crawl4aiTools, base-directory sandboxing for PythonTools and MLXTranscribeTools, and heading-level chunking for MarkdownChunker.
└──▷ GET THIS VERSION$ git clone --branch v2.3.24 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.24
└──▷ USE ITLock a PythonTools instance to its base directory in production, or explicitly allow wider access during local development.from agno.tools.python import PythonTools # Production: default sandboxed behaviour (restrict_to_base_dir=True) tools = PythonTools(base_dir="/app/workspace") # Local dev: opt out of sandboxing tools_open = PythonTools(base_dir="/app/workspace", restrict_to_base_dir=False)
Route web crawls through a corporate proxy when using Crawl4aiTools inside a restricted network.from agno.tools.crawl4ai import Crawl4aiTools tools = Crawl4aiTools( proxy_config={ "server": "http://proxy.corp.example.com:8080", "username": "user", "password": "pass" } )Split a Markdown knowledge base on headings so each chunk stays within a single section.from agno.document.chunking.markdown import MarkdownChunker chunker = MarkdownChunker(split_on_headings=True)
- ›Adds
proxy_configparameter toCrawl4aiToolsfor configuring proxy settings on the toolkit. - ›Adds
restrict_to_base_dirparameter toPythonToolsandMLXTranscribeTools; by default both tools now block operations outside their contextual base directory — passrestrict_to_base_dir=Falseto opt out. - ›Adds
split_on_headingsparameter toMarkdownChunkerfor fine-grained control over how chunks are separated. - ›MongoDB connection handshake now includes Agno version metadata, improving connection identification when multiple applications share a cluster.
└──▷ BREAKING ON UPGRADE- !
PythonToolsandMLXTranscribeToolsnow disallow operating outside the base directory by default; existing code that relies on out-of-directory access will break unlessrestrict_to_base_dir=Falseis explicitly set.
- ›Adds
- v2.3.23
Agno v2.3.23 adds async tool function support to Toolkit, automatically selected in async agent contexts.
└──▷ GET THIS VERSION$ git clone --branch v2.3.23 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.23
- ›Toolkit now supports async tool functions, automatically selected when the agent runs in an async context.
- v2.3.22
Agno v2.3.22 adds the Skills class, dynamic MCP headers, A2A remote agent support, and JWT audience validation.
└──▷ GET THIS VERSION$ git clone --branch v2.3.22 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.22
└──▷ USE ITInject a per-request authorization token into every MCP tool call without hardcoding credentials.from agno.tools.mcp import MCPTools def my_header_provider(): token = fetch_current_auth_token() # your token-refresh logic return {"Authorization": f"Bearer {token}"} tools = MCPTools(url="https://my-mcp-server.example.com", header_provider=my_header_provider)Validate JWT tokens against a specific audience claim in an AgentOS deployment.from agno.middleware.jwt import JWTMiddleware middleware = JWTMiddleware( secret="<your-secret>", audience="https://api.myapp.example.com" )- ›Introduces the Skills class, enabling agents to be extended with capabilities defined by Anthropic's Agent Skill specification.
- ›Adds
header_providerfunction parameter to MCPTools instances, allowing dynamic header generation (e.g. rotating auth tokens or per-user IDs) on each MCP tool call. - ›Adds
audienceparameter to the JWTMiddleware constructor to set the expected audience when validating JWT tokens. - ›MCPTools now defaults to
StreamableHttpas the transport when a URL is present for connecting to external MCP servers. - ›Adds A2AClient and support for the
a2aprotocol when using remote agents, enabling Google ADK agents to run as remote agents via AgentOS (beta).
+1 moreshow less
- ›Extends native reasoning support to OpenAI GPT-5.1 and 5.2, new Gemini 3, 3.5, and deepthink models, and new DeepSeek r1 and reasoner models.
- v2.3.21
Agno v2.3.21 brings AgentAsJudge evals to AgentOS with full run configuration and listing support.
└──▷ GET THIS VERSION$ git clone --branch v2.3.21 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.21
- ›AgentAsJudge evaluations are now fully supported on AgentOS: configure and trigger new runs, and view existing runs alongside other evals on the Evals page.
- v2.3.20
Agno v2.3.20 adds async run cancellation via set_cancellation_manager() and
reasoning_contentextraction for LiteLLM models.└──▷ GET THIS VERSION$ git clone --branch v2.3.20 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.20
└──▷ USE ITRegister a custom async cancellation manager so long-running agent runs can be cancelled cleanly in async contexts.agent.set_cancellation_manager(my_custom_cancellation_manager)
- ›Adds set_cancellation_manager() to allow custom cancellation managers, with async method support for run cancellation workflows.
- ›Extracts
reasoning_contentfrom models that support it via the LiteLLM model wrapper.
- v2.3.18
Agno v2.3.18 adds Google OAuth2 credentials file support for direct VertexAI authentication.
└──▷ GET THIS VERSION$ git clone --branch v2.3.18 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.18
- ›Supports a Google OAuth2 credentials file for direct VertexAI authentication in the Google VertexAI integration.
- v2.3.17
Agno v2.3.17 adds RemoteAgent/Team/Workflow classes, AgentOSClient, and ChromaDB hybrid search with RRF fusion
└──▷ GET THIS VERSION$ git clone --branch v2.3.17 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.17
- ›Adds
RemoteAgent,RemoteTeam, andRemoteWorkflowclasses for proxying Agents, Teams, and Workflows running on a remote AgentOS instance. - ›Adds
AgentOSClientclass for connecting to and operating a remotely hosted AgentOS. - ›Adds hybrid search for local ChromaDB combining dense vector similarity (semantic) with full-text search (keyword/lexical) via RRF fusion.
- ›Extends
SemanticChunkingto accept any Agno embedder (e.g.AzureOpenAI, Mistral), a model string, or a customchonkieBaseEmbeddingsimplementation. - ›Extends the AgentOS client WebSocket implementation to automatically reconnect interrupted Workflow sessions via socket.
- ›Adds
- v2.3.15
Agno v2.3.15 adds OpenRouter cost tracking in run metrics and a migrate-all-DBs endpoint via AgentOS.
└──▷ GET THIS VERSION$ git clone --branch v2.3.15 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.15
- ›Adds a
costfield to run Metrics for OpenRouter-backed runs, enabling usage accounting across OpenRouter provider calls. - ›Adds an endpoint to migrate all databases at once via AgentOS.
- ›Adds a
- v2.3.14
Agno v2.3.14 adds reasoning streaming, new A2A endpoints, JSON schema structured outputs, and AgentOS reload controls.
└──▷ GET THIS VERSION$ git clone --branch v2.3.14 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.14
└──▷ USE ITControl which files cause AgentOS to hot-reload — useful when you want changes to your YAML config to trigger a reload but ignore unrelated directories.serve(reload_includes=['*.yaml', '*.yml'], reload_excludes=['tests/*', 'docs/*'])
Pass a provider-specific JSON schema directly to the model API for precise structured output control without Agno transforming it.agent = Agent( model=OpenAIChat(id='gpt-4o'), output_schema={ 'type': 'json_schema', 'json_schema': { 'name': 'result', 'strict': True, 'schema': { 'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer'], 'additionalProperties': False } } } )- ›Adds
reload_includesandreload_excludesparameters to theservefunction of AgentOS, letting you specify which files trigger an app reload. - ›Adds
search_parametersto thesearchandasync_searchmethods of the Milvus vector database class. - ›
output_schemanow accepts JSON schemas in provider-specific formats, passed directly to the model API without transformation, giving full control over structured output for OpenAI, Claude, and OpenAI-like providers. - ›Adds reasoning chunk streaming support when
reasoning_modelis provided. - ›Adds new A2A interface endpoints to retrieve the Agent Card for any Agent, Team, or Workflow, and updates run endpoints for Agents, Teams, and Workflows to match the updated A2A protocol.
+2 moreshow less
- ›Updates the default model ID for the Gemini Embedder class to
gemini-embedding-001. - ›Error events are now always emitted during streaming runs, and runs containing errors are always persisted when relevant.
- ›Adds
- v2.3.13
Agno v2.3.13 adds JWT-based Role-Based Access Control to AgentOS with per-endpoint and per-agent scope enforcement.
└──▷ GET THIS VERSION$ git clone --branch v2.3.13 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.13
- ›Adds JWTMiddleware class to AgentOS for JWT-based authorization, requiring signed JWT tokens with user permission scopes on all traffic —
verification_keys=[...]is the new recommended way to supply keys over the deprecatedsecret_keyparameter. - ›Supports per-endpoint authorization via configurable required scopes on each AgentOS endpoint.
- ›Supports per-agent (and per-Team, per-Workflow) resource control via scopes like
agents:my-agent:read, restricting which users can invokePOST /agents/{id}/runsor read fromGET /agentsandGET /agents/{id}.
└──▷ BREAKING ON UPGRADE- !The
algorithmdefault on JWTMiddleware changed fromHS256toRS256; existing setups using the default with symmetric (HMAC) keys will fail to verify tokens on upgrade.
- ›Adds JWTMiddleware class to AgentOS for JWT-based authorization, requiring signed JWT tokens with user permission scopes on all traffic —
- v2.3.12
Agno v2.3.12 adds token-count-based context compression support across providers.
└──▷ GET THIS VERSION$ git clone --branch v2.3.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.12
- ›Adds token count based compression via the Compression Manager, enabling context window management across providers based on token limits.
- ›Content hashing for knowledge ingestion now incorporates
nameanddescriptionfields for URLs, paths, andfile_data, allowing multiple distinct content items from the same source to produce unique hashes.
└──▷ BREAKING ON UPGRADE- !Existing knowledge content previously added with
nameordescriptionfields will have different content hashes under v2.3.12, which may alterskip_if_existsandupsertbehavior for that content.
- v2.3.11
Agno v2.3.11 adds OpenAI-specific fields to RunOutput and RunCompletedEvent for streaming and non-streaming access.
└──▷ GET THIS VERSION$ git clone --branch v2.3.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.11
- ›Adds new OpenAI-specific fields to
RunOutputandRunCompletedEventclasses viaresponse_provider_data, exposing provider data in both streaming and non-streaming cases.
- ›Adds new OpenAI-specific fields to
- v2.3.10
Agno v2.3.10 adds ShopifyTools for store analytics and URL Context support for Gemini streaming.
└──▷ GET THIS VERSION$ git clone --branch v2.3.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.10
└──▷ USE ITAnalyze Shopify sales and customer data from an agent using the new ShopifyTools toolkit.from agno.tools.shopify import ShopifyTools agent = Agent(tools=[ShopifyTools()], markdown=True) agent.print_response('What were my top-selling products last month?')- ›Adds
ShopifyToolstoolkit to query Shopify store backends for sales analytics, customer insights, and related data. - ›Adds URL Context support for Gemini streaming requests.
- ›Adds
- v2.3.9
Agno v2.3.9 adds AsyncMySQLDb, LLM-as-judge evals, run_id control, and OpenRouter reasoning support.
└──▷ GET THIS VERSION$ git clone --branch v2.3.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.9
└──▷ USE ITReplay or correlate a specific agent run by pinning its ID, useful for audit trails and deterministic testing.result = agent.run( "Enumerate open ports on 10.0.0.1", run_id="pentest-2025-07-01-recon" )- ›Adds
AsyncMySQLDbclass with support for theasyncmydriver, enabling fully async MySQL storage. - ›Adds
AgentAsJudgeEval— an LLM-as-judge evaluation system that scores agent outputs against custom criteria using binary (pass/fail) or numeric (1–10) scoring, with support for standalone runs, post-hooks, background execution, and custom evaluator agents. - ›Adds
run_idparameter to therunandarunmethods on Agent, Team, and Workflow classes, allowing callers to supply a deterministic run ID instead of auto-generating one. - ›Adds
create_schema=Falseparameter to database initializers (e.g.PostgresDb) to skip automatic schema creation for externally managed schemas. - ›Adds
introductionparameter to Agent and Team to set the first assistant message in a conversation.
+4 moreshow less
- ›Adds
reasoning_contentfield to DeepSeek messages, enabling thinking mode when tools are active. - ›Extends get_step_output() with recursive search so it finds steps nested inside Parallel, Condition, Router, Loop, and Steps groups.
- ›Adds native sync support for all
add_content_functions in Knowledge, replacing the previousasyncio-wrappingworkaround. - ›Adds support for reasoning messages from OpenRouter.
- ›Adds
- v2.3.8
Agno v2.3.8 adds model-level retry control via
retries=non the model object for provider rate-limit resilience.└──▷ GET THIS VERSION$ git clone --branch v2.3.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.8
- ›Adds
retries=nparameter at the model execution layer so rate-limit errors from model providers trigger retries directly on the model, independently of agent-level retries which continue to handle broader agent execution loop exceptions.
└──▷ BREAKING ON UPGRADE- !
MemoriToolshas been removed; integrations using it must migrate to the updated Memori framework approach.
- ›Adds
- v2.3.7
Agno v2.3.7 adds Amazon Redshift toolkit and revamps Human-in-the-Loop with a new RunRequirement class
└──▷ GET THIS VERSION$ git clone --branch v2.3.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.7
- ›Introduces the
RunRequirementclass to represent and resolve Human-in-the-Loop requirements; these objects appear in the Agent response or in theRunPausedevent during streaming HITL flows. - ›Adds
yield_run_responseparameter tocontinue_runstreaming methods, yielding aRunOutputobject at the end of a continued run. - ›Adds Amazon Redshift toolkit for exploring Redshift databases and running queries.
- ›Passes
run_contextintoget_relevant_documents_from_knowledgeso custom knowledge retrievers now have access todependencies. - ›Enables Agno evals via AgentOS with Agents and Teams that use an asynchronous database class.
- ›Introduces the
- v2.3.6
Agno v2.3.6 adds a Spotify toolkit for managing libraries from agent workflows.
└──▷ GET THIS VERSION$ git clone --branch v2.3.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.6
- ›Adds a Spotify toolkit enabling agents to manage a Spotify library programmatically.
- v2.3.5
Agno v2.3.5 adds OpenTelemetry-based native tracing and non-blocking background task hooks for agents and teams.
└──▷ GET THIS VERSION$ git clone --branch v2.3.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.5
- ›Introduces OpenTelemetry-based native tracing that automatically captures and stores agent runs, model calls, tool executions, and team operations in your Agno database.
- ›Agent and Team pre- and post-hooks can now run as background tasks on AgentOS for fully non-blocking, concurrent execution — useful for notifications, logging, or evaluations not on the critical path.
- ›Adds a debug-level environment variable for controlling Agno debug output.
- ›Extends debug-level support to workflows.
- ›Unifies model authentication errors across providers into a consistent error surface.
- v2.3.3
Agno v2.3.3 adds context compression, memory optimization, Gemini File Search, and runtime output schema overrides.
└──▷ GET THIS VERSION$ git clone --branch v2.3.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.3
└──▷ USE ITSummarize and deduplicate a user's stored memories outside of an agent run to keep the memory store compact.import asyncio from agno.memory import MemoryManager memory_manager = MemoryManager(user_id="user_123") # Sync memory_manager.optimize_memories() # Async asyncio.run(memory_manager.aoptimize_memories())
Override the output schema on a per-call basis so one agent instance can return different structured shapes for different tasks.from agno.agent import Agent from pydantic import BaseModel class SummaryOutput(BaseModel): summary: str key_points: list[str] agent = Agent(model=...) result = agent.run("Summarise this document", output_schema=SummaryOutput)Control Gemini reasoning depth by passingthinking_levelwhen running a Gemini-backed agent.from agno.models.google import Gemini from agno.agent import Agent agent = Agent(model=Gemini(thinking_level="high")) agent.run("Explain the proof of Fermat's Last Theorem")- ›Adds
optimize_memoriesandaoptimize_memoriesmethods toMemoryManagerfor summarizing a user's memories outside of agent runs (beta). - ›Adds
output_schemaoverride support to run() and arun() on both Agent and Team, as well as AgentOS API endpoints, enabling per-call schema control at runtime. - ›Adds
api_keysupport for AWS Bedrock authentication. - ›Adds
thinking_levelparameter support to Gemini. - ›Introduces Context Compression (beta): compresses tool call results in a running agent context to stay within context windows and avoid rate limits.
+3 moreshow less
- ›Adds Gemini File Search support, including document store create/list/get/delete, direct file upload with custom chunking configuration and metadata, document management with metadata filtering, citation extraction helpers, and full async/await support. See cookbooks:
cookbook/models/google/gemini/file_search_basic.py,cookbook/models/google/gemini/file_search_advanced.py,cookbook/models/google/gemini/file_search_rag_pipeline.py. - ›Extends AWS Bedrock Claude compatibility with native Claude, adding support for thinking models and caching.
- ›Extends VertexAI Claude compatibility with native Claude, adding support for thinking models and caching.
- ›Adds
- v2.3.1
Agno v2.3.1 adds NanoBananaTools image generation, Claude structured output support, and MCPTools subclass registration in AgentOS.
└──▷ GET THIS VERSION$ git clone --branch v2.3.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.1
└──▷ USE ITGenerate images with Google's Nano Banana model using the new toolkit.from agno.tools.nano_banana import NanoBananaTools agent = Agent(tools=[NanoBananaTools()], ...)
- ›Adds
NanoBananaToolstoolkit for generating images with Google's Nano Banana model. - ›Adds support for Anthropic's structured output functionality in Claude models, ensuring responses always conform to a given schema.
- ›Enables custom toolkits that extend MCPTools or
MultiMCPToolsto be registered and used inside AgentOS.
- ›Adds
- v2.3.0
Agno v2.3.0 adds MigrationManager, sound-effect generation, RedisCluster support, and overhauled session message/history APIs.
└──▷ GET THIS VERSION$ git clone --branch v2.3.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.3.0
└──▷ USE ITPrint a multi-agent Team response while showing each member's individual output, for debugging delegation chains.team.print_response("Summarise the threat landscape", show_member_responses=True)- ›Introduces
MigrationManagerclass to apply schema migrations forsessionsandmemoriestables across PostgreSQL, SQLite, MySQL, and SingleStore backends. - ›Adds
get_messagesandget_chat_historymethods toAgentSession,TeamSession, andWorkflowSessionsession classes, with full filtering capabilities. - ›Adds
get_session_messagesandget_chat_historymethods to Agent, Team, and Workflow classes; addsget_chat_historyto theWorkflowStepclass. - ›Adds
show_member_responsesparameter toTeam.print_responseandTeam.aprint_responseto surface member-level outputs during streaming. - ›Adds
RedisClustersupport when configuring aRedisDbinstance for agent database storage.
+3 moreshow less
- ›Adds sound-effect generation support to
ModelLabsToolsviaModelsLab SFX. - ›All model instances now share a global
httpxclient singleton withhttp2multiplexing enabled, improving resource use and instantiation speed. - ›Stateless knowledge-base filters now work correctly with AgentOS; using knowledge(...) filters requires setting
contents_db.
└──▷ BREAKING ON UPGRADE- !
delegate_task_to_all_membersparameter on Team is renamed todelegate_to_all_members; existing code using the old name will break. - !
GoogleSearchToolstoolkit has been removed entirely; callers must switch toDuckDuckGoTools. - !
stream_eventsparameter has been removed fromprint_response,aprint_response, and CLI methods on Agent, Team, and Workflow. - !
get_messages_for_sessionhas been removed from Agent and Team. - !
get_messages_from_last_n_runshas been removed from Session, Agent, and Team. - !Using knowledge(...) with
knowledge_filtersnow requirescontents_dbto be set; omitting it will break filtering. - !The deprecated
AgentOSparametersos_id,fastapi_app,enable_mcp, andreplace_routeshave been removed; useid,base_app,enable_mcp_server, andon_route_conflictrespectively. - !The default Nebius model endpoint changed from the AI Studio URL to
api.tokenfactory.nebius.com; users targeting Nebius AI Studio must now explicitly pass that URL asbase_url. - !PostgreSQL
sessionsandmemoriestables require migration:created_atandfeedbackcolumns added tomemories, and all JSON columns inPostgresDbconverted to JSONB.
- ›Introduces
- v2.2.12
Agno v2.2.12 adds a metadata Filter DSL for Knowledge searches and a Slack mention-only reply mode
└──▷ GET THIS VERSION$ git clone --branch v2.2.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.12
└──▷ USE ITRe-enable all-channel responses for a Slack-connected agent that previously relied on the old default behaviour.slack_interface = SlackInterface(agent=my_agent, reply_to_mentions_only=False)
- ›Adds
reply_to_mentions_onlyparameter to the Slack interface, controlling whether agents respond to all channel messages or only direct mentions (now defaults to mentions-only). - ›Introduces a metadata-based Filter DSL for Knowledge searches supporting
EQ,IN,GT,LT,NOT,AND, andORexpressions; PGVector-backed stores are supported in this release, with additional VectorDB support to follow.
└──▷ BREAKING ON UPGRADE- !The Slack interface now defaults to replying only to mentions (
reply_to_mentions_only); agents that previously answered all channel messages will silently stop doing so after upgrading unlessreply_to_mentions_onlyis set to False.
- ›Adds
- v2.2.11
Agno v2.2.11 adds ParallelTools for web search/extraction, Claude context editing, Anthropic beta access, and expanded Gmail label management.
└──▷ GET THIS VERSION$ git clone --branch v2.2.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.11
└──▷ USE ITRun AI-optimized parallel web search and content extraction inside an agent using the newParallelToolstoolkit.from agno.tools.parallel_tools import ParallelTools agent = Agent( tools=[ParallelTools()], ... ) agent.run('Find and summarize the latest research on LLM context management')- ›Adds
ParallelToolstoolkit providing AI-optimized web search and content extraction via both direct API integration and MCP server support. - ›Enables all Anthropic API beta features on Agno Claude models via the
betasparameter. - ›Adds
durationfield to top-level Workflow metrics, exposing total runtime of a complete Workflow run. - ›Extends the Gmail tool with label management: list custom labels, apply labels to emails, remove labels from emails, and delete custom labels.
- ›Adds
- v2.2.10
Agno v2.2.10 adds
run_contextas the standard state-sharing parameter across Workflows and introducesyield_run_outputfor Agent/Team runs.└──▷ GET THIS VERSION$ git clone --branch v2.2.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.10
└──▷ USE ITPassrun_contextinto a custom Python step to share and mutate state across a Workflow without relying on session-level globals.from agno.workflow import Workflow, RunContext def my_step(run_context: RunContext) -> str: run_context.state['processed'] = True return 'done' wf = Workflow(steps=[my_step]) wf.run()Stream Agent run events while yielding only final output, using the newyield_run_outputflag instead of the deprecatedyield_run_response.for event in agent.run('Summarise this report', yield_run_output=True, stream=True): print(event)- ›Adds
yield_run_outputflag on Agent/Teamrun/arunfunctions as the replacement for the to-be-deprecatedyield_run_response. - ›Promotes
run_contextas the recommended parameter for reading and modifying state across all Workflow surfaces — Agents, Teams, tools, steps, and custom Python functions used in steps. - ›Improves event streaming from custom executor steps inside Workflows, including better handling of Agent/Team events emitted by a custom executor.
- ›Adds
- v2.2.9
Agno v2.2.9 adds
strict_outputfor schema-enforced model responses, AG-UI state mapping, and multi-table AgentOS support.└──▷ GET THIS VERSION$ git clone --branch v2.2.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.9
- ›Adds
strict_outputparameter to all compatible models, guaranteeing generated responses adhere to the contextualoutput_schema; defaults to True. - ›Supports
knowledge_filtersparameter on AgentOS run endpoints. - ›Maps AG-UI request
statedata tosession_statewhen running Agno Agents or Teams via the AG-UI integration. - ›Enables multiple Agno tables of the same type (e.g., multiple session tables) within the same database when using AgentOS.
- ›Improves mapping of Agno
CustomEventevents into AG-UI custom events with all relevant fields when streaming via the AG-UI interface.
+2 moreshow less
- ›Team members now automatically inherit the primary model from their parent team when no model is specified (secondary models
reasoning_model,parser_model, andoutput_modelare not inherited). - ›Renames preferred identifiers for Mongo and Redis vector DB implementations to
MongoVectorDbandRedisVectorDb.
- ›Adds
- v2.2.7
Agno v2.2.7 adds run_context access in tools/hooks, RedisVL vector DB support, vLLM embeddings, and MCP tool name prefixing.
└──▷ GET THIS VERSION$ git clone --branch v2.2.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.7
└──▷ USE ITAccess run-level state inside a custom tool by declaring therun_contextparameter — useful for reading or writing shared state across tool calls within a single agent run.from agno.agent import RunContext def my_tool(query: str, run_context: RunContext) -> str: previous = run_context.state.get("last_query", "none") run_context.state["last_query"] = query return f"Previous query was: {previous}"- ›Adds
tool_name_prefixparameter to the MCPTools class to namespace all tool names for a given MCP server, preventing collisions when multiple MCP servers are in use. - ›Introduces
run_contextas an injectable parameter in tools, hooks, tool hooks, dependency functions, and instructions functions for unified access to run-level state. - ›Adds
RedisVLas a supported VectorDB backend for Knowledge, enabling Redis-backed vector search. - ›Adds vLLM embedder support, allowing local or remote vLLM models to be used for embeddings in Knowledge pipelines.
- ›Adds
- v2.2.6
Agno v2.2.6 adds conversational workflows, a Notion toolkit, model-as-string syntax, and session state on run events.
└──▷ GET THIS VERSION$ git clone --branch v2.2.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.6
└──▷ USE ITReference a model by string instead of instantiating a model object — useful for quickly switching providers in agent definitions.from agno.agent import Agent agent = Agent(model="openai:gpt-5")
- ›Supports defining models as a string (e.g.,
openai:gpt-5) when configuring Agents and Teams, eliminating the need to instantiate a model object. - ›Adds session state access on
RunOutputandRunCompletedevents for Agents, and onTeamRunOutputandTeamRunCompletedevents for Teams. - ›New Notion Toolkit lets Agents read and interact with Notion pages.
- ›New Conversational Workflows capability gives Workflows a chat-like experience similar to Agent and Team, including session and history support.
- ›Adds input schema validation for Agents and Teams on AgentOS.
+3 moreshow less
- ›Extends
FileToolstoolkit with chunked reading of large files, partial updates to large files, and file deletion. - ›Adds reranker support to the Milvus vector database search operation, reordering results by relevance after initial vector search.
- ›All model implementations now cache and reuse HTTP clients (client persistence) to reduce connection overhead.
- ›Supports defining models as a string (e.g.,
- v2.2.5
Agno v2.2.5 preserves custom routers when reprovisioning AgentOS via lifespan functions.
└──▷ GET THIS VERSION$ git clone --branch v2.2.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.5
- ›Supports preservation and reprovisioning of all previously registered non-built-in routers when updating the AgentOS through a lifespan function.
- v2.2.4
Agno v2.2.4 adds
num_history_messagesfor granular history control and AgentOS access in lifespan functions└──▷ GET THIS VERSION$ git clone --branch v2.2.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.4
└──▷ USE ITLimit history context to the last 5 messages to reduce token usage in long-running conversations.agent = Agent( ... num_history_messages=5, )- ›Adds
num_history_messagesparameter to control how many messages are considered when retrieving agent history. - ›Enables access to the contextual
AgentOSinstance within FastAPI lifespan functions, allowing updates to the instance after initialization and first run. - ›Supports Media instances when providing run input as a dictionary (in addition to a list of Message objects).
- ›Adds
- v2.2.3
Agno v2.2.3 adds AsyncMongoDb class for non-blocking MongoDB access in async agent flows.
└──▷ GET THIS VERSION$ git clone --branch v2.2.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.3
- ›Adds
AsyncMongoDbclass to support asynchronous MongoDB database operations in async agent and team workflows.
- ›Adds
- v2.2.2
Agno v2.2.2 adds LLM response caching, async SQLite, Claude Skills, Tavily Extract, and automatic MCP lifecycle management.
└──▷ GET THIS VERSION$ git clone --branch v2.2.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.2
└──▷ USE ITCache model responses during development to avoid redundant API calls and cut costs.from agno.agent import Agent from agno.models.openai import OpenAIChat agent = Agent( model=OpenAIChat(id='gpt-4o', cache_response=True), description='A cost-efficient research assistant', ) agent.print_response('Summarize the history of the Roman Empire')Use SQLite as an async session store when running agents in an async application.from agno.agent import Agent from agno.storage.sqlite import AsyncSqliteDb storage = AsyncSqliteDb(db_path='tmp/agent_sessions.db') agent = Agent(storage=storage) import asyncio asyncio.run(agent.aprint_response('Hello!'))- ›Adds
cache_response=Trueon the model class to cache LLM responses, reducing costs and speeding up development and testing. - ›Adds
AsyncSqliteDbclass for asynchronous access to SQLite databases. - ›Adds
summary_request_messageonSessionSummaryManagerto override the user instruction sent to the LLM when generating session summaries. - ›Adds
refresh_connectionon MCPTools andMultiMCPToolsto manually refresh MCP server connections. - ›Enables automatic MCP connection lifecycle management: passing MCPTools or
MultiMCPToolsdirectly to an Agent or Team now handles connect and reconnect automatically per run.
+4 moreshow less
- ›Adds support for Claude's native Skills, enabling enhanced reasoning, code execution, and tool interactions via the Anthropic integration.
- ›Adds
TavilyReaderfor Tavily-based knowledge base integration and extendsTavilyToolswith URL content extraction via the Tavily Extract API, with full async support. - ›Adds Team Model Inheritance: member agents automatically inherit
model,reasoning_model,parser_model, andoutput_modelfrom their parent team when none is specified. - ›Enables Slack interface output to use mrkdwn formatting by default.
- ›Adds
- v2.2.1
Agno v2.2.1 adds a PPTXReader class and
max_tool_calls_from_historyto control agent context size.└──▷ GET THIS VERSION$ git clone --branch v2.2.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.1
└──▷ USE ITCap the number of past tool calls loaded into an agent's context to keep token usage in check during long-running sessions.agent = Agent( tools=[...], max_tool_calls_from_history=5 )- ›Adds
max_tool_calls_from_historyparameter to load a fixed number of tool calls from agent history, reducing token consumption and managing context size. - ›Adds PPTXReader class to support ingesting Microsoft PowerPoint (
.pptx) files.
- ›Adds
- v2.2.0
Agno v2.2.0 adds new Agent/Team events,
stream_eventsflag, session state methods, and three new AgentOS session endpoints.└──▷ GET THIS VERSION$ git clone --branch v2.2.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.2.0
└──▷ USE ITStream all agent events (tool calls, hooks, session summaries) in a run for real-time UI updates.async for event in agent.arun('Summarize the latest reports', stream=True, stream_events=True): print(event)Persist updated session context mid-conversation without waiting for the next run.await agent.aupdate_session_state({'last_topic': 'network anomalies', 'alert_level': 'high'})Retrieve a specific run from a completed team session via the new AgentOS endpoint.$ curl -X GET 'https://<agentOS-host>/sessions/<session-id>/runs/<run-id>' \ -H 'Authorization: Bearer <token>'
- ›Adds
stream_eventsflag to Agent, Team, Workflow, and all run methods to emit all events when streaming a response (previously tool-call events were always yielded; non-RunContentevents are now gated behind this flag). - ›Adds
update_session_stateandaupdate_session_statemethods on Agent and Team for direct, DB-persisted session state updates. - ›Adds
add_team_history_to_membersconfig on Team to share team-level request/response history with member agents. - ›Adds three new AgentOS session endpoints:
POST /sessions(create a new empty session),GET /sessions/{id}/runs/{id}(get a run by ID), andPATCH /sessions/{id}(update an existing session). - ›Adds
PostHookStarted,PostHookCompleted,SessionSummaryCreationStarted,SessionSummaryCreationCompleted, andRunContentCompletedevents for both Agent and Team, enabling fine-grained UI streaming control.
+3 moreshow less
- ›Workflow
.arunnow returns anAsyncIterator, consistent with Agent and Team, enabling event-by-event async streaming. - ›Concurrent memory creation: automatic memory creation now starts in a background thread/task at the beginning of an Agent/Team run, reducing total run latency when memory generation is enabled.
- ›Improves
get_run_outputandget_last_run_outputon Agent/Team to support retrieval of runs from member agents after team execution.
└──▷ BREAKING ON UPGRADE- !Workflow.arun(..., stream=True) now returns an
AsyncIterator; callers must replace await workflow.arun(...) with async for event in workflow.arun(...). - !All events except
RunContentevents are now gated behindstream_events=True; tool-call events that were previously always yielded will no longer appear unlessstream_events=Trueis set. - !
stream_intermediate_stepsis deprecated in favour ofstream_events.
- ›Adds
- v2.1.10
Agno v2.1.10 adds experimental Culture for collective agent learning, Gmail mark-as-read/unread tools, and standalone Knowledge on AgentOS.
└──▷ GET THIS VERSION$ git clone --branch v2.1.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.10
- ›Adds
mark-as-readandmark-as-unreadfunctions to the Gmail toolkit. - ›[Experimental] Introduces Culture, a shared space for agents to think, write, and build on each other's ideas, enabling collective learning across an agent group.
- ›Enables Knowledge to be added and managed via any AgentOS interface without requiring it to be attached to an Agent or Team.
- ›Adds
- v2.1.9
Agno v2.1.9 adds trackable message IDs and session_state propagation to Workflow Condition and Router steps.
└──▷ GET THIS VERSION$ git clone --branch v2.1.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.9
└──▷ USE ITAccesssession_stateinside a Condition evaluator to make routing decisions based on contextual workflow state.from agno.workflow import Condition def my_evaluator(step_output, session_state): return session_state.get('user_tier') == 'premium' condition = Condition(evaluator=my_evaluator, ...)- ›Adds
idfield to the Message class, available onRunOutputmessage lists, enabling message tracking in storage. - ›Extends
session_stateaccess toevaluatorandselectorfunctions in Condition and Router Workflow Step classes.
- ›Adds
- v2.1.8
Agno v2.1.8 adds class-based workflow executors, streaming post-hooks, Jira worklogs, and a renamed knowledge search endpoint.
└──▷ GET THIS VERSION$ git clone --branch v2.1.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.8
- ›Renames the knowledge search endpoint from
search_vectorstosearch_knowledge. - ›Supports class-based executors in Workflows by defining a class that implements the
__call__method. - ›Adds post-hook support on streaming flows.
- ›Extends
JiraToolstoolkit to support creating worklogs. - ›Updates
GoogleCalenderToolsto notify attendees when creating, updating, or deleting calendar events.
└──▷ BREAKING ON UPGRADE- !The knowledge search endpoint is renamed from
search_vectorstosearch_knowledge; any client code callingsearch_vectorswill break and must be updated.
- ›Renames the knowledge search endpoint from
- v2.1.6
Agno v2.1.6 adds SurrealDB support via new
SurrealDbclass and renamesstore_tool_resultstostore_tool_messages└──▷ GET THIS VERSION$ git clone --branch v2.1.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.6
- ›Adds the
SurrealDbclass for complete SurrealDB integration with Agents, Teams, and Workflows. - ›Renames the
store_tool_resultsflag tostore_tool_messagesfor clarity; tool message pairs (tool result + the assistant message containing the corresponding tool call) are now removed together to maintain valid message sequences required by most model providers.
└──▷ BREAKING ON UPGRADE- !The
store_tool_resultsflag is renamed tostore_tool_messages; any code or config referencingstore_tool_resultswill break on upgrade.
- ›Adds the
- v2.1.5
Agno v2.1.5 adds async Postgres, knowledge search endpoints, workflow executor event filtering, and reasoning support for Gemini/Claude.
└──▷ GET THIS VERSION$ git clone --branch v2.1.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.5
└──▷ USE ITSuppress verbose tool call and history messages from run output when you only care about the final response.agent = Agent( ..., store_history_messages=False, store_tool_messages=False, )Filter workflow executor events so only top-level workflow lifecycle events (not agent/team sub-events) are streamed to the client.workflow.run( ..., stream_intermediate_events=True, stream_executor_events=False, )Re-enable AgentOS access logs after upgrading, since they are now off by default.serve(access_log=True)
- ›Adds
store_history_messagesandstore_tool_messagesflags to Agent and Team to control whether history and tool messages are persisted on run output. - ›Adds
stream_executor_eventsto workflows for filtering events emitted by agents, teams, or custom functions — complementing the existingstream_intermediate_events(for workflow-level events likeWorkflowStarted,StepStarted) andstream_member_eventson Team. - ›Adds
access_log=Trueparameter to serve() to re-enable AgentOS access logs, which are now off by default. - ›Adds async Postgres support across the library for non-blocking database operations.
- ›Adds knowledge search endpoints to the AgentOS API, enabling vector database searches via the AgentOS API.
+3 moreshow less
- ›Adds service account authentication support to
GoogleSheetsTools. - ›Adds native reasoning model support for Gemini 2.5+, Anthropic Claude, and VertexAI Claude when used as reasoning models with Agents.
- ›Allows MCP server URLs without the conventional
/mcppath segment when using MCPToolbox.
└──▷ BREAKING ON UPGRADE- !AgentOS access logs are now disabled by default; existing setups relying on access logging must explicitly pass
access_log=Trueto serve() to restore the previous behavior.
- ›Adds
- v2.1.4
Agno v2.1.4 adds workflow history, a GoogleDriveTools class, AG-UI custom events, and tool post-hooks on failure.
└──▷ GET THIS VERSION$ git clone --branch v2.1.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.4
- ›Adds
GoogleDriveToolsclass to give agents read and write access to Google Drive. - ›Adds workflow history support, enabling continuous conversational context across all or individual workflow steps.
- ›Extends tool post-hooks to also execute when a tool run fails with an exception, enabling failure-specific cleanup or logging logic.
- ›AG-UI integration now delivers Agno custom events to the AG-UI interface in the standard AG-UI custom event format.
- ›Parallel step event streaming in workflows now yields events immediately as they are produced rather than collecting all events and yielding at the end.
- ›Adds
- v2.1.3
Agno v2.1.3 adds Claude on Vertex AI, OpenRouter fallback models, and MCP server support for custom FastAPI apps
└──▷ GET THIS VERSION$ git clone --branch v2.1.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.3
└──▷ USE ITExpose an AgentOS instance with a custom FastAPI app as an MCP server so external MCP clients can call your agents.agent_os = AgentOS(app=my_fastapi_app, enable_mcp_server=True)
- ›Enables AgentOS instances running a custom FastAPI base app to be exposed as MCP servers via the
enable_mcp_serverparameter. - ›Adds a new Claude model class for serving Claude models through Vertex AI.
- ›Adds fallback model support to the
OpenRouterclass, allowing multiple models to be defined so that if the primary model fails a fallback is used automatically. - ›Agents, Teams, and Workflows exposed via an AgentOS MCP server can now use MCP tools themselves.
- ›Updates
FileToolstoolkit to handle relative paths across all its methods.
- ›Enables AgentOS instances running a custom FastAPI base app to be exposed as MCP servers via the
- v2.1.2
Agno v2.1.2 adds an A2A interface for AgentOS and a field-labelled CSV reader for structured knowledge ingestion.
└──▷ GET THIS VERSION$ git clone --branch v2.1.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.2
- ›Adds
A2Ainterface to AgentOS, enabling Agents, Teams, and Workflows to be exposed and run in Agent-to-Agent (A2A) compatible format. - ›Adds a field-labelled CSV reader that preserves field–value relationships when ingesting CSV knowledge data.
- ›Supports passing
user_idin theforwarded_propsfield when initiating an AG-UI run. - ›Extends AgentOS API routers to accept additional file types, including more audio formats.
- ›Supports local binary paths (e.g.
./script) as MCP server commands in MCPTools andMultiMCPToolsclasses.
- ›Adds
- v2.1.1
Agno v2.1.1 adds a
prefixoption for AGUI, WhatsApp, and Slack interfaces to support multiple interfaces on one AgentOS instance.└──▷ GET THIS VERSION$ git clone --branch v2.1.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.1
- ›Adds a
prefixparameter toAGUI, Whatsapp, and Slack interfaces, enabling multiple interfaces to run on the same AgentOS instance with distinct route prefixes.
- ›Adds a
- v2.1.0
Agno v2.1.0 adds JWT middleware, pre/post hooks, guardrails (PII/prompt-injection/OpenAI Moderation), and Requesty LLM gateway support.
└──▷ GET THIS VERSION$ git clone --branch v2.1.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.1.0
- ›Adds built-in JWT Middleware to AgentOS for validating tokens and extracting claims into AgentOS endpoints.
- ›Adds support for any custom FastAPI-compatible middleware on the AgentOS.
- ›Adds
pre_hooksandpost_hooksconfiguration on agents and teams for input/output validation or transformation at the start or end of a run. - ›Adds built-in Guardrails as pre-hooks, including prompt injection checks, PII detection (SSN, credit cards, phone numbers, emails), OpenAI Moderation, and support for custom guardrails.
- ›Adds
base_appparameter to AgentOS for configuring a custom FastAPI app (replacing the now-deprecatedfastapi_app).
+8 moreshow less
- ›Adds
on_route_conflictparameter to AgentOS for controlling behavior when routes conflict onbase_app(replacing deprecatedreplace_routes). - ›Adds
enable_mcp_serverparameter to AgentOS for converting it into an MCP server (replacing deprecatedenable_mcp). - ›Adds
idparameter to AgentOS as the OS identifier (replacing deprecatedos_id). - ›Adds support for the Requesty LLM gateway provider for affordable LLM access with advanced governance.
- ›Adds batch embeddings support to speed up embedding generation and reduce API calls to embedding providers.
- ›Enables concurrent (parallel) execution of async generator tools during streaming.
- ›Enables concurrent member execution during async team streaming via Team.arun(..., stream=True); note that event order is no longer guaranteed.
- ›Uses the user's unique phone number as the default session ID for WhatsApp interface sessions, enabling conversation history.
└──▷ BREAKING ON UPGRADE- !Async team member events during Team.arun(..., stream=True) are now received concurrently — the order of member events is no longer guaranteed. Code depending on a specific event order from team members will behave differently.
- !The
use_batchparameter has been removed from thePGVectorDBclass.
- v2.0.11
Agno v2.0.11 adds metadata fields to LiteLLM and improves AgentOS MCP tool and DB registration logic.
└──▷ GET THIS VERSION$ git clone --branch v2.0.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.11
- ›Adds
metadataand additional fields to theLiteLLMmodel class, enabling richer model configuration and request context. - ›Improves AgentOS logic for finding and registering MCP tools when setting up an AgentOS instance.
- ›Improves AgentOS logic for finding and registering DBs, now rejecting incompatible DB instances that share the same IDs.
- ›Adds
- v2.0.10
Agno v2.0.10 adds
overwrite_db_session_stateflag to overwrite persisted session state in the database.└──▷ GET THIS VERSION$ git clone --branch v2.0.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.10
└──▷ USE ITForce a fresh session state on the next run instead of resuming from the previously stored state in the database.agent = Agent(..., overwrite_db_session_state=True)
- ›Adds
overwrite_db_session_stateflag to overwrite the session state persisted in the database, enabling clean session resets without manual DB intervention.
- ›Adds
- v2.0.9
Agno v2.0.9 adds MCP Toolbox for Databases, Ollama Cloud support, bulk DB writes, and session_state in AgentOS run endpoints.
└──▷ GET THIS VERSION$ git clone --branch v2.0.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.9
- ›Adds
session_stateanddependenciesparameters to AgentOS run endpoints, enabling callers to pass session context directly into agent runs. - ›New MCP Toolbox toolkit integrates Google's MCP Toolbox for Databases, giving agents structured access to database tools via the MCP protocol.
- ›Ollama Model class now supports Ollama Cloud via an API key, enabling cloud-hosted Ollama model inference alongside local deployments.
- ›All database implementations now support bulk writes, allowing multiple Sessions and Memories to be persisted in a single DB call.
- ›Workflows can now be used in AgentOS together with the Slack interface.
+2 moreshow less
- ›New methods added to the Scrape Graph Toolkit.
- ›Storage layer now raises critical errors on read/write failures rather than silently logging them, surfacing DB issues to callers.
└──▷ BREAKING ON UPGRADE- !Storage errors that were previously logged silently are now raised as exceptions; code that relied on silent failure on DB read/write errors will now encounter raised exceptions.
- ›Adds
- v2.0.8
Agno v2.0.8 adds CometAPI as a model provider,
allow_partial_failurefor MultiMCPTools, anddependenciesaccess inside custom tools.└──▷ GET THIS VERSION$ git clone --branch v2.0.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.8
└──▷ USE ITKeep a multi-MCP agent running even when one MCP server is unavailable at startup.from agno.tools.mcp import MultiMCPTools tools = MultiMCPTools( servers=["npx -y @modelcontextprotocol/server-github", "npx -y @modelcontextprotocol/server-slack"], allow_partial_failure=True )- ›Adds
allow_partial_failureflag toMultiMCPToolstoolkit, letting multi-server MCP setups continue when individual servers fail. - ›Exposes
dependenciesas a built-in argument on custom tools, making injected dependencies directly accessible inside tool function bodies. - ›Adds CometAPI as a new model provider.
- ›Supports multiple
text_contentsentries in add_contents() on Knowledge, enabling bulk text ingestion in a single call.
- ›Adds
- v2.0.7
Agno v2.0.7 adds a
LlamaCppModel class for local Llama CPP inference and achat_historyfield toTeamSessionDetailSchema.└──▷ GET THIS VERSION$ git clone --branch v2.0.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.7
- ›Adds
LlamaCppModel class, enabling local Llama CPP model support as a first-class model backend. - ›Adds
chat_historyfield toTeamSessionDetailSchema, exposing team session conversation history via the schema.
- ›Adds
- v2.0.6
Agno v2.0.6 adds FileGenerationTools for PDF/CSV/JSON/TXT output and a new Nexus Router Model class.
└──▷ GET THIS VERSION$ git clone --branch v2.0.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.6
└──▷ USE ITGive an agent the ability to produce downloadable file artifacts (PDF, CSV, JSON, TXT) as part of its responses.from agno.agent import Agent from agno.tools.file_generation import FileGenerationTools agent = Agent( tools=[FileGenerationTools()], description="An agent that can generate and save file artifacts.", ) agent.print_response("Summarise this dataset and save it as a CSV report.")- ›Adds
FileGenerationToolstoolkit, enabling agents to generate file artifacts in PDF, CSV, JSON, and TXT formats. - ›Adds a Model class for the Nexus Router, exposing it as a first-class model provider.
- ›Stores the main workflow input in
WorkflowRunOutputand persists it to the database.
- ›Adds
- v2.0.5
Agno v2.0.5 adds
replace_routes=Falsefor custom FastAPI integration, Discord user ID context, and DuckDuckGosearch_engineparam.└──▷ GET THIS VERSION$ git clone --branch v2.0.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.5
- ›Adds
replace_routes=Falseparameter to AgentOS custom FastAPI integration, letting existing routes take precedence over AgentOS routes instead of being overwritten by default. - ›Adds
useridin context for Discord integration, making the caller's identity available to agents handling Discord events. - ›Updates DuckDuckGo tools with a new
search_engineparameter for configurable search engine selection. - ›Extends the v1 → v2 migration script to support metrics parsing and MongoDB migrations.
- ›Adds accurate token metric tracking for the OpenAI Responses API.
- ›Adds
- v2.0.4
Agno v2.0.4 adds TypedDict input schemas, SiliconFlow model support, and session_state in workflow function steps.
└──▷ GET THIS VERSION$ git clone --branch v2.0.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.4
└──▷ USE ITPersist intermediate state across steps in a workflow by writing to session_state inside a custom function step.def custom_function_step(step_input: StepInput, session_state): session_state["last_processed"] = step_input.message return step_inputDefine a structured agent input schema using TypedDict instead of Pydantic.from typing import TypedDict from agno.agent import Agent class ScanInput(TypedDict): target: str depth: int agent = Agent(input_schema=ScanInput)- ›Adds
session_stateas a parameter in custom Python function steps for workflows, enabling direct mutation of workflow session state from within a step function. - ›Adds
extra_bodyparameter toOpenAIChatandOpenAILikemodel classes for passing additional request body fields to the OpenAI-compatible API. - ›Supports
TypedDictininput_schemafor agents, teams, and workflows alongside existing Pydantic support for structured input definition. - ›Adds
SiliconFlowas a new model provider class. - ›Extends MCP (Model Context Protocol) async tool support to all AgentOS evals.
- ›Adds
- v2.0.3
Agno v2.0.3 adds WorkflowTools, MemoryTools, Gemini TTS, and custom encoding support for reader classes.
└──▷ GET THIS VERSION$ git clone --branch v2.0.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v2.0.3
- ›Adds
WorkflowToolsclass, usable as a tool for agents and teams to run workflows from within an agent, with reasoning support via think/analyze. - ›Adds
MemoryToolsclass, usable as a tool for agents and teams to add, update, and delete memories, with reasoning support via think/analyze. - ›Adds
encodingparameter support on the reader class, allowing custom text encoding to be passed when reading documents. - ›Adds support for additional
kwargsonAgentOSAPI run endpoints, enabling extra arguments when running an agent, team, or workflow via AgentOS. - ›Adds Gemini Text to Speech (TTS) support.
- ›Adds
- v1.8.2
Agno v1.8.2 adds
response_modelstructured output support for AG-UI and Discord, plusupdated_aton session responses.└──▷ GET THIS VERSION$ git clone --branch v1.8.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.8.2
└──▷ USE ITReturn a typed, structured response from a Discord-connected agent instead of raw text.from agno.client.discord import DiscordClient from pydantic import BaseModel class AnalysisResult(BaseModel): summary: str risk_level: str client = DiscordClient(agent=my_agent, response_model=AnalysisResult)- ›Adds
response_modelsupport to AG-UI, enabling structured output from agents in AG-UI apps. - ›Adds
response_modelsupport toDiscordClient, enabling structured output from agents in Discord apps. - ›Adds
updated_atfield toAgentSessionResponseandTeamSessionResponse. - ›Extends JSON Schema constraint support for Gemini models.
- ›Adds
- v1.8.1
Agno v1.8.1 adds Neo4j graph tools, OpenAI reasoning summaries, and timezone support for Teams.
└──▷ GET THIS VERSION$ git clone --branch v1.8.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.8.1
└──▷ USE ITQuery and traverse a Neo4j graph database from an Agno agent to investigate relationships between entities.from agno.agent import Agent from agno.tools.neo4j import Neo4jTools agent = Agent( tools=[Neo4jTools(uri='bolt://localhost:7687', user='neo4j', password='<password>')], show_tool_calls=True, ) agent.print_response('Find all nodes connected to the user with id 42')Get a readable reasoning summary from an OpenAI reasoning model response instead of raw chain-of-thought tokens.from agno.agent import Agent from agno.models.openai import OpenAIResponses agent = Agent( model=OpenAIResponses(id='o3', summary='auto'), markdown=True, ) agent.print_response('Explain the steps to assess a phishing email')- ›Adds
Neo4jToolsclass to explore and manipulate graphs in a Neo4j database from within agents. - ›Adds reasoning summary support to the
OpenAIResponsesclass for OpenAI reasoning models. - ›Adds
timezone_identifierfield to Team, bringing it to parity with the existing Agent functionality. - ›Allows
OpenAIChatto accept bothhttpx.Clientandhttpx.AsyncClientfor custom HTTP client configuration.
- ›Adds
- v1.8.0
Agno v1.8.0 adds MemoriTools, file inputs for Workflows, agentic crawling, and Vertex AI Search support.
└──▷ GET THIS VERSION$ git clone --branch v1.8.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.8.0
└──▷ USE ITGive an agent access to GibsonAI Memori for persistent memory across sessions.from agno.tools.memori import MemoriTools agent = Agent(tools=[MemoriTools()], ...)
- ›Adds
MemoriToolstoolkit, enabling Agents and Teams to interact with GibsonAI's Memori memory service. - ›Adds
agentic_crawlerparameter toScrapeGraphToolsfor agentic web crawling. - ›Adds
files=[]parameter toWorkflow.runandWorkflow.arunfor passing file inputs directly to workflow runs. - ›Adds Vertex AI Search support to the Gemini model integration.
- ›Updates
DuckDuckGoToolsto work with theddgspackage (replacesduckduckgo-search).
└──▷ BREAKING ON UPGRADE- !
DuckDuckGoToolsnow requires theddgspackage instead ofduckduckgo-search; users must installddgsfor DuckDuckGo search to function.
- ›Adds
- v1.7.12
Agno v1.7.12 adds Team collaborate streaming, OpenAI verbosity control, Gemini URL context tool, Vertex AI embedder support, and DynamoDB throughput config.
└──▷ GET THIS VERSION$ git clone --branch v1.7.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.12
└──▷ USE ITTune how much detail OpenAI returns in responses by settingverbosityonOpenAIChat.from agno.models.openai import OpenAIChat model = OpenAIChat(id="gpt-4o", verbosity=2)
- ›Adds
verbosityparameter toOpenAIChatandOpenAIResponsesfor controlling OpenAI output verbosity. - ›Allows specifying DynamoDB provisioned throughput when initializing
DynamoDbStorage, enabling capacity control at construction time. - ›Adds Vertex AI support for
GeminiEmbedder, enabling Gemini embeddings via the Vertex AI backend. - ›Adds streaming support for Team in
collaboratemode, delivering incremental output for multi-agent collaborative workflows. - ›Adds support for the Gemini URL context tool, enabling Gemini models to fetch and reason over web URLs as context.
- ›Adds
- v1.7.11
Agno v1.7.11 adds InMemoryStorage, TrafilaturaTools, DashScope/Qwen models, BrandfetchTools, and Bedrock File support.
└──▷ GET THIS VERSION$ git clone --branch v1.7.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.11
└──▷ USE ITPrototype an agent quickly without a database by swapping in InMemoryStorage instead of a persistent backend.from agno.storage.memory import InMemoryStorage from agno.agent import Agent agent = Agent( storage=InMemoryStorage(), ) agent.run('Summarize the latest threat intel report.')Equip an agent with web scraping capabilities to extract clean text from arbitrary URLs.from agno.agent import Agent from agno.tools.trafilatura import TrafilaturaTools agent = Agent( tools=[TrafilaturaTools()], ) agent.run('Extract the main article text from https://example.com/blog/post')Run a Qwen model through DashScope when you need Alibaba Cloud-hosted LLM inference.from agno.models.dashscope import DashScope from agno.agent import Agent agent = Agent( model=DashScope(id='qwen-max'), ) agent.run('List the top five open-source SIEM platforms.')- ›Adds
InMemoryStorageclass for lightweight, optionally persistence-backed session storage, compatible with custom backends such as AWS S3 and Snowflake. - ›Adds
TrafilaturaToolsSDK for web scraping and text extraction using the Trafilatura library. - ›Adds
DashScopeintegration class to run Qwen models natively. - ›Adds
BrandfetchToolstoolkit (sync and async) for agents to fetch brand information and assets via the Brandfetch API. - ›Adds
workersparameter to the FastAPI app for controlling concurrency.
+2 moreshow less
- ›Adds File input support for compatible AWS Bedrock models.
- ›Adds async hybrid search support for the Milvus vector database integration.
- ›Adds
- v1.7.10
Agno v1.7.10 adds GPT-5 support, password-protected PDF ingestion, GitHub pagination, and a Team role parameter.
└──▷ GET THIS VERSION$ git clone --branch v1.7.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.10
└──▷ USE ITDefine a specialized team purpose so the orchestrator knows how to route tasks to it.from agno.team import Team research_team = Team( name='Research Team', role='Gather and synthesize information from web sources to answer factual questions', members=[...] )- ›Adds
roleparameter to the Team class for defining a team's purpose and specialization. - ›Adds password-protected PDF support to
PDFKnowledgeBasefor ingesting secured documents into knowledge bases. - ›Supports GPT-5 via the
OpenAIResponsesclass. - ›Adds pagination with metadata for GitHub Tools.
- ›Adds
- v1.7.9
Agno v1.7.9 adds reranker support in PgVector hybrid search and page-number-aware PDF chunking
└──▷ GET THIS VERSION$ git clone --branch v1.7.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.9
- ›Adds
stream_intermediate_stepssupport when using an output model, enabling streaming of intermediate agent steps alongside structured output. - ›Adds reranker support to PgVector hybrid search, allowing result re-ranking in vector+keyword search pipelines.
- ›Adds page number handling to PDF Readers, including a flag to control whether pages are split during chunking.
- ›Adds
- v1.7.8
Agno v1.7.8 adds
output_modelfor Agents and Teams, OpenAIservice_tiersupport, Gemini thinking, and Google toolkit enhancements.└──▷ GET THIS VERSION$ git clone --branch v1.7.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.8
└──▷ USE ITRoute an agent's final structured output through a cheaper or specialized model while keeping a powerful model for reasoning.from agno.agent import Agent from agno.models.openai import OpenAIChat agent = Agent( model=OpenAIChat(id='o3'), output_model=OpenAIChat(id='gpt-4o-mini'), ) agent.print_response('Summarise the quarterly results.')Use OpenAI Flex Processing to reduce cost on latency-tolerant batch workloads.from agno.models.openai import OpenAIChat model = OpenAIChat(id='gpt-4o', service_tier='flex')
- ›Adds
output_modelparameter to Agent and Team classes, letting the final response be generated by a separate model rather than the primarymodel. - ›Adds
service_tierfield toOpenAIChatandOpenAIResponsesto enable OpenAI Flex Processing. - ›Adds Gemini thinking output to responses via the Gemini integration.
- ›Adds custom port support for the Google Sheets Toolkit authentication flow.
- ›Enhances Google Calendar toolkit with unified authentication.
- ›Adds
- v1.7.7
Agno v1.7.7 adds sync-friendly MCP integration, Morph code-edit tools, Claude interleaved thinking, and LiteLLM file/image inputs.
└──▷ GET THIS VERSION$ git clone --branch v1.7.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.7
└──▷ TRY ITInstall the arxiv tool extra to enable arxiv paper search in an agent without manually managing the dependency.$ pip install agno[arxiv]- ›Revamps MCPTools and
MultiMCPToolsso both classes can be initialized and used without an async context manager, simplifying synchronous workflows. - ›Introduces
MorphTools(Morph Fast Apply model) as a callable tool for intelligently merging code with update snippets at 98% accuracy and 4500+ tokens/second. - ›Adds support for Claude interleaved thinking — reasoning steps interspersed between other content blocks in Claude model responses.
- ›Adds file and image input support to
LiteLLMfor multimodal understanding workflows. - ›Upgrades
ZepToolscompatibility to Zep v3.
- ›Revamps MCPTools and
- v1.7.6
Agno v1.7.6 adds Portkey models, BitbucketTools, JinaEmbedder, EvmTools, LinkupTools, RowChunking, and non-blocking Workflows 2.0 background execution.
└──▷ GET THIS VERSION$ git clone --branch v1.7.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.6
└──▷ USE ITChunk a CSV file row-by-row for precise retrieval — useful when each row is a self-contained record like a CVE entry or an alert.from agno.document.chunking.row import RowChunking from agno.document.reader.csv_reader import CSVReader reader = CSVReader(chunking_strategy=RowChunking()) documents = reader.read('alerts.csv')Give an agent access to Bitbucket repositories — list repos, create PRs, and more — by attaching BitbucketTools.from agno.tools.bitbucket import BitbucketTools from agno.agent import Agent agent = Agent( tools=[BitbucketTools(username="<username>", password="<app-password>", workspace="<workspace>")], markdown=True, ) agent.print_response("List all open pull requests in the agno repo")- ›Adds
BitbucketToolsclass for interacting with Bitbucket Cloud repository APIs from an agent. - ›Adds
JinaEmbedderclass for using Jina-hosted embedding models. - ›Adds
EvmToolsclass for executing transactions on EVM-compatible blockchains via theweb3library. - ›Adds
LinkupToolsclass for web search capabilities inside agents. - ›Adds
RowChunkingas a CSV-specific chunking strategy for document ingestion.
+5 moreshow less
- ›Adds Portkey hosted model support, enabling Portkey as a model provider.
- ›Introduces background (non-blocking) execution for Workflows 2.0, with polling support for retrieving results.
- ›Adds async execution support (
ainvoke) for the AWS Bedrock model integration. - ›Adds new tools to the Daytona agent toolkit.
- ›Adds AG-UI support for frontend tool calls and surfacing backend tool calls.
- ›Adds
- v1.7.5
Agno v1.7.5 adds SurrealDB as a vector DB backend and
cache_sessioncontrol for memory management.└──▷ GET THIS VERSION$ git clone --branch v1.7.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.5
- ›Adds
cache_sessionattribute to agent/session configuration, allowing users to disable session caching for improved memory management. - ›Adds SurrealDB support as a vector database backend for knowledge bases.
- ›Adds Workflows 2.0 support inside
FastAPIApp, enabling the new workflow engine to run as a FastAPI application.
- ›Adds
- v1.7.4
Agno v1.7.4 ships a redesigned step-based Workflows 2.0 (beta) and Pydantic model input support for Agent and Team.
└──▷ GET THIS VERSION$ git clone --branch v1.7.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.4
└──▷ USE ITPass a validated Pydantic model directly into an agent run instead of raw text, enabling type-safe, structured inputs.from pydantic import BaseModel from agno.agent import Agent class ScanRequest(BaseModel): target: str depth: int agent = Agent(model=...) agent.run(ScanRequest(target="example.com", depth=3))- ›Adds Workflows 2.0 (beta), a complete redesign of the workflow system using a step-based architecture that supports sequential, parallel, conditional, and loop-based execution, dynamic step routing, mixed components (agents, teams, and functions), and shared session state across steps.
- ›Both Agent and Team now accept a Pydantic model as structured input on run() and print_response().
- v1.7.3
Agno v1.7.3 adds session_state on agent/team runs and GCSPDFKnowledgeBase for Google Cloud Storage PDFs.
└──▷ GET THIS VERSION$ git clone --branch v1.7.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.3
└──▷ USE ITSeed a fresh agent run with pre-populated session state to carry context from an external system into the conversation.agent.run('Continue the investigation', session_state={'case_id': 'INC-4821', 'severity': 'high'})- ›Adds
GCSPDFKnowledgeBaseclass to load and query PDFs stored on Google Cloud Storage as a knowledge base source. - ›Adds
session_stateparameter to agent and team run calls, allowing callers to pass initial session state at invocation time.
- ›Adds
- v1.7.2
Agno v1.7.2 adds MySQLStorage backend, XAi live search, OpenAI deep research models, and memory growth tracking.
└──▷ GET THIS VERSION$ git clone --branch v1.7.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.2
└──▷ USE ITTrack memory growth during a performance evaluation to diagnose leaks in long-running agent workloads.from agno.eval.performance import PerformanceEval from agno.agent import Agent eval = PerformanceEval(agent=Agent(), memory_growth_tracking=True) eval.run()
Use OpenAI deep research models for in-depth, multi-step research tasks inside an agent.from agno.agent import Agent from agno.models.openai import OpenAIChat agent = Agent(model=OpenAIChat(id="o3-deep-research")) agent.print_response("Research the latest advances in quantum error correction.")- ›Adds
MySQLStorageclass as a session storage backend for agents, teams, and workflows. - ›Adds
memory_growth_trackingattribute onPerformanceEvalto enable debug logs for memory growth during performance evaluations. - ›Adds
agentandteamas optional parameters in tool hooks for greater flexibility. - ›Supports live search on the XAi model provider.
- ›Supports
o4-mini-deep-researchando3-deep-researchOpenAI model identifiers.
- ›Adds
- v1.7.1
Agno v1.7.1 adds debug_level to Agent/Team, Gemini thinking params, Valyu/Oxylabs toolkits, and new Serper tools.
└──▷ GET THIS VERSION$ git clone --branch v1.7.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.1
└──▷ USE ITEnable verbose model logging on an agent to diagnose LLM request/response details during development.from agno.agent import Agent agent = Agent( model=my_model, debug_level=2, )Configure a Gemini model to expose its chain-of-thought reasoning alongside the final response.from agno.models.gemini import Gemini model = Gemini( id="gemini-2.0-flash-thinking-exp", thinking_budget=1024, include_thoughts=True, )Search academic literature from within an agent using the new Valyu deep-search toolkit.from agno.agent import Agent from agno.tools.valyu import ValyuTools agent = Agent(tools=[ValyuTools()]) agent.print_response("Find recent papers on retrieval-augmented generation")- ›Adds
debug_levelparameter (int1or2) to both Agent and Team classes for controlling logging verbosity, with2enabling more verbose model logs. - ›Adds
thinking_budgetandinclude_thoughtsparameters to the Gemini model class for configuring Gemini thinking behavior. - ›Adds
parser_modelparameter support to Team for structured output via a dedicated parser model. - ›Adds
search_news,search_scholar, andscrape_webpagetools to the Serper toolkit. - ›New
OxylabsToolstoolkit for web-scraping capabilities in agents.
+1 moreshow less
- ›New Valyu toolkit for deep search of academic sources.
- ›Adds
- v1.7.0
Agno v1.7.0 adds add_tool(), streaming structured output, and a Linear teams tool
└──▷ GET THIS VERSION$ git clone --branch v1.7.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.7.0
└──▷ USE ITAdd a new tool to an already-initialised agent at runtime without rebuilding it from scratch.agent = Agent(tools=[existing_tool]) agent.add_tool(new_tool)
- ›Adds add_tool(tool) convenience method to Agent and Team to append new tools after initialisation.
- ›Streaming with
response_modelnow stays in streaming mode: calling run(..., stream=True) or arun(..., stream=True) with aresponse_modelset returnsIterator[RunResponseEvent]/AsyncIterator[RunResponseEvent]instead of switching off streaming; the structured output appears onRunResponseContentEventand the finalRunResponseCompletedEvent. - ›Adds a Linear tool to retrieve the list of teams (
get_team_details).
└──▷ BREAKING ON UPGRADE- !Calling run(..., stream=True) or arun(..., stream=True) on Agent or Team with a
response_modelset no longer returns a singleRunResponseobject — it now returnsIterator[RunResponseEvent]/AsyncIterator[RunResponseEvent]. Code that consumed the old single-object response must be updated to iterate over events instead.
- v1.6.4
Agno v1.6.4 adds Brightdata web scraping, OpenCV webcam capture, DiscordClient bot integration, and a FileTools search method.
└──▷ GET THIS VERSION$ git clone --branch v1.6.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.6.4
- ›Adds
searchmethod toFileToolsfor searching files within the toolkit. - ›Adds Brightdata Toolkit with multiple web-based tools including web scraping and data feed capabilities.
- ›Adds OpenCV Video/Image Toolkit with tools for capturing images and video via webcam.
- ›Adds
DiscordClientapp for connecting an agent or team to Discord as a Discord bot.
└──▷ BREAKING ON UPGRADE- !
SerperApiToolsis renamed toSerperTools; any code importing or referencingSerperApiToolswill break.
- ›Adds
- v1.6.3
Agno v1.6.3 adds
store_eventsto RunResponse, metadata filtering for CSV knowledge bases, and user control flows on the Playground.└──▷ GET THIS VERSION$ git clone --branch v1.6.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.6.3
- ›Adds
store_eventsparameter toRunResponse/TeamRunResponseto optionally persist all events that occurred during an agent or team run. - ›Adds metadata filtering support for
csvandcsv_urlknowledge base types. - ›Adds user control flows support on the Agno Platform Playground.
- ›Shows team member responses during team runs on the Agno Platform Playground.
- ›Shows behind-the-scenes activity during agent and team runs on the Agno Platform Playground.
└──▷ BREAKING ON UPGRADE- !Async knowledge-base function names (e.g.
asearch_knowledge_base) are renamed to match their sync counterparts — any model function-calling configuration referencing the olda-prefixednames will stop working.
- ›Adds
- v1.6.1
Agno v1.6.1 adds Nebius embeddings, Firestore memory/storage, async DocumentKnowledgeBase, and enum support in custom tools.
└──▷ GET THIS VERSION$ git clone --branch v1.6.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.6.1
└──▷ USE ITSuppress member-level event noise when you only care about top-level team events in a streaming pipeline.team = Team( members=[...], stream_member_events=False )- ›Adds
stream_member_eventsto team configuration to optionally disable streaming of member events. - ›Adds
agent_nameto agent events andteam_nameto team events in event payloads; addsteam_session_idto team-member events. - ›Adds
enumparameter support in custom tools across all models. - ›Adds
asyncsupport toDocumentKnowledgeBase. - ›Adds Nebius as a supported embedding model provider.
+1 moreshow less
- ›Adds Firestore as a memory and storage provider for agents.
- ›Adds
- v1.6.0
Agno v1.6.0 overhauls streaming events for agents, teams, and workflows with granular typed events and member-event propagation.
└──▷ GET THIS VERSION$ git clone --branch v1.6.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.6.0
└──▷ USE ITInspect a non-streaming run response status to detect paused or cancelled runs.response = agent.run('Analyze the logs') if response.status == 'CANCELLED': print('Run was cancelled before completion') elif response.status == 'PAUSED': print('Run is awaiting input')- ›Adds
RunResponseContent,RunError,RunCancelled,ToolCallStarted, andToolCallCompletedevent types to agent streaming runs via agent.run(..., stream=True) or agent.arun(..., stream=True). - ›Adds
RunStarted,RunCompleted,ReasoningStarted,ReasoningStep,ReasoningCompleted,MemoryUpdateStarted, andMemoryUpdateCompletedintermediate event types for agents whenstream_intermediate_steps=True. - ›Adds
RunResponse.statusattribute indicating whether a run response isRUNNING,PAUSED, orCANCELLED. - ›Adds team-scoped streaming event types —
TeamRunResponseContent,TeamRunError,TeamRunCancelled,TeamToolCallStarted,TeamToolCallCompleted— plus intermediate events (TeamRunStarted,TeamRunCompleted,TeamReasoningStarted,TeamReasoningStep,TeamReasoningCompleted,TeamMemoryUpdateStarted,TeamMemoryUpdateCompleted) whenstream_intermediate_steps=True. - ›Teams now propagate and yield streaming events from individual team members as they execute, surfacing member-level activity in the top-level event stream.
+1 moreshow less
- ›Workflows now support
WorkflowRunResponseStartedEventandWorkflowRunResponseCompletedEventevents for structured run lifecycle signalling.
└──▷ BREAKING ON UPGRADE- !
RunResponseno longer has aneventattribute; code readingRunResponse.eventwill break. - !Streaming run events are reformulated — existing code consuming the old event shapes from agent.run(..., stream=True) or agent.arun(..., stream=True) must be updated to the new typed event types.
- !Team streaming events are reformulated with new Team
-prefixedevent types; existing code consuming team stream events must be updated. - !Workflows must now yield
WorkflowRunResponseStartedEventandWorkflowRunResponseCompletedEvent; workflows that do not yield these events will be missing lifecycle signals.
- ›Adds
- v1.5.10
Agno v1.5.10 adds Playground file upload, async evals, and an Exa Research tool integration.
└──▷ GET THIS VERSION$ git clone --branch v1.5.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.10
- ›Adds
researchtool toExaTools, enabling deep research queries against Exa's research API directly from agents. - ›Adds async support to all evaluations, allowing evals to run non-blocking in async workflows.
- ›Adds file upload support to the Agno Playground, routing PDF, CSV, DOCX, and other files directly to agents/teams or to an attached knowledge base.
- ›Adds
- v1.5.9
Agno v1.5.9 adds AG-UI app, vLLM, LightRAG, 4 new toolkits, PDFBytesKnowledgeBase, and location-aware agents
└──▷ GET THIS VERSION$ git clone --branch v1.5.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.9
└──▷ USE ITIngest a PDF received as bytes (e.g. from an HTTP response or upload) directly into a knowledge base without writing it to disk.from agno.knowledge.pdf_bytes import PDFBytesKnowledgeBase import httpx pdf_bytes = httpx.get('https://example.com/report.pdf').content kb = PDFBytesKnowledgeBase(pdf_bytes=pdf_bytes) kb.load()Make an agent location-aware so its instructions automatically include where it is running — useful for geo-sensitive tasks.from agno.agent import Agent from agno.models.openai import OpenAIChat agent = Agent( model=OpenAIChat(id='gpt-4o'), add_location_to_instructions=True, ) agent.print_response('What businesses near me are open right now?')Give an agent access to Google search results via Serper for real-time web lookups.from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.tools.serper import SerperTools agent = Agent( model=OpenAIChat(id='gpt-4o'), tools=[SerperTools()], ) agent.print_response('What are the latest CVEs disclosed this week?')- ›Adds
SerperToolstoolkit to enable agents to search Google via Serper. - ›Adds
DaytonaToolstoolkit to let agents execute code remotely on Daytona sandboxes. - ›Adds AWSSESTools toolkit to send emails via AWS SES.
- ›Adds
PDFBytesKnowledgeBaseclass to ingest in-memory PDF content via bytes or IO streams instead of file paths. - ›Adds
add_location_to_instructionsparameter to automatically detect and inject the agent's current location into the system message.
+10 moreshow less
- ›Adds
search_postsmethod to XTools for searching posts on X. - ›Adds
GmailToolsattachment support for sending emails with attachments. - ›Updates
FastAPIAppto replaceagentwithagentsandteamwithteams, and addsworkflowssupport; agents/teams/workflows are now selected via query param (e.g.?agent_id=my-agent). - ›Adds AG-UI compatible FastAPI app to expose Agno agents and teams to AG-UI clients.
- ›Adds vLLM model support for running self-hosted vLLM inference via Agno.
- ›Adds LangDB AI Gateway integration as a model provider.
- ›Adds LightRAG server support, providing a graph-based RAG system for document retrieval and knowledge querying.
- ›Adds Parser Model capability to apply structured output to a model response using an external model.
- ›Adds URL expansion to the Crawl4ai toolkit so shortened URLs are resolved to their final destination before crawling.
- ›Adds MCP support for Qdrant via the Qdrant MCP server cookbook integration.
└──▷ BREAKING ON UPGRADE- !
FastAPIAppnow requiresagentsinstead ofagentandteamsinstead ofteam; callers must also explicitly specify which agent, team, or workflow to run (e.g.?agent_id=my-agent), so existing single-agent setups will break without updating both field names and the request URL.
- ›Adds
- v1.5.8
Agno v1.5.8 adds SlackApp, VisualizationTools, BraveSearch toolkit, and reworks FastAPIApp/WhatsappAPI serving
└──▷ GET THIS VERSION$ git clone --branch v1.5.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.8
└──▷ USE ITGive an agent the ability to produce matplotlib charts on demand during a run.from agno.agent import Agent from agno.tools.visualization import VisualizationTools agent = Agent( name="ChartAgent", tools=[VisualizationTools()], ) agent.print_response("Plot a bar chart of monthly sales: Jan=120, Feb=95, Mar=140")Enable Brave web search for an agent using the new BraveSearch toolkit.from agno.agent import Agent from agno.tools.brave_search import BraveSearch agent = Agent( name="WebSearchAgent", tools=[BraveSearch()], ) agent.print_response("What are the latest CVEs disclosed this week?")- ›Adds
SlackAppclass to build Slack-connected agents that respond to direct messages, group chats, and automatically create threads for replies. - ›Adds
VisualizationToolstoolkit (backed bymatplotlib) giving agents the ability to generate graphs. - ›Adds
BraveSearchtoolkit so agents can search the web via the Brave Search API. - ›Adds
inferas a parameter to Mem0Tools, exposing inference control in the memory toolkit. - ›Passes
knowledge_filtersthrough whenself.add_references=True(traditional RAG path), keeping filter behavior consistent with Agentic RAG.
+2 moreshow less
- ›
FastAPIAppnow exposes a .serve() method on the instance, replacing the standaloneserve_fastapi_appfunction, and the run endpoint moves from/runto/runs. - ›
WhatsappAPInow exposes a .serve() method on the instance, replacing the standaloneserve_whatsapp_appfunction.
└──▷ BREAKING ON UPGRADE- !
FastAPIAppno longer has a defaultprefix, and the run endpoint is renamed from/runto/runs— any client or integration hitting<domain>/runwill break. - !
serve_fastapi_appis replaced by .serve() on theFastAPIAppinstance — call sites using the standalone function will break. - !
serve_whatsapp_appis replaced by .serve() on theWhatsappAPIinstance — call sites using the standalone function will break.
- ›Adds
- v1.5.6
Agno v1.5.6 adds Team Evals, async Workflow support via
arun, and an Anthropic MCP connector tool.└──▷ GET THIS VERSION$ git clone --branch v1.5.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.6
└──▷ USE ITCap the total number of tool calls an agent may make across a full run to prevent runaway loops.from agno.agent import Agent from my_tools import search_tool agent = Agent( tools=[search_tool], tool_call_limit=10, ) agent.run('Research the latest CVEs in OpenSSL')- ›Adds
arunmethod to Workflows, enabling async Python usage of the Workflow class. - ›Revamps
tool_call_limitto enforce the limit across an entire agent run, not per-call. - ›Adds evaluation (Evals) support for Teams, extending the existing eval framework to multi-agent team configurations.
- ›Adds
team_session_statemanagement on the Team class, propagating shared state to all members and sub-teams. - ›Improves performance of user memory updates and session summary generation by parallelising writes.
└──▷ BREAKING ON UPGRADE- !Managing
team_session_statenow requires setting it on the Team object directly instead of viasession_state; existing code usingsession_statefor this purpose will no longer propagate team session state correctly.
- ›Adds
- v1.5.5
Agno v1.5.5 adds Claude file upload, prompt caching, Qdrant hybrid search, Markdown knowledge bases, and AI/ML API integration.
└──▷ GET THIS VERSION$ git clone --branch v1.5.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.5
└──▷ USE ITRetrieve messages from the last N sessions so an agent can reason across conversation history.agent = Agent( ... search_previous_sessions_history=True, )Set a TTL on Redis-backed agent storage so stale session data expires automatically.storage = RedisStorage( ... expire=3600, )- ›Adds
search_previous_sessions_historyto enable a get_previous_session_messages(number_of_sessions: int) tool that lets agents retrieve and analyse messages from the last N sessions. - ›Adds
expirekey to Redis storage configuration to set TTL on Redis keys. - ›Adds
cache_creation_input_tokensto agent session metrics for tracking Anthropic prompt-cache write statistics. - ›Supports direct file upload to Anthropic for use as agent input (Claude File Upload).
- ›Enables Python code execution in a secure, sandboxed environment via the Claude 4 Code Execution Tool.
+6 moreshow less
- ›Adds prompt caching for Anthropic models, allowing resumption from specific prompt prefixes to reduce processing time and cost on repetitive tasks.
- ›Adds support for Vercel v0 models.
- ›Adds Qdrant hybrid search support.
- ›Adds native
MarkdownKnowledgeBasesupport for Markdown-based knowledge bases. - ›Integrates the AI/ML API platform, providing access to 300+ models including DeepSeek, Gemini, and ChatGPT at enterprise-grade rate limits.
- ›Adds support for Pydantic and
dataclassobjects as direct inputs to agent tool functions.
- ›Adds
- v1.5.4
Agno v1.5.4 adds Human-in-the-loop control flows, a Mem0 memory toolkit, and Firecrawl web search support.
└──▷ GET THIS VERSION$ git clone --branch v1.5.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.4
└──▷ USE ITGive an agent the ability to dynamically decide when to ask the user for input during a run.from agno.agent import Agent from agno.tools.user_control_flow import UserControlFlowTools agent = Agent( tools=[UserControlFlowTools(), ...], ... )- ›Adds @tool(requires_confirmation=True) decorator to pause agent runs and require explicit user confirmation before a tool executes.
- ›Adds @tool(requires_user_input=True) decorator to halt agent execution and prompt for user input before continuing.
- ›Adds @tool(external_execution=True) decorator to signal that a tool function will be executed outside the agent context.
- ›Adds UserControlFlowTools() — include it in an agent to enable dynamic, model-driven user-input pauses anywhere in a run.
- ›Adds
agent.continue_runandagent.acontinue_runmethods to resume a paused agent run after user control flow requirements are satisfied.
+4 moreshow less
- ›Adds a Mem0 toolkit for managing memories inside Mem0 from within an agent.
- ›Adds Firecrawl web search support inside
FirecrawlTools. - ›Adds MongoDB hybrid search support for vector store retrieval.
- ›Adds an
auto_suggestparameter to the Wikipedia toolkit'ssummaryfunction.
- v1.5.3
Agno v1.5.3 improves accuracy evaluation methodology for more reliable agent-based assessment.
└──▷ GET THIS VERSION$ git clone --branch v1.5.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.3
- ›Updates the accuracy evaluation mechanism to use a more precise agent-based approach for measuring agent performance.
- v1.5.2
Agno v1.5.2 adds FastAPI/WhatsApp app wrappers, Couchbase vector DB, BigQuery tools, and async S3 readers
└──▷ GET THIS VERSION$ git clone --branch v1.5.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.2
└──▷ USE ITUse Azure Cosmos DB for MongoDB (vCore) as a drop-in vector store by enabling the compatibility flag on the existing MongoDB vector DB class.from agno.vectordb.mongodb import MongoDBVectorDb vector_db = MongoDBVectorDb( connection_string="<your-cosmos-vcore-connection-string>", database_name="agno_kb", collection_name="embeddings", cosmos_compatibility=True, )Give every tool in a toolkit a consistent stop-after-call and show-result behaviour without decorating each function individually.from agno.tools import Toolkit class MyTools(Toolkit): def __init__(self): super().__init__( stop_after_tool_call_tools=["run_query"], show_result_tools=["run_query", "fetch_report"], )- ›Adds
FastAPIAppclass — a convenience wrapper that spins up a FastAPI server exposing anagentorteamwith minimal boilerplate. - ›Adds
WhatsappAPIAppclass — implements the WhatsApp protocol so an Agno agent can run on WhatsApp, with image/audio/video input, image response generation, and reasoning support. - ›Adds
stop_after_tool_call_toolsandshow_result_toolsproperties to the base Toolkit class, mirroring the per-tool behavior previously only available via the@tooldecorator. - ›Enables
cosmos_compatibility=Trueon the MongoDB vector DB class to add Azure Cosmos DB for MongoDB (vCore) as a supported vector store backend. - ›Adds Couchbase as a supported vector DB for knowledge bases.
+4 moreshow less
- ›Adds async support for
pdfandtextS3 readers. - ›Adds a Google BigQuery toolkit for querying BigQuery from agents.
- ›Extends knowledge-base filters (manual and agentic) to work with Teams, not just individual agents.
- ›72% speed improvement to
WebsiteReader._extract_main_content, unlocking faster large-scale web knowledge ingestion.
- ›Adds
- v1.5.1
Agno v1.5.1 adds Nebius as a model provider, extends vector DB filter support to pgvector/Milvus/Weaviate/Chroma, and adds SSL to Redis storage.
└──▷ GET THIS VERSION$ git clone --branch v1.5.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.5.1
└──▷ USE ITEnable SSL when connecting to a Redis storage backend to secure session data in transit.from agno.storage.redis import RedisStorage storage = RedisStorage( host="my-redis-host", port=6380, ssl=True )- ›Adds
sslparameter to the Redis storage class, enabling encrypted connections to Redis backends. - ›Adds Nebius (Nebius Studio) as a new model provider via an OpenAI-compatible interface.
- ›Extends filtering support to additional vector databases: pgvector, Milvus, Weaviate, and Chroma.
- ›Adds
- v.1.5.0
Agno v1.5.0 adds Azure OpenAI DALL-E image generation, OpenTelemetry auto-instrumentation, Milvus hybrid search, and streamable-HTTP MCP transport.
└──▷ GET THIS VERSION$ git clone --branch v.1.5.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v.1.5.0
- ›Adds
hybrid_searchsupport to the Milvus vector DB integration. - ›Adds streamable-HTTP transport support for MCP servers via MCPTools.
- ›Adds an OpenInference auto-instrumentor for Agno agents, enabling tracing to any OpenTelemetry-compatible provider (Arize, Langfuse, Langsmith).
- ›Adds Azure OpenAI image generation via DALL-E through Azure AI Foundry.
- ›Adds ability to run accuracy evaluations with pre-generated answers;
agent,prompt, andexpected_answerare now accepted fields on the accuracy eval class.
└──▷ BREAKING ON UPGRADE- !The performance evaluation class
PerfEvalis renamed toPerformanceEval; any code referencingPerfEvalwill break. - !The accuracy evaluation class now requires three fields —
agent,prompt, andexpected_answer— that were not previously required; existing instantiations omitting these fields will break. - !Duplicate information has been removed from streaming events when
stream=Trueduring concurrent agent runs; consumers that relied on that duplicated data in individual events will need to update their handling.
- ›Adds
- v1.4.7
Agno v1.4.7 adds Azure OpenAI image generation, OpenTelemetry auto-instrumentation, Milvus hybrid search, and streamable-HTTP MCP transport.
└──▷ GET THIS VERSION$ git clone --branch v1.4.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.7
└──▷ USE ITEnable hybrid search on a Milvus vector DB to combine dense and sparse retrieval for higher-recall knowledge base queries.from agno.vectordb.milvus import Milvus vdb = Milvus( collection="my_collection", hybrid_search=True, )- ›Adds
hybrid_searchsupport to the Milvus vector DB integration. - ›Adds streamable-HTTP transport support for MCP servers via MCPTools.
- ›Adds an auto-instrumentor for Agno agents contributed to the OpenInference project, enabling tracing with any OpenTelemetry-compatible provider (Arize, Langfuse, Langsmith).
- ›Adds Azure OpenAI image generation tool backed by DALL-E via Azure AI Foundry.
- ›Extends accuracy evaluations to run against pre-generated answers across all evals classes.
└──▷ BREAKING ON UPGRADE- !The
PerfEvalclass is renamed toPerformanceEval; any code importing or instantiatingPerfEvalwill break. - !The accuracy evaluation class now requires three new mandatory fields:
agent,prompt, andexpected_answer; existing instantiations that omit these will raise errors. - !Duplicate information has been removed from streaming events when
stream=Trueduring concurrent agent runs; code that parsed or depended on the previous event shape will need to be updated.
- ›Adds
- v1.4.6
Agno v1.4.6 adds Cerebras model support, Claude web search, and metadata-filtered knowledge bases with agentic filter detection.
└──▷ GET THIS VERSION$ git clone --branch v1.4.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.6
└──▷ USE ITLet the agent automatically extract filter values from the user's natural-language query, avoiding manual filter construction.agent = Agent( knowledge=knowledge_base, enable_agentic_knowledge_filters=True ) agent.run("Tell me about John Doe's performance review")Tag documents with metadata at ingest time so they can be filtered later by any knowledge_filters call.knowledge_base = PDFKnowledgeBase(path=[ {"path": "alice_records.pdf", "metadata": {"user_id": "alice"}}, {"path": "bob_records.pdf", "metadata": {"user_id": "bob"}} ])- ›Adds
knowledge_filtersparameter to Agent(...) initialization and to agent.run(...) calls for explicit metadata-based document filtering in knowledge bases. - ›Adds
enable_agentic_knowledge_filters=Trueon Agent to let the agent automatically detect and apply knowledge filters extracted from user queries. - ›Adds
metadataparameter toPDFKnowledgeBasepath entries and to knowledge_base.load_document(path=..., metadata=...) for attaching filterable metadata at ingest time. - ›Adds
current_user_idandcurrent_session_idas default variables insession_datafor tools, making user and session context available inside tool execution. - ›Adds Cerebras as a model provider (both OpenAILike and SDK integrations).
+2 moreshow less
- ›Adds support for Claude's web search tool.
- ›Knowledge Base metadata filtering (beta) supports
PDF, Text,DOCX,JSON, andPDF_URLknowledge base types, and Qdrant,LanceDB, andMongoDBvector databases.
- ›Adds
- v1.4.5
Agno v1.4.5 adds AWS Bedrock embeddings, Gemini video generation, and a revamped Apify integration.
└──▷ GET THIS VERSION$ git clone --branch v1.4.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.5
- ›Adds
AwsBedrockEmbedderclass for generating embeddings via AWS Bedrock, defaulting to thecohere.embed-multilingual-v3model. - ›Adds video generation capabilities to
GeminiTools. - ›Revamps
ApifyToolsfor full compatibility with Apify actors.
- ›Adds
- v1.4.4
Agno v1.4.4 adds async retrievers, OpenAI File uploads, Gemini video URLs, and expanded Llama model capabilities.
└──▷ GET THIS VERSION$ git clone --branch v1.4.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.4
└──▷ USE ITUse an async retriever to integrate non-blocking document lookup into an agent pipeline.async def my_retriever(query: str, **kwargs): results = await async_search(query) return results agent = Agent(retriever=my_retriever, ...) await agent.arun('What does the policy say about data retention?')Attach a PDF file directly to an OpenAIChat agent prompt for in-context document analysis.from agno.models.openai import OpenAIChat from agno.agent import Agent from agno.media import File agent = Agent(model=OpenAIChat(id='gpt-4o')) agent.run('Summarize this report.', files=[File(filepath='report.pdf')])Pass a video URL to a Gemini agent for multimodal video analysis.from agno.models.google import Gemini from agno.agent import Agent from agno.media import Video agent = Agent(model=Gemini(id='gemini-2.0-flash')) agent.run('Describe what happens in this video.', videos=[Video(url='https://example.com/incident.mp4')])- ›The
retrieverparameter now accepts anasyncfunction, enabling async custom retrieval withagent.arunandagent.aprint_response. - ›Adds support for attaching File objects to prompts for agents using
OpenAIChatmodels, including PDF and document uploads. - ›Adds Video(url=...) input support for Gemini models.
- ›Expands Llama and LlamaOpenAI model classes with structured output and image input support.
- ›The
- v1.4.3
Agno v1.4.3 adds native Llama API model classes, AWS session token support for Claude, and DynamoDB profile-based auth.
└──▷ GET THIS VERSION$ git clone --branch v1.4.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.3
- ›Adds native SDK and OpenAI-like model classes for the Llama API.
- ›Adds AWS session token support for Claude, enabling use of credentials from assumed IAM roles.
- ›Adds AWS profile-based authentication support for DynamoDB.
- ›Adds reasoning model support for
o4-mini(and anticipatedo4) in the OpenAI reasoning model class.
- v1.4.2
Agno v1.4.2 adds MCP SSE transport, tool hooks, shared team session state, and new Cartesia, Gemini, and Groq tool integrations.
└──▷ GET THIS VERSION$ git clone --branch v1.4.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.2
- ›Adds MCP SSE transport support, enabling agents to connect to SSE MCP Servers alongside the existing transport options.
- ›Adds tool hooks that wrap around all tool calls for both Toolkits and custom tools, enabling pre/post-call logic across every tool invocation.
- ›Adds shared Team Session State — a single state dictionary accessible across a team leader and all team members via tools given to the leader or members.
- ›Adds
CartesiaToolfor text-to-speech capabilities using Cartesia. - ›Adds a Gemini image tool for generating images using Gemini models.
+3 moreshow less
- ›Adds Groq audio tools for audio translation, transcription, and generation using Groq models.
- ›Expands result sets returned by
PubmedTools. - ›Allows custom tools to return any type — the return value is now handled and converted automatically before being passed to the model.
- v1.4.1
Agno v1.4.1 adds meeting notification sending and richer PubMed article data to its toolkits.
└──▷ GET THIS VERSION$ git clone --branch v1.4.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.1
- ›Adds option in the Google Calendar / meeting toolkit to send meeting notifications to attendees when creating or updating events.
- ›Enhances
PubmedToolswith more comprehensive article data, returning additional metadata fields beyond basic citation info.
- v1.4.0
Agno v1.4.0 promotes Memory to GA, adds OpenAITools and ZepTools, and brings include/exclude tool filtering to all toolkits.
└──▷ GET THIS VERSION$ git clone --branch v1.4.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.4.0
└──▷ USE ITLimit a large toolkit to only the tools your agent actually needs, reducing attack surface and token overhead.from agno.tools.some_toolkit import SomeToolkit agent = Agent( tools=[SomeToolkit(include_tools=["search", "fetch"])], )- ›Adds
include_toolsandexclude_toolsparameters to all toolkits, enabling selective enabling/disabling of individual tools inside larger toolkits. - ›Adds
OpenAIToolsclass to enable text-to-speech and image generation through OpenAI's APIs. - ›Adds
ZepToolsandAsyncZepToolsclasses to manage Agent memories viazep-cloud. - ›Promotes Agentic user Memory management from beta to generally available, with
enable_user_memoriesandenable_session_summariesnow set directly on the Agent or Team. - ›Adds reasoning model support (e.g. Deepseek-R1) via Azure AI Foundry.
└──▷ BREAKING ON UPGRADE- !Agents now default to the new Memory class instead of the deprecated
AgentMemory;agent.memory.messagesis replaced byrun.messages for run in agent.memory.runs(or agent.get_messages_for_session()). - !
create_user_memoriesis renamed toenable_user_memoriesand must now be set directly on the Agent or Team. - !
create_session_summaryis renamed toenable_session_summariesand must now be set directly on the Agent or Team.
- ›Adds
- v1.3.5
Agno v1.3.5 adds async support for five vector DBs, reasoning events on RunResponse, and Google Gemini cache support.
└──▷ GET THIS VERSION$ git clone --branch v1.3.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.3.5
- ›Populates
reasoning_contentonRunResponsefor all reasoning types across stream/non-stream and async/non-async modes, with a unified JSON structure for Reasoning events. - ›Adds async support for ClickHouse, ChromaDB, Cassandra, PineconeDB, and Pgvector vector database backends.
- ›Adds Google Gemini caching support: cache files and send cached content to Gemini models.
- ›Populates
- v1.3.4
Agno v1.3.4 adds a web browser tool, proxy support for URL and PDF readers, and improved memory management.
└──▷ GET THIS VERSION$ git clone --branch v1.3.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.3.4
└──▷ USE ITPass custom Azure client parameters to the embedder at construction time.from agno.embedder.azure_openai import AzureOpenAIEmbedder embedder = AzureOpenAIEmbedder( client_params={ 'api_version': '2024-02-01', 'azure_deployment': 'my-embedding-deployment' } )- ›Adds
proxyparameter to the URL reader, enabling requests through a proxy when fetching remote content. - ›Adds
proxyparameter to the PDF reader, enabling proxy-routed PDF retrieval. - ›Adds
client_paramsargument support toAzureOpenAIEmbedder, allowing custom client parameters to be passed through. - ›Adds
modeattribute to Team class data serialization, exposing team mode in serialized output. - ›Adds a new
webbrowsertool for agents to interact with web browsers.
+2 moreshow less
- ›Improves memory management with updates to the Memory system for better session and memory handling.
- ›Gives database session state preference over in-memory session state for more consistent agent state persistence.
- ›Adds
- v1.3.3
Agno v1.3.3 adds Ollama and AzureOpenAI reasoning support, Gemini file upload, and expanded token metrics.
└──▷ GET THIS VERSION$ git clone --branch v1.3.3 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.3.3
- ›Adds audio, reasoning, and cached token counts to metrics where available across models.
- ›Enables native reasoning model support for Ollama and AzureOpenAI providers.
- ›Enables direct use of uploaded files with Gemini models.
- v.1.3.2
Agno v1.3.2 adds Redis as a Memory storage backend and new agent convenience methods for session and user memory retrieval.
└──▷ GET THIS VERSION$ git clone --branch v.1.3.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v.1.3.2
└──▷ USE ITRetrieve the previous session summary and user memories programmatically after an agent run.summary = agent.get_session_summary() user_memories = agent.get_user_memories() print(summary) print(user_memories)
- ›Adds
add_member_tools_to_system_messageto team configuration, allowing the member tool names to be removed from the system message sent to the team leader for broader transfer-function compatibility. - ›Adds agent.get_session_summary() method to retrieve the previous session summary from an agent.
- ›Adds agent.get_user_memories() method to retrieve the current user's memories from an agent.
- ›Supports Redis as a storage provider for Memory, enabling persistent memory backed by Redis.
- ›Supports additional instructions on
MemoryManagerandSessionSummarizerfor customizing memory behavior.
+1 moreshow less
- ›Supports skipping SSL verification for Confluence connections when required.
- ›Adds
- v1.3.0
Agno v1.3.0 revamps Memory with a new class, adds user/session params to agent.run(), and ships Redis session storage.
└──▷ GET THIS VERSION$ git clone --branch v1.3.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.3.0
└──▷ USE ITServe multiple users from a single agent instance by scoping each call to a specific user and session.agent.run("What did I order last time?", user_id="user-42", session_id="session-abc123")- ›Adds
user_idandsession_idparameters to agent.run(), scoping memory access to a single user and session to enable multi-user, multi-session applications from one agent configuration. - ›Introduces a new Memory class (beta) supporting add, update, delete, and semantic search over user memories, with agent-driven memory management.
- ›Adds Redis as a session storage provider.
- ›Adds
- v1.2.16
Agno v1.2.16 adds knowledge bases with agentic RAG to Teams, mirroring existing Agent functionality.
└──▷ GET THIS VERSION$ git clone --branch v1.2.16 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.16
└──▷ USE ITAttach a knowledge base to a Team with agentic RAG so the team leader can search documents before delegating tasks.team = Team( members=[agent1, agent2], knowledge=knowledge_base, retriever=my_custom_retriever, search_knowledge=True, )- ›Adds
knowledge,retriever, andsearch_knowledgefields to Team, enabling knowledge bases and agentic RAG on teams (previously only available on Agent). - ›Improves Teams task forwarding reliability and makes the team leader more conversational, with new reasoning-with-teams examples.
- ›Adds
- v1.2.14
Agno v1.2.14 adds expanded GithubTools, async MongoDB VectorDB support, and
stream_intermediate_responprint_response.└──▷ GET THIS VERSION$ git clone --branch v1.2.14 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.14
└──▷ USE ITStream intermediate agent responses to the console as they arrive, useful for long-running tasks where you want live visibility.agent.print_response(stream_intermediate_resp=True)
- ›Adds
stream_intermediate_respparameter toprint_responsefor streaming intermediate responses. - ›Expands
GithubToolswith many additional capabilities. - ›Adds async support for MongoDB as a vector database, enabling use in async knowledge bases.
- ›Converts all utility scripts to be Windows-compatible.
- ›Adds
- v1.2.12
Agno v1.2.12 adds ReasoningTools, timezone-aware agents, and Google Cloud JSON session storage
└──▷ GET THIS VERSION$ git clone --branch v1.2.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.12
└──▷ USE ITEnsure an agent's date-aware instructions reflect the user's local timezone rather than UTC.from agno.agent import Agent agent = Agent( timezone_identifier="America/New_York", # ... other params )Give an agent an advanced reasoning scratchpad so it can work through complex problems step-by-step before responding.from agno.agent import Agent from agno.tools.reasoning import ReasoningTools agent = Agent( tools=[ReasoningTools()], # ... other params )- ›Adds
timezone_identifierparameter to the Agent class to include the agent's timezone alongside the current date in its instructions. - ›Adds
ReasoningToolsclass providing an advanced reasoning scratchpad for agents. - ›Adds JSON-based session storage on Google Cloud via a new Google Cloud Storage backend for memory/session state.
- ›Extends
async/awaitsupport toURLKnowledgeBase,FireCrawlKnowledgeBase, andDocxKnowledgeBasefor non-blocking knowledge base operations. - ›Enables thinking support for the
@tooldecorator.
- ›Adds
- v1.2.10
Agno v1.2.10 adds KnowledgeTools for agent-driven thinking, searching, and document analysis over a knowledge base.
└──▷ GET THIS VERSION$ git clone --branch v1.2.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.10
└──▷ USE ITEquip an agent with KnowledgeTools so it can autonomously search and reason over documents in a knowledge base at query time.from agno.tools.knowledge import KnowledgeTools agent = Agent( knowledge=knowledge_base, tools=[KnowledgeTools(knowledge=knowledge_base)], )- ›Adds
KnowledgeToolsclass enabling agents to think, search, and analyse documents within a knowledge base.
- ›Adds
- v1.2.9
Agno v1.2.9 adds
MultiMCPToolsfor connecting agents to multiple MCP servers in a single interface.└──▷ GET THIS VERSION$ git clone --branch v1.2.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.9
└──▷ USE ITConnect an agent to multiple MCP servers at once using the newMultiMCPToolsclass.from agno.tools.mcp import MultiMCPTools tools = MultiMCPTools( commands=[ "npx -y @modelcontextprotocol/server-filesystem /tmp", "npx -y @modelcontextprotocol/server-brave-search" ] ) agent = Agent(tools=[tools], ...)- ›Adds
MultiMCPToolsclass to connect agents to multiple MCP servers simultaneously, with a simplified interface that only acceptscommand. - ›Updates Gemini model support for structured outputs when tools are in use.
└──▷ BREAKING ON UPGRADE- !The MCPTools interface now only allows
commandto be passed; any previously supported parameters beyondcommandwill no longer be accepted.
- ›Adds
- v1.2.8
Agno v1.2.8 adds
instructionsandadd_instructionsto Toolkit so tool usage guidance flows into the model system message.└──▷ GET THIS VERSION$ git clone --branch v1.2.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.8
└──▷ USE ITAttach tool-specific instructions to a custom toolkit so the model always receives guidance on how to use it, without manually editing the agent system prompt.from agno.tools import Toolkit class MySearchToolkit(Toolkit): def __init__(self): super().__init__( name="my_search", instructions="Always prefer recent results. Limit queries to 10 words.", add_instructions=True, ) def search(self, query: str) -> str: ...- ›Adds
instructionsandadd_instructionsfields to the Toolkit class, allowing per-toolkit usage instructions to be injected into the model's system message whenadd_instructions=True.
- ›Adds
- v1.2.7
Agno v1.2.7 adds Gemini image generation, async knowledge base/vector DB support, and result caching on all toolkits.
└──▷ GET THIS VERSION$ git clone --branch v1.2.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.7
└──▷ USE ITLoad a large PDF knowledge base asynchronously to speed up ingestion in an async agent pipeline.import asyncio from agno.knowledge.pdf import PDFKnowledgeBase kb = PDFKnowledgeBase(path='reports/') asyncio.run(kb.aload())
- ›Adds image generation via the
gemini-2.0-flash-exp-image-generationmodel, enabling agents to produce images directly through Gemini. - ›Adds result caching to all Agno Toolkits and any custom functions decorated with
@tool. - ›Adds
async/awaitsupport toLanceDb, Milvus, and Weaviate vector DBs, enabling use inagent.arunandagent.aprint_response. - ›Adds
async/awaitsupport toJSONKnowledgeBase,PDFKnowledgeBase,PDFUrlKnowledgeBase,CSVKnowledgeBase,CSVUrlKnowledgeBase,ArxivKnowledgeBase,WebsiteKnowledgeBase,YoutubeKnowledgeBase, andTextKnowledgeBase. - ›Enables knowledge_base.aload() for async knowledge base loading, substantially increasing ingestion speed in async contexts.
- ›Adds image generation via the
- v1.2.5
Agno v1.2.5 adds E2B sandbox code execution, MCP tool filtering, async @tool() decorator, and team-leader tool support.
└──▷ GET THIS VERSION$ git clone --branch v1.2.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.5
└──▷ USE ITLimit an MCP server's exposed tools to a safe subset — useful when a server offers many tools but you only want the model to access a few.MCPTools(include_tools=['read_file', 'list_dir'])
Equip a team leader with its own tools and cap how many tool calls it can make per run.Team(members=[...], tools=[my_tool], tool_call_limit=5)
Define an async tool with a post-hook to run non-blocking I/O after each tool call.@tool(post_hook=async_post_hook) async def fetch_data(url: str) -> str: async with aiohttp.ClientSession() as session: async with session.get(url) as resp: return await resp.text()- ›Adds
toolsandtool_call_limitparameters to Team, allowing the team leader itself to be equipped with tools and act as an agent. - ›Expands MCPTools with include/exclude filtering so you can restrict which tools from an MCP server the model can access.
- ›The @tool() decorator now supports async functions, including async pre- and post-hooks.
- ›Adds E2BTools to run code inside an E2B Sandbox.
- ›Adds
- v1.2.4
Agno v1.2.4 makes
tool_choiceconfigurable on Teams and adds Teams playground endpoints.└──▷ GET THIS VERSION$ git clone --branch v1.2.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.4
- ›Adds
tool_choiceconfiguration support to Teams, enabling control over tool selection behavior at the team level. - ›Adds Teams playground endpoints for interacting with multi-agent teams via the playground interface.
- ›Adds
- v1.2.2
Agno v1.2.2 adds tool call visibility for Teams.
└──▷ GET THIS VERSION$ git clone --branch v1.2.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.2
- ›Adds support for showing tool calls in Teams, making agent collaboration steps visible during multi-agent workflows.
- v1.2.0
Agno v1.2.0 adds Financial Datasets and Docker tool integrations, plus reasoning for Teams and simplified MCPTools creation.
└──▷ GET THIS VERSION$ git clone --branch v1.2.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.2.0
- ›Simplifies creation of MCPTools for connecting agents to external MCP servers.
- ›Adds
FinancialDatasetsToolsfor accessing data from financialdatasets.ai. - ›Adds Docker tools for managing local Docker environments from within an agent.
- ›Enables reasoning support for Teams.
- v1.1.16
Agno v1.1.16 adds async Qdrant VectorDB support and a Claude Think Tool integration.
└──▷ GET THIS VERSION$ git clone --branch v1.1.16 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.16
- ›Adds async support for Qdrant VectorDB, enabling non-blocking vector database operations for improved performance and efficiency.
- ›Introduces the Claude Think Tool, implementing Anthropic's 'think tool' pattern to give Claude agents an explicit reasoning step before responding.
- v1.1.15
Agno v1.1.15 adds function result caching for 9 tool classes and improves tool-call display in print_response.
└──▷ GET THIS VERSION$ git clone --branch v1.1.15 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.15
- ›Adds result caching to
DuckDuckGoTools,ExaTools,FirecrawlTools,GoogleSearchtools,HackernewsTools,NewspaperTools,Newspaper4kTools, Websitetools, andYFinanceToolsto speed up iteration, avoid rate limits, and reduce costs during agent testing. - ›Tool calls are now rendered in a separate panel from the response panel when using
print_responseandaprint_response, including when combined withresponse_model.
- ›Adds result caching to
- v1.1.14
Agno v1.1.14 ships Teams 2.0 with three coordination modes, LiteLLM support, and a new
use_json_modeparameter.└──▷ GET THIS VERSION$ git clone --branch v1.1.14 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.14
└──▷ USE ITStand up a routing team that directs queries to specialised member agents and returns structured output.from agno.team import Team from agno.agent import Agent research_agent = Agent(name='Researcher', ...) writer_agent = Agent(name='Writer', ...) team = Team( mode='route', members=[research_agent, writer_agent], response_model=MyOutputModel, debug_mode=True, ) team.print_response('Summarise the latest AI papers')Force JSON-mode output from an agent when the target model does not support native structured output.from agno.agent import Agent from pydantic import BaseModel class Report(BaseModel): title: str summary: str agent = Agent( response_model=Report, use_json_mode=True, ) agent.print_response('Generate a threat report')- ›Adds Team class supporting three modes —
'collaborate','coordinate', and'route'— replacing the old Agent(team=[]) pattern with a dedicated first-class teams implementation. - ›Adds
use_json_mode: bool = Falseparameter to Agent and Team; when combined withresponse_model=YourModel, forces JSON-mode output instead of the new default of native structured output — makingresponse_modelthe only setting required for structured output. - ›Adds
debug_mode=Trueon Agent/Team and team.print_response(...) to surface revamped debug logs for both agents and teams. - ›Adds LiteLLM support as a native model implementation and via the existing
OpenAILikeinterface. - ›Enables
WebsiteToolsto update combined knowledgebases alongside standard knowledgebases.
+2 moreshow less
- ›Adds agentic shared context between team members and sharing of individual team member responses across the team.
- ›Supports passing images, audio, and video to member agents in team workflows, and enables structured output returns from member agents in
'route'mode.
└──▷ BREAKING ON UPGRADE- !
Agent.structured_outputis replaced byAgent.use_json_mode; the old parameter is deprecated and will be removed in a future major version. - !
Agent.teamis deprecated with the release of the new Team implementation and will be removed in a future major version; migrate to the Team class.
- ›Adds Team class supporting three modes —
- v.1.1.13
Agno v1.1.13 adds OpenAI File Search, web/document citations, and Cohere Command A support
└──▷ GET THIS VERSION$ git clone --branch v.1.1.13 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v.1.1.13
- ›Adds support for OpenAI's built-in File Search tool in
OpenAIResponses, automatically uploading File objects attached to agent prompts. - ›Adds extraction of URL citations from OpenAI's built-in Web Search tool responses via
OpenAIResponses. - ›Adds extraction of document citations from Claude responses when File objects are attached to agent prompts via Anthropic.
- ›Adds support and examples for Cohere's new flagship model Command A.
- ›Adds support for OpenAI's built-in File Search tool in
- v1.1.12
Agno v1.1.12 adds improved citation capture and storage with Gemini and Perplexity integration.
└──▷ GET THIS VERSION$ git clone --branch v1.1.12 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.12
- ›Improves support for capturing, displaying, and storing citations from models, with integration for Gemini and Perplexity.
- v1.1.11
Agno v1.1.11 adds OpenAI Responses API support with web search, an OpenWeather tool, and Reddit reply actions.
└──▷ GET THIS VERSION$ git clone --branch v1.1.11 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.11
- ›Adds a new model implementation for OpenAI's Responses API, including support for the built-in
websearchtool. - ›Adds an OpenWeather API tool for retrieving real-time weather information.
- ›Adds post reply and comment reply actions to the Reddit tool.
- ›Adds a new model implementation for OpenAI's Responses API, including support for the built-in
- v1.1.10
Agno v1.1.10 adds File prompts, LMStudio provider, AgentQL/Browserbase tools, a custom API tool, and Cohere vision support.
└──▷ GET THIS VERSION$ git clone --branch v1.1.10 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.10
- ›Introduces a new File type that can be added to prompts and passed to model providers (Gemini and Anthropic Claude supported).
- ›Adds LMStudio as a model provider.
- ›Adds an AgentQL toolkit for connecting agents to websites for scraping and interaction.
- ›Adds a Browserbase tool for browser automation.
- ›Adds a custom API tool that can call any arbitrary API endpoint.
+1 moreshow less
- ›Adds image understanding support for Cohere models (vision).
- v1.1.9
Agno v1.1.9 adds IBM WatsonX and DeepInfra model providers plus MCP tool support for agents.
└──▷ GET THIS VERSION$ git clone --branch v1.1.9 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.9
- ›Adds MCPTools class to integrate Model Context Protocol (MCP) servers with Agno agents.
- ›Adds IBM WatsonX as a model provider via a new
WatsonXintegration. - ›Adds DeepInfra as a model provider, including reasoning support for OpenAI-compatible DeepSeek models.
- ›Updates knowledgebase, vector DB, and reader interfaces with async support.
- v1.1.8
Agno v1.1.8 adds video file upload support in Playground for Gemini models and a
base_urlproperty for AzureOpenAI.└──▷ GET THIS VERSION$ git clone --branch v1.1.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.8
- ›Adds
base_urlproperty toAzureOpenAIto support non-default Azure endpoint URLs. - ›Enables video file upload in the Playground UI, allowing compatible Gemini models to interpret uploaded video content.
- ›Adds
- v1.1.7
Agno v1.1.7 adds audio file upload to the Playground for transcription and sentiment analysis.
└──▷ GET THIS VERSION$ git clone --branch v1.1.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.7
- ›Adds audio file upload support to the Playground, enabling models to perform transcription, sentiment analysis, and audio interpretation interactively.
- v1.1.6
Agno v1.1.6 adds support for Claude 3.7 Sonnet and extended thinking in messages.
└──▷ GET THIS VERSION$ git clone --branch v1.1.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.6
- ›Adds support for the Claude 3.7 Sonnet model, including extended thinking in messages.
- v1.1.5
Agno v1.1.5 adds audio responses, image understanding for XAI/Together.ai, Webex messaging, and Upstash vector DB support.
└──▷ GET THIS VERSION$ git clone --branch v1.1.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.5
└──▷ USE ITGenerate an audio response from an agent and save it as a WAV file for voice-mode use cases.from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.utils.audio import write_audio_to_file agent = Agent( model=OpenAIChat( id="gpt-4o-audio-preview", modalities=["text", "audio"], audio={"voice": "alloy", "format": "wav"}, ), ) agent.print_response("Tell me a 5 second story") if agent.run_response.response_audio is not None: write_audio_to_file( audio=agent.run_response.response_audio.base64_audio, filename="response.wav" )- ›Adds audio response support (streaming and non-streaming) via
agent.run_response.response_audio, usingOpenAIChatwithid='gpt-4o-audio-preview'and themodalitiesandaudioparameters; audio data is available asresponse_audio.base64_audioand can be written to file with write_audio_to_file(). - ›Adds image understanding support for XAI and Together.ai model providers, enabling multimodal agents on those backends.
- ›Adds a Webex integration tool for sending messages via Webex.
- ›Adds Upstash as a supported vector database backend.
- ›Adds Grounding and Search support for Gemini models to improve response accuracy and recency.
- ›Adds audio response support (streaming and non-streaming) via
- v1.1.4
Agno v1.1.4 adds
get_emails_by_threadandsend_email_replymethods to GmailTools└──▷ GET THIS VERSION$ git clone --branch v1.1.4 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.4
└──▷ USE ITReply to an existing Gmail thread from an agent tool, preserving conversation context.from agno.tools.gmail import GmailTools tools = GmailTools() thread = tools.get_emails_by_thread(thread_id="<thread_id>") tools.send_email_reply(thread_id="<thread_id>", message="Thanks, I'll follow up shortly.")
- ›Adds
get_emails_by_threadandsend_email_replymethods toGmailTools, enabling agents to read full email threads and reply inline. - ›Adds metadata support to
OpenAIChat.
- ›Adds
- v1.1.2
Agno v1.1.2 adds o3 model reasoning support and migrates GeminiEmbedder to Google's new genai SDK
└──▷ GET THIS VERSION$ git clone --branch v1.1.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.2
└──▷ USE ITGenerate embeddings with the updated GeminiEmbedder after migrating to the new genai SDK interface.embeddings = GeminiEmbedder("text-embedding-004").get_embedding( "The quick brown fox jumps over the lazy dog." )- ›Updates
GeminiEmbedderto use Google's newgenaiSDK, dropping themodels/prefix from model IDs (e.g.'text-embedding-004'instead of'models/text-embedding-004'). - ›Adds reasoning support for OpenAI's o3 models.
└──▷ BREAKING ON UPGRADE- !
GeminiEmbeddernow requires model IDs without themodels/prefix — callers passing'models/text-embedding-004'must change to'text-embedding-004'.
- ›Updates
- v1.1.1
Agno v1.1.1 adds file/image uploads to Agent UI, MP3 support in ModelsLabTools, and custom Firecrawl API URLs.
└──▷ GET THIS VERSION$ git clone --branch v1.1.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.1
- ›Adds
MP3to theFileTypeenum inModelsLabTools, with API routing viaMODELS_LAB_URLSandMODELS_LAB_FETCH_URLSdicts keyed byMP3,MP4, andGIF— enabling audio generation calls alongside existing video/GIF generation. - ›Adds support for a custom API URL parameter in the Firecrawl integration, letting users point the tool at self-hosted or alternate Firecrawl endpoints.
- ›Agent UI now supports file and image uploads alongside prompts, accepting
.pdf,.csv,.txt,.docx,.json(files) and.png,.jpeg,.jpg,.webp(images).
└──▷ BREAKING ON UPGRADE- !The
ModelsLabToolsconstructor in/libs/agno/tools/models_labs.pyhas changed: theurlandfetch_urlparameters have been removed. API URLs are now determined automatically from thefile_typevalue. Any code passingurlorfetch_urltoModelsLabToolswill break on upgrade.
- ›Adds
- v1.1.0
Agno v1.1.0 overhauls model support with Azure AI Foundry, full AWS Bedrock coverage, Google SDK Gemini, and exponential-backoff retries.
└──▷ GET THIS VERSION$ git clone --branch v1.1.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.1.0
└──▷ USE ITAutomatically retry agent calls with exponential backoff when hitting rate limits from a model provider.from agno.agent import Agent from agno.models.openai import OpenAIChat agent = Agent( model=OpenAIChat(id='gpt-4o'), exponential_backoff=True, ) agent.print_response('Summarize the latest AI research trends.')- ›Enables optional exponential backoff retries on model failures (e.g. rate-limit errors) when
exponential_backoffis set to True on an agent. - ›Expands AWS Bedrock support to all Bedrock models through a rewritten
AwsBedrockimplementation (note:AwsBedrockdoes not support async-await). - ›Switches the Gemini implementation to Google's
genaiSDK (v1.0.0), enabling better feature parity and easier future Gemini integrations. - ›Adds Exa Answers capability support via
ExaTools. - ›Renames
GoogleSearchtoGoogleSearchToolsfor consistency across the toolset.
+2 moreshow less
- ›Extends async-await support to all models (excluding
AwsBedrock) as part of the models refactor. - ›Improves metrics and visibility for all models in the Agent UI as part of the models overhaul.
└──▷ BREAKING ON UPGRADE- !The Gemini implementation via the Vertex API is replaced by the Google SDK implementation — existing code using the Vertex-based Gemini class will need to migrate.
- !The Gemini implementation via the OpenAI client is replaced by the Google SDK implementation — existing code using the OpenAI-client-based Gemini class will need to migrate.
- !
OllamaHermeshas been removed; users must migrate to the Ollama implementation. - !
GoogleSearchis renamed toGoogleSearchTools— any code importing or referencingGoogleSearchby name will break.
- ›Enables optional exponential backoff retries on model failures (e.g. rate-limit errors) when
- v1.0.8
Agno v1.0.8 adds Perplexity model support, a Todoist toolkit, JSON knowledge-base reader, Weaviate vector DB, Google Sheets tool, and custom retriever support.
└──▷ GET THIS VERSION$ git clone --branch v1.0.8 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.8
└──▷ USE ITUse Perplexity as the model provider for an agent to leverage its online search-backed responses.from agno.models.perplexity import Perplexity from agno.agent import Agent agent = Agent(model=Perplexity()) agent.print_response('What are the latest developments in AI safety?')Equip an agent with the Todoist toolkit to create and manage tasks programmatically.from agno.tools.todoist import TodoistTools from agno.agent import Agent agent = Agent(tools=[TodoistTools()]) agent.print_response('Add a task to review the quarterly report by Friday.')- ›Adds Perplexity as a model provider, enabling agents to use Perplexity AI models.
- ›Adds a Todoist toolkit for managing tasks from within agents.
- ›Adds a JSON file reader for loading JSON files into knowledge bases.
- ›Adds
name_existsfunction to the LanceDB vector store integration. - ›Adds async support for Mistral model provider.
+1 moreshow less
- ›Adds async support for Cohere model provider.
- v1.0.7
Agno v1.0.7 adds Google Sheets toolkit, Weaviate vector store, and async support for Mistral and Cohere
└──▷ GET THIS VERSION$ git clone --branch v1.0.7 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.7
- ›Mistral now supports async execution via agent.arun() and agent.aprint_response().
- ›Cohere now supports async execution via agent.arun() and agent.aprint_response().
- ›Adds a new Google Sheets toolkit for reading, creating, and updating Google Sheets.
- ›Adds Weaviate as a supported vector store backend.
- v1.0.6
Agno v1.0.6 adds a Google Maps toolkit and a URL reader/knowledge base for document ingestion.
└──▷ GET THIS VERSION$ git clone --branch v1.0.6 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.6
- ›New Google Maps toolkit covering business discovery, directions, navigation, geocoding, and nearby-places lookup.
- ›New URL reader and knowledge base that fetches any URL and stores its text contents in the document store.
- v1.0.5
Agno v1.0.5 adds Gmail tools, Mistral vision support, Claude async, and Exa
find_similar└──▷ GET THIS VERSION$ git clone --branch v1.0.5 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.5
└──▷ USE ITSearch for similar content using the newfind_similarcapability in ExaTools.from agno.tools.exa import ExaTools exa = ExaTools() results = exa.find_similar('https://example.com/threat-report')- ›Adds
find_similarmethod toExaToolsfor similarity-based search. - ›Adds a Gmail toolkit with tools for mail search, sending mail, and related operations.
- ›Enables async usage of Claude models via await agent.aprint_response() and await agent.arun(), including async tool calls.
- ›Adds Mistral vision model support.
- ›Adds
- v1.0.2
Agno v1.0.2 caches model clients for faster agent startup and renames TwitterTools to XTools with Twitter API v2 support.
└──▷ GET THIS VERSION$ git clone --branch v1.0.2 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.2
- ›Renames
TwitterToolsto XTools and updates capabilities to be compatible with Twitter API v2. - ›Caches model client instantiation across all models, improving Agno agent startup time.
└──▷ BREAKING ON UPGRADE- !
TwitterToolshas been renamed to XTools; any code importing or referencingTwitterToolswill break on upgrade.
- ›Renames
- v1.0.1
Agno v1.0.1 enables response caching for Mistral models.
└──▷ GET THIS VERSION$ git clone --branch v1.0.1 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.1
- ›Enables caching support for Mistral models.
- v1.0.0
Agno v1.0.0 introduces an Evals framework and a fully restructured multi-modal API with typed Image, Audio, Video, and Artifact classes.
└──▷ GET THIS VERSION$ git clone --branch v1.0.0 https://github.com/agno-agi/agno.git # already have the repo? check out this version: $ git checkout v1.0.0
└──▷ USE ITBuild a PDF knowledge base using the renamed embedderidparameter and updated import paths.from agno.knowledge.pdf_url import PDFUrlKnowledgeBase from agno.vectordb.pgvector import PgVector from agno.embedder.ollama import OllamaEmbedder knowledge_base = PDFUrlKnowledgeBase( urls=['https://phi-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf'], vector_db=PgVector( table_name='recipes', db_url='postgresql+psycopg://ai:ai@localhost:5532/ai', embedder=OllamaEmbedder(id='llama3.2', dimensions=3072), ), ) knowledge_base.load(recreate=True)- ›Adds an Evals system to measure performance, accuracy, and reliability of agents.
- ›Typed multi-modal input classes — Image, Audio, Video — now accepted by agent.run() and agent.print_response(), with fields for
url,filepath,content,detail,format, andid. - ›Typed output artifact classes —
ImageArtifact,AudioArtifact,VideoArtifact,AudioOutput— now returned onRunResponse.images,RunResponse.audio,RunResponse.videos, andRunResponse.response_audio. - ›Embedders now accept
idinstead ofmodelas the identifier parameter (e.g. OllamaEmbedder(id='llama3.2', dimensions=3072)). - ›All toolkit classes are now suffixed with Tools (e.g.
DuckDuckGoTools).
+6 moreshow less
- ›Model namespace moved from
phi.model.xtoagno.models.x; knowledge base namespace moved fromphi.knowledge_base.xtoagno.knowledge.x. - ›Document readers renamed with
_readersuffix underagno.document.reader.*(e.g.agno.document.reader.pdf_reader). - ›Storage classes renamed for clarity:
PgAgentStorage→PostgresAgentStorage,SqlAgentStorage→SqliteAgentStorage,MongoAgentStorage→MongoDbAgentStorage,S2AgentStorage→SingleStoreAgentStorage. - ›Workflow storage classes renamed:
SqlWorkflowStorage→SqliteWorkflowStorage,PgWorkflowStorage→PostgresWorkflowStorage,MongoWorkflowStorage→MongoDbWorkflowStorage. - ›Model classes renamed:
AzureOpenAIChat→AzureOpenAI,CohereChat→ Cohere,DeepSeekChat→DeepSeek,GeminiOpenAIChat→GeminiOpenAI,HuggingFaceChat→HuggingFace, Hermes →OllamaHermes. - ›Performance improvement: several internal Pydantic models converted to dataclasses to reduce overhead.
└──▷ BREAKING ON UPGRADE- !All imports under
phi.*are replaced byagno.*— code importing fromphi.model.x,phi.knowledge_base.x,phi.document.reader.*, etc. will break. - !All toolkit class names must now be suffixed with Tools (e.g.
DuckDuckGois nowDuckDuckGoTools). - !agent.run(images=[...]) and agent.print_response(images=[...]) now require Image objects instead of bare values; same for Audio and Video.
- !
RunResponse.imagesis now a list ofImageArtifact;RunResponse.audiois a list ofAudioArtifact;RunResponse.videosis a list ofVideoArtifact;RunResponse.response_audiois now of typeAudioOutput— any code accessing these fields by prior type assumptions will break. - !Embedders no longer accept the
modelparameter — it must be replaced withid. - !
PgAgentStorage,SqlAgentStorage,MongoAgentStorage,S2AgentStorageare renamed toPostgresAgentStorage,SqliteAgentStorage,MongoDbAgentStorage,SingleStoreAgentStoragerespectively. - !
SqlWorkflowStorage,PgWorkflowStorage,MongoWorkflowStorageare renamed toSqliteWorkflowStorage,PostgresWorkflowStorage,MongoDbWorkflowStoragerespectively. - !Model classes
AzureOpenAIChat,CohereChat,DeepSeekChat,GeminiOpenAIChat,HuggingFaceChat, Hermes are renamed toAzureOpenAI, Cohere,DeepSeek,GeminiOpenAI,HuggingFace,OllamaHermesrespectively. - !Assistant,
llm,PhiTools,PythonAgent, andDuckDbAgenthave been removed with no direct replacement. - !The
similarity_thresholdparameter on semantic chunking is replaced bythreshold. - !Knowledge base
phi.knowledge.pdf.PDFUrlKnowledgeBaseis now atagno.knowledge.pdf_url.PDFUrlKnowledgeBase;phi.knowledge.csv.CSVUrlKnowledgeBaseis now atagno.knowledge.csv_url.CSVUrlKnowledgeBase.