Configuration
Master MARSYS configuration to fine-tune execution behavior, timeouts, status management, and more.
Overview
MARSYS provides comprehensive configuration at multiple levels:
- Model Configuration: Provider settings, API keys, parameters
- Agent Configuration: Tools, memory, response formats
- Execution Configuration: Timeouts, retries, convergence behavior
- Status Configuration: Verbosity, output formatting, channels
- Communication Configuration: User interaction, rich formatting
Environment Variables
Basic Setup
Create a .env file in your project root:
# .env# API Keys (at least one required)OPENAI_API_KEY="sk-..."ANTHROPIC_API_KEY="sk-ant-..."GOOGLE_API_KEY="AIza..."GROQ_API_KEY="gsk_..."# Optional ConfigurationHEADLESS=true # Browser automation modeLOG_LEVEL=INFO # Logging verbosityMAX_RETRIES=3 # API retry attemptsTIMEOUT=300 # Default timeout in seconds
Advanced Environment Variables
# Model-specific settingsOPENAI_ORG_ID="org-..."OPENAI_BASE_URL="https://api.openai.com/v1"ANTHROPIC_VERSION="2023-06-01"# Browser automationPLAYWRIGHT_BROWSERS_PATH="/path/to/browsers"PLAYWRIGHT_TIMEOUT=30000# System resourcesMAX_WORKERS=4MEMORY_LIMIT_MB=2048DISK_CACHE_PATH="/tmp/marsys_cache"# MonitoringENABLE_TELEMETRY=falseMETRICS_PORT=9090TRACE_LEVEL=ERROR
Model Configuration
ModelConfig Class
The core configuration class for all models:
from marsys.models import ModelConfigconfig = ModelConfig(type="api", # "api" or "local"provider="openrouter", # Provider namename="anthropic/claude-haiku-4.5", # Model nameapi_key=None, # Auto-loads from envbase_url=None, # Custom endpointtemperature=0.7, # Sampling temperaturemax_tokens=2000 # Maximum output tokens)
Provider-Specific Configurations
Common provider examples:
# OpenRouter (recommended - access to all models)config = ModelConfig(type="api",provider="openrouter",name="anthropic/claude-haiku-4.5", # or gpt-5, gemini-2.5-pro, etc.api_key=os.getenv("OPENROUTER_API_KEY"),temperature=0.7,max_tokens=12000)# Local Ollamaconfig = ModelConfig(type="local",provider="ollama",name="llama2:13b",base_url="http://localhost:11434")
Provider-Specific Parameters
Each provider supports unique parameters (reasoning_effort, thinking_budget, safety_settings, etc.). See Models API Reference for complete provider-specific documentation.
Execution Configuration
ExecutionConfig
Fine-tune how Orchestra executes workflows:
from marsys.coordination.config import ExecutionConfig, StatusConfig, VerbosityLevelconfig = ExecutionConfig(# Timeout settings (seconds)convergence_timeout=300.0, # Max wait for parallel branchesbranch_timeout=600.0, # Max time per branchagent_acquisition_timeout=240.0, # Max wait to acquire from poolstep_timeout=300.0, # Max time per steptool_execution_timeout=120.0, # Max time for tool callsuser_interaction_timeout=300.0, # Max wait for user input# Convergence behaviordynamic_convergence_enabled=True, # Auto-detect convergence pointsparent_completes_on_spawn=True, # Parent waits for childrenauto_detect_convergence=True, # Automatic convergence detection# Steering mode for retry guidancesteering_mode="error", # "auto", "always", "error"# Status and outputstatus=StatusConfig.from_verbosity(VerbosityLevel.NORMAL),# User interactionuser_interaction="terminal", # "terminal", "none", "async"user_first=False, # Show initial message to userinitial_user_msg=None, # Custom initial message)
Timeout Configuration
Different timeout levels for different scenarios:
# Quick tasks - tight timeoutsquick_config = ExecutionConfig(step_timeout=30.0,convergence_timeout=60.0,branch_timeout=120.0)# Long-running research - relaxed timeoutsresearch_config = ExecutionConfig(step_timeout=300.0,convergence_timeout=600.0,branch_timeout=1800.0,user_interaction_timeout=600.0)# Real-time systems - strict timeoutsrealtime_config = ExecutionConfig(step_timeout=10.0,convergence_timeout=30.0,branch_timeout=60.0,steering_mode="error" # Minimal steering for speed)
Status Configuration
StatusConfig
Control output verbosity and formatting:
from marsys.coordination.config import StatusConfig, VerbosityLevel# Quick setup with verbosity levelsstatus = StatusConfig.from_verbosity(VerbosityLevel.QUIET) # Minimal outputstatus = StatusConfig.from_verbosity(VerbosityLevel.NORMAL) # Standard outputstatus = StatusConfig.from_verbosity(VerbosityLevel.VERBOSE) # Detailed output# Detailed configurationstatus = StatusConfig(enabled=True,verbosity=VerbosityLevel.NORMAL,# Output controlcli_output=True, # Show CLI outputcli_colors=True, # Use colorsshow_thoughts=False, # Show agent thoughtsshow_tool_calls=True, # Show tool invocationsshow_timings=True, # Show execution times# Aggregationaggregation_window_ms=500, # Group updates within windowaggregate_parallel=True, # Aggregate parallel branches# Display formattingshow_agent_prefixes=True, # Show agent namesprefix_width=20, # Width for agent namesprefix_alignment="left", # "left", "right", "center"# Output channelschannels=["cli"], # Output destinations# Follow-up timeoutfollow_up_timeout=30.0 # Timeout for follow-up questions)
Verbosity Levels Explained
| Level | Description | Use Case |
|---|---|---|
QUIET (0) | Minimal output, errors only | Production, CI/CD |
NORMAL (1) | Standard output with key events | Development |
VERBOSE (2) | Detailed output with all events | Debugging |
Communication Configuration
CommunicationConfig
Configure user interaction and formatting:
from marsys.coordination.config import CommunicationConfigcomm_config = CommunicationConfig(# Rich formattinguse_rich_formatting=True, # Use rich terminal featurestheme_name="modern", # "modern", "classic", "minimal"# Display settingsprefix_width=20, # Agent name column widthshow_timestamps=True, # Show message timestampstimestamp_format="%H:%M:%S", # Time format# Historyenable_history=True, # Keep conversation historyhistory_size=1000, # Max history entries# Interactive featuresenable_tab_completion=True, # Tab completion for commandsuse_colors=True, # Terminal colorscolor_depth="truecolor", # "truecolor", "256", "16", "none"# Input handlinginput_timeout=None, # No timeout by defaultmultiline_input=True, # Support multi-line input# Terminal enhancementuse_enhanced_terminal=True, # Use enhanced terminal featuresfallback_on_error=True, # Fallback to basic on error)
Error Handling Configuration
ErrorHandlingConfig
Configure error recovery strategies:
from marsys.coordination.config import ErrorHandlingConfigerror_config = ErrorHandlingConfig(# Classification and routinguse_error_classification=True, # Classify error typesenable_error_routing=True, # Route errors to User nodepreserve_error_context=True, # Keep error context# Notificationsnotify_on_critical_errors=True, # Alert on critical errors# Retry behaviorauto_retry_on_rate_limits=True, # Auto-retry rate limitsmax_rate_limit_retries=3,# Pool-specificpool_retry_attempts=2, # Retries for pool acquisitionpool_retry_delay=5.0, # Delay between pool retries# Timeout handlingtimeout_seconds=300.0, # Global timeouttimeout_retry_enabled=False, # Retry on timeout# Provider-specific settingsprovider_settings={"openai": {"max_retries": 3,"base_retry_delay": 60,"insufficient_quota_action": "raise", # or "fallback""fallback_model": "gpt-5-mini"},"anthropic": {"max_retries": 2,"base_retry_delay": 30,"insufficient_quota_action": "fallback","fallback_model": "anthropic/claude-haiku-4.5"},"google": {"max_retries": 3,"base_retry_delay": 45,"insufficient_quota_action": "raise"}})
Complete Configuration Example
Here's a comprehensive configuration for a production system:
import osfrom marsys.coordination import Orchestrafrom marsys.coordination.config import (ExecutionConfig,StatusConfig,CommunicationConfig,ErrorHandlingConfig,VerbosityLevel)from marsys.coordination.state import StateManager, FileStorageBackendfrom pathlib import Path# Create comprehensive configurationdef create_production_config():"""Create production-ready configuration."""# Execution configurationexec_config = ExecutionConfig(# Balanced timeoutsconvergence_timeout=300.0,branch_timeout=600.0,step_timeout=120.0,tool_execution_timeout=30.0,user_interaction_timeout=300.0,# Enable smart featuresdynamic_convergence_enabled=True,auto_detect_convergence=True,steering_mode="auto",# Agent lifecycleauto_cleanup_agents=True,# Status for productionstatus=StatusConfig(enabled=True,verbosity=VerbosityLevel.NORMAL,cli_output=True,cli_colors=True,show_timings=True,show_tool_calls=False, # Reduce noiseshow_thoughts=False, # Reduce noiseaggregate_parallel=True,channels=["cli", "file"],file_path="logs/execution.log"),# User interactionuser_interaction="terminal",user_first=False)# Communication configurationcomm_config = CommunicationConfig(use_rich_formatting=True,theme_name="modern",show_timestamps=True,enable_history=True,history_size=1000,use_enhanced_terminal=True,fallback_on_error=True)# Error handlingerror_config = ErrorHandlingConfig(use_error_classification=True,enable_error_routing=True,notify_on_critical_errors=True,auto_retry_on_rate_limits=True,max_rate_limit_retries=5,rate_limit_backoff=60,provider_settings={"openai": {"max_retries": 3,"base_retry_delay": 60,"insufficient_quota_action": "fallback","fallback_model": "gpt-5-mini"}})return exec_config, comm_config, error_config# Use configurationasync def run_with_config():exec_config, comm_config, error_config = create_production_config()# State persistencestorage = FileStorageBackend(Path("./state"))state_manager = StateManager(storage)# Run with full configuration# Note: communication and error handling settings are part of ExecutionConfigresult = await Orchestra.run(task="Complex multi-agent task",topology=topology,execution_config=exec_config,state_manager=state_manager,max_steps=50)return result
Configuration Patterns
Pattern 1: Development Configuration
# Maximum visibility for debuggingdev_config = ExecutionConfig(status=StatusConfig.from_verbosity(VerbosityLevel.VERBOSE),steering_mode="always", # Always retryuser_interaction="terminal")
Pattern 2: Production Configuration
# Balanced for reliabilityprod_config = ExecutionConfig(status=StatusConfig.from_verbosity(VerbosityLevel.QUIET),steering_mode="auto")
Pattern 3: Real-time Configuration
# Optimized for speedrealtime_config = ExecutionConfig(step_timeout=10.0,convergence_timeout=30.0,steering_mode="error", # Minimal retries (only on errors)status=StatusConfig(enabled=False) # No output overhead)
Pattern 4: Long-running Configuration
# For multi-hour workflowslong_config = ExecutionConfig(branch_timeout=3600.0, # 1 hourconvergence_timeout=1800.0, # 30 minutesuser_interaction_timeout=900.0, # 15 minutesdynamic_convergence_enabled=True)
Advanced Configuration Topics
For production deployment, monitoring, security, and advanced features, see:
- Configuration API Reference - Complete parameter documentation
- Guides - Production deployment patterns
Next Steps
With configuration mastered:
Learn Topologies
Design agent interaction patterns
Understand Concepts
Explore framework architecture
See Examples
Learn from real implementations
API Reference
Detailed API documentation
Configuration Complete!
You now understand MARSYS configuration! Explore Core Concepts to understand the framework architecture.