src.config.settings module#
Configuration management for Marcus.
This module provides the Settings class which handles loading, validation, and management of configuration settings from multiple sources including JSON files, environment variables, and default values.
- class src.config.settings.Settings[source]#
Bases:
objectConfiguration management system for Marcus.
Manages configuration loading from multiple sources with support for hierarchical settings, environment variable overrides, and validation. Provides specialized getters for different configuration categories.
- Parameters:
config_path (
Optional[str]) – Path to the configuration file. If None, uses MARCUS_CONFIG environment variable or defaults to ‘config/marcus_config.json’
Examples
>>> settings = Settings() >>> monitoring_interval = settings.get('monitoring_interval') >>> risk_config = settings.get_risk_thresholds() >>> settings.set('custom_setting', 'value') >>> settings.save()
Notes
Configuration loading priority (highest to lowest): 1. Environment variables 2. Configuration file 3. Default values
- get(key, default=None)[source]#
Get configuration value using dot notation key.
Supports nested key access using dot notation (e.g., ‘risk_thresholds.high_risk’).
- Parameters:
- Returns:
Configuration value or default if not found
- Return type:
Examples
>>> value = settings.get('monitoring_interval') >>> nested = settings.get('risk_thresholds.high_risk', 0.8) >>> missing = settings.get('nonexistent.key', 'fallback')
- set(key, value)[source]#
Set configuration value using dot notation key.
Creates nested dictionary structure as needed when using dot notation.
- Parameters:
- Return type:
Examples
>>> settings.set('monitoring_interval', 600) >>> settings.set('custom.nested.setting', 'value')
Notes
Setting values does not automatically save to file. Call save() to persist.
- save()[source]#
Save current configuration to file.
Writes the current configuration to the configured file path, creating directories as needed.
- Raises:
OSError – If file cannot be written or directory cannot be created
json.JSONEncodeError – If configuration contains non-serializable values
- Return type:
None
Examples
>>> settings.set('new_setting', 'value') >>> settings.save()
- Return type:
- get_team_config(team_name='default')[source]#
Get configuration for a specific team.
Retrieves team-specific configuration including skills, work patterns, and communication preferences. Falls back to default team config.
- Parameters:
team_name (
str) – Name of the team to get configuration for- Returns:
Team configuration containing: - skills: List of team skills - work_patterns: Work scheduling preferences - communication_preferences: Notification settings
- Return type:
Examples
>>> backend_config = settings.get_team_config("backend_team") >>> default_config = settings.get_team_config()
- get_risk_thresholds()[source]#
Get risk assessment thresholds for project monitoring.
Returns threshold values used for risk assessment calculations in project monitoring and alerting systems.
- Returns:
Risk thresholds containing: - high_risk: Threshold for high risk classification (0.0-1.0) - medium_risk: Threshold for medium risk classification (0.0-1.0) - timeline_buffer: Buffer percentage for timeline calculations
- Return type:
Examples
>>> thresholds = settings.get_risk_thresholds() >>> if project_risk > thresholds['high_risk']: ... send_alert()
- get_escalation_rules()[source]#
Get escalation rules for automated issue management.
Returns timing rules that determine when issues should be escalated to higher levels of management.
- Returns:
Escalation rules containing: - stuck_task_hours: Hours before escalating stuck tasks - blocker_escalation_hours: Hours before escalating blockers - critical_path_delay_hours: Hours before escalating critical delays
- Return type:
Examples
>>> rules = settings.get_escalation_rules() >>> if task_stuck_hours > rules['stuck_task_hours']: ... escalate_task(task)
- get_communication_rules()[source]#
Get communication timing rules for automated messaging.
Returns scheduling rules that determine when different types of automated communications should be sent.
- Returns:
Communication timing rules containing: - daily_plan_time: Time to send daily work plans (HH:MM format) - progress_check_time: Time for progress check messages - end_of_day_summary: Time to send daily summaries
- Return type:
Examples
>>> rules = settings.get_communication_rules() >>> daily_time = rules['daily_plan_time'] # "08:00" >>> schedule_daily_plans(daily_time)
- get_ai_settings()[source]#
Get AI model configuration settings.
Returns configuration for AI model integration including model selection, parameters, and retry behavior.
- Returns:
AI settings containing: - model: Model identifier string - temperature: Sampling temperature (0.0-1.0) - max_tokens: Maximum response tokens - retry_attempts: Number of retry attempts - retry_delay: Delay between retries in seconds
- Return type:
Examples
>>> ai_config = settings.get_ai_settings() >>> client = AIClient( ... model=ai_config['model'], ... temperature=ai_config['temperature'] ... )
- is_subtasks_enabled()[source]#
Check if subtask functionality is enabled.
Returns whether automatic task decomposition and subtask assignment features are enabled.
- Returns:
True if subtasks are enabled, False otherwise
- Return type:
Examples
>>> if settings.is_subtasks_enabled(): ... decompose_task(task) >>> # Can also be set via environment: >>> # export MARCUS_ENABLE_SUBTASKS=false
Notes
Can be controlled via: - Configuration file: features.enable_subtasks - Environment variable: MARCUS_ENABLE_SUBTASKS=true/false
- validate()[source]#
Validate current configuration for consistency and completeness.
Performs validation checks on the loaded configuration to ensure required settings are present and values are within acceptable ranges. Prints warnings for potential issues.
- Returns:
True if configuration is valid, False if critical issues found
- Return type:
Notes
Validation checks include: - Presence of required API keys - Reasonable monitoring intervals - At least one communication channel enabled
Warnings are printed to stdout for non-critical issues.
Examples
>>> if settings.validate(): ... start_marcus() ... else: ... fix_configuration()