showlab/Show-Harness
Just a VLM Agent Can Play Robots
Show‑Harness – A VLM‑driven Embodied Agent
What it is
- An open‑source harness that lets a vision‑language model (VLM) control a robot through a tiny, token‑based action vocabulary.
- Provides two operating modes:
- Zero‑shot – a large, closed‑source VLM (e.g., Gemini, GPT‑4‑V) is queried directly; the model decides each action token on‑the‑fly.
- Fine‑tuned – a smaller, open VLM is LoRA‑adapted on robot demonstration data and emits one action token per step.
- Works with multiple robot platforms (Franka, AgileX Piper, Isaac‑Lab, LIBERO) and simulators, all using the same prompt set and action vocabulary.
Key components
| Component | Role |
|---|---|
core/ |
Main loop that talks to the VLM, builds prompts, logs, and maps VLM tokens to the interpreter for the chosen robot. |
interpreters/ |
Platform‑specific code that turns a token (e.g., GRIP_OPEN) into real robot commands (impedance control, joint streaming, etc.). |
gumi/ |
A lightweight browser UI for collecting demonstrations. Users press keys (WASD, arrows) to drive the robot; each step is saved as an (observation, action) pair for training. |
plugins/ |
Optional “plug‑ins” that can be toggled (perception, planning, recovery, etc.) without changing the core code. |
train/ |
Scripts that convert the GUMI rollouts into a dataset, register it with 🤗 Datasets, and fine‑tune a VLM using LLaMA‑Factory (LoRA adapters). |
scripts/ |
Helper utilities: environment setup, ROS/RealSense integration, robot calibration, serving a VLM with vLLM, and evaluation scripts for simulators. |
configs/ |
Layered YAML configs – defaults, site‑specific robot settings, and optional overrides. |
How to get started
- Set up environments – run
bash scripts/setup.sh basefor the harness,… servefor a vLLM server, and optionally… libero <checkout>for a simulator. - Collect data – launch the GUMI UI (
gumi/collect_rollouts_web.py) in simulation (--sim) or on real hardware; drive the robot with the keyboard and the system records ready‑to‑train pairs. - Run a robot – configure
configs/site/*.yaml, add your API key inconfigs/secrets.env, runscripts/check_setup.pythenscripts/run_real.py(zero‑shot) orscripts/run_real_mvtoken.py(fine‑tuned). - Fine‑tune – download one of the released LoRA adapters from 🤗 Hub, or train your own with the
train/pipeline.
Released resources
- Models: Five LoRA adapters for Qwen‑3.5 (0.8B, 2B, 4B, 9B) and Gemma‑4B, plus a simulation‑only adapter. Hosted at
showlab/Show‑Harness‑VLMs. - Dataset: Real rollouts from Franka/Piper and simulated data from RoboLab/ManiSkill, available at
showlab/Show‑Harness‑Data. - Paper & demo – arXiv pre‑print (2609.10522) and a short video showing the VLM playing a robot.
Why it matters
- Demonstrates that a single VLM interface can drive many robot bodies, removing the need for robot‑specific policy networks.
- The GUMI collector makes it easy to generate high‑quality, token‑level demonstrations without expensive tele‑operation rigs.
- The plugin architecture lets researchers add or remove perception/planning modules (e.g., multi‑view guidance, sub‑goal planning) with a single boolean flag, facilitating ablation studies.
Typical use‑cases
- Researchers wanting to test zero‑shot VLM control on a new robot platform.
- Teams that need a quick pipeline to collect robot demonstrations and fine‑tune a lightweight VLM.
- Developers building custom perception or planning plugins that plug into the same harness.
Citation
@article{chen2026show,
title={Show‑harness: Just a VLM agent can play robots},
author={Chen, Yanzhe and Bai, Zechen and Cao, Zhijun and Zeng, Wenzheng and Lin, Kevin Qinghong and Lin, Yiqi and Liang, Guoqiang and Ma, Kevin Yuchen and Huang, Qiming and Shou, Mike Zheng},
journal={arXiv preprint arXiv:2609.10522},
year={2026}
}
All details are taken directly from the repository’s README; no additional features are inferred.
Related
- Project
- Project
- Project
- Project