-
-
Notifications
You must be signed in to change notification settings - Fork 1
Config
Maestro will automatically generate a config file with reasonable default settings, but you can edit it to suit your preferences. The config file is stored in <projectRoot>/.maestro/config.json. A few of the most common tweaks you might want to make include:
- Model selection which LLM you want to use for each type of agent (including local models)
- Rate limits if you want to control LLM query speeds to keep under your key limits
- Agent count how many coders you want to spin up
Below is a comprehensive reference of all configuration options available in config.json.
| Field | Type | Default | Description |
|---|---|---|---|
schema_version |
string | "1.0" |
Config schema version. Do not modify manually. |
default_mode |
string | "standard" |
Default operating mode: "standard" (cloud APIs) or "airplane" (offline with local Gitea + Ollama). Can be overridden with -airplane CLI flag. |
Basic project metadata.
| Field | Type | Default | Description |
|---|---|---|---|
name |
string | "" |
Project name |
primary_platform |
string | "" |
Primary platform: go, python, node, docker, generic
|
Docker container configuration for running code.
| Field | Type | Default | Description |
|---|---|---|---|
name |
string | "maestro-bootstrap:latest" |
Container image name/tag |
dockerfile |
string | "" |
Path to Dockerfile if building custom image |
workspace_path |
string | "/workspace" |
Path where project is mounted inside container |
pinned_image_id |
string | "" |
Currently pinned Docker image ID (sha256:...) |
safe_image_id |
string | "" |
Safe fallback Docker image ID |
network |
string | "bridge" |
Docker network mode |
tmpfs_size |
string | "1g" |
Size of tmpfs mount for /tmp |
cpus |
string | "2" |
CPU limit for container |
memory |
string | "2g" |
Memory limit for container |
pids |
int | 1024 |
Process limit (--pids-limit) |
Commands for building, testing, and running the project.
| Field | Type | Default | Description |
|---|---|---|---|
build |
string | "make build" |
Build command |
test |
string | "make test" |
Test command |
lint |
string | "make lint" |
Lint command |
run |
string | "make run" |
Run command |
clean |
string | "" |
Clean command (optional) |
install |
string | "" |
Install command (optional) |
Settings for AI agents including model selection and concurrency.
| Field | Type | Default | Description |
|---|---|---|---|
max_coders |
int | 3 |
Maximum concurrent coder agents |
coder_model |
string | "claude-sonnet-4-5" |
Model for coder agents |
coder_mode |
string | "standard" |
Coder execution mode: "standard" or "claude-code"
|
architect_model |
string | "gemini-3-pro-preview" |
Model for architect agent |
pm_model |
string | "claude-opus-4-5" |
Model for PM agent |
state_timeout |
duration | "10m" |
Global timeout for state processing |
| Model Name | Provider | Context Window | Notes |
|---|---|---|---|
claude-sonnet-4-5 |
Anthropic | 200K | Recommended for coding |
claude-opus-4-5 |
Anthropic | 200K | Best for complex reasoning |
gpt-4o |
OpenAI | 128K | Fast, capable |
o3 |
OpenAI | 128K | Reasoning model |
o4-mini |
OpenAI | 128K | Fast reasoning |
gpt-5 |
OpenAI | 128K | Premium |
gemini-2.5-flash |
1M | Large context | |
gemini-3-pro-preview |
1M | Best for architecture |
The coder_mode setting controls how coder agents execute their work. There are two modes:
| Mode | Description |
|---|---|
standard |
Default mode. Coder agents use Maestro's built-in LLM integration with tool calls for file operations, shell commands, etc. Works with any supported model provider. |
claude-code |
Coder agents delegate to Claude Code (Anthropic's agentic coding tool) as a subprocess. Provides enhanced coding capabilities with Claude Code's specialized tooling. |
Enabling Claude Code Mode:
{
"agents": {
"coder_mode": "claude-code",
"coder_model": "claude-sonnet-4-5"
}
}Requirements for Claude Code Mode:
-
Anthropic model required: The
coder_modelmust be a Claude model (e.g.,claude-sonnet-4-5,claude-opus-4-5). Using a non-Anthropic model withclaude-codemode will fail validation. -
Claude Code CLI: The
claudeCLI must be installed and accessible in the system PATH. - ANTHROPIC_API_KEY: Must be set in environment or secrets file.
When to Use Claude Code Mode:
- Complex refactoring tasks that benefit from Claude Code's agentic capabilities
- Projects where you want Claude Code's specialized file editing and shell execution
- When you prefer Claude Code's approach to multi-file changes
When to Use Standard Mode:
- When using non-Anthropic models (GPT, Gemini, Ollama)
- When you want consistent behavior across different model providers
- For simpler tasks where Maestro's built-in tooling is sufficient
Models to use when running in airplane mode (offline).
| Field | Type | Default | Description |
|---|---|---|---|
coder_model |
string | "mistral-nemo:latest" |
Ollama model for coders |
architect_model |
string | "mistral-nemo:latest" |
Ollama model for architect |
pm_model |
string | "mistral-nemo:latest" |
Ollama model for PM |
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable metrics collection |
exporter |
string | "internal" |
Exporter type: "internal", "prometheus", "noop"
|
namespace |
string | "maestro" |
Metrics namespace |
prometheus_url |
string | "" |
Prometheus server URL |
| Field | Type | Default | Description |
|---|---|---|---|
failure_threshold |
int | 5 |
Failures before opening circuit |
success_threshold |
int | 3 |
Successes to close circuit |
timeout |
duration | "30s" |
Time before trying half-open |
| Field | Type | Default | Description |
|---|---|---|---|
max_attempts |
int | 3 |
Maximum retry attempts |
initial_delay |
duration | "100ms" |
Initial delay before first retry |
max_delay |
duration | "10s" |
Maximum delay between retries |
backoff_factor |
float | 2.0 |
Exponential backoff multiplier |
jitter |
bool | true |
Add random jitter |
Each provider (anthropic, openai, google, ollama) has:
| Field | Type | Default (Anthropic/OpenAI) | Default (Google) | Default (Ollama) | Description |
|---|---|---|---|---|---|
tokens_per_minute |
int | 1000000 |
1200000 |
1000000 |
Rate limit in TPM |
max_concurrency |
int | 5 |
5 |
2 |
Max concurrent requests |
| Field | Type | Default | Description |
|---|---|---|---|
repo_url |
string | "" |
Git repository URL (HTTPS format) |
target_branch |
string | "main" |
Target branch for pull requests |
mirror_dir |
string | ".mirrors" |
Directory for git mirrors |
branch_pattern |
string | "story-{STORY_ID}" |
Branch naming pattern |
git_user_name |
string | "Maestro {AGENT_ID}" |
Commit author name |
git_user_email |
string | "maestro-{AGENT_ID}@localhost" |
Commit author email |
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable web UI |
host |
string | "localhost" |
Host to bind to |
port |
int | 8080 |
Port to listen on |
ssl |
bool | false |
Enable SSL/TLS |
cert |
string | "" |
Path to SSL certificate |
key |
string | "" |
Path to SSL private key |
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable chat system |
max_new_messages |
int | 100 |
Max new messages per LLM call |
| Field | Type | Default | Description |
|---|---|---|---|
max_message_chars |
int | 4096 |
Maximum message size |
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable secret scanning |
timeout_ms |
int | 800 |
Scanner timeout in ms |
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable PM agent |
max_interview_turns |
int | 20 |
Max conversation turns |
default_expertise |
string | "BASIC" |
Default user expertise: NON_TECHNICAL, BASIC, EXPERT
|
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool |
null (auto-detect) |
Enable web search (auto-enabled when API keys are detected) |
| Field | Type | Default | Description |
|---|---|---|---|
container_port_override |
int | 0 |
Manual override for container port |
selected_container_port |
int | 0 |
User-selected or auto-detected port |
run_cmd_override |
string | "" |
Override build.run command for demo |
healthcheck_path |
string | "/health" |
HTTP path for readiness check |
healthcheck_timeout_seconds |
int | 60 |
Max wait time for app to become healthy |
| Field | Type | Default | Description |
|---|---|---|---|
rotation_count |
int | 4 |
Number of old log files to keep |
| Field | Type | Default | Description |
|---|---|---|---|
llm_messages |
bool | false |
Enable debug logging for LLM messages |
Settings for periodic housekeeping between specs.
| Field | Type | Default | Description |
|---|---|---|---|
enabled |
bool | true |
Enable maintenance mode |
after_specs |
int | 1 |
Number of specs before triggering maintenance |
| Field | Type | Default | Description |
|---|---|---|---|
branch_cleanup |
bool | true |
Clean up stale merged branches |
knowledge_sync |
bool | true |
Sync knowledge graph with codebase |
docs_verification |
bool | true |
Verify documentation accuracy |
todo_scan |
bool | true |
Scan for TODOs and deprecated code |
deferred_review |
bool | true |
Review deferred knowledge nodes |
test_coverage |
bool | true |
Improve test coverage |
| Field | Type | Default | Description |
|---|---|---|---|
protected_patterns |
[]string | ["main", "master", "develop", "release/*", "hotfix/*"] |
Branch patterns to never delete |
| Field | Type | Default | Description |
|---|---|---|---|
markers |
[]string | ["TODO", "FIXME", "HACK", "XXX", "deprecated", "DEPRECATED", "@deprecated"] |
Comment markers to scan for |
{
"schema_version": "1.0",
"project": {
"name": "my-project",
"primary_platform": "go"
},
"agents": {
"max_coders": 3,
"coder_model": "claude-sonnet-4-5",
"architect_model": "gemini-3-pro-preview",
"pm_model": "claude-opus-4-5",
"resilience": {
"rate_limit": {
"anthropic": {
"tokens_per_minute": 1000000,
"max_concurrency": 5
}
}
}
},
"git": {
"repo_url": "https://github.com/owner/repo.git",
"target_branch": "main"
},
"webui": {
"enabled": true,
"port": 8080
}
}