agno
Builds and deploys AI agents and multi-agent teams using the Agno framework.
Installation
Paste this into Claude Code, Cursor, or any agent that can run commands.
SKILL.mdShow the author's original SKILL.md
---
name: agno
description: Agno AI agent framework - build production-ready agents, multi-agent teams, workflows, MCP integrations, and deploy with AgentOS. Use when building, debugging, or learning about Agno agents.
---
# Agno Skill
Build production-ready AI agents with Agno - a lightweight, model-agnostic framework for agents, teams, workflows, and MCP integration.
## When to Use This Skill
This skill should be triggered when:
- Building AI agents with tools, memory, structured outputs, or knowledge
- Creating multi-agent teams with role-based delegation
- Implementing workflows with sequential, parallel, conditional, or routing steps
- Integrating MCP servers (stdio, SSE, or Streamable HTTP)
- Deploying agents with AgentOS (FastAPI-based runtime)
- Working with the LearningMachine (user profiles, entity memory, session context)
- Debugging agent behavior or optimizing performance
## Architecture Overview
```
Agent - Single autonomous AI unit (model + tools + instructions)
Team - Multiple agents coordinated by a leader (route/broadcast/tasks modes)
Workflow - Pipeline-based execution (Step, Parallel, Condition, Loop, Router)
AgentOS - FastAPI runtime for deploying agents as production APIs
LearningMachine - Persistent learning across sessions (profiles, memory, knowledge)
```
## Quick Reference
### 1. Basic Agent with Tools
```python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
agent = Agent(
name="Finance Agent",
model=Gemini(id="gemini-3-flash-preview"),
tools=[YFinanceTools()],
add_datetime_to_context=True,
markdown=True,
)
agent.print_response("Give me a quick brief on NVIDIA", stream=True)
```
### 2. Structured Output with Pydantic
```python
from typing import List, Optional
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from pydantic import BaseModel, Field
class StockAnalysis(BaseModel):
ticker: str = Field(..., description="Stock ticker symbol")
company_name: str = Field(..., description="Full company name")
current_price: float = Field(..., description="Current price in USD")
summary: str = Field(..., description="One-line summary")
key_drivers: List[str] = Field(..., description="2-3 key growth drivers")
recommendation: str = Field(..., description="Buy, Hold, or Sell")
agent = Agent(
model=Gemini(id="gemini-3-flash-preview"),
tools=[YFinanceTools()],
output_schema=StockAnalysis,
)
response = agent.run("Analyze NVIDIA")
analysis: StockAnalysis = response.content
print(f"{analysis.company_name}: {analysis.recommendation}")
```
### 3. Agent with Storage (Session Persistence)
```python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.google import Gemini
agent = Agent(
model=Gemini(id="gemini-3-flash-preview"),
db=SqliteDb(db_file="tmp/agents.db"),
add_history_to_context=True,
num_history_runs=5,
markdown=True,
)
# Same session_id = continuous conversation across runs
agent.print_response("Analyze NVDA", session_id="my-session", stream=True)
agent.print_response("Compare that to Tesla", session_id="my-session", stream=True)
```
### 4. Agent with Memory (User Preferences)
```python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.memory import MemoryManager
from agno.models.google import Gemini
db = SqliteDb(db_file="tmp/agents.db")
agent = Agent(
model=Gemini(id="gemini-3-flash-preview"),
db=db,
memory_manager=MemoryManager(
model=Gemini(id="gemini-3-flash-preview"),
db=db,
),
enable_agentic_memory=True, # Agent decides when to store/recall
markdown=True,
)
# Agent remembers user preferences across sessions
agent.print_response(
"I'm interested in AI stocks. My risk tolerance is moderate.",
user_id="alice@example.com",
stream=True,
)
```
### 5. Multi-Agent Team
```python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools
bull = Agent(
name="Bull Analyst",
role="Make the investment case FOR a stock",
model=Gemini(id="gemini-3-flash-preview"),
tools=[YFinanceTools()],
)
bear = Agent(
name="Bear Analyst",
role="Make the investment case AGAINST a stock",
model=Gemini(id="gemini-3-flash-preview"),
tools=[YFinanceTools()],
)
team = Team(
name="Investment Research",
model=Gemini(id="gemini-3-flash-preview"),
members=[bull, bear],
instructions=["Get both perspectives, then synthesize a balanced recommendation"],
show_members_responses=True,
markdown=True,
)
team.print_response("Should I invest in NVIDIA?", stream=True)
```
### 6. Sequential Workflow
```python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from agno.workflow import Step, Workflow
data_agent = Agent(name="Data Gatherer", model=Gemini(id="gemini-3-flash-preview"), tools=[YFinanceTools()])
analyst = Agent(name="Analyst", model=Gemini(id="gemini-3-flash-preview"))
writer = Agent(name="Report Writer", model=Gemini(id="gemini-3-flash-preview"), markdown=True)
workflow = Workflow(
name="Research Pipeline",
steps=[
Step(name="Gather Data", agent=data_agent),
Step(name="Analyze", agent=analyst),
Step(name="Write Report", agent=writer),
],
)
workflow.print_response("Analyze NVIDIA for investment", stream=True)
```
### 7. MCP Server Integration (stdio)
```python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools
async def run_agent(message: str) -> None:
async with MCPTools(command="uvx mcp-server-git") as mcp_tools:
agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools])
await agent.aprint_response(message, stream=True)
asyncio.run(run_agent("What is the license for this project?"))
```
### 8. MCP Server (Streamable HTTP)
```python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools
async def run_agent(message: str) -> None:
async with MCPTools(
transport="streamable-http",
url="https://docs.agno.com/mcp",
) as mcp_tools:
agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools], markdown=True)
await agent.aprint_response(message, stream=True)
asyncio.run(run_agent("What is Agno?"))
```
### 9. Multiple MCP Servers
```python
import asyncio
from os import getenv
from agno.agent import Agent
from agno.tools.mcp import MultiMCPTools
async def run_agent(message: str) -> None:
mcp_tools = MultiMCPTools(
commands=["npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt"],
urls=["http://localhost:8000/mcp"],
urls_transports=["streamable-http"],
timeout_seconds=30,
)
await mcp_tools.connect()
agent = Agent(tools=[mcp_tools], markdown=True)
await agent.aprint_response(message, stream=True)
await mcp_tools.close()
asyncio.run(run_agent("Find listings in Barcelona"))
```
### 10. LearningMachine (Persistent Learning)
```python
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.learn import LearningMachine, LearningMode, UserProfileConfig
from agno.models.openai import OpenAIResponses
db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")
agent = Agent(
model=OpenAIResponses(id="gpt-5.2"),
db=db,
learning=LearningMachine(
user_profile=UserProfileConfig(mode=LearningMode.ALWAYS),
),
markdown=True,
)
agent.print_response("Hi! I'm Alice, call me Ali.", user_id="alice@example.com", stream=True)
# Profile fields (name, preferred_name) captured automatically
```
## Key Patterns
### Pattern: MCP Connection Lifecycle
Always close MCP connections. Use async context managers or try/finally:
```python
# Preferred: context manager
async with MCPTools(command="uvx mcp-server-git") as tools:
agent = Agent(tools=[tools])
await agent.aprint_response("query")
# Alternative: manual lifecycle
tools = MCPTools(command="uvx mcp-server-git")
await tools.connect()
try:
agent = Agent(tools=[tools])
await agent.aprint_response("query")
finally:
await tools.close()
```
### Pattern: Production Database (PostgreSQL)
```python
from agno.db.postgres import PostgresDb
db = PostgresDb(db_url="postgresql+psycopg://user:pass@localhost:5432/agno")
agent = Agent(db=db, add_history_to_context=True)
```
### Pattern: Debug Mode
```python
agent = Agent(debug_mode=True) # Detailed logs of messages, tools, tokens
```
### Pattern: Custom Tools
```python
from agno.tools.decorator import tool
@tool
def get_weather(city: str) -> str:
"""Get current weather for a city."""
return f"Weather in {city}: 72F, sunny"
agent = Agent(tools=[get_weather])
```
## Important Rules
- **Never create agents in loops** - reuse agents for performance
- **Use `output_schema`** for structured responses (not free-form parsing)
- **PostgreSQL for production**, SQLite only for development
- **Both sync and async** - all public methods have async variants (prefix with `a`)
- **Always close MCP connections** - use try/finally or async context managers
- **Enable `debug_mode=True`** when troubleshooting
## Reference Files
Detailed documentation is available in `references/`:
- **agents.md** - Agent parameters, configuration, tools, memory, knowledge, guardrails
- **teams.md** - Team modes (route/broadcast/tasks), member coordination
- **workflows.md** - Step types (Step, Parallel, Condition, Loop, Router)
- **mcp.md** - MCP integration (stdio, SSE, Streamable HTTP), MultiMCPTools
- **tools.md** - Built-in tools list, custom tool creation, tool hooks
- **learning.md** - LearningMachine stores (profile, memory, session, knowledge, entity)
- **models.md** - Supported model providers and configuration
## Resources
- **Documentation**: https://docs.agno.com
- **GitHub**: https://github.com/agno-agi/agno
- **Cookbook Examples**: https://github.com/agno-agi/agno/tree/main/cookbook
- **Install**: `pip install agno`
Ships with 7 supporting files:
- references/agents.md
- references/learning.md
- references/mcp.md
- references/models.md
- references/teams.md
- references/tools.md
- references/workflows.md
Mirrored from the author's public source. Install counts from the open skills registry.