Skip to content

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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)

python
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)

python
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.