Skip to main content
An orchestrator decides how a model interacts with motor execution: when to run inference, how to handle interruptions, and when to inject recovery actions. You attach one at construction, and the robot controller delegates every step to it.
Without an orchestrator, go1.run([...]) executes open-loop, with no model in the loop. With one, each Step is run under the strategy’s control.

Sequential: think then move

Single-threaded “guard while you act”. For each action, a guardian (default: VLAGuardian, a small VLM on the forward camera) watches for obstacles. On a detection mid-action:
  1. The current step is cut short at whatever fraction completed.
  2. The guardian emits an avoidance sequence (turn / side-step / wait).
  3. Avoidance runs with the guardian off (no recursive interrupts).
  4. The original action resumes with the remaining distance, bounded by retries so the robot can’t thrash.

ChainOfThought: think while you move

Concurrent inference and execution. While the robot executes action N, a background worker is already running the next inference pass to produce N+1, so there’s no dead time waiting on the model.
The model is any WorldModelAdapter. sense is a list of modalities merged into each observation. Any trigger Step you pass to run() hands control to the orchestrator.

Demo: guarded walk

Orchestration controls timing and interruption. To swap the actual decision model, or to run a goal-directed loop end to end, use the inference stack.