Harness

The Harness is the provider-neutral runtime between the model and the active embodiment. It owns orchestration and context. A deployment owns robot or simulator connections, sensing backends, policies, and hardware safety.

Components

Component

Responsibility

Agentic Loop

Refresh evidence, request one model decision, execute at most one selected Tool, and continue from its result.

Context

Keep Resident, Refreshed, and Accumulated information at separate lifetimes.

Tool Protocol

Publish Tool Definitions, validate arguments, normalize Tool Results, and execute hooks.

Memory

Maintain Task Notes, durable Memory, and Tool Experience.

Skills

Keep Skill metadata Resident and load matched instructions on demand.

Observation

Supply current visual evidence and, when base-motion support is configured, four-direction clearance for one decision.

Safety

Apply deterministic pre-execution checks below the model.

User Interaction

Provide terminal or Feishu/Lark implementations of query_user and notify_user.

Embodiment Profile

Present stable capabilities, sensing configuration, and base-relative positions.

Scene Graph and Evaluation are first-class physical-world components with their own guides:

  • Scene Graph makes the world readable and ref-addressable.

  • Evaluation judges physical outcomes after Tool execution.

Public composition boundary

The main composition root is Harness. Its constructor accepts public protocols rather than importing a robot-specific runtime:

from harness import Harness

harness = Harness(
    config,
    model=model,
    registry=registry,
    observation_provider=observation_provider,
    base_clearance_provider=base_clearance_provider,
    scene_graph=scene_graph,
    evaluator=evaluator,
    post_execution_observation_provider=post_execution_observer,
    owned_resources=(robot,),
)

Start from Port to Your Robot for a copyable integration path. Use the Deployment Guide for configuration, resource ownership, cancellation, logging, and failure handling.