Validating Configurations#
MassGen includes a built-in configuration validator that helps you catch errors before running your agents. The validator checks for:
Schema correctness: Required fields, valid types, and correct structure
Backend compatibility: Ensures requested features are supported by the backend
Best practices: Warns about potential issues or suboptimal configurations
Validation Methods#
Standalone Validation Command#
Validate a configuration file without running it:
# Basic validation
massgen --validate config.yaml
# Strict mode (treat warnings as errors)
massgen --validate config.yaml --strict
# JSON output for scripts/CI
massgen --validate config.yaml --json
The validator will exit with code 0 if the config is valid, or 1 if errors are found (or warnings in strict mode).
Automatic Validation#
By default, MassGen automatically validates configurations when you run commands:
# Validation happens automatically
massgen --config config.yaml "What is machine learning?"
Error behavior: If errors are found, MassGen will display them and exit before running agents.
Warning behavior: Warnings are displayed but don’t block execution (unless --strict-validation is used).
Disabling validation: Use --skip-validation to bypass validation:
massgen --config config.yaml --skip-validation "Your question"
Validation Flags#
Flag |
Description |
|---|---|
|
Validate a config file without running it |
|
Treat warnings as errors (use with |
|
Output validation results in JSON format |
|
Skip automatic validation when loading configs |
|
Treat warnings as errors during automatic validation |
What Gets Validated#
Required Fields#
The validator ensures all required fields are present:
# ✅ Valid - has all required fields
agents:
- id: "agent-1" # Required
backend: # Required
type: "openai" # Required
model: "gpt-4o" # Required
# ❌ Invalid - missing required fields
agents:
- backend:
type: "openai"
# Missing: id, model
Field Types#
All fields must have the correct type:
# ❌ Invalid types
agents:
- id: 123 # Should be string
backend:
type: "openai"
model: "gpt-4o"
enable_web_search: "yes" # Should be boolean (true/false)
Backend Capabilities#
The validator checks that backends support requested features:
# ❌ Invalid - lmstudio doesn't support web_search
agents:
- id: "agent-1"
backend:
type: "lmstudio"
model: "custom"
enable_web_search: true # Error: not supported
# ✅ Valid - openai supports web_search
agents:
- id: "agent-1"
backend:
type: "openai"
model: "gpt-4o"
enable_web_search: true
Enum Values#
Fields with limited valid values are validated:
# ❌ Invalid display_type
ui:
display_type: "fancy" # Must be: rich_terminal, simple
# ❌ Invalid permission_mode
agents:
- id: "agent-1"
backend:
type: "claude_code"
model: "claude-sonnet-4-5-20250929"
permission_mode: "auto" # Must be: approve, reject, prompt
Duplicate Agent IDs#
Each agent must have a unique ID:
# ❌ Invalid - duplicate IDs
agents:
- id: "agent-1"
backend: {...}
- id: "agent-1" # Error: duplicate ID
backend: {...}
V1 Config Detection#
The validator rejects legacy V1 configs with a helpful migration message:
# ❌ V1 config (no longer supported)
models: ["gpt-4o", "claude-3-opus"]
num_agents: 2
# Error: V1 config format detected.
# Suggestion: Migrate to V2 config format.
Warnings#
The validator generates warnings for potential issues that don’t prevent execution:
Multi-Agent Without Orchestrator#
# ⚠️ Warning: Consider adding orchestrator config
agents:
- id: "agent-1"
backend: {...}
- id: "agent-2"
backend: {...}
# Missing: orchestrator section
Conflicting Tool Filters#
# ⚠️ Warning: Using both filters can be confusing
agents:
- id: "agent-1"
backend:
type: "claude_code"
model: "claude-sonnet-4-5-20250929"
allowed_tools: ["Read", "Write"]
exclude_tools: ["Bash"] # Prefer one approach
Programmatic Usage#
You can use the validator in Python code:
from massgen.config_validator import ConfigValidator
# Validate a config file
validator = ConfigValidator()
result = validator.validate_config_file("config.yaml")
if result.has_errors():
print(result.format_errors())
exit(1)
if result.has_warnings():
print(result.format_warnings())
# Validate a config dict
config = {
"agent": {
"id": "test",
"backend": {"type": "openai", "model": "gpt-4o"}
}
}
result = validator.validate_config(config)
# Get results as dict (for JSON serialization)
result_dict = result.to_dict()
# {
# "valid": True,
# "error_count": 0,
# "warning_count": 0,
# "errors": [],
# "warnings": []
# }
CI/CD Integration#
Use the validator in CI pipelines to catch config errors:
#!/bin/bash
# validate_configs.sh
EXIT_CODE=0
for config in configs/*.yaml; do
echo "Validating $config..."
if ! massgen --validate "$config" --strict --json > "${config}.validation.json"; then
echo "❌ Validation failed: $config"
EXIT_CODE=1
fi
done
exit $EXIT_CODE
GitHub Actions Example:
name: Validate Configs
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install MassGen
run: pip install massgen
- name: Validate all configs
run: |
for config in configs/*.yaml; do
massgen --validate "$config" --strict
done
Best Practices#
Validate before committing: Run
massgen --validateon config files before committing them to version control.Use strict mode in CI: Set
--strictin CI/CD to catch warnings early.Check JSON output: Parse
--jsonoutput in scripts for programmatic error handling.Don’t skip validation: Avoid
--skip-validationunless debugging validator issues.Fix warnings: While non-blocking, warnings often indicate configuration issues worth addressing.
Error Messages#
The validator provides clear error messages with suggestions:
🔴 Configuration Errors Found:
❌ [agents[0].backend.type] Unknown backend type: 'gpt'
💡 Suggestion: Use one of: openai, claude, gemini, grok, ...
❌ [agents[0]] Agent missing required field 'id'
💡 Suggestion: Add 'id: "agent-name"'
Each error shows:
Location: Which part of the config has the error (e.g.,
agents[0].backend.type)Message: What’s wrong
Suggestion: How to fix it
Common Errors and Fixes#
Error |
Fix |
|---|---|
|
Use a valid backend: openai, claude, gemini, etc. |
|
Add |
|
Add |
|
Remove |
|
Ensure each agent has a unique ID |
|
Use: approve, reject, or prompt |
|
Migrate to V2 format (see YAML Configuration Reference) |
See Also#
YAML Configuration Reference - Complete configuration schema reference
Configuration Examples - Example configurations
Configuration - Getting started with configs