A multi-agent orchestration system built with Microsoft Agent Framework
Project description
AgenticFleet
<style> .button-row { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 16px; } .blend-pill { --pill-sheen: rgba(0, 0, 0, 0.9); position: relative; display: inline-flex; align-items: center; gap: 10px; padding: 11px 28px; border-radius: 9999px; text-decoration: none; text-color: #000000; font-size: 15px; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; overflow: hidden; isolation: isolate; color: #ffffff; mix-blend-mode: difference; transition: transform 0.25s ease, box-shadow 0.25s ease; box-shadow: 0 14px 32px rgba(0, 0, 0, 0.18); z-index: 1; } .blend-pill::before { content: ""; position: absolute; inset: -2px; border-radius: inherit; background: var(--pill-sheen); mix-blend-mode: difference; border: 1px solid rgba(255, 255, 255, 0.22); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06); transition: transform 0.35s ease, opacity 0.35s ease; } .blend-pill[data-variant="primary"] { --pill-sheen: rgba(255, 255, 255, 0.95); } .blend-pill[data-variant="discord"] { --pill-sheen: rgba(255, 255, 255, 0.88); } .blend-pill[data-variant="light"] { --pill-sheen: rgba(255, 255, 255, 0.78); } .blend-pill:hover { transform: translateY(-2px); box-shadow: 0 22px 44px rgba(0, 0, 0, 0.24); } .blend-pill:hover::before { transform: scale(1.06); } .blend-pill__value { position: relative; z-index: 1; color: #00000; mix-blend-mode: none; font-size: 15px; font-weight: 700; } </style> <script> (async function(){ function compactFR(n){ const fmt=(x,d)=>x.toFixed(d).replace('.', ','); if(n>=1_000_000){const d=(n%1_000_000)>=100_000?1:0;return fmt(n/1_000_000,d)+'m';} if(n>=1_000){const d=(n%1_000)>=100?1:0;return fmt(n/1_000,d)+'k';} return String(n); } const el=document.getElementById('pypi-downloads'); async function tryProxy(){ try{ const res = await fetch('/api/pepy?project=agentic-fleet',{cache:'no-store'}); if(!res.ok) throw new Error('proxy not ok'); const { total } = await res.json(); if(typeof total==='number'){ el.textContent = compactFR(total); return true; } }catch(e){} return false; } async function tryPepyDirect(){ try{ const res = await fetch('https://api.pepy.tech/api/v2/projects/agentic-fleet',{ headers:{'Accept':'application/json'}, cache:'no-store', mode:'cors' }); if(!res.ok) throw new Error('pepy v2 not ok'); const data = await res.json(); const total = data.total_downloads || data.total || (data.downloads && (data.downloads.all_time||data.downloads.total)); if(typeof total==='number'){ el.textContent = compactFR(total); return true; } }catch(e){} return false; } async function tryBadgeParse(){ try{ const url='https://static.pepy.tech/personalized-badge/agentic-fleet?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads'; const res=await fetch(url,{cache:'no-store',mode:'cors'}); if(!res.ok) throw new Error('badge not ok'); const svg=await res.text(); const matches=[...svg.matchAll(/>([\d.,]+)\s*([kKmM]?)/g)]; if(!matches.length) throw new Error('no number'); const [,numStr,suffix]=matches[matches.length-1]; let n=parseFloat(numStr.replace(',','.')); if(/k/i.test(suffix)) n*=1_000; else if(/m/i.test(suffix)) n*=1_000_000; el.textContent=compactFR(Math.round(n)); return true; }catch(e){} return false; } if(!(await tryProxy()) && !(await tryPepyDirect()) && !(await tryBadgeParse())){ el.textContent='N/A'; } })(); </script>โ ๏ธ Active Development Notice
This project is under active development. Features, APIs, and workflows may change. We recommend pinning to specific versions for production use.
AgenticFleet Overview
- ๐ฅ๏ธ Interactive CLI โ Rich terminal interface for direct agent interaction
- ๐ Web Frontend โ Modern React UI wired to agent-as-workflow pattern (default)
- ๐ Jupyter Notebooks โ Exploration and prototyping environments in
notebooks/
๐ Quick Start
Prerequisites
- Python 3.12+
- uv package manager
- OpenAI API key (set as
OPENAI_API_KEY)
Installation
# 1. Clone the repository
git clone https://github.com/Qredence/agentic-fleet.git
cd agentic-fleet
# 2. Configure environment
cp .env.example .env
# Edit .env to add your OPENAI_API_KEY
# 3. Install dependencies
make install
# 4. Launch the fleet (runs frontend + backend)
make dev
# Alternative (backend only): uv run fleet
โจ Key Features
- ๐ฏ Magentic-Native Architecture โ Built on Microsoft Agent Framework's
MagenticBuilderwith intelligent planning and progress evaluation - ๐ค Specialized Agent Fleet โ Pre-configured researcher, coder, and analyst agents with domain-specific tools
- ๐ Modern Web Frontend โ React-based UI with agent-as-workflow pattern for seamless agent interaction
- ๐ Interactive Notebooks โ Jupyter notebooks for experimentation, prototyping, and learning
- ๐พ State Persistence โ Checkpoint system saves 50-80% on retry costs by avoiding redundant LLM calls
- ๐ก๏ธ Human-in-the-Loop (HITL) โ Configurable approval gates for code execution, file operations, and sensitive actions
- ๐ Full Observability โ Event-driven callbacks for streaming responses, plan tracking, and tool monitoring
- ๐ง Long-term Memory โ Optional Mem0 integration with Azure AI Search for persistent context
- ๐ง Declarative Configuration โ YAML-based agent configuration for non-engineers to tune prompts and tools
- ๐จ Multiple Interfaces โ CLI, web frontend, and notebooks for different workflows
๐ Quick Start
Prerequisites
- Python 3.12+
- uv package manager
- OpenAI API key (set as
OPENAI_API_KEY)
Installation
# 1. Clone the repository
git clone https://github.com/Qredence/agentic-fleet.git
cd agentic-fleet
# 2. Configure environment
cp .env.example .env
# Edit .env to add your OPENAI_API_KEY
# 3. Install dependencies
make install
# 4. Launch the fleet (runs frontend + backend)
make dev
# Alternative (backend only): uv run fleet
First Run
Web Frontend (Default):
The make dev command launches both frontend and backend. Access the web UI at http://localhost:3000 to interact with agents through a modern React interface using the agent-as-workflow pattern.
CLI Interface:
For command-line interaction, run uv run fleet:
AgenticFleet v0.5.3
________________________________________________________________________
Task โค Analyze Python code quality in my repository
Plan ยท Iteration 1 Facts: User needs code analysis | Plan: Use coder agent...
Progress Status: In progress | Next speaker: coder
Agent ยท coder Analyzing repository structure...
Result Found 12 files, 3 quality issues...
Built-in CLI commands:
- History navigation:
โ/โorCtrl+R - Checkpoints:
checkpoints,resume <id> - Exit:
quitorCtrl+D
Jupyter Notebooks:
Explore example workflows in notebooks/ including:
magentic.ipynbโ Magentic One pattern examplesagent_as_workflow.ipynbโ Agent-as-workflow demonstrationsmem0_basic.ipynbโ Memory integration tutorialazure_responses_client.ipynbโ Azure AI responses client usage
๐๏ธ Architecture
AgenticFleet implements the Magentic One workflow pattern with a manager-executor architecture:
Workflow Cycle
- PLAN โ Manager analyzes task, gathers facts, creates structured action plan
- EVALUATE โ Progress ledger checks: request satisfied? in a loop? who acts next?
- ACT โ Selected specialist executes with domain-specific tools, returns findings
- OBSERVE โ Manager reviews response, updates context, decides next action
- REPEAT โ Continues until completion or limits reached (configurable in
workflow.yaml)
Agent Specialists
| Agent | Model Default | Tools | Purpose |
|---|---|---|---|
| Orchestrator | gpt-5 |
(none) | Task planning & result synthesis |
| Researcher | gpt-5 |
web_search_tool |
Information gathering & citations |
| Coder | gpt-5-codex |
code_interpreter_tool (Microsoft hosted sandbox) |
Code generation & analysis |
| Analyst | gpt-5 |
data_analysis_tool, visualization_suggestion_tool |
Data exploration & insights |
All agents use OpenAI Response API format via OpenAIResponsesClient and return structured Pydantic models for reliable downstream parsing.
See Architecture Documentation for detailed design patterns.
โ๏ธ Configuration
AgenticFleet uses a declarative YAML-first approach:
Workflow Configuration (config/workflow.yaml)
fleet:
manager:
model: "gpt-5"
instructions: |
You coordinate researcher, coder, and analyst agents.
Delegate based on task requirements...
orchestrator:
max_round_count: 30 # Maximum workflow iterations
max_stall_count: 3 # Triggers replan
max_reset_count: 2 # Complete restart limit
callbacks:
streaming_enabled: true
log_progress_ledger: true
Per-Agent Configuration (agents/<role>/config.yaml)
name: researcher
model: gpt-5
temperature: 0.3
max_tokens: 4000
system_prompt: |
You are a research specialist. Use web_search_tool to find information...
tools:
- name: web_search_tool
enabled: true
Environment Variables (.env)
# Required
OPENAI_API_KEY=sk-...
# Optional: Memory (Mem0)
MEM0_HISTORY_DB_PATH=./var/mem0
OPENAI_EMBEDDING_MODEL=text-embedding-3-small
# Optional: Observability
ENABLE_OTEL=true
OTLP_ENDPOINT=http://localhost:4317
๐ ๏ธ Development
Setup Development Environment
# Install with dev dependencies
make install
# Run configuration validation
make test-config
# Run all quality checks (lint, format, type-check)
make check
# Run test suite
make test
Development Commands
All commands use uv run prefix (managed by Makefile):
| Command | Purpose |
|---|---|
make dev |
Launch frontend + backend (full stack) |
make test |
Run full test suite |
make test-config |
Validate YAML configs & agent factories |
make lint |
Check code with Ruff |
make format |
Auto-format with Black + Ruff |
make type-check |
Run mypy strict type checking |
make check |
Chain lint + format + type checks |
Testing Patterns
- Configuration Tests:
tests/test_config.pyvalidates env vars, YAML structure, tool imports - Fleet Tests:
tests/test_magentic_fleet.pycovers 14 orchestration scenarios - Memory Tests:
tests/test_mem0_context_provider.pyvalidates Mem0 integration - Mock LLM Calls: Always patch
OpenAIResponsesClientto avoid API costs in tests
Code Quality Standards
- Python 3.12+ with strict typing (
Type | Noneinstead ofOptional[Type]) - 100-character line limit (Black formatter)
- Ruff linting with
pyupgradeandisortrules - MyPy strict checks (except for test files)
- Pydantic models for all tool return types
See Contributing Guide for detailed conventions.
๐ Documentation
Comprehensive documentation organized by audience:
For Users
- Getting Started โ Installation, configuration, first steps
- User Guides โ Task-oriented tutorials
- Agent Catalog โ Detailed agent capabilities & tools
- Troubleshooting โ FAQ & common issues
For Developers
- Architecture โ System design & patterns
- Features โ Implementation deep-dives
- Contributing โ Development workflow & standards
- API Reference โ REST API & Python SDK
๐ Documentation Index โ Complete navigation guide
๐ Release Notes
v0.5.3 (2024-06-15)
- Added analyst agent with data analysis tools
- Improved checkpointing to reduce redundant LLM calls
- Enhanced web frontend with task templates
- Observability improvements: detailed progress ledger logging
- Bug fixes and performance optimizations
๐ง Adding Custom Agents
Extend the fleet with domain-specific agents:
1. Scaffold Agent Structure
mkdir -p src/agenticfleet/agents/planner/{tools,}
touch src/agenticfleet/agents/planner/{__init__.py,agent.py,config.yaml}
2. Create Agent Factory
# src/agenticfleet/agents/planner/agent.py
from agenticfleet.config.settings import settings
from agent_framework import ChatAgent
from agent_framework.azure_ai import OpenAIResponsesClient
def create_planner_agent() -> ChatAgent:
config = settings.load_agent_config("planner")
return ChatAgent(
name=config["name"],
model=config["model"],
system_prompt=config["system_prompt"],
client=OpenAIResponsesClient(model_id=config["model"]),
tools=[], # Add tools here
)
๐ค Contributing
We welcome contributions! Please follow these steps:
Before You Start
- Read Contributing Guidelines
- Review Code of Conduct
- Check existing Issues
Development Process
# 1. Fork & clone
git clone https://github.com/YOUR_USERNAME/agentic-fleet.git
cd agentic-fleet
# 2. Create feature branch
git checkout -b feat/your-feature
# 3. Make changes
# Edit code, update docs, add tests
# 4. Run quality checks
make check # Lint, format, type-check
make test-config # Validate configurations
make test # Full test suite
# 5. Commit with conventional format
git commit -m "feat(agents): add planner agent with breakdown tool"
# 6. Push & open PR
git push origin feat/your-feature
Pull Request Checklist
- โ
Tests pass (
make test) - โ
Code formatted (
make check) - โ Documentation updated
- โ
YAML configs validated (
make test-config) - โ
Commit messages follow
feat:,fix:,docs:convention
๐ Security
Reporting Vulnerabilities
Do NOT open public issues for security vulnerabilities.
Please follow the process outlined in SECURITY.md.
Security Best Practices
- Store API keys in
.env(never commit) - Use HITL approval for code execution
- Enable audit logging for sensitive operations
- Review tool permissions in agent configs
- Keep dependencies updated (
uv sync)
๐ License
AgenticFleet is released under the MIT License.
Copyright (c) 2025 Qredence
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...
See LICENSE for full terms.
๐ Acknowledgments
Built with:
- Microsoft Agent Framework โ Core orchestration
- Mem0 โ Long-term memory layer
- uv โ Fast Python package manager
- Rich โ Beautiful terminal UI
- Pydantic โ Data validation
Special thanks to the Microsoft Agent Framework team for the Magentic One pattern.
๐ Support & Community
- Documentation: docs/
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Website: qredence.ai
Made with โค๏ธ by Qredence
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 agentic_fleet-0.5.3.tar.gz.
File metadata
- Download URL: agentic_fleet-0.5.3.tar.gz
- Upload date:
- Size: 165.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a135e82e686b508fc1736db6c134393a828d4c18e4ae39672cb02adc3b458040
|
|
| MD5 |
e7c7b123ac975155418537c3cb28a484
|
|
| BLAKE2b-256 |
8b09fe10a0ba81aa1f58f9dddb966214fd88785c9ec80595722fb25c02996d3b
|
File details
Details for the file agentic_fleet-0.5.3-py3-none-any.whl.
File metadata
- Download URL: agentic_fleet-0.5.3-py3-none-any.whl
- Upload date:
- Size: 127.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b48a9612d038c83449a40b210d3b646e793cecdfda1e57bf9527435c483e16c
|
|
| MD5 |
cb8554c2f7edd8c552ac0fc9b003e88e
|
|
| BLAKE2b-256 |
ae57adfcdc1e19563872573a4a55a033014d672ca078d8cdfd8214c8f111032f
|