Skip to content

agno-agi/demo-os

Repository files navigation

Demo AgentOS

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:

  1. See how core Agno patterns fit together in a single app.
  2. Explore working examples of memory, RAG, tool use, scheduling, guardrails, and collaboration modes.
  3. Extend the system with your own agents, teams, workflows, and integrations.

Quick Start

# 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_knowledge

Confirm the system is running at http://localhost:8000/docs.

Connect to the Web UI

  1. Open os.agno.com and login
  2. Add OS -> Local -> http://localhost:8000
  3. Click "Connect"

What's Inside

Agents

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)

Teams

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

Workflows

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 Coverage

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

Deploy to Railway

Requires:

railway login

./scripts/railway_up.sh

The script provisions PostgreSQL, configures environment variables, and deploys the application.

Connect the Web UI

  1. Open os.agno.com
  2. Click "Add OS" -> "Live"
  3. Enter your Railway domain

Manage deployment

railway logs --service agno-demo      # View logs
railway open                         # Open dashboard
railway up --service agno-demo -d    # Update after changes

To stop services:

railway down --service agno-demo
railway down --service pgvector

Load data in production

# 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_data

Common Tasks

Add your own agent
  1. 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_agent

agents/my_agent/__main__.py

from agents.my_agent.agent import my_agent

if __name__ == "__main__":
    my_agent.cli_app(stream=True)
  1. Register in app/main.py:
from agents.my_agent import my_agent

agent_os = AgentOS(
    agents=[..., my_agent],
    ...
)
  1. Add quick prompts to app/config.yaml using the agent's id

  2. 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
  1. Add your API key to .env (e.g., ANTHROPIC_API_KEY)
  2. Update agents to use the new provider:
from agno.models.anthropic import Claude

model=Claude(id="claude-sonnet-4-5")
  1. Add dependency: anthropic in pyproject.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_xxxxxxxxxxxxxxxxxxxxx

See 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.

  1. Get a public URL (ngrok for local, deployed URL for production)
  2. Create a Slack app from the manifest in the setup guide
  3. Install to your workspace
  4. Add SLACK_TOKEN and SLACK_SIGNING_SECRET to .env
  5. Restart: docker compose up -d --build

See docs/SLACK_CONNECT.md for the full setup guide with the app manifest.

Local Development

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

Environment Variables

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

Evals

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 failures

See docs/EVALS.md for the full eval system documentation.

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

Learn More

Built on Agno · the runtime for agentic software

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors