The agent
configs/default.toml (agent version 1.6.5) and each ablation of configs/ablations/, resolved against a deploy that runs every service (tests/fixtures/deploy-test.toml): what it turns on, and its identity there. The identity is the same on any machine that runs the services it names, wherever they run (Configuration and identity).
| Configuration | What it is |
|---|---|
default |
Harness Policy: programs over analytic and learned skills, reactive layer, handlers, verifier |
ablations/analytic-manipulation |
with the manipulation skill’s pick, place and push in place of the tools by object id |
ablations/no-handlers |
without handlers |
ablations/no-reactive |
Reactive layer A/B: programs without the reactive layer, no learned policy |
ablations/no-verifier |
without the verifier |
ablations/r0 |
R0: direct control, one action per call |
ablations/r1 |
R1: fixed skills, one action per call |
ablations/r2 |
R2: programs over analytic skills, with handlers |
ablations/r3 |
R3: R2 plus learned skills (the learned policy) |
ablations/reflexes |
Reactive layer A/B: programs with the reactive layer and reflexes (intercept), no learned policy |
ablations/with-task-description |
with the task description of Zhang et al. (2026b) |
default
Section titled “default”Harness Policy: programs over analytic and learned skills, reactive layer, handlers, verifier
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, reactive, scene, handlers, vla
- Skills off: manipulation (not in this configuration), reflexes (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
0a588e97b4995380
configs/default.toml
# The agent: what `harness run` runs unless an experiment names another agent file.# Every layer of the harness is on: programs over analytic and learned skills (Simate),# the reactive layer (guards and controllers every tick), handlers, and the success# verifier, above the fixed safety shield. It sees what RoboDojo's official client hands# a policy, nothing more (the leaderboard protocol), and it is the configuration# submitted to the leaderboard. The ablations of the paper (configs/ablations/) include# this file and switch parts off.description = "Harness Policy: programs over analytic and learned skills, reactive layer, handlers, verifier"prompt = "../prompts/robodojo"# The model roles (configs/models/<name>.toml); an experiment's `model` or --model NAME# picks another.model = "deepseek-flash"# No pointer role: the vlm role (the main model) points, as in every 1.4 evaluation run,# where Molmo2 was not running and programs pointed in 3 of 129 episodes.roles = ["main", "vlm", "verifier"]
[skills]layers = { learned = true, reactive = true, handlers = true }
[services]segmenter = "sam3"# The learned policy: Simate. Inside the agent it scored as G0.5 did on the development# comparison; alone it scored more over all 42 tasks (Long-Horizon 38.9 against 19.1).policies = ["simate"]# No world model: no 1.4 evaluation run had OpenWAM, and without it the models fit one# 24 GB GPU (kinematics, SAM 3, Simate: 23.2 GB). `--set 'agent.services.world_models=# ["openwam"]'` adds predict_future.world_models = []
[runtime]# Long enough for pointing calls inside a program to wait out a network outage.cell_timeout_seconds = 1800reactive_budget_ms = 20.0default_max_seconds = 30.0cameras = ["cam_head", "cam_left_wrist", "cam_right_wrist"]verifier = true# The first motion is start(strategy, kind): hand the task to the learned policy (A, C)# or not (B), decided from its description before anything moves (Z2's first call).strategy_first = true# The handed-over task runs uninterrupted: no progress watch (policy_progress_seconds# 0). Stopping the policy early bought nothing (the model's own tools after it added no# score), and measuring the scene while it ran may harm it: pour_liquid_into_cup,# development layouts 0-1, policy alone 4 of 4 (2 scripted now, 2 on 13 October), with# the watch measuring 1 of 4 (2 scripted, 2 of agent 1.4.0). The stall stop still ends# a run whose arms moved and then stopped.policy_progress_seconds = 0.0# After the handed-over task's first run the model has this many calls to finish (its own tools, the policy# again, or finish); then the policy runs on to the end of the episode. Finishing with# the tools took about half of the development run's spend for no score over the policy# alone.post_policy_calls = 4# The XPolicyLab observation contract (core/contract.py): instruction, camera colors,# measured arm joints, link6 poses, the last gripper commands; camera calibration from# the embodiment; no depth, no step limit, no task name, so no task descriptions# (configs/ablations/with-task-description.toml adds them, Tab. 4's second row).# `--set agent.runtime.contract=native` shows a development run everything the# simulator worker measures.contract = "xpolicylab"# Programs run isolated where the machine allows user namespaces (an evaluation host# need not).isolation = "auto"
[budget]# 30 model calls per episode (Zhang et al. 2026b ran 100). A handed-over task needs a# few; the model's own tools where they fail used the rest of 100: agent 1.4.0 on# evaluation layouts, pick_from_conveyor_by_image 98 calls ($0.38) for 0.max_model_calls = 30ablations/analytic-manipulation
Section titled “ablations/analytic-manipulation”with the manipulation skill’s pick, place and push in place of the tools by object id
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, manipulation, reactive, scene, handlers, vla
- Skills off: eef (not in this configuration), reflexes (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
23d4680e74146897
configs/ablations/analytic-manipulation.toml
# The agent with the manipulation skill's pick, place and push (by name, over the# analytic skills: pointing, plan_grasp, a straight-line push) in place of the default# tools by object id (skills/eef: locate, pick, release, transfer, push). The two export# some of the same names, so one or the other. watch_scene, clear_view and press stay# (skills/scene).description = "with the manipulation skill's pick, place and push in place of the tools by object id"include = ["../default.toml"]
[skills]enable = ["manipulation"]disable = ["eef"]ablations/no-handlers
Section titled “ablations/no-handlers”without handlers
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, reactive, scene, vla
- Skills off: manipulation (not in this configuration), reflexes (not in this configuration), handlers (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
1e9b11b89e16bd1b
configs/ablations/no-handlers.toml
# Ablation (Tab. 5): the agent without handlers; every unhandled event goes to the model.description = "without handlers"include = ["../default.toml"]
[skills]layers = { handlers = false }ablations/no-reactive
Section titled “ablations/no-reactive”Reactive layer A/B: programs without the reactive layer, no learned policy
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, scene, handlers
- Skills off: manipulation (not in this configuration), reactive (not in this configuration), reflexes (not in this configuration), vla (no policy service), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3
- Model calls per episode: 30
- Identity:
b15075d7a55a945f
configs/ablations/no-reactive.toml
# The reactive layer on moving objects, without it (the other arm of reflexes.toml): the# default agent with the reactive layer off and no learned policy, so the program catches# what moves with the tools by object id alone (pick looks the object up, then reaches).description = "Reactive layer A/B: programs without the reactive layer, no learned policy"include = ["../default.toml"]
[skills]layers = { learned = true, reactive = false, handlers = true }
[services]policies = []world_models = []ablations/no-verifier
Section titled “ablations/no-verifier”without the verifier
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, reactive, scene, handlers, vla
- Skills off: manipulation (not in this configuration), reflexes (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
48a09e45fefc520f
configs/ablations/no-verifier.toml
# Ablation (Tab. 5): the agent without the success verifier (verify() returns None).description = "without the verifier"include = ["../default.toml"]
[runtime]verifier = falseablations/r0
Section titled “ablations/r0”R0: direct control, one action per call
- Mode: direct
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, grasping, memory, verify, motion
- Skills off: pointing (needs one of the services pointer, vlm), vlm (no vlm service), segmentation (no segmenter service), manipulation (not in this configuration), eef (no segmenter service), reactive (not in this configuration), scene (needs one of the services pointer, vlm), reflexes (not in this configuration), handlers (not in this configuration), vla (not in this configuration), wam (not in this configuration), mcp (not in this configuration)
- Services: –
- Model calls per episode: 30
- Identity:
d580443db6aa7bd8
configs/ablations/r0.toml
# R0 direct control (interface ladder, Tab. 3): one action per model call (move the# fingertips, open or close a gripper, observe, wait), no perception models, no# programs. It reimplements the direct-control interface of Zhang et al. (2026b).description = "R0: direct control, one action per call"include = ["../default.toml"]mode = "direct"prompt = "../../prompts/robodojo_direct.md"roles = ["main"]
[skills]layers = { learned = false, reactive = false, handlers = false }
[services]segmenter = falsepolicies = []world_models = []
[runtime]cell_timeout_seconds = 120default_max_seconds = 10.0verifier = falseablations/r1
Section titled “ablations/r1”R1: fixed skills, one action per call
- Mode: direct
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, manipulation, scene, vla
- Skills off: eef (not in this configuration), reactive (not in this configuration), reflexes (not in this configuration), handlers (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
fbb297e67ed690f4
configs/ablations/r1.toml
# R1 fixed skills (interface ladder, Tab. 3): one action per model call from a fixed# vocabulary that adds perception-grounded skills (locate, pick, place) and the# learned policy to R0's actions (Zhang et al., 2026a; Galanti et al., 2026).description = "R1: fixed skills, one action per call"include = ["../default.toml"]mode = "direct"prompt = ["../../prompts/robodojo_direct.md", "../../prompts/robodojo_direct_skills.md", "../../prompts/robodojo_direct_policy.md"]# No verifier (a direct-control rung has no programs to check); pointing by the vlm role,# as in the agent.roles = ["main", "vlm"]
[skills]layers = { learned = true, reactive = false, handlers = false }# R1's fixed skills pick and place are the manipulation skill's (by name).enable = ["manipulation"]disable = ["eef"]
[services]world_models = []
[runtime]# Perception-grounded skills (locate, pick, place) in the action vocabulary.fixed_skills = truecell_timeout_seconds = 120default_max_seconds = 10.0verifier = false# Direct control has no start step: its action vocabulary hands the policy sub-tasks.strategy_first = falseablations/r2
Section titled “ablations/r2”R2: programs over analytic skills, with handlers
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, scene, handlers
- Skills off: manipulation (not in this configuration), reactive (not in this configuration), reflexes (not in this configuration), vla (not in this configuration), wam (not in this configuration), mcp (not in this configuration)
- Services: segmenter: sam3
- Model calls per episode: 30
- Identity:
4cb290fcb7d2315b
configs/ablations/r2.toml
# R2 programs (interface ladder, Tab. 3): the model writes programs that call the# analytic skills; handlers, no learned skills, no reactive layer (the programmable# interface of CaP-Agent0, Fu et al., 2026).description = "R2: programs over analytic skills, with handlers"include = ["../default.toml"]
[skills]layers = { learned = false, reactive = false, handlers = true }
[services]policies = []world_models = []ablations/r3
Section titled “ablations/r3”R3: R2 plus learned skills (the learned policy)
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, scene, handlers, vla
- Skills off: manipulation (not in this configuration), reactive (not in this configuration), reflexes (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
29ca5817e6d35676
configs/ablations/r3.toml
# R3 programs and learned skills (interface ladder, Tab. 3): R2 plus the learned policy# (run_policy, the strategy step); no reactive layer. A world model (predict_future)# comes with --set 'agent.services.world_models=["openwam"]', as for the agent.description = "R3: R2 plus learned skills (the learned policy)"include = ["../default.toml"]
[skills]layers = { learned = true, reactive = false, handlers = true }ablations/reflexes
Section titled “ablations/reflexes”Reactive layer A/B: programs with the reactive layer and reflexes (intercept), no learned policy
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, reactive, scene, reflexes, handlers
- Skills off: manipulation (not in this configuration), vla (no policy service), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3
- Model calls per episode: 30
- Identity:
539ba698e9cf069c
configs/ablations/reflexes.toml
# The reactive layer on moving objects, with reflexes (paper: Sec. "Reacting without the# model", Tab. reactive, with no-reactive.toml as the other arm): the default agent plus# the reflexes skill (intercept: a visual-servo controller that catches an object moving# past) and no learned policy, so the program itself catches what moves. Run both arms on# the conveyor tasks (match_and_pick_from_conveyor, pick_from_conveyor_by_image).description = "Reactive layer A/B: programs with the reactive layer and reflexes (intercept), no learned policy"include = ["../default.toml"]
[skills]enable = ["reflexes"]
[services]policies = []world_models = []ablations/with-task-description
Section titled “ablations/with-task-description”with the task description of Zhang et al. (2026b)
- Mode: program
- Main model (its default model file):
deepseek/deepseek-v4.1-flash - Observation contract: xpolicylab
- Skills on: core, geometry, kinematics, pointing, vlm, segmentation, grasping, memory, verify, motion, eef, reactive, scene, handlers, vla
- Skills off: manipulation (not in this configuration), reflexes (not in this configuration), wam (no world_model service), mcp (not in this configuration)
- Services: segmenter: sam3, policies: simate
- Model calls per episode: 30
- Identity:
62581c483cab3499
configs/ablations/with-task-description.toml
# "Harness Policy, with task description" (Tab. 4, second row): the agent plus the# description Zhang et al. (2026b) derived from the RoboDojo documentation for each# task (prompts/robodojo_tasks/), appended to the first message. The runner, not the# policy, picks it by task name, so this configuration does not export to XPolicyLab.description = "with the task description of Zhang et al. (2026b)"include = ["../default.toml"]
[runtime]task_descriptions = "../../prompts/robodojo_tasks"