Borrowing it
Nothing to install: this file belongs to allenai/vla-evaluation-harness. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/allenai/vla-evaluation-harness/main/.claude/skills/add-benchmark/SKILL.mdgit clone --depth 1 https://github.com/allenai/vla-evaluation-harnessWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/allenai/vla-evaluation-harness/add-benchmark)<a href="https://agentmods.dev/skills/allenai/vla-evaluation-harness/add-benchmark"><img src="https://agentmods.dev/badge/skills/allenai/vla-evaluation-harness/add-benchmark/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/allenai/vla-evaluation-harness/add-benchmark"><img src="https://agentmods.dev/badge/skills/allenai/vla-evaluation-harness/add-benchmark.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00078 | $0.02251 |
| Opus 5 | $0.00039 | $0.01125 |
| Sonnet 5 | $0.00016 | $0.00450 |
| Haiku 4.5 | $0.00008 | $0.00225 |
Grade A, and why
add-benchmark scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 230 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Add Benchmark
Integrate a new simulation benchmark into vla-eval. Benchmarks run inside Docker containers and communicate with model servers over WebSocket + msgpack.
1. Gather requirements
Ask the user for (if not already provided):
- Benchmark name (e.g.
maniskill3) - Simulation framework (e.g. MuJoCo, SAPIEN, PyBullet, Isaac Sim)
- Key pip dependencies needed inside Docker
- Observation format — cameras, resolution, whether to include proprioceptive state
- Action space — dimension, format (e.g. 7-DoF delta EEF + gripper)
- Success condition — how to detect task completion
- Max steps per episode
2. Create the benchmark module
Create src/vla_eval/benchmarks/<name>/:
src/vla_eval/benchmarks/<name>/
├── __init__.py # empty
├── benchmark.py # main implementation
└── utils.py # optional helpers
Subclass StepBenchmark from vla_eval.benchmarks.base and implement the required methods:
from typing import Any
import numpy as np
from vla_eval.benchmarks.base import StepBenchmark, StepResult
from vla_eval.specs import DimSpec
from vla_eval.types import Action, EpisodeResult, Observation, Task
class MyBenchmark(StepBenchmark):
def __init__(self, **kwargs: Any) -> None:
super().__init__()
# Accept benchmark-specific params from config YAML `params:` section.
# Lazily import heavy deps (MuJoCo, SAPIEN) — NOT at module level,
# because the registry resolves the class without loading the sim.
...
# --- Required methods (6) ---
def get_tasks(self) -> list[Task]:
# Return list of task dicts. Each MUST have a "name" key.
# May include "suite" for task filtering.
...
def reset(self, task: Task) -> Any:
# Reset env for task. Store env on self. Return initial raw observation.
# task dict has "episode_idx" (int) injected by the orchestrator.
...
def step(self, action: Action) -> StepResult:
# action dict has "actions" key (np.ndarray from model server).
# Return StepResult(obs, reward, done, info).
...
def make_obs(self, raw_obs: Any, task: Task) -> Observation:
# Convert raw env observation to dict for model server.
# Convention:
# {"images": {"cam_name": np.ndarray HWC uint8},
# "task_description": str}
# Optionally add "state": np.ndarray for proprioception.
...
def get_step_result(self, step_result: StepResult) -> EpisodeResult:
# Extract episode result from the final StepResult.
# Must return at least {"success": bool}.
...
# --- Optional overrides ---
def check_done(self, step_result: StepResult) -> bool:
# Default: step_result.done. Override for custom termination logic.
return step_result.done
def get_action_spec(self) -> dict[str, DimSpec]:
# Declare the action format this benchmark's env consumes.
# The orchestrator compares this against the model server's spec
# and warns on mismatches — catching convention bugs early.
...
def get_observation_spec(self) -> dict[str, DimSpec]:
# Declare the observation format this benchmark produces.
...
def get_metric_keys(self) -> dict[str, str]:
# Declare which metrics from get_step_result() to aggregate.
# Default: {"success": "mean"} (= success rate).
# Aggregation options: "mean", "sum", "max", "min".
return {"success": "mean"}
def get_metadata(self) -> dict[str, Any]:
# Return {"max_steps": N} for benchmark default.
return {}
def cleanup(self) -> None:
# Release resources (envs, renderers). Called at end of evaluation.
...
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 230 lines · 78 tokens per session scan A 7be89501e6b0
add-benchmark is a skill published in the GitHub repository allenai/vla-evaluation-harness (591 stars, last pushed 8d ago), licensed Apache-2.0. It adds 78 tokens to every session and 2,251 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
research-engineer
An uncompromising Academic Research Engineer. Operates with absolute scientific rigor, objective criticism, and zero flair. Focuses on theoretical correctness, formal verification, and optimal implementation across any required technology.
train-pose
Train/evaluate WiFi pose models honestly — camera-supervised (MediaPipe + CSI) and camera-free (WiFlow), always checked against the mean-pose baseline before any PCK is quoted.
experiment-audit
A review step that checks whether an experiment's reported results are supported by real data and a sufficiently broad test.
i4h-catheter-navigation-e2e
End-to-end smoke for catheter navigation covering setup, digital twin, DRR, and unit tests. Use when asked to run the full catheter workflow smoke or demo the v0.7 pipeline.
i4h-catheter-navigation-render-drr
Render a single DRR fluoroscopy frame from a CT cache or synthetic phantom. Use when asked to render DRR, generate a fluoro image, or smoke-test the Slang renderer.
i4h-catheter-navigation-smoke
Run CPU-only fluorosim smoke tests (imports, preprocessing, CLI parsers). Use when asked to smoke-test catheter navigation in CI or without a GPU.