Skip to content

Configuration Concepts

File format

YAML. Loaded via src/core/config/loader.py:load_config().

Environment variable substitution

# Required variable — startup fails if not set:
secret: ${MY_SECRET}

# With default — uses fallback if not set:
host: ${DB_HOST:-localhost}

Limitation: default values cannot contain a literal } character. The substitution pattern uses a non-greedy match, so ${VAR:-a}b} resolves to default a followed by literal text b}.

.env file discovery

If --env-file is not passed, the engine looks for .env in the same directory as the config file. Variables already in the environment take precedence.

Top-level structure

logging:       # Optional — log level and format
features:      # Optional — periodic refresh, parallelism
api:           # Optional — HTTP server settings
tenants:       # Required — one entry per managed tenant
  <name>:
    ecosystem: ...
    tenant_id: ...
    storage: ...
    plugin_settings: ...

Tenant isolation

Each tenant must use a separate storage.connection_string. Sharing databases between tenants is rejected at startup.

Config validation

All config models use Pydantic v2. Invalid config raises ValueError with a field path and human-readable message before any network calls are made.