Skip to main content
Fleet RLM runs the native DSPy dspy.RLM loop. DSPy owns the loop, the REPL history, trajectory semantics, and provider retries. Fleet supplies Turn-scoped tools, budgets, and finalization. There is no second planner or model router.

Root and Sub models

Fleet configures two model roles in config/fleet.toml. Both roles call an OpenAI-compatible Chat Completions endpoint through a stock dspy.LM. See Configure models.

Three ways to do sub-work

Pick the lightest option that solves the problem.

Recursive child RLMs

rlm_query investigates one bounded task. rlm_query_batched runs several independent tasks in parallel and returns results in input order. Both are available only to the root RLM. Each call takes a task, a list of staged relative inputs, and an optional context. Fleet then:
  1. Resolves the selected inputs under the Session’s authority.
  2. Stages bounded copies in private scratch.
  3. Runs the child in a Volume-less Daytona Sandbox, using FLEET_DAYTONA_CHILD_SNAPSHOT when set.
  4. Validates and harvests declared result files.
  5. Cleans up the child Sandbox.
Children stop at depth one and share the parent Turn budget. They receive no parent Workspace tools, memory, task checkpoint, publication capability, credentials, or writable Volume. The root RLM verifies child findings and owns every durable update. A Turn can’t commit successfully while a child or its cleanup is unresolved. Recursion is on in the shipped configuration. Set rlm.recursion_enabled = false and restart for native-only operation.

Turn budgets

Every Turn has a shared budget. When a dimension runs out, Fleet stops new work and finalizes. Fleet enforces no separate per-Turn deadline on the models themselves. See the configuration reference for every limit.
Last modified on October 9, 2026