worldevals 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,59 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ concurrency:
10
+ group: ci-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ quality:
15
+ name: lint · type
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v5
21
+ with:
22
+ enable-cache: true
23
+ cache-dependency-glob: |
24
+ **/pyproject.toml
25
+ **/uv.lock
26
+ - name: Create venv
27
+ run: uv venv --python 3.11
28
+ - name: Install from uv.lock (dev + docs extras; docs so mypy sees scripts/ imports)
29
+ run: uv sync --locked --extra dev --extra docs
30
+ - name: Ruff (lint)
31
+ run: uv run ruff check .
32
+ - name: Ruff (format check)
33
+ run: uv run ruff format --check .
34
+ - name: Mypy (strict)
35
+ run: uv run mypy
36
+
37
+ test:
38
+ name: test (${{ matrix.os }}, py${{ matrix.python-version }})
39
+ runs-on: ${{ matrix.os }}
40
+ strategy:
41
+ fail-fast: false
42
+ matrix:
43
+ os: [ubuntu-latest, macos-latest]
44
+ python-version: ["3.11", "3.12"]
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ - name: Install uv
48
+ uses: astral-sh/setup-uv@v5
49
+ with:
50
+ enable-cache: true
51
+ cache-dependency-glob: |
52
+ **/pyproject.toml
53
+ **/uv.lock
54
+ - name: Create venv (py${{ matrix.python-version }})
55
+ run: uv venv --python ${{ matrix.python-version }}
56
+ - name: Install from uv.lock (dev extras)
57
+ run: uv sync --locked --extra dev
58
+ - name: Pytest (100% coverage gate)
59
+ run: uv run pytest --cov --cov-report=term-missing
@@ -0,0 +1,71 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: pages
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ name: build docs
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v5
26
+ with:
27
+ enable-cache: true
28
+ cache-dependency-glob: |
29
+ **/pyproject.toml
30
+ **/uv.lock
31
+ - name: Create venv
32
+ run: uv venv --python 3.12
33
+ - name: Install from uv.lock (docs extras)
34
+ run: uv sync --locked --extra docs
35
+ - name: Build site (strict)
36
+ run: uv run mkdocs build --strict
37
+ - name: Upload Pages artifact
38
+ uses: actions/upload-pages-artifact@v3
39
+ with:
40
+ path: site
41
+
42
+ deploy:
43
+ name: deploy to GitHub Pages
44
+ if: github.ref == 'refs/heads/main'
45
+ needs: build
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: github-pages
49
+ url: ${{ steps.deployment.outputs.page_url || steps.retry1.outputs.page_url || steps.retry2.outputs.page_url }}
50
+ steps:
51
+ # The Pages API intermittently rejects deployments with a transient
52
+ # "Deployment failed, try again later" — retry twice with backoff.
53
+ - name: Deploy
54
+ id: deployment
55
+ continue-on-error: true
56
+ uses: actions/deploy-pages@v4
57
+ - name: Wait before retry
58
+ if: steps.deployment.outcome == 'failure'
59
+ run: sleep 30
60
+ - name: Deploy (retry 1)
61
+ id: retry1
62
+ if: steps.deployment.outcome == 'failure'
63
+ continue-on-error: true
64
+ uses: actions/deploy-pages@v4
65
+ - name: Wait before second retry
66
+ if: steps.deployment.outcome == 'failure' && steps.retry1.outcome == 'failure'
67
+ run: sleep 60
68
+ - name: Deploy (retry 2)
69
+ id: retry2
70
+ if: steps.deployment.outcome == 'failure' && steps.retry1.outcome == 'failure'
71
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,23 @@
1
+ name: Release
2
+
3
+ # Publishes to PyPI via trusted publishing (OIDC) — no API tokens.
4
+ # Authenticates against the PyPI trusted-publisher entry for this repo
5
+ # (workflow: release.yml, environment: pypi).
6
+ on:
7
+ release:
8
+ types: [published]
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ environment: pypi
14
+ permissions:
15
+ id-token: write # OIDC token for PyPI trusted publishing
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v5
20
+ - name: Build sdist + wheel
21
+ run: uv build
22
+ - name: Publish to PyPI
23
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,219 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+ # Temporary file for partial code execution
204
+ tempCodeRunnerFile.py
205
+
206
+ # Ruff stuff:
207
+ .ruff_cache/
208
+
209
+ # PyPI configuration file
210
+ .pypirc
211
+
212
+ # Marimo
213
+ marimo/_static/
214
+ marimo/_lsp/
215
+ __marimo__/
216
+
217
+ # Streamlit
218
+ .streamlit/secrets.toml
219
+
@@ -0,0 +1,58 @@
1
+ # Pre-commit hooks for WorldEvals. Install once per clone:
2
+ #
3
+ # uv run pre-commit install # sets up both pre-commit and pre-push hooks
4
+ #
5
+ # On commit: file hygiene + ruff (lint & format) + mypy (strict).
6
+ # On push: pytest with the 100% coverage gate.
7
+ #
8
+ # Run everything manually with: uv run pre-commit run --all-files
9
+ #
10
+ # The ruff / mypy / pytest hooks are "local" so they use the exact versions
11
+ # pinned in this project's dev environment (matching CI) rather than a separate
12
+ # pinned copy.
13
+ default_install_hook_types: [pre-commit, pre-push]
14
+
15
+ repos:
16
+ - repo: https://github.com/pre-commit/pre-commit-hooks
17
+ rev: v5.0.0
18
+ hooks:
19
+ - id: trailing-whitespace
20
+ - id: end-of-file-fixer
21
+ - id: check-yaml
22
+ args: [--unsafe] # mkdocs.yml uses !!python/name: tags
23
+ - id: check-toml
24
+ - id: check-merge-conflict
25
+ - id: check-added-large-files
26
+
27
+ # Local hooks run through `uv run` so they use this project's dev environment
28
+ # (matching CI) regardless of whether a virtualenv is activated. Requires uv.
29
+ - repo: local
30
+ hooks:
31
+ - id: ruff-check
32
+ name: ruff (lint, autofix)
33
+ entry: uv run ruff check --fix
34
+ language: system
35
+ types_or: [python, pyi]
36
+ require_serial: true
37
+
38
+ - id: ruff-format
39
+ name: ruff (format)
40
+ entry: uv run ruff format
41
+ language: system
42
+ types_or: [python, pyi]
43
+ require_serial: true
44
+
45
+ - id: mypy
46
+ name: mypy (strict)
47
+ entry: uv run mypy
48
+ language: system
49
+ types: [python]
50
+ pass_filenames: false
51
+
52
+ - id: pytest-coverage
53
+ name: pytest (100% coverage gate)
54
+ entry: uv run pytest --cov --cov-report=term-missing
55
+ language: system
56
+ always_run: true # run on every push, even when no .py files changed
57
+ pass_filenames: false
58
+ stages: [pre-push]
@@ -0,0 +1,9 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite it as below."
3
+ title: "WorldEvals: A curated catalog of physical-AI benchmarks"
4
+ authors:
5
+ - name: "Robocurve"
6
+ type: software
7
+ license: MIT
8
+ repository-code: "https://github.com/robocurve/worldevals"
9
+ version: "0.3.0"
@@ -0,0 +1,60 @@
1
+ # WorldEvals — agent guide
2
+
3
+ WorldEvals is the **"Inspect Evals for robotics"**: a curated **catalog + CLI**
4
+ indexing physical-AI benchmarks built on
5
+ [Inspect Robots](https://github.com/robocurve/inspect-robots). Unlike Inspect Evals' monorepo,
6
+ each benchmark here is **its own repo** (e.g.
7
+ [KitchenBench](https://github.com/robocurve/kitchenbench)); WorldEvals is the
8
+ lightweight index that ties them together.
9
+
10
+ ## The one big idea
11
+
12
+ - `inspect-robots list` → what Inspect Robots tasks are **installed**.
13
+ - `worldevals list` → what benchmarks **exist** and how to install them.
14
+
15
+ WorldEvals does **not** depend on or import the benchmark repos (they're separate
16
+ packages). It only keeps a static `catalog.py` of `Benchmark` entries; the
17
+ `worldevals tasks` command bridges the two by annotating *installed* Inspect Robots
18
+ tasks with the catalogued benchmark they belong to.
19
+
20
+ ## Layout
21
+
22
+ ```
23
+ src/worldevals/
24
+ catalog.py # Benchmark dataclass + CATALOG (the registry of benchmark repos) +
25
+ # accessors: catalog(), get(name), by_tag(tag), benchmark_for_task(key)
26
+ cli.py # `worldevals list [--tag] | info <name> | tasks`
27
+ __init__.py # public API (catalog, get, by_tag, benchmark_for_task, Benchmark)
28
+ tests/ # 100% coverage; catalog-integrity + CLI tests
29
+ plans/0001-worldevals-design.md # design doc
30
+ README.md # collection landing page (benchmark table + contribution guide)
31
+ ```
32
+
33
+ The package is small and self-documenting, so there's no separate `src/` guide.
34
+
35
+ ## Working here (important gotchas)
36
+
37
+ - **Dependency on Inspect Robots is a git tag** (`[tool.uv.sources] inspect-robots = { git =
38
+ ..., tag = "v0.3.0" }`); it's used only by the `tasks` command (to read the
39
+ Inspect Robots registry). `tool.uv.sources` is **uv-only**: plain pip ignores it,
40
+ and `inspect-robots` isn't on PyPI, so every pip-facing install instruction is
41
+ **two-step** — `pip install "inspect-robots @
42
+ git+https://github.com/robocurve/inspect-robots@v0.3.0"` first, then the
43
+ package. Keep README, `catalog.py` install strings, `scripts/gen_catalog.py`,
44
+ and `docs/contributing.md` in that form.
45
+ - **Conda is active in this shell** — `uv pip install -e .` lands in conda base,
46
+ not `.venv`. Activate first: `source .venv/bin/activate && export
47
+ VIRTUAL_ENV="$PWD/.venv"` (or use `uv run`).
48
+ - Dev loop: `uv venv && uv pip install -e ".[dev]"`, `uv run pre-commit install`,
49
+ `uv run pytest --cov`.
50
+ - **Gates (all required, blocking PR checks):** `ruff check .`,
51
+ `ruff format --check .`, `mypy` (strict), `pytest --cov` at **100% coverage**.
52
+
53
+ ## Adding a benchmark to the catalog
54
+
55
+ Append a `Benchmark(...)` entry to `src/worldevals/catalog.py` with its name,
56
+ title, description, repo URL, install command, the Inspect Robots task keys it
57
+ registers, tags, and contributors. `tests/test_catalog_cli.py` validates every
58
+ entry (unique name, well-formed `https://github.com/...` repo URL, ≥1 task key) —
59
+ so a malformed entry fails CI. Keep `task_keys` in sync with the benchmark repo's
60
+ actual registered task names.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 robocurve
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,148 @@
1
+ Metadata-Version: 2.4
2
+ Name: worldevals
3
+ Version: 0.3.0
4
+ Summary: The Inspect Evals for robotics — a curated catalog of physical-AI benchmarks built on Inspect Robots.
5
+ Project-URL: Homepage, https://github.com/robocurve/worldevals
6
+ Project-URL: Documentation, https://worldevals.org/
7
+ Project-URL: Framework, https://github.com/robocurve/inspect-robots
8
+ Author: RoboCurve
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: benchmarks,catalog,evaluation,physical-ai,robotics,vla
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: inspect-robots>=0.3
23
+ Provides-Extra: dev
24
+ Requires-Dist: mypy>=1.11; extra == 'dev'
25
+ Requires-Dist: pre-commit>=3.5; extra == 'dev'
26
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
27
+ Requires-Dist: pytest>=8.0; extra == 'dev'
28
+ Requires-Dist: ruff>=0.6; extra == 'dev'
29
+ Provides-Extra: docs
30
+ Requires-Dist: mkdocs-gen-files<0.6.1,>=0.5; extra == 'docs'
31
+ Requires-Dist: mkdocs-llmstxt>=0.2; extra == 'docs'
32
+ Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
33
+ Requires-Dist: mkdocs>=1.6; extra == 'docs'
34
+ Requires-Dist: mkdocstrings[python]>=0.26; extra == 'docs'
35
+ Description-Content-Type: text/markdown
36
+
37
+ <div align="center">
38
+
39
+ # 🌍 WorldEvals
40
+
41
+ **The [Inspect Evals](https://inspect.aisi.org.uk/evals/) for robotics.**
42
+
43
+ A curated catalog of physical-AI / VLA benchmarks built on
44
+ [Inspect Robots](https://github.com/robocurve/inspect-robots).
45
+
46
+ [![CI](https://github.com/robocurve/worldevals/actions/workflows/ci.yml/badge.svg)](https://github.com/robocurve/worldevals/actions/workflows/ci.yml)
47
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
48
+ [![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)](https://github.com/robocurve/worldevals/actions/workflows/ci.yml)
49
+ [![Built on Inspect Robots](https://img.shields.io/badge/built%20on-Inspect%20Robots-indigo)](https://github.com/robocurve/inspect-robots)
50
+
51
+ **[📖 Browse the catalog → worldevals.org](https://worldevals.org/)**
52
+
53
+ </div>
54
+
55
+ [Inspect Robots](https://github.com/robocurve/inspect-robots) is the *framework* (the "Inspect
56
+ AI for robotics"). **WorldEvals is the collection** — but unlike Inspect Evals'
57
+ monorepo, each benchmark here lives in **its own repository** so it owns its
58
+ release cadence, dependencies, hardware notes, and leaderboard. WorldEvals is the
59
+ lightweight index that ties them together: what benchmarks exist, what tasks each
60
+ provides, and how to install them.
61
+
62
+ - `inspect-robots list` tells you what's **installed**.
63
+ - `worldevals list` tells you what **exists** and how to get it.
64
+
65
+ ## Benchmarks
66
+
67
+ | Benchmark | Tasks | Tags | Status |
68
+ |---|--:|---|---|
69
+ | [KitchenBench](https://github.com/robocurve/kitchenbench) — 10 bimanual kitchen-manipulation tasks | 10 | kitchen, bimanual, manipulation | alpha |
70
+
71
+ ## Install & use
72
+
73
+ ```bash
74
+ # Inspect Robots isn't on PyPI yet, so install it from its git tag first:
75
+ pip install "inspect-robots @ git+https://github.com/robocurve/inspect-robots@v0.3.0"
76
+ pip install "worldevals @ git+https://github.com/robocurve/worldevals"
77
+
78
+ worldevals list # all benchmarks
79
+ worldevals list --tag bimanual # filter by tag
80
+ worldevals info kitchenbench # repo, install command, task keys
81
+ worldevals tasks # Inspect Robots tasks installed locally, by benchmark
82
+ ```
83
+
84
+ Then install a benchmark and run it through Inspect Robots:
85
+
86
+ ```bash
87
+ pip install "inspect-robots @ git+https://github.com/robocurve/inspect-robots@v0.3.0"
88
+ pip install "kitchenbench @ git+https://github.com/robocurve/kitchenbench"
89
+ inspect-robots run --task kitchenbench/pour_pasta --policy kitchen_scripted --embodiment kitchen
90
+ ```
91
+
92
+ ## Backends (run on real robots)
93
+
94
+ Benchmarks are embodiment-agnostic; **backend adapters** supply a concrete
95
+ `Policy` + `Embodiment` so a benchmark runs on real hardware or a simulator.
96
+ These are their own repos too (not catalog entries):
97
+
98
+ | Adapter | Policy · Embodiment | Stack |
99
+ |---|---|---|
100
+ | [inspect-robots-yam](https://github.com/robocurve/inspect-robots-yam) | `molmoact2` · `yam_arms` | [MolmoAct2](https://github.com/allenai/molmoact2) on [I2RT YAM](https://i2rt.com/products/yam-6-dof-arm) bimanual arms |
101
+ | [inspect-robots-so101](https://github.com/robocurve/inspect-robots-so101) | `lerobot` · `so_arm` | [LeRobot](https://github.com/huggingface/lerobot) policies (ACT, SmolVLA, π0, …) on [SO-ARM](https://github.com/TheRobotStudio/SO-ARM100) (SO-100 / SO-101) follower arms |
102
+
103
+ ```bash
104
+ inspect-robots run --task kitchenbench/pour_pasta --policy molmoact2 --embodiment yam_arms
105
+ ```
106
+
107
+ ## Add your benchmark
108
+
109
+ A benchmark is any repo that:
110
+
111
+ 1. depends on `inspect-robots`,
112
+ 2. defines one or more Inspect Robots `Task`s, and
113
+ 3. registers them via `[project.entry-points."inspect_robots.tasks"]` (and, if it ships
114
+ a sim/embodiment or policy, `inspect_robots.embodiments` / `inspect_robots.policies`).
115
+
116
+ To list it here, add a `Benchmark(...)` entry to
117
+ [`src/worldevals/catalog.py`](src/worldevals/catalog.py) and open a PR. A test
118
+ validates every entry (unique name, well-formed repo URL, ≥1 task key). See
119
+ [KitchenBench](https://github.com/robocurve/kitchenbench) as the reference
120
+ implementation.
121
+
122
+ ## Development
123
+
124
+ ```bash
125
+ uv venv && uv pip install -e ".[dev]" # inspect_robots resolved from the v0.3.0 tag
126
+ uv run pre-commit install
127
+ uv run pytest --cov # 100% coverage required
128
+ uv run ruff check . && uv run mypy
129
+ ```
130
+
131
+ ## Citation
132
+
133
+ If you use WorldEvals in your research, please cite it:
134
+
135
+ ```bibtex
136
+ @software{worldevals,
137
+ author = {Robocurve},
138
+ title = {WorldEvals: A curated catalog of physical-AI benchmarks},
139
+ year = {2026},
140
+ url = {https://github.com/robocurve/worldevals},
141
+ version = {0.3.0},
142
+ license = {MIT}
143
+ }
144
+ ```
145
+
146
+ ## License
147
+
148
+ [MIT](LICENSE)