A reference AgentOS application built with Agno.
This repo packages a broad set of agent patterns into one runnable system: standalone agents, multi-agent teams, scheduled workflows, shared memory, guardrails, approvals, and external integrations. You can run it locally, inspect each example in isolation, and use it as a starting point for your own AgentOS.
The architecture is intentionally simple. Fourteen agents, eleven teams, and five workflows run inside one FastAPI service with PostgreSQL for persistence and shared context. The goal is not to show off a feature checklist. It is to show how agentic systems can be built with ordinary application architecture, clear boundaries, and production-minded patterns.
Use this project to:
- See how core Agno patterns fit together in a single app.
- Explore working examples of memory, RAG, tool use, scheduling, guardrails, and collaboration modes.
- Extend the system with your own agents, teams, workflows, and integrations.
# Clone the repo
git clone https://github.com/agno-agi/demo-os.git demo-os
cd demo-os
cp example.env .env
# Edit .env and add your OPENAI_API_KEY
# Start the application
docker compose up -d --build
# Load SaaS data for Dash
docker exec -it demo-os-api python -m agents.dash.scripts.load_data
docker exec -it demo-os-api python -m agents.dash.scripts.load_knowledgeConfirm the system is running at http://localhost:8000/docs.
- Open os.agno.com and login
- Add OS -> Local ->
http://localhost:8000 - Click "Connect"
| Agent | What it does | Features |
|---|---|---|
| Docs | Answers questions about Agno using live documentation | LLMs.txt tools, on-demand fetching |
| MCP | Queries live Agno docs via MCP server | Model Context Protocol |
| Helpdesk | IT operations helpdesk with safety guardrails | HITL (confirmation, user input, external execution), PII + injection guardrails, pre/post hooks |
| Feedback | Planning concierge with structured questions | UserFeedbackTools, UserControlFlowTools |
| Approvals | Compliance agent gating sensitive operations | @approval decorator, blocking confirmation, audit trail |
| Reasoner | Strategic analysis with step-by-step reasoning | ReasoningTools, native reasoning mode, model fallback (Claude) |
| Reporter | On-demand report generator | FileGenerationTools (CSV/JSON/PDF), CalculatorTools, structured output |
| Contacts | Relationship intelligence / mini CRM | Entity memory, user profile, session context, LearningMachine |
| Studio | Multimodal media generation and analysis | DalleTools, FalTools, ElevenLabsTools, LumaLabTools, conditional tool loading |
| Scheduler | Schedule management for recurring tasks | SchedulerTools (create, list, enable/disable, delete schedules) |
| Taskboard | Task management with persistent session state | Session state, agentic state, CRUD tools |
| Compressor | Web research with tool result compression | CompressionManager, DuckDuckGo, Exa MCP |
| Injector | Configuration queries via dependency injection | RunContext, dependencies, feature flags |
| Craftsman | Domain-specific expert guidance via skills | LocalSkills (code-reviewer, api-designer, prompt-engineer) |
| Team | Mode | What it does | Features |
|---|---|---|---|
| Pal | coordinate | Personal knowledge agent (5 specialist agents) | SQL tools, file tools, wiki pipeline, web research, git sync |
| Dash | coordinate | Self-learning data analyst (Analyst + Engineer) | Dual schema, write guard, read-only engine, LearningMachine |
| Coda | coordinate | Coding agent (5 specialist agents) | CodingTools, GitTools, GithubTools, worktree isolation |
| Research | coordinate, route, broadcast, tasks | Research team demonstrating all 4 team modes | ParallelTools, Exa MCP, team mode comparison |
| Investment | coordinate, route, broadcast, tasks | 7-agent investment committee using Gemini | Multi-model (Gemini), YFinanceTools, FileTools, LearningMachine |
| Workflow | Schedule | What it does | Features |
|---|---|---|---|
| Morning Brief | Weekdays 8am ET | Parallel gather (calendar + email + news) then synthesize | Workflow, Step, Parallel, mock tools |
| AI Research | Daily 7am UTC | 4 parallel researchers then synthesize | Workflow, Parallel, Exa MCP |
| Content Pipeline | On demand | Research + outline, then draft/review loop (max 3 iterations) | Workflow, Parallel, Loop, end condition |
| Repo Walkthrough | On demand | Analyze code -> write script -> narrate with TTS | Workflow, CodingTools, ElevenLabsTools, cross-modal chaining |
| Support Triage | On demand | Classify tickets, route to specialist, escalate if critical | Workflow, Router, Condition, escalation |
| Feature | Where |
|---|---|
| RAG / hybrid search | Pal, Dash |
| LLMs.txt tools | Docs |
| MCP tools | MCP, Pal, Dash, AI Research |
| HITL — confirmation | Helpdesk, Approvals |
| HITL — user input | Helpdesk, Feedback |
| HITL — external execution | Helpdesk |
| Guardrails (PII, injection) | Helpdesk |
| Pre/post hooks | Helpdesk |
| Approval — blocking | Approvals |
| Approval — audit trail | Approvals |
| User feedback (ask_user) | Feedback |
| User control flow | Feedback |
| Reasoning tools | Reasoner |
| Native reasoning mode | Reasoner |
| Model fallback | Reasoner |
| Structured output (Pydantic) | Reporter |
| File generation (CSV/JSON/PDF) | Reporter |
| Entity memory | Contacts |
| User profile | Contacts |
| Learning (LearningMachine) | Pal, Dash, Coda, Contacts, Investment |
| SQL tools | Dash, Pal |
| Coding tools | Coda, Repo Walkthrough |
| GitHub tools | Coda |
| Image generation (DALL-E) | Studio |
| Image-to-image (FAL) | Studio |
| Text-to-speech (ElevenLabs) | Studio, Repo Walkthrough |
| Video generation (LumaLab) | Studio |
| Multi-model (Gemini) | Investment |
| YFinance tools | Investment |
| Session state + agentic state | Taskboard |
| Tool result compression | Compressor |
| Dependency injection (RunContext) | Injector |
| Skills system (LocalSkills) | Craftsman |
| Team — coordinate | Pal, Dash, Coda, Research, Investment |
| Team — route | Research, Investment |
| Team — broadcast | Research, Investment |
| Team — tasks | Research, Investment |
| Workflow — parallel | Morning Brief, AI Research, Content Pipeline |
| Workflow — loop | Content Pipeline |
| Workflow — router | Support Triage |
| Workflow — condition | Support Triage |
| Scheduling (cron) | Morning Brief, AI Research, Scheduler |
| Parallel execution | Morning Brief, AI Research, Content Pipeline |
| Cross-modal chaining | Repo Walkthrough |
Requires:
- Railway CLI
OPENAI_API_KEYset in your environment
railway login
./scripts/railway_up.shThe script provisions PostgreSQL, configures environment variables, and deploys the application.
- Open os.agno.com
- Click "Add OS" -> "Live"
- Enter your Railway domain
railway logs --service agno-demo # View logs
railway open # Open dashboard
railway up --service agno-demo -d # Update after changesTo stop services:
railway down --service agno-demo
railway down --service pgvector# Dash — table schemas, validated queries, and business rules
railway run python -m agents.dash.scripts.load_knowledge
# Dash — SaaS data (customers, subscriptions, invoices, usage, support)
railway run python -m agents.dash.scripts.load_dataAdd your own agent
- Create
agents/my_agent/with these files:
agents/my_agent/agent.py
from agno.agent import Agent
from agents.my_agent.instructions import INSTRUCTIONS
from app.settings import MODEL, agent_db
my_agent = Agent(
id="my-agent",
name="My Agent",
model=MODEL,
db=agent_db,
instructions=INSTRUCTIONS,
enable_agentic_memory=True,
add_datetime_to_context=True,
add_history_to_context=True,
read_chat_history=True,
num_history_runs=5,
markdown=True,
)agents/my_agent/instructions.py
INSTRUCTIONS = """\
You are a helpful assistant.
"""agents/my_agent/__init__.py
from agents.my_agent.agent import my_agent as my_agentagents/my_agent/__main__.py
from agents.my_agent.agent import my_agent
if __name__ == "__main__":
my_agent.cli_app(stream=True)- Register in
app/main.py:
from agents.my_agent import my_agent
agent_os = AgentOS(
agents=[..., my_agent],
...
)-
Add quick prompts to
app/config.yamlusing the agent'sid -
Restart:
docker compose restart
Add tools to an agent
Agno includes 100+ tool integrations. See the full list.
from agno.tools.slack import SlackTools
from agno.tools.scheduler import SchedulerTools
my_agent = Agent(
...
tools=[
SlackTools(),
SchedulerTools(db=agent_db),
],
)Use a different model provider
- Add your API key to
.env(e.g.,ANTHROPIC_API_KEY) - Update agents to use the new provider:
from agno.models.anthropic import Claude
model=Claude(id="claude-sonnet-4-5")- Add dependency:
anthropicinpyproject.toml
Giving Coda access to GitHub
Coda needs a GitHub token to clone repos, read issues/PRs, push branches, and open PRs. Create a Fine-grained Personal Access Token with Contents, Pull requests, Issues, and Metadata permissions, then add it to your .env:
GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxxxxxSee docs/GITHUB_ACCESS.md for the full setup guide.
Connect to Slack
Slack gives AgentOS two capabilities: receiving messages (DMs, @mentions, threads) and sending messages (proactive posts from Pal, Dash, Coda). Each thread maps to a session ID for conversation context.
- Get a public URL (ngrok for local, deployed URL for production)
- Create a Slack app from the manifest in the setup guide
- Install to your workspace
- Add
SLACK_TOKENandSLACK_SIGNING_SECRETto.env - Restart:
docker compose up -d --build
See docs/SLACK_CONNECT.md for the full setup guide with the app manifest.
For development without Docker:
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Setup environment
./scripts/venv_setup.sh
source .venv/bin/activate
# Start PostgreSQL (required)
docker compose up -d agno-demo-db
# Run the app
python -m app.main| Variable | Required | Default | Description |
|---|---|---|---|
OPENAI_API_KEY |
Yes | - | OpenAI API key (GPT-5.4) |
GOOGLE_API_KEY |
No | - | Gemini models for Investment Team |
EXA_API_KEY |
No | - | Web search for Reasoner, Reporter, Contacts, Research, Investment |
PARALLEL_API_KEY |
No | - | Parallel web search (Pal Researcher, Coda Researcher) |
ELEVENLABS_API_KEY |
No | - | TTS for Studio, Repo Walkthrough |
FAL_KEY |
No | - | Image-to-image for Studio |
LUMAAI_API_KEY |
No | - | Video generation for Studio |
GITHUB_TOKEN |
No | - | GitHub integration for Coda (setup guide) |
ANTHROPIC_API_KEY |
No | - | Fallback model for Reasoner |
SLACK_TOKEN |
No | - | Slack interface + team leader tools (setup guide) |
SLACK_SIGNING_SECRET |
No | - | Slack webhook verification (setup guide) |
REPOS_DIR |
No | ./repos |
Coda repos directory |
RUNTIME_ENV |
No | prd |
Set to dev for auto-reload |
DB_HOST |
No | localhost |
Database host |
DB_PORT |
No | 5432 |
Database port |
DB_USER |
No | ai |
Database user |
DB_PASS |
No | ai |
Database password |
DB_DATABASE |
No | ai |
Database name |
The eval framework tests all 30 entities across multiple dimensions: basic functionality, tool call correctness, secret leakage, response quality, and latency.
# Smoke tests (fast, free)
python -m evals smoke # All entities
python -m evals smoke --group agents # By group
python -m evals smoke --entity docs # Single entity
# Tool call validation (fast, free)
python -m evals reliability
# LLM-judged evals (uses GPT-5.4 as judge)
python -m evals # All categories
python -m evals --category accuracy # Single category
# Performance baselines
python -m evals perf --update-baselines # Establish baselines
python -m evals perf # Compare against baselines
# Improvement loop
python -m evals improve --entity docs # Debug a failing entity
python -m evals improve --failures # Debug all failuresSee docs/EVALS.md for the full eval system documentation.
| Document | What it covers |
|---|---|
| docs/EVALS.md | Eval framework -- smoke tests, reliability, accuracy, performance, improvement loop |
| docs/SLACK_CONNECT.md | Connecting AgentOS to Slack -- app manifest, scopes, credentials |
| docs/GITHUB_ACCESS.md | Giving Coda access to GitHub -- fine-grained PAT setup, permissions, troubleshooting |
Built on Agno · the runtime for agentic software