Multiagentic supervisory system
Project description
AgentCurie
AgentCurie is a supervisor agentic framework designed to control and coordinate agents built with multiple frameworks.
The name is inspired by Maria Salomea Skłodowska-Curie, the only person to have received Nobel Prizes in two different scientific fields. Similarly, AgentCurie is capable of supervising and orchestrating agents originating from different ecosystems.
🎯 Purpose
AgentCurie acts as a master supervisor that:
- Manages multiple agents, even if they are built using different frameworks
- Coordinates tools, agents, and execution flow
- Provides a structured, extensible foundation for agentic systems
⚡ Quick Start
This section shows how to get up and running with AgentCurie by creating a simple agent and supervising it.
1️⃣ Define Your Agent
Create a custom agent by extending BaseAgent. Your agent implements a process method, which the supervisor will invoke.
from agentcurie import BaseAgent
class CreativeAgent(BaseAgent):
def __init__(self):
super().__init__()
# Tool to communicate back with the supervisor
query_tool = tool()(self.query_supervisor)
# Your underlying LLM-powered agent
self.agent = create_agent(
model=llm,
tools=[calculator, write_poem, query_tool],
system_prompt=(
"You are a creative assistant that can perform calculations "
"and write poems. Be helpful and creative!"
)
)
# This method is called by the supervisor
async def process(self, message: str) -> str:
result = await self.agent.ainvoke({
"messages": [{"role": "user", "content": message}]
})
return result["messages"][-1].content
2️⃣ Describe the Agent with an AgentCard
An AgentCard defines the agent’s identity, skills, and lifecycle behavior.
from agentcurie import AgentCard
my_agent_card = AgentCard(
name="creative_agent",
description="Can write poems and perform calculations",
skills=[
"write poems",
"does calculations like add, subtract, multiply, divide"
],
persistent=True # Keep the agent alive across invocations
)
3️⃣ Create and Configure the Supervisor
The SupervisorAgent manages agents and tools and decides how to route tasks.
from agentcurie import SupervisorAgent, FuncHook, AgentHook, BaseAgent
# hooks with access to complete agent state
async def intermediate_logger(supervisor:SupervisorAgent):
last_message = supervisor.message_manager.history.get_last_message()
print(last_message)
async def child_agent_state_updater(child_agent:BaseAgent, supervisor:SupervisorAgent):
# child state updating or custom logic
pass
supervisor = SupervisorAgent(
llm=llm,
func_hooks=[
FuncHook(order='before', func=intermediate_logger)
],
agent_hooks=[
AgentHook(order='after', agent_name='creative_agent',
func=child_agent_state_updater
)
]
)
4️⃣ Register Child Agents and Supervisor-Level Tools
You can attach tools directly to the supervisor. These tools are available during task execution.
supervisor.register_agent(
agent_card=my_agent_card,
agent_class=CreativeAgent
)
@supervisor.register_tool("Use to get weather details of any place")
def get_weather(city: str):
"""Get current weather for a city (mock function)"""
weather_data = {
"New York": "Sunny, 72°F",
"London": "Cloudy, 15°C",
"Tokyo": "Rainy, 18°C",
"Paris": "Partly cloudy, 20°C"
}
return weather_data.get(city, f"Weather data not available for {city}")
5️⃣ Run the Supervisor
Call solve() on the supervisor with a natural-language task. The supervisor will:
- Decide which tools to use
- Invoke the appropriate agent(s)
- Coordinate the execution flow
import asyncio
async def main():
result = await supervisor.solve(
"Check weather details of London, write a poem of the current weather"
)
print(result)
return result
asyncio.run(main())
✅ What Happens Internally?
- The supervisor analyzes the task
- The weather tool is invoked
- The creative agent is selected and initialized
- The agent processes the request and returns the final output
This demonstrates how AgentCurie acts as a central brain, orchestrating agents and tools seamlessly.
📁 Code Structure
AgentCurie follows a feature-based modular architecture, promoting:
- Clear separation of concerns
- Scalability for large systems
- High testability and maintainability
feature_1/
├── service.py # Core business logic and orchestration
├── views.py # Pydantic models (request/response schemas)
├── model.py # Database or domain models
├── test.py # Feature-specific tests
├── example/ # Usage examples and demos
└── sub_feature/ # Optional nested features
feature_2/
├── ...
Each feature is self-contained and can evolve independently.
🚀 Highlights
-
Multi-agent orchestration Seamlessly integrate and control agents from different frameworks.
-
Agent Queries Child agents can ask query/service back to supervisor which will temperorly hold the child agent till supervisor respond directly or by coordinating with other agents.
-
Dynamic Initialisation and Persistance Child agents are initialised only when necessary and can be set to persist until completion.
-
Testable by design Every feature includes its own test suite.
-
Agentic-compatible Designed to work naturally with modern LLM tools, planners, and controllers.
-
Structured automation Clean separation between data models, business logic, and views.
📂 Examples
Each feature contains an examples/ directory that demonstrates:
- How to interact with the feature’s services
- How agents are executed and coordinated
- Typical usage patterns for the framework
These examples are intended as both learning resources and quick-start references.
Run example :
Make sure to store your .env inside examples before starting.
python -m examples.langchain_agents.main
🧭 Important Code Guide
Key directories and their responsibilities:
-
supervisor/Contains the implementation of the master supervisor agent, responsible for coordinating agents and tools across frameworks. -
controller/tool/Manages tool registration, execution, and lifecycle. -
controller/agent/Handles agent management and coordination logic. -
mcp_client/Converts MCP-compatible definitions into tools usable by the tool controller.
🔮 Vision
AgentCurie is designed as a framework-agnostic control layer for the future of agentic systems—where multiple agents, tools, and reasoning engines collaborate under a single, well-structured supervisor.
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
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 agentcurie-0.1.2.tar.gz.
File metadata
- Download URL: agentcurie-0.1.2.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97d00e25d1f9a4ef98cd308e5dba29c1c3471c26ff95cc638ffb8bbb8080b854
|
|
| MD5 |
08c445f4d32eaf9bc7a41435321b6c60
|
|
| BLAKE2b-256 |
3f1896176ceaca6e8ef0cd659fcac53d455dcd27abecc1780ddbdb6b09275378
|
File details
Details for the file agentcurie-0.1.2-py3-none-any.whl.
File metadata
- Download URL: agentcurie-0.1.2-py3-none-any.whl
- Upload date:
- Size: 43.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd3a07d15b3bedb8ae7b92af7b0456f9511a440ff91b22f589b2dcc6cb665d16
|
|
| MD5 |
81a7d33c6acb63533c7f9df7393e1286
|
|
| BLAKE2b-256 |
0cce968f3e5323431d5fb6cbe87c2d8339fb2d4f48d714f188160198fb95069d
|