Skip to main content
Fleet starts from the required, committed config/fleet.toml policy file. The active profile is selected by [config] default_profile inside that file. Policy is strict, resolved once at process startup, and takes effect only after restart. The TOML file contains no secret values. It declares environment-variable names for Root/Sub API keys, the database URL, the Daytona API key, and managed MLflow destinations. Only those named values are read from the process environment or repository .env (process values win). Other FLEET_* variables — including model, RLM, endpoint, runtime, and MLflow settings — are ignored unless the selected profile explicitly names them. FLEET_CONFIG_PROFILE is not consulted. Unknown TOML keys, absent profiles, missing TOML, and invalid variable references fail startup.

Runtime prerequisites

The provider environment contract is policy-derived. The shipped interactive profiles (daytona, daytona-recursive) use OpenCode Go. Managed and benchmark profiles use the Databricks AI Gateway. Every provider-backed profile also requires FLEET_DAYTONA_API_KEY. Profiles are explicit and do not fall back to each other. Daytona startup never applies migrations; use uv run python scripts/db_init.py or Alembic directly. The generated profile matrix shows the provider, token, recursion, and environment contract derived from config/fleet.toml.

Policy structure

config/fleet.toml deep-merges [defaults] into the selected [profiles.<name>]. It centralizes:
  • Application identity.
  • Runtime timeouts, leases, liveness, and the credentialed-command live switch.
  • Root/Sub model ids, provider-service routing, endpoint, token limit, temperature, cache, retries, and secret-variable references.
  • RLM limits and host verbosity.
  • Storage limits and the database variable reference.
  • Daytona API-key/Volume/Snapshot policy.
  • MLflow tracking policy.
  • Fleet/DSPy logger level.
storage.max_upload_bytes bounds uploads and workspace files, storage.max_url_bytes bounds fetched public URL sources, and storage.max_artifact_bytes bounds artifact bodies.

Live commands

runtime.live_enabled defaults to true for explicitly invoked provider, Daytona, and Prime Oolong commands. Set it to false in the selected TOML policy to fail closed before those commands construct provider or Daytona clients. This policy replaces the old FLEET_LIVE=1 shell switch; invoking a live command remains an explicit operator action, and the required credentials are still validated.

MLflow tracing

When tracing is enabled, mlflow.async_logging keeps trace export off the Turn critical path and mlflow.trace_sampling_ratio controls the fraction of Turns sent to MLflow. The committed default is asynchronous export with a 1.0 sampling ratio. Trace payloads retain bounded, readable prompts, reasoning, generated code, tool payloads, and responses. mlflow.trace_content_max_chars bounds each readable field and defaults to 10000 characters. The trace export boundary still protects credentials, connection strings, private paths, and system-prompt dumps.
The mlflow.trace_content_mode setting is removed. fleet.toml files that still set trace_content_mode = "safe" fail validation with an unknown-key error; delete the key. Trace content is now always readable (bounded by mlflow.trace_content_max_chars).
Benchmark profiles (daytona-bench, daytona-bench-40) keep tracing off to stay traceless. Fleet enables MLflow DSPy inference autologging for the selected experiment; compile and evaluator traces remain disabled for live Turn observability.

Recursive RLM

The [rlm] recursion settings bound the native rlm_query(prompt=prompt) child harness: The native recursive-child boundary is a fixed product invariant (RLM_NATIVE_CHILD_DEPTH = 1), not an editable policy value. Policies that still set rlm.recursion_max_depth fail validation; delete the key. Under daytona-recursive, each child receives a fresh, dedicated Daytona Sandbox, ordinary Daytona network egress, and the same Volume ID mounted at recursive/<workspace-id>/<run-id>/<call-index>. That private sibling scope cannot reach the Root workspaces/<workspace-id> mount. The child receives no Fleet Tools or credentials; strict cleanup purges its scope and deletes its Sandbox before Root success can commit.

Autonomous memory

rlm.autonomous_memory_categories is a TOML-only list of canonical Workspace Memory category names and defaults to [], which omits propose_memory from the Root Tool inventory entirely. A non-empty allowlist enables a Root-only, Run-scoped candidate collector and permits best-effort promotion only after a successful durable Turn commit; it does not change explicit-user memory behavior.

Environment inputs

Only variables named by the selected profile are read. Model ids may use an explicit provider/model prefix. For an OpenAI-compatible base URL, bare ids are normalized with the openai/ prefix before constructing dspy.LM.

Terminal-only setting

FLEET_API_URL changes the standalone pi-tui API base URL from http://127.0.0.1:8000. It is not a backend Settings field and is unnecessary when the supervised fleet cli command supplies the local API URL.

Local terminal editing

The pi-tui /settings command reads and edits the non-secret policy in config/fleet.toml. It is available only to a loopback API client, including when an operator has explicitly exposed the normal API on another interface. The selector supports [defaults] and every existing named profile, and offers choice, text/number, and boolean child panels. Edits are revision-checked, atomically written, and validated against every profile before saving. They never read or display .env values or provider credentials; database and provider values are represented only by their environment-variable names. A saved policy applies only after Fleet is restarted; existing runtime composition and active Turns are never changed in place. The companion pi-tui /profiles command writes the chosen name to config.default_profile through the same loopback policy. It labels the active profile as running and a different default_profile as selected for restart.

Example .env

Copy the shipped template and fill only variables named by the selected profile:
.env
Never commit .env, credentials, raw provider failures, or evidence containing secrets.

See also

Last modified on August 13, 2026