VLA Support Status
Frank inventory β VLA envs (LIBERO/SIMPLER), policy_adapter_vla, gaps
This page does two jobs. Part I β Support answers which VLA methods AgentCanvas runs or wants to run: a single support matrix (verified Β· in-progress Β· retired), then the env / policy / method machinery underneath. Part II β Landscape places those methods in the wider VLA field β Track-A trained policies, Track-B zero-shot manipulation, and the 2024β26 frontier (Β§8) β condensed from the VLA β Methods survey. Companion to VLN Support Status and EQA Support Status.
Part I β Methods we support
1. Support matrix
Every VLA graph AgentCanvas ships or is building (retired graphs kept for the record). This is the single source of truth for "what we support" β the env / policy / method backing is in Β§2βΒ§4, the wider field is Part II. Verified graphs live under vla/verified/, the rest under vla/unverified/.
| Graph | Status | Notes |
|---|---|---|
vla_policy_libero.json |
β³ unverified β gym-interface migration (2026-06-10) | Rewired for the gym-like env contract (reset metadata-only, step_continuous, pull obs via observe_egocentric); moved to vla/unverified/ pending re-eval. Runtime-blocked by TODO #66 β the policy_adapter_vla Pi0 graph path has never run on the vendored tree (the 2026-05-02 verification used scripts/smoke/smoke_vla_libero.py against external vlaworkspace); 3 of 4 debt layers fixed 2026-06-11. Pre-migration baseline (2026-05-02): Pi0 LIBERO finetune step=30000, libero_spatial / task 0, 5/5 success, avg 83.8 steps, 5.4 s wall |
vla_policy_simpler.json |
β status TBD β please confirm | Graph + nodeset shipped under E11 (2026-05-01); no author-verified smoke result recorded in roadmap yet |
octo_simpler.json |
β baseline runs | SIMPLER eval uses native baselines (RT-1-X / Octo, not Pi0 finetunes); checkpoints under data/vla_policy/checkpoints/. Mirror upstream's no-close pattern between episodes (SAPIEN 2.2.2 GC ordering bug β see Β§6.4) |
voxposer_libero_monolithic.json |
π deleted (2026-06-10) | Removed with the VoxPoserβLIBERO decoupling: its engine interleaved LMP exec with sim stepping inside one node, which cannot cross a wire boundary. Last verified state: author-verified 2026-06-01, full grasp + transport. The decomposed graph is the sole VoxPoser path now. |
voxposer_libero_decomposed.json |
β verified (libero_object) β 2026-06-30 | Planning moved to the backend-local voxposer nodeset, fed by the privileged GT snapshot from env_libero__observe_objects; follow loop drives env_libero__step_ee_pose closed-loop. Verified on libero_object: 44/50 = 0.88 at 50-ep suite scale (merged runs 20260628_202814 / 204422 / 211004) after fixing 3 stacked convention bugs (per-scene z-bounds anchored to robot0_base; gripper action +1=close; top-down grasp geometry). Scope caveat: full-VAS aggregate is 58/199 = 0.29 β only the object suite is fixed; libero_spatial (0.18) / libero_goal (0.10) / libero_10 (0.00) remain grasp-geometry-limited. Promoted to vla/verified/ 2026-06-30. |
This page is fresh β the verified rows have hard ground-truth datapoints from the author. Update the others as runs are confirmed.
workspace/graphs/ is organised by domain Γ verification status. The VLA verified set is vla/verified/{voxposer_libero_decomposed, octo_simpler}.json (voxposer object-suite promoted 2026-06-30; octo_simpler promoted 2026-07-05 after a clean 1-episode integration smoke on the post-gym-refactor interface β run 20260705_193758, 60 steps, metrics harvested through the iterOut.final_stop band); vla/unverified/ holds vla_policy_libero and vla_policy_simpler (gym-rewire re-eval pending). Graphs stay addressable by bare name β the execution resolver and architect overlay fall back to a recursive graphs/**/{name}.json search.VLN graphs are out of scope (see VLN Support Status); EQA graphs are out of scope (see EQA Support Status).
2. Environment Nodesets
Manipulation simulators wrapped as BaseNodeSets under server mode. Both ship in folder form β <name>/__init__.py plus sidecar wrappers β so the binary-incompatible upstream code stays packaged with its owner.
2.1 LIBERO (E12)
- Folder:
workspace/nodesets/env/env_libero/(__init__.py+_wrapper.py) - Source: LIBERO manipulation benchmark β robosuite + MuJoCo, 7-D action contract
- Coverage: 130 tasks across 5 suites β
libero_spatial / object / goal / 10 / 90 - Why it's in: every modern VLA paper reports it; "fact-on-the-ground 2024β25 VLA benchmark"
- Bounds calibration (2026-05-16, superseded 2026-06-28):
z β [+0.85, +1.25]is thelibero_spatial(table-mounted) frame only β NOT canonical across suites. Floor-mounted suites (libero_object, robot base zβ0) sit ~0.9 m lower; baking that single z box as a constant left everylibero_objectgrasp target unreachable β 0/50 for 29 AAS iterations (misread as an OSC step-budget problem). Fixed 2026-06-28: derive the z box per scene fromrobot0_basez (_Z_BELOW_BASE=0.10/_Z_ABOVE_BASE=0.35), x/y fixed. (The earlierDEFAULT_BOUNDS = zβ[-0.1, +0.6]"EE freezes at z=0.94" symptom β 30 cm below the table β was a separate, older red herring.) - Doc: (no per-nodeset page yet β TBD)
2.2 SIMPLER (E11)
- Folder:
workspace/nodesets/env/env_simpler/(__init__.py+_wrapper.py) - Source: SimplerEnv real-to-sim VLA eval β SAPIEN + ManiSkill2_real2sim
- Coverage: 25 tasks β 4 WidowX/Bridge + 21 Google Robot
- Why it's in: drop-in eval of any HF-hosted VLA checkpoint (low friction, cross-paper adoption)
- Doc: SIMPLER nodeset
3. Policy Adapter Nodeset
A single registry hosts all VLA policies behind a uniform 4-stage pipeline.
3.1 VLA Policy (E13)
- Folder:
workspace/nodesets/policy/policy_adapter_vla/ adapters/β envβcanonical and canonicalβmodel adapters (per env Γ per model matrix)models/β model-specific I/O shape conversionspolicies/β checkpoint loaders +predict()per policy familypresets/β graph snippets for common (env, policy, ckpt) combos- Independent conda env:
ac-vla-policy - Decomposition β 4 explicit canvas nodes per VLA call, replacing vlaworkspace's monolithic
Adaptorsystem:
adapt_env_to_canonical β adapt_canonical_to_model β predict β adapt_model_to_env
- Policy registry (4 today): Pi0, SmolVLA, Diffusion Policy (DP), DROID-DP
- Checkpoints: Lightning
.ckptand safetensors both supported byPi0Policy.load_checkpoint - Doc: General Policy Adapter (Β§7, VLA instance)
This is a generic VLA inference framework, not a Pi0/SmolVLA/DP wrapper. Adding a new policy = adding a policies/<name>.py + adapter rows; the 4-node decomposition is reused unchanged.
3.2 VoxPoser-LIBERO (workspace/nodesets/method/voxposer/)
Motion-planning method (LMP + dynamics models). Not a policy in the policy_adapter_vla sense β instead an LMP-style planner that builds a voxel cost map and emits an OSC waypoint trajectory. Env-decoupled as of 2026-06-10: the whole planning stack (7 LMPs, voxel maps, path planner) runs local-mode in the agentcanvas backend; its only env coupling is the privileged GT snapshot wire (env_libero__observe_objects) in and waypoint actions (env_libero__step_ee_pose) out β any env exposing that observe/step pair can host VoxPoser.
- Pairs with:
voxposer_libero_decomposed.json(β verified onlibero_object2026-06-30, SR 0.88 @50ep; other suites still open). The monolithic graph was deleted 2026-06-10 β its LMP-execβsim-stepping interleave cannot cross a wire boundary - Why the snapshot is sound:
plan_subtasknever steps the sim, so all env reads during one plan see a single static state β a frozen snapshot is exactly equivalent to the retired in-subprocess live-adapter reads. The follow loop still drives every waypoint closed-loop (the 2026-05 v2 WiredEnv attempt failed (SR=0) because it buffered wholeexecute()trajectories open-loop; the backendWiredEnvnow raises on any write call) - GT is explicit: VoxPoser's ground-truth perception is now a first-class privileged observation space on the env, visible in graph topology, instead of a hidden in-subprocess adapter
- Bounds: see Β§2.1 β the calibrated table-aware bounds ride inside the
observe_objectssnapshot
3.3 Octo for SIMPLER (workspace/nodesets/policy/policy_octo.py)
Native SIMPLER baselines β RT-1-X / Octo β wrapped as a sibling to policy_adapter_vla. SIMPLER evaluation deliberately uses these native policies (not Pi0 finetunes) per upstream convention; checkpoints under data/vla_policy/checkpoints/.
- Pairs with:
octo_simpler.json
4. Ready-to-Run Graphs
| Graph | Env | Policy | Verified status |
|---|---|---|---|
vla_policy_libero.json |
LIBERO | Pi0 (LIBERO finetune, step=30000) | β³ unverified β gym-interface rewire 2026-06-10; pre-migration 5/5 on libero_spatial / task 0 |
vla_policy_simpler.json |
SIMPLER | (depends on graph config) | β status TBD β please confirm |
octo_simpler.json |
SIMPLER | RT-1-X / Octo (native SIMPLER baselines) | β baseline runs |
voxposer_libero_decomposed.json |
LIBERO | VoxPoser β GT-snapshot planning in the backend (voxposer__* local nodes) + closed-loop follow via env_libero__step_ee_pose |
β verified (libero_object) 2026-06-30 β SR 0.88 @50ep; full-VAS aggregate 0.29 (only object suite fixed) |
When forking a new VLA experiment, start from vla_policy_libero.json β it carries the most complete recorded lineage (pre-migration 5/5 smoke; re-verification pending after the 2026-06-10 gym rewire).
5. Action Contract and Metrics
VLA action shapes are env-side, not yet unified (TODO #46 β VLN/EQA face the same gap):
| Env | Action shape |
|---|---|
| LIBERO | 7-D continuous action (robosuite + MuJoCo joint convention) |
| SIMPLER | Per-robot continuous action (WidowX vs. Google Robot conventions differ) |
Standard manipulation metric: success per episode (binary), aggregated as success rate over a task / suite. Wall-clock and step counts are also captured by the eval harness (e.g. the LIBERO smoke run reports avg 83.8 steps, 5.4 s wall).
6. Eval Infrastructure
6.1 Smoke runners
The first-party smoke runner scripts/smoke/smoke_vla_libero.py (used to produce the 2026-05-02 verified Pi0 result) was removed 2026-06-30 as dev scaffolding; for one-off "does this checkpoint load" checks, run the vla_policy_libero graph via /experiment:run instead.
6.2 BatchEvalRunner + EnvWorkerPool (ADR-eval-002)
Same pipeline VLN uses (agentcanvas/backend/app/agent_loop/eval_batch.py + env_worker_pool.py):
- One fresh
LoopRunnerper episode (clean state isolation) worker_count > 1spawns N tagged env subprocesses; eachWorkerHandlecarriesenv_panel_overrides+server_url_overrides- Per-episode timeout:
max_steps Γ per_step_budget_secβ for VLA-heavy graphs the policy node typically dominates, so setdefault_per_step_budget_secon the env nodeset accordingly
6.3 BatchedInferenceServer + parallelism (ADR-eval-002 PC, ADR-server-003)
policy_adapter_vlanodes are good batched-inference candidates (one GPU forward across K callers), but verify whether eachpolicies/<name>.py::predictis pure-functional (per-call state on explicit ports) before opting inbatched=True, batch_dim=...- Env parallelism (
BaseNodeSet.parallelism) β robosuite/MuJoCo/SAPIEN sims are stateful and thread-affine, so LIBERO and SIMPLER stayreplicated; the policy subprocess is the natural place to putparallelism="shared"once batched is opted in
6.4 SAPIEN / SIMPLER stability gotchas
SIMPLER eval has known stability cliffs in the upstream stack. Working around them is a hard requirement, not optional:
- Never call
env.close()between SIMPLER episodes. SAPIEN 2.2.2 has a GC ordering bug that segfaultsld.soon close-then-reopen. Mirror upstream's no-close pattern: reuse the same env handle across episodes for the whole run. - SIMPLER auto_host crashes after ~15
set_episode()switches. Reload the nodeset between batches if you need to evaluate more than ~15 distinct episodes in one process β the cumulative state-switch state eventually trips an internal crash. BatchEvalRunneris single-selectors per run. Multi-task sweeps go sequential (one selector per run); don't try to pack multiple selectors into one job spec.- Metrics drop on terminal step:
GraphExecutorhistorically settled sibling sinks after the termination pull-check, silently droppingenv_*__evaluateoutputs on the terminal step. Now fixed at the engine level (settle-before-pull-check in the loop-control system; see Loop Control Β§2.8).
7. Known Gaps
VLA-relevant items in roadmap.md:
| Item | What's missing |
|---|---|
| #46 | Unify env action contract via a single action_manifest β currently every env (Habitat / MP3D / LIBERO / SIMPLER) ships its own action-port style |
| #50 | Decouple VLM backend from explore-eqa β analogous problem for VLA: a policy_adapter_vla is currently the only VLA-backend abstraction; if a second backend pattern emerges, factor a shared interface |
| second-wave envs | Calvin / ManiSkill / RoboCasa explicitly deferred (low marginal coverage vs. setup cost); RLBench / Isaac-Lab-as-benchmark / BEHAVIOR-1K skipped (heavy install or low VLA-paper adoption) |
| LIBERO suite breadth | VoxPoser verified on libero_object (SR 0.88 @50ep, 2026-06-30); libero_spatial / goal / 10 / 90 remain unverified (grasp-geometry-limited). The policy_adapter_vla Pi0 path is unverified on all suites (TODO #66) |
| SIMPLER smoke | No author-verified smoke recorded yet for vla_policy_simpler.json |
Also worth tracking informally: a per-nodeset doc page for LIBERO is missing (developer-guide/nodesets/ has SIMPLER but not LIBERO). Adding it would put the env-side documentation symmetric with SIMPLER.
Part II β Field landscape
8. Landscape β representative methods & frontier
Where the supported VLA subset sits in the wider field, condensed from the research survey VLA β Methods (cite counts are that page's Semantic Scholar snapshot). The field splits into Track A (trained VLA / policy models) and Track B (zero-shot / LMP-style manipulation β VoxPoser's lineage). Ours maps to Β§1 / Β§3: β
verified Β· β
baseline Β· β³ unverified Β· β« in policy_adapter_vla registry Β· β not ported.
8.1 Representative & most-cited
| Method | Time | Cites | Track | Ours |
|---|---|---|---|---|
| SayCan | 22.04 Β· CoRL'22 | 3036 | B β LLM affordance grounding | β |
| Diffusion Policy | 23.03 Β· RSS'23 | 2953 | A β visuomotor diffusion | β« registry (DP) |
| RT-2 | 23.07 Β· CoRL'23 | 2902 | A β web-scale VLA | β |
| RT-1 | 22.12 Β· RSS'23 | 2130 | A β transformer policy | β baseline (RT-1-X, Β§1) |
| OpenVLA | 24.06 Β· CoRL'24 | 2048 | A β open 7B VLA | β |
| Pi-0 | 24.10 Β· RSS'25 | 1541 | A β flow-matching VLA | β³ unverified β vla_policy_libero (Β§1) |
| Code as Policies | 22.09 Β· ICRA'23 | 1486 | B β LLM code generation | β |
| Inner Monologue | 22.07 Β· CoRL'22 | 1321 | B β LLM closed-loop feedback | β |
| Octo | 24.05 Β· RSS'24 | 1203 | A β generalist transformer policy | β baseline β octo_simpler (Β§1) |
| RT-X / Open X-Embodiment | 23.10 Β· ICRA'24 | 926 | A β cross-embodiment dataset | β |
| VoxPoser | 23.07 Β· CoRL'23 | 893 | B β LMP + 3D value map | β verified β libero_object (Β§1) |
| CLIPort | 21.09 Β· CoRL'21 | 888 | A β language-conditioned manip. | β |
| R3M | 22.03 Β· CoRL'22 | 853 | A β pretrained visual repr. | β |
| Socratic Models | 22.04 Β· ICLR'23 | 718 | B β multi-model dialog | β |
| ReKep | 24.09 Β· CoRL'24 | 328 | B β relational keypoint constraints | β |
| ECoT | 24.07 Β· NeurIPS'24 | 294 | A β embodied chain-of-thought | β |
| CogACT | 24.11 Β· preprint | 283 | A β VLA + diffusion action head | β |
| SmolVLA | 25.06 Β· preprint | 256 | A β compact community VLA | β« registry (SmolVLA) |
8.2 Frontier (2024β2026)
| Method | Time | Cites | Track | Ours |
|---|---|---|---|---|
| TraceVLA | 24.12 Β· ICLR'25 | 208 | A β visual-trace prompting | β |
| Hi Robot | 25.02 Β· preprint | 169 | A β hierarchical VLA | β |
| MOKA | 24.03 Β· RSS'24 | 116 | B β marks-on-image affordance | β |
| RoboMamba | 24.06 Β· NeurIPS'24 | 102 | A β state-space-model VLA | β |
| DreamZero / WAM | 26.02 Β· preprint | 43 | A β world-action model | β |
| OK-Robot | 24.01 Β· RSS'24 | 39 | B β open-vocab pick-and-place | β |
| MALMM | 24.11 Β· IROS'25 | 22 | B β multi-agent LLM manipulation | β |
| Code-as-Symbolic-Planner | 25.03 Β· IROS'25 | 10 | B β symbolic LLM planner | β |
| Future Prompting | 25.06 Β· preprint | 8 | B β future-frame prompting | β |
| Goal-VLA | 25.06 Β· preprint | 4 | B β goal-image conditioning | β |
| BLAZER | 25.10 Β· preprint | 0 | B β zero-shot LLM manipulation | β |
| FAEA | 26.01 Β· preprint | 0 | B β demonstration-free control | β |
| MALLVI | 26.02 Β· preprint | 0 | B β multi-agent LLM-vision | β |
| EEAgent | 26.04 Β· preprint | 0 | B β embodied LLM agent | β |
Our coverage is deliberately one method per archetype: a Track-B LMP planner (VoxPoser, the only β
verified VLA graph) plus Track-A trained policies through policy_adapter_vla (Pi-0 / SmolVLA / DP) and the SIMPLER native baselines (RT-1-X / Octo). The bulk of the field β RT-2 / OpenVLA-class web-scale VLAs and the 2025β26 zero-shot frontier β is unported.