Skip to main content

CLI tool to scaffold multi-agent projects using Microsoft's Agent Framework

Project description

Microsoft's Agent Framework Accelerator

A dynamic, plugin-based multi-agent system built on Microsoft's Agent Framework with automatic tool and agent discovery. Create powerful AI agents with just YAML configuration files - minimal code!

Python 3.11+ License: MIT

๐Ÿš€ Quick Start - 60 Seconds to Your First Agent

โญ Recommended: Install CLI via pip (Easiest!)

Create a new multi-agent project with one command:

# 1. Install the CLI tool
pip install ageclerate

# 2. Create your project
create-agent-project my-awesome-project

# 3. Setup and launch (60 seconds!)
cd my-awesome-project
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install agent-framework
cp .env.example .env       # Add your OPENROUTER_API_KEY or Azure credentials
python run_devui.py        # ๐ŸŽ‰ You're live at http://localhost:8080

What you get:

  • โœ… 1 Sample Agent (Calculator) already configured
  • โœ… 2 Sample Tools (add, multiply) ready to use
  • โœ… 1 Sample Workflow showing orchestration
  • โœ… Complete framework with auto-discovery
  • โœ… DevUI for testing and debugging
  • โœ… Step-by-step QUICKSTART.md guide

Alternative: Clone This Repository

Explore 5 production-ready example agents:

# 1. Clone the repository
git clone https://github.com/your-org/ms-agentic-framework-accelerator
cd ms-agentic-framework-accelerator

# 2. Setup dependencies
pip install -r requirements.txt

# 3. Configure your LLM provider
cp .env.example .env  # Add your API key

# 4. Launch DevUI
python run_devui.py
# Opens at http://localhost:8080 with Email, Calendar, Stock, Weather, HR agents

Or use the CLI from the repository:

./quickstart/create-agent-project my-project-name

๐Ÿ“– Documentation: See quickstart/ for complete guides and docs/ for architecture details

๐ŸŽฏ Why This Framework?

Before vs After: The Transformation

โŒ Traditional Microsoft Agent Framework

# 1๏ธโƒฃ Manually create tools
from azure.ai.projects.agentic import FunctionTool

def weather_tool():
    """Hard-coded tool definition"""
    pass

weather = FunctionTool(weather_tool, ...)

# 2๏ธโƒฃ Manually register in __init__.py
from .weather import weather_tool
from .stock import stock_tool
# ... repeat for every tool

# 3๏ธโƒฃ Hard-code agent configuration
agent = ChatAgent(
    name="Weather Agent",
    instructions="Long prompt...",
    tools=[weather, forecast, ...]  # Manual list
)

# 4๏ธโƒฃ Edit Python for every change
# Want to add a tool? Edit 3+ files
# Want to change prompt? Edit Python
# Want new agent? Write more Python

Pain Points:

  • ๐Ÿ”ด 20-30 lines per tool setup
  • ๐Ÿ”ด Edit 3+ files per tool
  • ๐Ÿ”ด Manual import management
  • ๐Ÿ”ด Hard-coded configurations
  • ๐Ÿ”ด Code changes for prompts
  • ๐Ÿ”ด Complex maintenance

โœ… This Accelerator Framework

# 1๏ธโƒฃ Drop a tool file - auto-discovered!
# tools/weather/humidity.py
@tool(domain="weather", description="...")
def get_humidity(location: str) -> str:
    return f"Humidity: 65%"

# Done! โœจ Automatically registered

# 2๏ธโƒฃ Drop a YAML file - instant agent!
# agents/weather_agent.yaml
name: "Weather Assistant"
tool_domains: ["weather"]
instructions: |
  You are a weather assistant...

# Done! โœจ Automatically created

# 3๏ธโƒฃ Launch DevUI
python run_devui.py
# All agents & tools auto-discovered! ๐Ÿš€

Benefits:

  • โœ… 5 lines per tool
  • โœ… Drop file & done
  • โœ… Zero imports needed
  • โœ… YAML configuration
  • โœ… Edit prompts in YAML
  • โœ… Effortless scaling

๐Ÿ“Š Impact Comparison

Metric Before After Improvement
Lines of Code per Tool 20-30 5-8 75% reduction
Files to Edit per Agent 3-5 1 80% reduction
Time to Add Tool 15-20 min 2-3 min 85% faster
Time to Add Agent 30-45 min 5 min 90% faster
Manual Imports Every tool Zero 100% automated
Configuration Changes Edit Python Edit YAML Non-technical friendly

๐ŸŽฌ Workflow Comparison

Traditional Approach:
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Create tool.py โ†’ Edit __init__.py โ†’ Import in agent.py โ†’
Create agent class โ†’ Register agent โ†’ Test โ†’ Debug imports โ†’
Restart โ†’ Test again
โฑ๏ธ  Time: ~45 minutes per agent

This Framework:
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Drop tool.py โ†’ Drop agent.yaml โ†’ Run DevUI
โฑ๏ธ  Time: ~5 minutes per agent

๐Ÿš€ 10x faster development

๐ŸŒŸ Features

Dynamic Tool Discovery

  • Zero-Code Tool Integration: Drop a Python file in tools/domain/ and it's automatically available
  • Decorator-Based Registration: Simple @tool decorator handles all registration
  • Domain Organization: Tools organized by business domain (weather, stock, email, calendar)
  • Tag-Based Filtering: Fine-grained control over which tools each agent gets
  • Hot-Reload Support: Modify tools without restarting the system

Automatic Agent Discovery

  • YAML-Based Configuration: Define agents declaratively without writing Python
  • Zero-Code Agent Creation: Drop a YAML file in agents/ and it's immediately available
  • Automatic Tool Attachment: Agents automatically discover and attach tools based on domains/tags
  • No Manual Registration: No need to edit __init__.py or import statements

Microsoft Agent Framework Integration

  • Sequential Workflows: Chain agents in sequence for complex workflows
  • Parallel Execution: Run multiple agents concurrently with fan-out/fan-in patterns
  • Custom Aggregators: Combine parallel results with custom logic
  • Multi-Provider LLM Support: Azure OpenAI, OpenRouter, and direct OpenAI with automatic fallback

Developer Experience

  • DevUI Integration: Built-in web interface for testing and debugging
  • Comprehensive Logging: Detailed logs for tool discovery and agent creation
  • Mock & Real APIs: Easy toggle between mock data and real API integrations
  • Gmail Integration: Full OAuth2 support for real email operations
  • OpenRouter Support: Access to 100+ LLM models through a single API
  • Type Safety: Full type hints and annotations throughout

๐Ÿ“‹ Table of Contents

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.11 or higher
  • One of the following LLM providers:
    • Azure OpenAI (with Azure CLI)
    • OpenRouter API key (Get one here)
    • Direct OpenAI API key
  • Optional:
    • Gmail account (for real email features)
    • Google Cloud project (for Gmail API)

Installation

  1. Clone the repository
git clone https://github.com/yourusername/agentic-ms.git
cd agentic-ms
  1. Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
  1. Install dependencies
pip install -r requirements.txt
  1. Configure environment
# Copy example environment file
cp .env.example .env

# Edit with your API keys and configuration
nano .env  # or use your preferred editor

Choose your LLM provider (edit .env):

  • Option A: OpenRouter (Easiest for testing)

    OPENROUTER_API_KEY=sk-or-v1-your-key-here
    OPENROUTER_MODEL=openai/gpt-4-turbo
    
  • Option B: Azure OpenAI

    az login  # Authenticate Azure CLI
    
    AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
    AZURE_OPENAI_DEPLOYMENT=gpt-4o
    
  • Option C: Direct OpenAI

    OPENAI_API_KEY=sk-your-key-here
    OPENAI_MODEL=gpt-4-turbo-preview
    
  1. Optional: Enable Gmail Integration

See Setup Guide - Gmail Section for detailed instructions.

Quick setup:

USE_REAL_EMAIL_API=true
GMAIL_CREDENTIALS_FILE=credentials.json
GMAIL_USER_EMAIL=your.email@gmail.com
  1. Run the DevUI
# Using bun (recommended)
bun run agent

# Or using Python directly
python run_devui.py

Open http://localhost:8080 in your browser and start chatting with agents!

๐Ÿš€ New to the project? Check out the Quick Start Guide (5 min setup!)

๐Ÿ“š For detailed setup instructions, see the Complete Setup Guide

๐Ÿ“ Project Structure

agentic-ms/
โ”œโ”€โ”€ agents/                      # Agent YAML configurations
โ”‚   โ”œโ”€โ”€ agent_factory.py        # Factory for creating agents from YAML
โ”‚   โ”œโ”€โ”€ __init__.py             # Auto-discovery of all agents
โ”‚   โ”œโ”€โ”€ weather_agent.yaml      # Weather assistant configuration
โ”‚   โ”œโ”€โ”€ stock_agent.yaml        # Stock market assistant configuration
โ”‚   โ”œโ”€โ”€ email_agent.yaml        # Email assistant configuration
โ”‚   โ”œโ”€โ”€ calendar_agent.yaml     # Calendar assistant configuration
โ”‚   โ””โ”€โ”€ general_openrouter_agent.yaml  # OpenRouter-powered agent (NEW)
โ”‚
โ”œโ”€โ”€ tools/                       # Tool library (auto-discovered)
โ”‚   โ”œโ”€โ”€ _decorators.py          # @tool decorator for registration
โ”‚   โ”œโ”€โ”€ _registry.py            # Central tool registry (singleton)
โ”‚   โ”œโ”€โ”€ _loader.py              # Auto-discovery engine
โ”‚   โ”œโ”€โ”€ __init__.py             # Package initialization
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ weather/                # Weather domain tools
โ”‚   โ”‚   โ”œโ”€โ”€ current_weather.py
โ”‚   โ”‚   โ””โ”€โ”€ forecast.py
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ stock/                  # Stock market domain tools
โ”‚   โ”‚   โ”œโ”€โ”€ stock_price.py
โ”‚   โ”‚   โ”œโ”€โ”€ stock_analysis.py
โ”‚   โ”‚   โ””โ”€โ”€ stock_history.py
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ email/                  # Email domain tools
โ”‚   โ”‚   โ”œโ”€โ”€ send_email.py
โ”‚   โ”‚   โ”œโ”€โ”€ read_inbox.py
โ”‚   โ”‚   โ”œโ”€โ”€ search_emails.py
โ”‚   โ”‚   โ””โ”€โ”€ gmail_utils.py      # Gmail API integration (NEW)
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ calendar/               # Calendar domain tools
โ”‚   โ”‚   โ”œโ”€โ”€ create_event.py
โ”‚   โ”‚   โ”œโ”€โ”€ list_events.py
โ”‚   โ”‚   โ””โ”€โ”€ find_free_time.py
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ common/                 # Shared utility tools
โ”‚
โ”œโ”€โ”€ workflows/                   # Workflow orchestrations
โ”‚   โ”œโ”€โ”€ financial_workflow.py  # Sequential workflow example
โ”‚   โ””โ”€โ”€ reusable_workflows.py  # Parallel workflow examples
โ”‚
โ”œโ”€โ”€ docs/                        # Documentation
โ”‚   โ”œโ”€โ”€ DYNAMIC_TOOL_ARCHITECTURE.md
โ”‚   โ”œโ”€โ”€ AGENT_WORKFLOW_ARCHITECTURE.md
โ”‚   โ”œโ”€โ”€ PARALLEL_EXECUTION_QUICKSTART.md
โ”‚   โ”œโ”€โ”€ SETUP_GUIDE.md          # Complete setup guide (NEW)
โ”‚   โ””โ”€โ”€ EMAIL_AGENT_DEMO.md
โ”‚
โ”œโ”€โ”€ demos/                       # Demo scripts
โ”‚   โ”œโ”€โ”€ demo_parallel_execution.py
โ”‚   โ””โ”€โ”€ workflow_runner.py
โ”‚
โ”œโ”€โ”€ run_devui.py                # Launch DevUI with all agents
โ”œโ”€โ”€ test_agent_factory.py       # Test YAML-based agents
โ”œโ”€โ”€ test_auto_discovery.py      # Test automatic discovery
โ””โ”€โ”€ requirements.txt            # Python dependencies

๐Ÿ’ก Core Concepts

1. Tools

Tools are Python functions decorated with @tool that provide specific capabilities to agents.

Key Features:

  • Automatic discovery via filesystem scanning
  • Domain-based organization (weather, stock, email, etc.)
  • Tag-based filtering for fine-grained control
  • Mock vs real API support

2. Agents

Agents are AI assistants configured via YAML files that automatically discover and use tools.

Key Features:

  • Declarative YAML configuration
  • Automatic tool attachment based on domains/tags
  • Editable prompts without code changes
  • Azure OpenAI integration

3. Workflows

Workflows orchestrate multiple agents to solve complex tasks.

Types:

  • Sequential: Agents run one after another
  • Parallel: Agents run concurrently (fan-out/fan-in)
  • Custom: Build complex routing and conditional logic

๐Ÿ›  Creating Tools

Step 1: Create a Tool File

Create a Python file in the appropriate domain folder:

# tools/weather/humidity.py
from typing import Annotated
from tools._decorators import tool

@tool(
    domain="weather",
    description="Get humidity levels for a location",
    tags=["weather", "humidity", "conditions"],
    mock=True,  # Set to False when using real APIs
)
def get_humidity(
    location: Annotated[str, "The location to check humidity for"]
) -> str:
    """Get humidity percentage for a given location.

    Args:
        location: City name or location string

    Returns:
        Formatted string with humidity information
    """
    # Mock implementation
    return f"Humidity in {location}: 65%"

Step 2: That's It!

The tool is now:

  • โœ… Automatically discovered at startup
  • โœ… Registered in the tool registry
  • โœ… Available to all agents with tool_domains: ["weather"]

No code editing, imports, or registration needed!

Tool Decorator Parameters

@tool(
    domain: str,              # Required: Tool domain (weather, stock, email, etc.)
    name: Optional[str],      # Optional: Tool name (defaults to function name)
    description: Optional[str], # Optional: Description (defaults to docstring)
    tags: Optional[list],     # Optional: Additional tags for filtering
    mock: bool = False,       # Optional: Is this a mock implementation?
    requires_api_key: Optional[str], # Optional: API key environment variable
)

๐Ÿค– Creating Agents

Step 1: Create a YAML Configuration

Create a YAML file in the agents/ directory:

# agents/news_agent.yaml
name: "News Assistant"
description: "Provides latest news headlines and articles"

# Tool Discovery - automatically finds matching tools
tool_domains:
  - news

tool_tags:
  - news
  - headlines
  - articles

# Optional: Exclude specific tools
# exclude_tools:
#   - news.experimental_feature

# Agent Instructions (the "prompt")
instructions: |
  You are a news assistant. Provide latest news headlines
  and articles when asked. Always cite your sources and
  present information objectively.

  When users ask about news:
  1. Use the appropriate tool to fetch articles
  2. Summarize key points clearly
  3. Provide source attribution

# Model Configuration - Multi-Provider with Automatic Fallback
model:
  # Provider list (will try in order until one succeeds)
  providers:
    - "openrouter"  # Try OpenRouter first (easiest, no auth issues)
    - "azure"       # Fall back to Azure if available
    - "openai"      # Fall back to OpenAI if available

  # Azure configuration (used if azure provider succeeds)
  endpoint: "https://your-azure-openai.openai.azure.com/"
  deployment: "gpt-4o"
  credential_type: "azure_cli"

  # OpenRouter/OpenAI config loaded from environment:
  # OPENROUTER_API_KEY, OPENROUTER_MODEL, OPENAI_API_KEY

Step 2: Create Domain Tools (if needed)

If the domain doesn't exist, create tools for it:

# tools/news/get_headlines.py
from tools._decorators import tool

@tool(domain="news", description="Get latest news headlines")
def get_headlines(category: str = "general") -> str:
    """Fetch latest news headlines."""
    # Implementation here
    return "Latest headlines..."

Step 3: Restart and Use!

python run_devui.py

The news agent is now automatically:

  • โœ… Discovered from the YAML file
  • โœ… Created with matching tools attached
  • โœ… Available in the DevUI

No Python code editing required!

๐Ÿƒ Running the System

DevUI (Web Interface)

Launch the development web interface:

python run_devui.py

Features:

  • Chat with individual agents
  • Test workflows
  • View agent capabilities
  • Debug tool calls

Python API

Use agents programmatically:

from agents import get_all_agents
import asyncio

async def main():
    # Get all auto-discovered agents
    agents = get_all_agents()

    # Use weather agent
    weather_agent = agents['weather_agent']
    response = await weather_agent.run("What's the weather in Tokyo?")
    print(response)

asyncio.run(main())

Testing

Run the test suites:

# Test tool discovery
python -c "from tools import ToolRegistry; print(ToolRegistry().get_summary())"

# Test agent creation
python test_agent_factory.py

# Test automatic discovery
python test_auto_discovery.py

๐Ÿ“š Examples

Example 1: Simple Agent Query

from agents import get_all_agents
import asyncio

async def main():
    agents = get_all_agents()
    weather_agent = agents['weather_agent']

    response = await weather_agent.run(
        "What's the weather forecast for Seattle this week?"
    )
    print(response)

asyncio.run(main())

Example 2: Sequential Workflow

from agent_framework import SequentialBuilder
from agents import get_all_agents

agents = get_all_agents()
stock_agent = agents['stock_agent']
weather_agent = agents['weather_agent']

workflow = (
    SequentialBuilder()
    .add_agent(stock_agent)
    .add_agent(weather_agent)
    .build()
)

# Execute: stock analysis โ†’ weather check
result = await workflow.run("Analyze AAPL and check weather in Cupertino")

Example 3: Parallel Workflow

from agent_framework import ConcurrentBuilder
from agents import get_all_agents

agents = get_all_agents()

workflow = (
    ConcurrentBuilder()
    .participants([agents['stock_agent'], agents['weather_agent']])
    .build()
)

# Both agents run simultaneously
result = await workflow.run("Get AAPL price and Seattle weather")

Example 4: Creating a Custom Tool

# tools/news/search_articles.py
from typing import Annotated
from tools._decorators import tool

@tool(
    domain="news",
    description="Search news articles by keyword",
    tags=["news", "search", "articles"],
    mock=True
)
def search_articles(
    query: Annotated[str, "Search query"],
    days: Annotated[int, "Days to look back"] = 7
) -> str:
    """Search for news articles matching the query."""
    return f"Found 10 articles about '{query}' from last {days} days"

๐Ÿ— Architecture

Complete Framework Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 MS-AGENTIC FRAMEWORK ACCELERATOR                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                      AGENT LAYER (YAML)                      โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚   โ”‚
โ”‚  โ”‚  โ”‚ Weather Agentโ”‚  โ”‚Calendar Agentโ”‚  โ”‚  Stock Agent โ”‚        โ”‚   โ”‚
โ”‚  โ”‚  โ”‚   .yaml      โ”‚  โ”‚    .yaml     โ”‚  โ”‚    .yaml     โ”‚        โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚   โ”‚ 
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚            โ”‚                  โ”‚                  โ”‚                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              AGENT FACTORY (Dynamic Discovery)               โ”‚   โ”‚
โ”‚  โ”‚  โ€ข YAML Parser      โ€ข Tool Discovery Integration             โ”‚   โ”‚ 
โ”‚  โ”‚  โ€ข Chat Client      โ€ข Multi-Provider Fallback                โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Context Injector โ€ข Azure/OpenRouter/OpenAI Support        โ”‚   โ”‚ 
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚            โ”‚                                                        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚            TOOL REGISTRY & DISCOVERY ENGINE                  โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚         Automatic Tool Discovery                   โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Recursive directory scanning                    โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข @tool decorator detection                       โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Metadata extraction                             โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Dynamic registration                            โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚   โ”‚
โ”‚  โ”‚                                                              โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚         Tool Registry (Singleton)                  โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Domain filtering (weather, calendar, stock)     โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Tag filtering (forecast, event, price)          โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Metadata storage (docs, params, types)          โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  โ€ข Hot-reload support                              โ”‚      โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                             โ”‚                                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚              TOOL DOMAINS (4 Active Domains)                 โ”‚   โ”‚
โ”‚  โ”‚                                                              โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  WEATHER   โ”‚  โ”‚  CALENDAR  โ”‚  โ”‚  STOCK  โ”‚  โ”‚  EMAIL   โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  Domain    โ”‚  โ”‚  Domain    โ”‚  โ”‚ Domain  โ”‚  โ”‚  Domain  โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚ current_   โ”‚  โ”‚ create_    โ”‚  โ”‚ stock_  โ”‚  โ”‚ send_    โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚ weather    โ”‚  โ”‚ event      โ”‚  โ”‚ price   โ”‚  โ”‚ email    โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚            โ”‚  โ”‚         โ”‚  โ”‚          โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚ forecast   โ”‚  โ”‚ list_      โ”‚  โ”‚ stock_  โ”‚  โ”‚ read_    โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚ events     โ”‚  โ”‚ analysisโ”‚  โ”‚ inbox    โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚            โ”‚  โ”‚         โ”‚  โ”‚          โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚ delete_    โ”‚  โ”‚ stock_  โ”‚  โ”‚ search_  โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚ event      โ”‚  โ”‚ history โ”‚  โ”‚ emails   โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚            โ”‚  โ”‚         โ”‚  โ”‚          โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚ find_free_ โ”‚  โ”‚         โ”‚  โ”‚ organize โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚ time       โ”‚  โ”‚         โ”‚  โ”‚ _email   โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚            โ”‚  โ”‚            โ”‚  โ”‚         โ”‚  โ”‚          โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ”‚ (2 tools)  โ”‚  โ”‚ (4 tools)  โ”‚  โ”‚(3 tools)โ”‚  โ”‚ (4 tools)โ”‚   โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                             โ”‚                                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                 DEVUI & ORCHESTRATION                        โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Web-based UI for agent interaction                        โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Real-time tool discovery display                          โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Auto-startup agent loading                                โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Sequential & parallel workflow execution                  โ”‚   โ”‚
โ”‚  โ”‚  โ€ข Live execution monitoring                                 โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Dynamic Tool Discovery Flow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    START: run_devui.py                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  ToolLoader.discover_tools()        โ”‚
        โ”‚  โ€ข Scans tools/ directory           โ”‚
        โ”‚  โ€ข Recursively walks subdirectories โ”‚
        โ”‚  โ€ข Finds all .py files              โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚             โ”‚             โ”‚
                โ–ผ             โ–ผ             โ–ผ
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚ tools/       โ”‚  โ”‚ tools/       โ”‚  โ”‚ tools/       โ”‚
    โ”‚ weather/     โ”‚  โ”‚ calendar/    โ”‚  โ”‚ stock/       โ”‚
    โ”‚              โ”‚  โ”‚              โ”‚  โ”‚              โ”‚
    โ”‚ current_     โ”‚  โ”‚ create_      โ”‚  โ”‚ stock_       โ”‚
    โ”‚ weather.py   โ”‚  โ”‚ event.py     โ”‚  โ”‚ price.py     โ”‚
    โ”‚              โ”‚  โ”‚              โ”‚  โ”‚              โ”‚
    โ”‚ forecast.py  โ”‚  โ”‚ list_        โ”‚  โ”‚ stock_       โ”‚
    โ”‚              โ”‚  โ”‚ events.py    โ”‚  โ”‚ analysis.py  โ”‚
    โ”‚              โ”‚  โ”‚              โ”‚  โ”‚              โ”‚
    โ”‚              โ”‚  โ”‚ delete_      โ”‚  โ”‚ stock_       โ”‚
    โ”‚              โ”‚  โ”‚ event.py     โ”‚  โ”‚ history.py   โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                โ”‚             โ”‚             โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  For each file:                     โ”‚
        โ”‚  โ€ข Import module dynamically        โ”‚
        โ”‚  โ€ข Find @tool decorated functions   โ”‚
        โ”‚  โ€ข Extract metadata                 โ”‚
        โ”‚  โ€ข Register in ToolRegistry         โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  ToolRegistry (Singleton)           โ”‚
        โ”‚  _tools = {                         โ”‚
        โ”‚    "weather.current_weather": {...},โ”‚
        โ”‚    "calendar.create_event": {...},  โ”‚
        โ”‚    "stock.stock_price": {...},      โ”‚
        โ”‚    ...                              โ”‚
        โ”‚  }                                  โ”‚
        โ”‚                                     โ”‚
        โ”‚  โœ“ 11+ tools registered             โ”‚
        โ”‚  โœ“ 4 domains active                 โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Agent Discovery & Creation Flow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         AgentFactory.discover_all_agents()                     โ”‚
โ”‚         โ€ข Scans agents/ directory for *.yaml files             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚                                         โ”‚
         โ–ผ                                         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  weather_agent.yaml      โ”‚         โ”‚  stock_agent.yaml        โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚         โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
โ”‚  โ”‚ 1. Load YAML config  โ”‚โ”‚         โ”‚  โ”‚ 1. Load YAML config  โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚ 2. Parse domains:    โ”‚โ”‚         โ”‚  โ”‚ 2. Parse domains:    โ”‚โ”‚
โ”‚  โ”‚    [weather]         โ”‚โ”‚         โ”‚  โ”‚    [stock, weather]  โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚ 3. Query registry:   โ”‚โ”‚         โ”‚  โ”‚ 3. Query registry:   โ”‚โ”‚
โ”‚  โ”‚    get_tools_by_     โ”‚โ”‚         โ”‚  โ”‚    get_tools_by_     โ”‚โ”‚
โ”‚  โ”‚    domain("weather") โ”‚โ”‚         โ”‚  โ”‚    domain("stock")   โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚ 4. Results:          โ”‚โ”‚         โ”‚  โ”‚ 4. Results:          โ”‚โ”‚
โ”‚  โ”‚    [current_weather, โ”‚โ”‚         โ”‚  โ”‚    [stock_price,     โ”‚โ”‚
โ”‚  โ”‚     forecast]        โ”‚โ”‚         โ”‚  โ”‚     stock_analysis,  โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚     stock_history] + โ”‚โ”‚
โ”‚  โ”‚ 5. Build client:     โ”‚โ”‚         โ”‚  โ”‚    [current_weather] โ”‚โ”‚
โ”‚  โ”‚    Try providers:    โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚    - OpenRouter โœ“    โ”‚โ”‚         โ”‚  โ”‚ 5. Build client:     โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚    Try providers:    โ”‚โ”‚
โ”‚  โ”‚ 6. Inject context:   โ”‚โ”‚         โ”‚  โ”‚    - OpenRouter โœ“    โ”‚โ”‚
โ”‚  โ”‚    Add tool docs to  โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚    instructions      โ”‚โ”‚         โ”‚  โ”‚ 6. Inject context    โ”‚โ”‚
โ”‚  โ”‚                      โ”‚โ”‚         โ”‚  โ”‚                      โ”‚โ”‚
โ”‚  โ”‚ 7. Create ChatAgent  โ”‚โ”‚         โ”‚  โ”‚ 7. Create ChatAgent  โ”‚โ”‚
โ”‚  โ”‚    โœ“ Ready!          โ”‚โ”‚         โ”‚  โ”‚    โœ“ Ready!          โ”‚โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚         โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚ All agents loaded:               โ”‚
           โ”‚ {                                โ”‚
           โ”‚   'weather_agent': <ChatAgent>,  โ”‚
           โ”‚   'calendar_agent': <ChatAgent>, โ”‚
           โ”‚   'stock_agent': <ChatAgent>,    โ”‚
           โ”‚   'email_agent': <ChatAgent>     โ”‚
           โ”‚ }                                โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚ StartupLogger displays:          โ”‚
           โ”‚ โ€ข Tools discovered by domain     โ”‚
           โ”‚ โ€ข Agents created                 โ”‚
           โ”‚ โ€ข Agent โ†’ Tool mappings          โ”‚
           โ”‚ โ€ข Model provider info            โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚ DevUI Server Launch              โ”‚
           โ”‚ serve(entities=agents)           โ”‚
           โ”‚ โ†’ http://localhost:8080          โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Multi-Provider Fallback System

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Agent YAML Configuration                                โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ model:                                             โ”‚  โ”‚
โ”‚  โ”‚   providers:           โ† Try in order             โ”‚  โ”‚
โ”‚  โ”‚     - "openrouter"     โ† 1st: Easy, no auth       โ”‚  โ”‚
โ”‚  โ”‚     - "azure"          โ† 2nd: Enterprise          โ”‚  โ”‚
โ”‚  โ”‚     - "openai"         โ† 3rd: Direct API          โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚               โ”‚               โ”‚
              โ–ผ               โ–ผ               โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚OpenRouterโ”‚    โ”‚  Azure   โ”‚    โ”‚ OpenAI   โ”‚
        โ”‚  Client  โ”‚    โ”‚ OAI Clientโ”‚   โ”‚  Client  โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
              โ”‚               โ”‚               โ”‚
              โ”‚  Try connect  โ”‚               โ”‚
    Success? โ”€โ”ผโ”€ YES โ”€โ”€โ”      โ”‚               โ”‚
              โ”‚        โ”‚      โ”‚               โ”‚
              โ”‚  NO โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€ Try Azure    โ”‚
              โ”‚        โ”‚      โ”‚               โ”‚
              โ”‚        โ”‚ Success? โ”€โ”€โ”€โ”        โ”‚
              โ”‚        โ”‚      โ”‚      โ”‚        โ”‚
              โ”‚        โ”‚  NO โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€ Try OpenAI
              โ”‚        โ”‚      โ”‚      โ”‚        โ”‚
              โ”‚        โ”‚      โ”‚   Success? โ”€โ”€โ”€โ”ค
              โ”‚        โ”‚      โ”‚               โ”‚
              โ–ผ        โ–ผ      โ–ผ               โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  Return working client to AgentFactory   โ”‚
        โ”‚  โ€ข Zero config changes needed            โ”‚
        โ”‚  โ€ข Automatic failover                    โ”‚
        โ”‚  โ€ข Production-ready reliability          โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Complete Data Flow

User launches application
        โ”‚
        โ–ผ
    run_devui.py
        โ”‚
        โ”œโ”€โ–บ Load environment (.env)
        โ”‚
        โ”œโ”€โ–บ Import agents package
        โ”‚   โ”‚
        โ”‚   โ””โ”€โ–บ agents/__init__.py
        โ”‚       โ”‚
        โ”‚       โ”œโ”€โ–บ AgentFactory()
        โ”‚       โ”‚
        โ”‚       โ””โ”€โ–บ discover_all_agents()
        โ”‚           โ”‚
        โ”‚           โ”œโ”€โ–บ Scan agents/*.yaml
        โ”‚           โ”‚
        โ”‚           โ””โ”€โ–บ For each YAML:
        โ”‚               โ”‚
        โ”‚               โ”œโ”€โ–บ Parse config
        โ”‚               โ”‚
        โ”‚               โ”œโ”€โ–บ Query ToolRegistry
        โ”‚               โ”‚   โ””โ”€โ–บ get_tools_by_domain()
        โ”‚               โ”‚
        โ”‚               โ”œโ”€โ–บ Build chat client
        โ”‚               โ”‚   โ””โ”€โ–บ Try providers
        โ”‚               โ”‚
        โ”‚               โ”œโ”€โ–บ Inject tool context
        โ”‚               โ”‚   โ””โ”€โ–บ Enhance instructions
        โ”‚               โ”‚
        โ”‚               โ””โ”€โ–บ Create ChatAgent
        โ”‚
        โ”œโ”€โ–บ Get discovery data
        โ”‚   โ””โ”€โ–บ {agents, tools_by_domain, mappings}
        โ”‚
        โ”œโ”€โ–บ Print startup summary
        โ”‚   โ””โ”€โ–บ Beautiful CLI output
        โ”‚
        โ””โ”€โ–บ Start DevUI server
            โ””โ”€โ–บ serve() โ†’ http://localhost:8080
                โ”‚
                โ””โ”€โ–บ Browser auto-opens
                    โ”‚
                    โ””โ”€โ–บ User interacts with agents
                        โ”‚
                        โ””โ”€โ–บ Agents use tools dynamically

Tool Registry Operations

The ToolRegistry maintains a central registry of all discovered tools with powerful query capabilities:

Core Operations:

  • get_tools_by_domain(domain) - Filter by domain (weather, calendar, etc.)
  • get_tools_by_tags(tags) - Filter by tags (forecast, event, etc.)
  • get_tool(tool_id) - Get specific tool by ID
  • list_domains() - Get all available domains
  • get_summary() - Get registry statistics

Example:

from tools import ToolRegistry

registry = ToolRegistry()

# Get all weather tools
weather_tools = registry.get_tools_by_domain("weather")
# Returns: [current_weather, forecast]

# Get all tools tagged with "event"
event_tools = registry.get_tools_by_tags(["event"])
# Returns: [create_event, delete_event, list_events]

# Get summary
summary = registry.get_summary()
# {
#   'total_tools': 11,
#   'domains': ['weather', 'calendar', 'stock', 'email'],
#   'tools_by_domain': {...}
# }

โš™๏ธ Configuration

Multi-Provider Support with Automatic Fallback

All agents now support automatic provider fallback - if one provider fails (e.g., Azure auth issues), the system automatically tries the next provider in the list.

How it works:

  1. Agent YAML specifies a list of providers to try
  2. System attempts each provider in order
  3. First successful provider is used
  4. If all fail, error is reported

Example configuration:

model:
  providers:
    - "openrouter"  # Try first (easiest, no Azure auth needed)
    - "azure"       # Try second (if Azure CLI is authenticated)
    - "openai"      # Try third (if OpenAI API key is set)

Benefits:

  • โœ… No more agent failures due to Azure auth issues
  • โœ… Seamless switching between providers
  • โœ… Development-friendly (OpenRouter) with production Azure support
  • โœ… Zero code changes needed

Supported Providers:

  • OpenRouter: Access 100+ models via single API key
  • Azure OpenAI: Enterprise-grade Azure integration
  • OpenAI: Direct OpenAI API access

Agent Configuration (YAML)

name: "Agent Name"                    # Required: Display name
description: "Agent description"      # Required: Short description

tool_domains:                         # Optional: Domain filters
  - domain1
  - domain2

tool_tags:                            # Optional: Tag filters
  - tag1
  - tag2

exclude_tools:                        # Optional: Tools to exclude
  - tool.name

instructions: |                       # Required: Agent prompt
  Your instructions here...

# Model Configuration - Multi-Provider Support
model:
  # Provider list (tries in order until one succeeds)
  providers:                          # Required: List of providers to try
    - "openrouter"                    # Recommended first choice
    - "azure"                         # Fallback to Azure
    - "openai"                        # Fallback to OpenAI

  # Azure OpenAI configuration
  endpoint: "https://..."             # Azure OpenAI endpoint
  deployment: "model-name"            # Deployment name
  credential_type: "azure_cli"        # azure_cli or api_key

  # OpenRouter/OpenAI config (from environment)
  # OPENROUTER_API_KEY, OPENROUTER_MODEL
  # OPENAI_API_KEY, OPENAI_MODEL

Environment Variables

Create a .env file for API keys:

# ============================================================================
# LLM Provider Configuration (choose one or all for automatic fallback)
# ============================================================================

# OpenRouter (Recommended for development - easiest setup)
OPENROUTER_API_KEY=sk-or-v1-your-key-here
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
OPENROUTER_MODEL=openai/gpt-4o-mini
OPENROUTER_APP_NAME=your-app-name

# Azure OpenAI (Enterprise production use)
AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_OPENAI_API_VERSION=2024-02-15-preview
# Note: Also requires `az login` for azure_cli authentication

# Direct OpenAI (Alternative to Azure)
OPENAI_API_KEY=sk-your-key-here
OPENAI_MODEL=gpt-4-turbo-preview

# ============================================================================
# Optional: Real API keys for tools
# ============================================================================
OPENWEATHER_API_KEY=your_key_here
ALPHA_VANTAGE_API_KEY=your_key_here

# ============================================================================
# Gmail Integration (Optional)
# ============================================================================
USE_REAL_EMAIL_API=true
GMAIL_CREDENTIALS_FILE=credentials.json
GMAIL_TOKEN_FILE=token.json
GMAIL_USER_EMAIL=your.email@gmail.com

Tool Configuration

@tool(
    domain="your_domain",           # Required
    name="tool_name",               # Optional
    description="What it does",    # Optional
    tags=["tag1", "tag2"],         # Optional
    mock=True,                     # Use mock data (True/False)
    requires_api_key="API_KEY_ENV" # Environment variable name
)

๐Ÿค Contributing

We welcome contributions! Here's how to get started:

Setting Up Development Environment

  1. Fork the repository
  2. Clone your fork
  3. Create a virtual environment
  4. Install dependencies: pip install -r requirements.txt
  5. Create a branch: git checkout -b feature/your-feature

Adding a New Domain

  1. Create domain folder: mkdir tools/your_domain
  2. Add __init__.py: touch tools/your_domain/__init__.py
  3. Create tools: Add Python files with @tool decorators
  4. Create agent YAML: Add agents/your_domain_agent.yaml
  5. Test: Run python test_auto_discovery.py
  6. Submit PR: Create a pull request with your changes

Code Style

  • Follow PEP 8 guidelines
  • Use type hints for all functions
  • Add docstrings to all public functions
  • Use meaningful variable names
  • Keep functions focused and small

Testing

Before submitting a PR:

# Test tool discovery
python -c "from tools import ToolRegistry; ToolRegistry().get_summary()"

# Test agent creation
python test_agent_factory.py

# Test your new domain
python test_auto_discovery.py

Pull Request Process

  1. Update documentation for new features
  2. Add examples if adding new capabilities
  3. Ensure all tests pass
  4. Update README if needed
  5. Describe changes in PR description

๐Ÿ“– Documentation

Comprehensive documentation available in the docs/ folder:

๐Ÿ› Troubleshooting

Tools Not Discovered

Problem: Tools not showing up in registry

Solution:

  1. Check file is in tools/domain/ directory
  2. Ensure @tool decorator is present
  3. Verify __init__.py exists in domain folder
  4. Check logs for import errors

Agent Not Created

Problem: Agent YAML file not creating agent

Solution:

  1. Verify YAML syntax is correct
  2. Check domain names match tool domains
  3. Ensure Azure OpenAI credentials are configured
  4. Check logs for errors during discovery

Connection Errors

Problem: Azure OpenAI connection fails

Solution:

  1. Verify endpoint URL is correct (must include .azure.com)
  2. Check Azure CLI is authenticated: az account show
  3. Verify deployment name matches your Azure setup
  4. Check network connectivity

๐Ÿค– Available Agents

The system includes 4 pre-built agents with 11 tools across 4 domains:

๐ŸŒค๏ธ Weather Assistant

  • Tools: 2 (current weather, forecast)
  • Use Cases: Weather forecasts, current conditions
  • Example: "What's the weather in Tokyo?"

๐Ÿ“ˆ Stock Market Assistant

  • Tools: 3 (price, analysis, history)
  • Use Cases: Stock prices, analyst ratings, historical data
  • Example: "Analyze AAPL stock"

๐Ÿ“ง Email Assistant

  • Tools: 3 (send, read inbox, search)
  • Use Cases: Email management, inbox checking
  • Example: "Show me my unread emails"

๐Ÿ“… Calendar Assistant

  • Tools: 3 (create event, list events, find free time)
  • Use Cases: Schedule management, availability checking
  • Example: "Find me a free slot tomorrow afternoon"

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Microsoft Agent Framework: Core agent orchestration framework
  • Azure OpenAI: LLM infrastructure
  • Contributors: Thanks to all contributors who help improve this project

๐Ÿ“ง Contact

๐Ÿ—บ๏ธ Roadmap

Current Version (v1.0)

  • โœ… Dynamic tool discovery
  • โœ… Automatic agent discovery
  • โœ… YAML-based configuration
  • โœ… Sequential workflows
  • โœ… Parallel workflows
  • โœ… DevUI integration

Planned Features (v2.0)

  • ๐Ÿ”„ MCP Server implementation
  • ๐Ÿ”„ Real API integrations (OpenWeatherMap, Alpha Vantage)
  • ๐Ÿ”„ Tool versioning system
  • ๐Ÿ”„ Agent performance monitoring
  • ๐Ÿ”„ Hot-reload without restart
  • ๐Ÿ”„ Plugin marketplace

Future Enhancements

  • Multiple LLM provider support (OpenAI, Anthropic, etc.)
  • Tool dependency management
  • Conditional workflow routing
  • Agent-to-agent communication
  • Distributed agent execution
  • Web-based agent configuration UI

Made with โค๏ธ using Microsoft Agent Framework

Star โญ this repo if you find it useful!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ageclerate_cli-1.0.0.tar.gz (65.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ageclerate_cli-1.0.0-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

File details

Details for the file ageclerate_cli-1.0.0.tar.gz.

File metadata

  • Download URL: ageclerate_cli-1.0.0.tar.gz
  • Upload date:
  • Size: 65.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ageclerate_cli-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9c41179a36fe3419fccb0bb53ac63c2aa4b5210c39c179214562a7e33062d386
MD5 ff1ee0385c3d5cacbfcb1f4911589837
BLAKE2b-256 74ba17b027dc770acc62f29ae7516117d7caad2a7ef220707438a38872d7cccc

See more details on using hashes here.

File details

Details for the file ageclerate_cli-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ageclerate_cli-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 38.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for ageclerate_cli-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2db4998cbd01059569377ebdaaf8baa9458d11b342628aebc60cfa4786ece58
MD5 b8ea764ea7a3d744d8a4915d836c8940
BLAKE2b-256 8e877a7680c8bdc94207b48565b28f95557cddafacdbda89ec370b7e2216ee18

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page