Skip to main content

A multi-agent orchestration system built with Microsoft Agent Framework

Project description

AgenticFleet Architecture

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>

Python 3.12+ License: MIT uv

โš ๏ธ 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 MagenticBuilder with 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: โ†‘ / โ†“ or Ctrl+R
  • Checkpoints: checkpoints, resume <id>
  • Exit: quit or Ctrl+D

Jupyter Notebooks:
Explore example workflows in notebooks/ including:

  • magentic.ipynb โ€“ Magentic One pattern examples
  • agent_as_workflow.ipynb โ€“ Agent-as-workflow demonstrations
  • mem0_basic.ipynb โ€“ Memory integration tutorial
  • azure_responses_client.ipynb โ€“ Azure AI responses client usage

๐Ÿ—๏ธ Architecture

AgenticFleet implements the Magentic One workflow pattern with a manager-executor architecture:

Workflow Cycle

  1. PLAN โ€“ Manager analyzes task, gathers facts, creates structured action plan
  2. EVALUATE โ€“ Progress ledger checks: request satisfied? in a loop? who acts next?
  3. ACT โ€“ Selected specialist executes with domain-specific tools, returns findings
  4. OBSERVE โ€“ Manager reviews response, updates context, decides next action
  5. 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.py validates env vars, YAML structure, tool imports
  • Fleet Tests: tests/test_magentic_fleet.py covers 14 orchestration scenarios
  • Memory Tests: tests/test_mem0_context_provider.py validates Mem0 integration
  • Mock LLM Calls: Always patch OpenAIResponsesClient to avoid API costs in tests

Code Quality Standards

  • Python 3.12+ with strict typing (Type | None instead of Optional[Type])
  • 100-character line limit (Black formatter)
  • Ruff linting with pyupgrade and isort rules
  • 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

For Developers

๐Ÿ“š 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

  1. Read Contributing Guidelines
  2. Review Code of Conduct
  3. 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:

Special thanks to the Microsoft Agent Framework team for the Magentic One pattern.


๐Ÿ“ž Support & Community


โฌ† Back to Top

Made with โค๏ธ by Qredence

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

agentic_fleet-0.5.3.tar.gz (165.5 kB view details)

Uploaded Source

Built Distribution

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

agentic_fleet-0.5.3-py3-none-any.whl (127.4 kB view details)

Uploaded Python 3

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

Hashes for agentic_fleet-0.5.3.tar.gz
Algorithm Hash digest
SHA256 a135e82e686b508fc1736db6c134393a828d4c18e4ae39672cb02adc3b458040
MD5 e7c7b123ac975155418537c3cb28a484
BLAKE2b-256 8b09fe10a0ba81aa1f58f9dddb966214fd88785c9ec80595722fb25c02996d3b

See more details on using hashes here.

File details

Details for the file agentic_fleet-0.5.3-py3-none-any.whl.

File metadata

File hashes

Hashes for agentic_fleet-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4b48a9612d038c83449a40b210d3b646e793cecdfda1e57bf9527435c483e16c
MD5 cb8554c2f7edd8c552ac0fc9b003e88e
BLAKE2b-256 ae57adfcdc1e19563872573a4a55a033014d672ca078d8cdfd8214c8f111032f

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