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!
๐ 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
๐ 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
@tooldecorator 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__.pyor 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
- Installation
- Project Structure
- Core Concepts
- Creating Tools
- Creating Agents
- Running the System
- Examples
- Architecture
- Configuration
- Contributing
- License
๐ 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
- Clone the repository
git clone https://github.com/yourusername/agentic-ms.git
cd agentic-ms
- Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
- Install dependencies
pip install -r requirements.txt
- 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
- 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
- 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 IDlist_domains()- Get all available domainsget_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:
- Agent YAML specifies a list of providers to try
- System attempts each provider in order
- First successful provider is used
- 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
- Fork the repository
- Clone your fork
- Create a virtual environment
- Install dependencies:
pip install -r requirements.txt - Create a branch:
git checkout -b feature/your-feature
Adding a New Domain
- Create domain folder:
mkdir tools/your_domain - Add
__init__.py:touch tools/your_domain/__init__.py - Create tools: Add Python files with
@tooldecorators - Create agent YAML: Add
agents/your_domain_agent.yaml - Test: Run
python test_auto_discovery.py - 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
- Update documentation for new features
- Add examples if adding new capabilities
- Ensure all tests pass
- Update README if needed
- Describe changes in PR description
๐ Documentation
Comprehensive documentation available in the docs/ folder:
- Dynamic Tool Architecture: Complete guide to the tool system
- Agent Workflow Architecture: Sequential and parallel workflows
- Parallel Execution Quickstart: Quick guide to parallel patterns
- Email Agent Demo: Step-by-step example of creating an agent
๐ Troubleshooting
Tools Not Discovered
Problem: Tools not showing up in registry
Solution:
- Check file is in
tools/domain/directory - Ensure
@tooldecorator is present - Verify
__init__.pyexists in domain folder - Check logs for import errors
Agent Not Created
Problem: Agent YAML file not creating agent
Solution:
- Verify YAML syntax is correct
- Check domain names match tool domains
- Ensure Azure OpenAI credentials are configured
- Check logs for errors during discovery
Connection Errors
Problem: Azure OpenAI connection fails
Solution:
- Verify endpoint URL is correct (must include
.azure.com) - Check Azure CLI is authenticated:
az account show - Verify deployment name matches your Azure setup
- 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
- Issues: GitHub Issues
- Discussions: GitHub Discussions
๐บ๏ธ 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c41179a36fe3419fccb0bb53ac63c2aa4b5210c39c179214562a7e33062d386
|
|
| MD5 |
ff1ee0385c3d5cacbfcb1f4911589837
|
|
| BLAKE2b-256 |
74ba17b027dc770acc62f29ae7516117d7caad2a7ef220707438a38872d7cccc
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2db4998cbd01059569377ebdaaf8baa9458d11b342628aebc60cfa4786ece58
|
|
| MD5 |
b8ea764ea7a3d744d8a4915d836c8940
|
|
| BLAKE2b-256 |
8e877a7680c8bdc94207b48565b28f95557cddafacdbda89ec370b7e2216ee18
|