Repository navigation
reference configuration
Active contributors: Zachary Bensalem
Fleet RLM Lite resolves one process-wide FleetSettings object at startup from a schema 4 TOML file, .env, and the process environment. The object validates types and cross-field constraints, records which source supplied each field, and reports a non-secret projection through /config and the CLI. Settings are frozen once the process starts; file changes require a restart.
| Path | Responsibility |
|---|---|
src/fleet_rlm/config.py |
FleetSettings, TOML loading, source precedence, validators, model construction, MLflow target resolution, and get_settings. |
config/fleet.toml |
Checked-in non-secret defaults, schema 4. |
src/fleet_rlm/api/routes/sessions.py |
Serves the session-scoped /config payload. |
src/fleet_rlm/tui/commands.py |
Formats /config and /settings output in the terminal client. |
src/fleet_rlm/session.py |
Applies persisted per-session mode and model overrides. |
docs/reference/configuration.md |
Maintained user-facing configuration reference. |
Sources are ordered from lowest to highest priority:
- Built-in field defaults in
FleetSettings. - The TOML file selected by
FLEET_CONFIG, defaulting toconfig/fleet.tomlrelative to the working directory. -
.envin the working directory. - The process environment.
- Explicit overrides passed to
FleetSettings(**values)or applied by the CLI withwith_explicit_overrides.
settings_customise_sources implements this order explicitly and deliberately excludes file-secret sources. Credentials therefore come only from explicit input, the environment, or .env; no TOML table can set them.
The loader does not search parent directories, interpolate environment variables, or watch for changes. A missing default file is allowed so the process can run on environment values alone. A file named by FLEET_CONFIG must exist and parse as TOML, otherwise startup fails. Every file must contain [config] with the integer schema_version = 4. Schema 3 files with a flat [mlflow] table are rejected with a migration message.
The mapping from TOML table and key to setting field is a single explicit table in src/fleet_rlm/config.py (_TOML_FIELDS). Unknown tables, unknown keys, wrong value types, and environment-only keys placed in TOML all raise ValueError and prevent startup. Values are validated strictly against the field annotation before being merged.
The checked-in config/fleet.toml is a provisional baseline, not a tuned configuration. It declares these tables:
[config] schema_version = 4
[runtime] execution, timeouts, budgets, child and session limits
[llm.root] root model and generation options
[llm.sub] sub-agent model and generation options
[llm.reflection] GEPA reflection model and generation options
[gateway] optional host / base_url
[decision] TypeSafe route model
[daytona] snapshot, idle stop, shared notes, org and Volume IDs
[storage] upload bound, local directories, database schema, Lakebase endpoint
[mlflow.local] managed local tracking profile
[mlflow.databricks] Databricks tracking profile
[evaluation] judge model
[server] bind address, port, non-loopback opt-in
[llm] and [mlflow] are parent tables whose children are flattened by the loader. [mlflow] itself must contain only local and databricks child tables, never destination keys directly.
| TOML key | Field | Default (code / TOML) | Purpose |
|---|---|---|---|
runtime.execution_mode |
execution_mode |
hybrid / hybrid
|
One of rlm, flex, hybrid. Strict modes bypass hybrid triage. |
runtime.turn_timeout_seconds |
turn_timeout_seconds |
900 / 900
|
Turn deadline (10 to 3600 seconds) enforced by the remote-stop watchdog. |
runtime.max_llm_calls_per_turn |
max_llm_calls_per_turn |
150 / 150
|
Shared model-call budget per Turn, including routing and Skill selection. |
runtime.max_agent_depth |
max_agent_depth |
3 / 3
|
Maximum recursive child depth (0 to 8); the root counts as zero. |
runtime.max_child_sandboxes |
max_child_sandboxes |
8 / 8
|
Total child sandbox allocations per Turn (0 to 64). |
runtime.max_active_children |
max_active_children |
4 / 4
|
Concurrent child capacity (1 to 16). Exhaustion fails immediately. |
runtime.max_active_sessions |
max_active_sessions |
64 / 64
|
Session runtime registry limit (1 to 1024). |
runtime.linked_children |
linked_children |
true / true
|
Link child sandboxes to the session root while keeping Volume subpaths separate. |
Each role has the same five options. model is required and must use the native gateway route openai/<service-id>. max_tokens and temperature are optional; when omitted the provider controls them. num_retries is 0 to 10. cache is a boolean and is disabled in the checked-in baseline.
| TOML key | Field | Default (code / TOML) | Notes |
|---|---|---|---|
llm.root.model |
fleet_root_model |
openai/system.ai.deepseek-v4-1-flash / same |
Main RLM and serving model. |
llm.root.max_tokens |
fleet_root_max_tokens |
None / 16384
|
Bounds runaway reasoning; a capped response missing required fields is re-asked once. |
llm.root.temperature |
fleet_root_temperature |
None / omitted |
Finite value from 0 to 2. |
llm.root.num_retries |
fleet_root_num_retries |
3 / 3
|
Retry count. |
llm.root.cache |
fleet_root_cache |
false / false
|
DSPy response cache for this role. |
llm.sub.model |
fleet_sub_model |
openai/system.ai.claude-sonnet-5-5 / openai/system.ai.deepseek-v4-1-flash
|
Model used by delegated child agents. |
llm.sub.max_tokens |
fleet_sub_max_tokens |
None / omitted |
Optional cap. |
llm.sub.temperature |
fleet_sub_temperature |
None / omitted |
Optional sampling temperature. |
llm.sub.num_retries |
fleet_sub_num_retries |
3 / 3
|
Retry count. |
llm.sub.cache |
fleet_sub_cache |
false / false
|
Cache flag. |
llm.reflection.model |
fleet_reflection_model |
openai/system.ai.claude-haiku-5-5 / same |
GEPA reflection and Flex module rewriting. |
llm.reflection.max_tokens |
fleet_reflection_max_tokens |
None / 32000
|
Large output budget for rewritten modules. |
llm.reflection.temperature |
fleet_reflection_temperature |
None / 1.0
|
Optional sampling temperature. |
llm.reflection.num_retries |
fleet_reflection_num_retries |
3 / 3
|
Also used by the DSPy judge twin. |
llm.reflection.cache |
fleet_reflection_cache |
false / false
|
Cache flag. |
All runtime roles are built with DSPy's native lm15 engine. A model string without the openai/ prefix is rejected rather than routed to another backend.
| TOML key | Field | Default | Purpose |
|---|---|---|---|
gateway.host |
databricks_host |
empty | Workspace host; derives https://<host>/ai-gateway/mlflow/v1 when FLEET_LLM_BASE_URL is empty. |
gateway.base_url |
fleet_llm_base_url |
empty | Explicit HTTPS Unity Gateway base URL. HTTP, query strings, fragments, and embedded credentials are rejected. |
decision.model |
typesafe_model |
jev-1.14.0 |
TypeSafe route-selection model. |
The gateway credential is DATABRICKS_TOKEN, read only from the environment or .env. It is a SecretStr and is excluded from configuration reports. TypeSafe uses FLEET_TYPESAFE_API_KEY or TYPESAFE_API_KEY; when absent, the TypeSafe predictor is not constructed.
| TOML key | Field | Default | Purpose |
|---|---|---|---|
daytona.snapshot |
fleet_daytona_snapshot |
fleet-rlm-base |
Sandbox snapshot name; must be non-empty. |
daytona.auto_stop_minutes |
daytona_auto_stop_minutes |
30 |
Idle-stop period from 1 to 1440 minutes. |
daytona.shared_notes_subpath |
fleet_shared_notes_subpath |
shared/learned-notes |
Volume subpath mounted at /learned on root sandboxes. Empty disables the mount. Must be relative with no .., //, or trailing slash. |
daytona.org_id |
fleet_daytona_org_id |
empty | Daytona organization ID; not a credential. |
daytona.volume_id |
fleet_daytona_volume_id |
empty | Daytona Volume ID; not a credential. A volume name is not a Volume ID. |
FLEET_DAYTONA_API_KEY is a credential and therefore environment-only.
| TOML key | Field | Default (code / TOML) | Purpose |
|---|---|---|---|
storage.max_upload_bytes |
max_upload_bytes |
25000000 / same |
Attachment upload bound; the validator caps it at 25 MB. |
storage.compiled_program_dir |
compiled_program_dir |
.fleet/compiled / same |
Local compiled program artifacts. |
storage.local_skills_dir |
local_skills_dir |
.fleet/skills / same |
User Skill directory used by pull and push. |
storage.lakebase_endpoint |
fleet_lakebase_endpoint |
empty / empty | Lakebase endpoint resource path enabling per-connection Databricks OAuth. |
storage.database_schema |
fleet_database_schema |
public / fleet_rlm_lite
|
Lowercase PostgreSQL identifier containing Fleet Lite tables. |
fleet_database_url and fleet_database_migration_url are credentials and have no TOML key. When a migration DSN is set it must target the same host, port, and database as the runtime DSN. When a Lakebase endpoint is set, both DSNs must require TLS, include host and user, omit embedded passwords, and target the same host and database for migrations.
The local profile is the default and is managed by fleet cli.
| TOML key | Field | Default | Purpose |
|---|---|---|---|
mlflow.local.port |
mlflow_local_port |
5001 |
Loopback tracking port; the tracking URI is http://127.0.0.1:<port>. |
mlflow.local.data_dir |
mlflow_local_data_dir |
.fleet/mlflow |
SQLite metadata and artifact directory. |
mlflow.local.experiment_name |
mlflow_local_experiment_name |
fleet-rlm-dev |
Runtime traces. |
mlflow.local.eval_experiment_name |
mlflow_local_eval_experiment_name |
fleet-rlm-eval |
Evaluation runs. |
mlflow.local.optimization_experiment_name |
mlflow_local_optimization_experiment_name |
fleet-rlm-gepa |
GEPA runs and candidate artifacts. |
The Databricks profile is selected per command; it is never chosen by an environment default.
| TOML key | Field | Default | Purpose |
|---|---|---|---|
mlflow.databricks.tracking_uri |
mlflow_databricks_tracking_uri |
databricks |
databricks or databricks://<profile>. |
mlflow.databricks.experiment_name |
mlflow_databricks_experiment_name |
/Shared/fleet-rlm-runtime |
Runtime experiment; must be an absolute workspace path. |
mlflow.databricks.eval_experiment_name |
mlflow_databricks_eval_experiment_name |
/Shared/fleet-rlm-eval |
Evaluation experiment. |
mlflow.databricks.optimization_experiment_name |
mlflow_databricks_optimization_experiment_name |
/Shared/fleet-rlm-gepa |
GEPA experiment. |
mlflow.databricks.trace_catalog |
mlflow_databricks_trace_catalog |
uscentral |
Unity Catalog catalog for traces. |
mlflow.databricks.trace_schema |
mlflow_databricks_trace_schema |
fleet_observability |
Schema for runtime and evaluation traces. |
mlflow.databricks.trace_table_prefix |
mlflow_databricks_trace_table_prefix |
fleet_rlm_runtime |
Runtime trace table prefix. |
mlflow.databricks.tracing_sql_warehouse_id |
mlflow_databricks_tracing_sql_warehouse_id |
4d07bd43a3ddfff2 |
SQL warehouse used for trace export. |
mlflow.databricks.optimization_trace_schema |
mlflow_databricks_optimization_trace_schema |
fleet_gepa |
Schema for optimization traces. |
mlflow.databricks.optimization_trace_table_prefix |
mlflow_databricks_optimization_trace_table_prefix |
fleet_rlm_gepa |
Optimization trace prefix. |
mlflow.databricks.eval_trace_table_prefix |
mlflow_databricks_eval_trace_table_prefix |
fleet_rlm_eval |
Evaluation trace prefix. |
In Databricks mode a model validator requires a databricks tracking URI, non-empty catalog, schemas, prefixes, and warehouse ID, and absolute paths for all three experiments. Local and Databricks profiles are resolved independently: mlflow_target() reads only the selected profile and never borrows a value from the other one.
| TOML key | Field | Default | Purpose |
|---|---|---|---|
evaluation.judge_model |
fleet_judge_model |
openai:/system.ai.deepseek-v4-1-flash |
MLflow judge URI of the form <provider>:/<model>. An openai:/ judge routes through the gateway with DATABRICKS_TOKEN. |
server.host |
host |
127.0.0.1 |
Bind address. |
server.port |
port |
8000 |
Bind port. |
server.allow_non_loopback_bind |
allow_non_loopback_bind |
false |
Must be true to bind a non-loopback address. It does not authenticate callers. |
Every FLEET_* name read by src/fleet_rlm/config.py is listed below. Names are matched case-insensitively by pydantic-settings, so uppercase is the conventional form. The internal mlflow_mode field has the validation alias _fleet_selected_mlflow; it is not a documented FLEET_* environment setting and is selected by the CLI.
| Variable | Purpose |
|---|---|
FLEET_CONFIG |
Path to the TOML file. Defaults to config/fleet.toml. |
FLEET_DATABASE_URL |
PostgreSQL runtime DSN. Credential; environment or .env only. |
FLEET_DATABASE_MIGRATION_URL |
Optional DDL-role DSN for migrations. Credential; must target the runtime database. |
FLEET_DATABASE_SCHEMA |
Lowercase PostgreSQL schema for Fleet Lite tables. |
FLEET_LAKEBASE_ENDPOINT |
Lakebase endpoint resource path enabling Databricks OAuth credentials. |
FLEET_DAYTONA_API_KEY |
Daytona API credential. |
FLEET_DAYTONA_ORG_ID |
Daytona organization ID. |
FLEET_DAYTONA_VOLUME_ID |
Daytona Volume ID. |
FLEET_DAYTONA_SNAPSHOT |
Sandbox snapshot name. |
FLEET_SHARED_NOTES_SUBPATH |
Relative Volume subpath mounted at /learned; empty disables it. |
FLEET_DAYTONA_AUTO_STOP_MINUTES |
Idle-stop period in minutes. DAYTONA_AUTO_STOP_MINUTES is also accepted. |
FLEET_ROOT_MODEL |
Root model route. |
FLEET_ROOT_MAX_TOKENS |
Root output cap (positive integer). |
FLEET_ROOT_TEMPERATURE |
Root sampling temperature (0 to 2). |
FLEET_ROOT_NUM_RETRIES |
Root retry count (0 to 10). |
FLEET_ROOT_CACHE |
Root DSPy cache flag. |
FLEET_SUB_MODEL |
Sub-agent model route. |
FLEET_SUB_MAX_TOKENS |
Sub-agent output cap. |
FLEET_SUB_TEMPERATURE |
Sub-agent temperature. |
FLEET_SUB_NUM_RETRIES |
Sub-agent retry count. |
FLEET_SUB_CACHE |
Sub-agent cache flag. |
FLEET_REFLECTION_MODEL |
Reflection model route. |
FLEET_REFLECTION_MAX_TOKENS |
Reflection output cap. |
FLEET_REFLECTION_TEMPERATURE |
Reflection temperature. |
FLEET_REFLECTION_NUM_RETRIES |
Reflection retry count. |
FLEET_REFLECTION_CACHE |
Reflection cache flag. |
FLEET_JUDGE_MODEL |
MLflow judge URI. |
FLEET_LLM_BASE_URL |
HTTPS Unity Gateway base URL override. |
FLEET_TYPESAFE_MODEL |
TypeSafe route-selection model. |
FLEET_TYPESAFE_API_KEY |
TypeSafe credential. TYPESAFE_API_KEY is also accepted. |
FLEET_EXECUTION_MODE |
rlm, flex, or hybrid. |
FLEET_TURN_TIMEOUT_SECONDS |
Turn deadline. |
FLEET_MAX_LLM_CALLS_PER_TURN |
Shared model-call budget. MAX_LLM_CALLS_PER_TURN is also accepted. |
FLEET_MAX_AGENT_DEPTH |
Maximum child recursion depth. |
FLEET_MAX_CHILD_SANDBOXES |
Total child sandbox allocations. |
FLEET_MAX_ACTIVE_CHILDREN |
Concurrent child capacity. |
FLEET_MAX_ACTIVE_SESSIONS |
Session registry limit. MAX_ACTIVE_SESSIONS is also accepted. |
FLEET_LINKED_CHILDREN |
Link child sandboxes to the session root. |
FLEET_MAX_UPLOAD_BYTES |
Attachment upload bound. MAX_UPLOAD_BYTES is also accepted. |
FLEET_COMPILED_PROGRAM_DIR |
Compiled program directory. COMPILED_PROGRAM_DIR is also accepted. |
FLEET_LOCAL_SKILLS_DIR |
Local user Skill directory. LOCAL_SKILLS_DIR is also accepted. |
FLEET_MLFLOW_LOCAL_PORT |
Loopback MLflow port. |
FLEET_MLFLOW_LOCAL_DATA_DIR |
Local MLflow data directory. |
FLEET_MLFLOW_LOCAL_EXPERIMENT_NAME |
Local runtime experiment. |
FLEET_MLFLOW_LOCAL_EVAL_EXPERIMENT_NAME |
Local evaluation experiment. |
FLEET_MLFLOW_LOCAL_OPTIMIZATION_EXPERIMENT_NAME |
Local GEPA experiment. |
FLEET_MLFLOW_DATABRICKS_TRACKING_URI |
Databricks tracking URI. |
FLEET_MLFLOW_DATABRICKS_EXPERIMENT_NAME |
Databricks runtime experiment. |
FLEET_MLFLOW_DATABRICKS_EVAL_EXPERIMENT_NAME |
Databricks evaluation experiment. |
FLEET_MLFLOW_DATABRICKS_OPTIMIZATION_EXPERIMENT_NAME |
Databricks GEPA experiment. |
FLEET_MLFLOW_DATABRICKS_TRACE_CATALOG |
Unity Catalog trace catalog. |
FLEET_MLFLOW_DATABRICKS_TRACE_SCHEMA |
Runtime and evaluation trace schema. |
FLEET_MLFLOW_DATABRICKS_TRACE_TABLE_PREFIX |
Runtime trace table prefix. |
FLEET_MLFLOW_DATABRICKS_TRACING_SQL_WAREHOUSE_ID |
SQL warehouse for trace export. |
FLEET_MLFLOW_DATABRICKS_OPTIMIZATION_TRACE_SCHEMA |
Optimization trace schema. |
FLEET_MLFLOW_DATABRICKS_OPTIMIZATION_TRACE_TABLE_PREFIX |
Optimization trace table prefix. |
FLEET_MLFLOW_DATABRICKS_EVAL_TRACE_TABLE_PREFIX |
Evaluation trace table prefix. |
FLEET_HOST |
Server bind address. HOST is also accepted. |
FLEET_PORT |
Server port. PORT is also accepted. |
FLEET_ALLOW_NON_LOOPBACK_BIND |
Permit a non-loopback bind. ALLOW_NON_LOOPBACK_BIND is also accepted. |
Credentials that are read but are not FLEET_*-prefixed are DATABRICKS_HOST, DATABRICKS_TOKEN, and TYPESAFE_API_KEY. The first two are the gateway and Databricks SDK identity; DATABRICKS_TOKEN is stored as a SecretStr.
Several unprefixed aliases (HOST, PORT, MAX_UPLOAD_BYTES, MAX_ACTIVE_SESSIONS, MAX_LLM_CALLS_PER_TURN, COMPILED_PROGRAM_DIR, LOCAL_SKILLS_DIR, DAYTONA_AUTO_STOP_MINUTES, ALLOW_NON_LOOPBACK_BIND) exist for deployment compatibility. Prefer the FLEET_ forms.
The loader rejects these names when they appear in the process environment (for FLEET_*) or in .env (for all of them):
FLEET_MLFLOW_MODE
MLFLOW_TRACKING_URI
MLFLOW_EXPERIMENT_NAME
FLEET_MLFLOW_TRACKING_URI
FLEET_MLFLOW_EXPERIMENT_NAME
FLEET_MLFLOW_EVAL_EXPERIMENT_NAME
FLEET_MLFLOW_OPTIMIZATION_EXPERIMENT_NAME
FLEET_MLFLOW_TRACE_CATALOG
FLEET_MLFLOW_TRACE_SCHEMA
FLEET_MLFLOW_TRACE_TABLE_PREFIX
FLEET_MLFLOW_TRACING_SQL_WAREHOUSE_ID
FLEET_MLFLOW_OPTIMIZATION_TRACE_SCHEMA
FLEET_MLFLOW_OPTIMIZATION_TRACE_TABLE_PREFIX
FLEET_MLFLOW_EVAL_TRACE_TABLE_PREFIX
The error tells the operator to migrate to FLEET_MLFLOW_LOCAL_* or FLEET_MLFLOW_DATABRICKS_* and to select the backend with --mlflow local|databricks. Conflicting selectors, such as fleet cli databricks --mlflow local, are argument errors.
FleetSettings.configuration() builds the reporting payload:
| Key | Content |
|---|---|
schema_version |
Always 4. |
digest |
SHA-256 over the sorted, compact JSON encoding of the non-secret values. |
values |
Every non-secret field in JSON mode. Secret fields are excluded entirely. |
sources |
One of default, toml, dotenv, environment, explicit, or session per field. |
mlflow_target |
Mode, tracking URI, and the three experiment names for the selected backend. |
file_changes_require_restart |
Always true. |
The terminal /config command calls GET /sessions/{session_id}/config, which returns the session's mode, models, dataset context, limits, and this configuration object. /config json prints the raw payload. /settings is an alias. The panel shows the first 16 characters of the digest and lists up to eight fields whose source is not default.
The digest covers both MLflow profiles even though only one is active, because all profile fields participate in values. GEPA approval evidence records configuration identity; changing any included value invalidates evidence created under a different digest.
Mode and root/sub model selections made in the terminal are persisted per Session. They are applied at Turn boundaries and reported with source session in /config. They do not rewrite the TOML file or process settings. Operator-owned values such as judge model, credentials, deployment policy, and resource ceilings are not session-editable.
with_explicit_overrides validates a small set of CLI overrides (host, port, mlflow_local_port, and the selected runtime experiment name) against the current settings, preserves provenance for unchanged fields, and rejects unknown field names.
Startup fails before serving if any of these checks fail:
- Required strings (
fleet_database_url,fleet_daytona_snapshot, and the three model routes) are non-empty after stripping. - Model routes begin with
openai/and have a non-empty service identifier. -
FLEET_LLM_BASE_URLis empty or an HTTPS URL with a network location. - Public URLs contain no username, password, query string, or fragment.
- The shared notes subpath is relative and free of
..,//, and a trailing slash. - The database schema matches
[a-z_][a-z0-9_]{0,62}. - The judge model is a
<provider>:/<model>URI. - A migration DSN points at the runtime database.
- A Lakebase endpoint matches
projects/<id>/branches/<id>/endpoints/<id>and both DSNs meet the TLS and credential rules. - Databricks mode has a
databricksURI, all trace storage settings, and absolute experiment paths.
get_settings(mlflow_mode) caches one FleetSettings per process (lru_cache(maxsize=1)), so a backend choice made at launch applies for the lifetime of the process.
-
CLI reference for command-line overrides and
--mlflowselection. - Deployment for environment and secret placement.
- Security for credential handling and bind restrictions.
- Getting started for a first local run.
- Evaluation and metrics for how configuration identity gates approval.