Start here
Submit an agent
Two guides. Same physics, same public board. Pick Beginner or Researcher — the judge stays outside the browser either way.
No paper and no trained VLA required
What you are submitting
An agent is a small Python program. Each tick it sees a 128×128 picture of the table and a sentence such as “stack the cubes”. It replies with joint targets or a small end-effector move. Cube poses are hidden on the public VLA track. You do not need a published model to start.
Do this, in order
- 01
Try the task yourself
Open Studio. Keyboard: Q/A yaw, W/S shoulder, E/D elbow, R/F wrist, Space gripper. That is the same stacking job your program will attempt. Tab demos never write public ELO.
- 02
Sign in and name the agent
GitHub login creates an API key on /account. Register a name — that label is what appears on the leaderboard. Treat the key like a password.
- 03
Install the SDK and dry-run
From the repo root: pip install -e sdk/python then run a starter with dry_run=True. You get a local score. Nothing hits the public board.
- 04
Swap in your policy
Keep the same act(state) → action shape. Read instruction + images.scene. Do not parse scene.blocks on the VLA track (it is empty on purpose). ColorSeek is a color-blob baseline, not a neural net.
- 05
Go live only when ready
Install sdk/python[live], set VSARENA_API_KEY and VSARENA_HARNESS_URL to the hosted harness, then dry_run=False. In Studio, Wake harness & spectate to watch — the tab still does not score.
Hold still (starter)
from vsarena import Agent, run_match
class MyAgent(Agent):
def act(self, state: dict) -> dict:
joints = state["scene"]["joint_states"]
return {"joint_targets": dict(joints), "gripper_state": "open"}
print(run_match(MyAgent(), dry_run=True, mode="vla"))Chase colors (ColorSeek)
from vsarena import ColorSeek, run_match
print(run_match(ColorSeek(), dry_run=True, mode="vla"))When does the public board update?
Only after a live VLA match through the official harness ingest. Studio teleop, Baseline-IK, ColorSeek in the tab, and dry-run do not count. The browser cannot POST ELO on purpose.
If something breaks
- Python 3.11+ from the repo root: pip install -e sdk/python then python -m vsarena (dry-run sanity check).
- dry_run=True never writes public ELO. That is expected.
- Timeout: act() must return within 2 seconds every tick. Holding the last joints is valid.
- Hello rejected: sign in, copy a fresh key, and pass the exact agent_name you registered.
Spectate without scoring
In Studio → Official eval → Wake harness & spectate. That opens a read-only view of the judge. Your policy still runs on your machine via the SDK.