Skip to content

Settings

AppSettings is the runtime configuration the CLI and the platform read. It loads from three sources, highest priority first: environment variables, an interloper.yaml in the working directory, field defaults. Every section has its own environment prefix.

from interloper.settings import AppSettings

settings = AppSettings.get()          # the active settings, or freshly loaded ones
settings.runner.type

AppSettings.activate(settings) pins an instance for the current process (the CLI does this); clear_active() releases it.

Sections the framework uses

runner

Prefix INTERLOPER_RUNNER_.

Field Default Meaning
type "async" Registry key of the runner: async, serial, multi_process, or one registered by another package.
config {} Keyword arguments for the runner class.

otel

Prefix INTERLOPER_OTEL_. See Telemetry.

Field Default
enabled false
endpoint ""
protocol "grpc"
headers ""
service_name "" (reported as interloper)
traces true
metrics true
sample_ratio 1.0
metric_export_interval 60

catalog

INTERLOPER_CATALOG, a list of import paths. Empty enables every installed component. See Catalog.

secrets

Prefix INTERLOPER_.

Field Default Meaning
encryption_key "" Key for encrypting stored resource configuration. Required by the platform to persist resources; unused by the core alone.

Sections used by platform packages

These sections live in the core because AppSettings does, but the core does not read them. They configure interloper-db, interloper-api, interloper-scheduler, interloper-agent and interloper-mcp.

Section Prefix Fields
postgres INTERLOPER_POSTGRES_ host, port, user, password, database; dsn property
auth INTERLOPER_AUTH_ google_client_id, google_client_secret, google_redirect_uri, cookie_secure, session_expiry_days, super_admin_emails, allowed_domains
server INTERLOPER_SERVER_ enabled, host, port
cron INTERLOPER_CRON_ enabled, reconcile_interval, max_execution_delay, batch_size
renewal INTERLOPER_RENEWAL_ enabled, reconcile_interval, batch_size
worker INTERLOPER_WORKER_ enabled, poll_interval
reaper INTERLOPER_REAPER_ enabled, timeout, poll_interval
launcher INTERLOPER_LAUNCHER_ type, config
smtp INTERLOPER_SMTP_ host, port, user, password, from_addr
agent INTERLOPER_AGENT_ enabled, model
mcp INTERLOPER_MCP_ host, port, external_url, token, org_id
quota INTERLOPER_QUOTA_ max_sources, max_assets_per_source, max_successful_runs_per_month, max_backfill_partitions

YAML example

# interloper.yaml
runner:
  type: async
  config:
    max_workers: 8

otel:
  enabled: true
  endpoint: http://localhost:4317

catalog:
  - my_package.sources.Shop
  - my_package.sources.Finance

Note that a YAML block wins over environment variables for that whole submodel only when the block is absent: pydantic-settings merges by section, so setting runner: in YAML and INTERLOPER_RUNNER_TYPE in the environment resolves in favour of the environment.

Other environment variables

Variable Read by Meaning
INTERLOPER_EVENTS_TO_STDERR interloper run, telemetry setup true marks a child container: events are forwarded as @EVENT: lines and the metrics handler is not installed.
INTERLOPER_<PROVIDER>_CLIENT_ID, _CLIENT_SECRET, _REDIRECT_URI OAuth connections and providers In-house OAuth app credentials per provider.
TRACEPARENT, TRACESTATE telemetry propagation Parent trace context for a spawned process.
OTEL_EXPORTER_OTLP_* OpenTelemetry SDK Fallbacks for exporter settings left empty in otel.