MARSYS - Multi-Agent Reasoning Systems
A framework for orchestrating collaborative AI agents with sophisticated reasoning, planning, and autonomous capabilities
What is MARSYS?
MARSYS (Multi-Agent Reasoning Systems) is a Python framework for building and coordinating multi-agent AI systems. It provides flexible topology definitions, parallel execution with agent pools, state persistence, and human-in-the-loop support.
Core Features
- Multi-Agent Orchestration: Coordinate workflows with multiple specialized agents
- Flexible Topologies: Define agent relationships using strings, objects, or pre-defined patterns
- Parallel Execution: True concurrency with AgentPool and dynamic branch spawning
- State Persistence: Pause/resume with checkpointing for long-running tasks
- Human-in-the-Loop: Built-in user interaction for approval workflows and error recovery
- Multi-Model Support: OpenAI, Anthropic, Google, OpenRouter, xAI, and local models
Quick Start
Installation
Create and activate a virtual environment with uv:
uv venv
source .venv/bin/activate # Unix/macOS
# .venv\Scripts\activate # Windows
Install MARSYS:
pip install marsys
With optional dependencies:
pip install marsys[local-models] # Local model support (PyTorch, Transformers)
pip install marsys[production] # Production inference (vLLM, Flash Attention)
pip install marsys[dev] # Everything (local-models + production + testing + docs)
Install from source (for development):
git clone https://github.com/rezaho/MARSYS.git
cd MARSYS
pip install -e ".[dev]"
API Key Configuration
Configure your API keys via environment variables or a .env file:
# Environment variables
export OPENROUTER_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
export OPENAI_API_KEY="your-key-here"
Or create a .env file in your project root:
OPENROUTER_API_KEY=your-key-here
ANTHROPIC_API_KEY=your-key-here
OAuth alternative (no API keys):
- OpenAI ChatGPT subscription:
codex login→ credentials in~/.codex/auth.json - Anthropic Claude Max subscription:
claude login→ credentials in~/.claude/.credentials.json - Google Antigravity gateway:
marsys oauth add <profile> --provider google-oauth→ credentials in~/.marsys/oauth/<profile>/credentials.json
Use provider="openai-oauth", provider="anthropic-oauth", or provider="google-oauth" in ModelConfig.
Note:
anthropic-oauthandgoogle-oauthrely on non-official integration paths and may violate provider Terms of Service. Use at your own risk.
Playwright Setup (BrowserAgent only)
Only required if you plan to use BrowserAgent for web automation:
playwright install chromium --with-deps
Basic Usage
A simple two-agent collaboration using allowed_peers:
from marsys.agents import Agent
from marsys.models import ModelConfig
model_config = ModelConfig(
type="api",
name="anthropic/claude-opus-4.6",
provider="openrouter"
)
researcher = Agent(
model_config=model_config,
name="Researcher",
goal="Expert at finding and analyzing information",
instruction="You are a research specialist. Find and analyze information thoroughly.",
allowed_peers=["Writer"]
)
writer = Agent(
model_config=model_config,
name="Writer",
goal="Skilled at creating clear, engaging content",
instruction="You are a skilled writer. Create clear, engaging content based on research.",
allowed_peers=[]
)
result = await researcher.auto_run(
task="Research the latest AI breakthroughs and write a summary",
max_steps=20,
verbosity=1
)
print(result)
Using Orchestra with Topology
For more control, define the topology explicitly using Orchestra.run():
from marsys.coordination import Orchestra
from marsys.agents import Agent
from marsys.models import ModelConfig
model_config = ModelConfig(
type="api",
name="anthropic/claude-opus-4.6",
provider="openrouter"
)
researcher = Agent(
model_config=model_config,
name="Researcher",
goal="Expert at finding and analyzing information",
instruction="You are a research specialist. Find and analyze information thoroughly."
)
writer = Agent(
model_config=model_config,
name="Writer",
goal="Skilled at creating clear, engaging content",
instruction="You are a skilled writer. Create clear, engaging content based on research."
)
topology = {
"agents": ["Researcher", "Writer"],
"flows": ["Researcher -> Writer"]
}
result = await Orchestra.run(
task="Research the latest AI breakthroughs and write a summary",
topology=topology
)
print(result.final_response)
Contributing
We welcome contributions from the community. MARSYS is an open-source project that thrives on collaboration.
Contributor License Agreement (CLA)
Before your first contribution can be merged, you must sign our CLA. This is a one-time, automated process:
- Open a pull request
- CLA Assistant bot will comment with a link
- Click the link and sign
- Your PR will be automatically unblocked
The CLA ensures legal clarity and protects both contributors and the project. You retain ownership of your code and can use it elsewhere. See docs/CLA.md for full details.
How to Contribute
- Fork the repository and create your branch from
main - Make your changes and ensure tests pass
- Write/update tests for your changes
- Submit a pull request with a clear description
Development Setup
git clone https://github.com/rezaho/MARSYS.git
cd MARSYS
pip install -e ".[dev]"
# Run tests
pytest tests/
# Run linting
flake8 src/
black src/ --check
Citation
If you use MARSYS in your research or projects, please cite:
@software{marsys2025,
author = {Hosseini, Reza},
title = {MARSYS: Multi-Agent Reasoning Systems Framework},
year = {2025},
publisher = {GitHub},
url = {https://github.com/rezaho/MARSYS}
}
License
MARSYS is released under the Apache License 2.0. See LICENSE for full terms.
Copyright 2025 Marsys Project. Original Author: rezaho
Built by Reza Hosseini and contributors
Metadata
Release files for marsys 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| marsys-0.2.1.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| marsys-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / marsys-0.2.1.tar.gz
| Download URL | marsys-0.2.1.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
863fe0ebbfa12b3a86572a4c1446d9e5f47148d1d58e4508505c95960882308a
|
|
BLAKE2b-256 checksum How to use checksums |
286be5c53b5f494e011778811fe87541f03bbead99c9f6d4b69485380092afd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / marsys-0.2.1-py3-none-any.whl
| Download URL | marsys-0.2.1-py3-none-any.whl |
|---|---|
| Size | 642.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d8dfe582b24ca2e93d60d8f133e6f213d67ca0245775dc88dd2cf7937227ba88
|
|
BLAKE2b-256 checksum How to use checksums |
e97454d78759d6ae189d63e1f7258f9c4cd3b4b7c3c736ff58451aeee15e438f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|