Skip to content
Back to skills

Agibot Conversion

ASecurity

"Routes AgiBotWorld raw-tree conversion requests to LeRobot,

  • 247 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
businessnodeapibackend

Works with

  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill agibot-conversion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agibot Conversion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agibot Conversion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-agibot-conversion/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-agibot-conversion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "agibot-conversion"
description: "Routes AgiBotWorld raw-tree conversion requests to LeRobot,
  covering end-effector selection, task filtering, episode alignment, depth and
  video handling, execution controls, and recovery."
disable-model-invocation: true
metadata:
  disco-role: operating
license: MIT
---

# AgiBotWorld conversion

Use this route when a user needs to convert an AgiBotWorld/AgiBot-World raw
release into a LeRobot dataset, select gripper/dexhand/tactile tasks, preserve
AgiBot state and action names, or diagnose an AgiBot conversion failure. This
route is dataset-specific. Load [`generic-conversion`](../generic-conversion/SKILL.md)
for shared adapter lifecycle, temporary aggregation, local/Ray executor
semantics, resume logs, cleanup, and Hub publication; do not duplicate that
pipeline here.

## Safety and compatibility boundary

- Treat the raw tree and the output root as separate resources. Inventory both
  before scheduling work, and never use the source tree as an output root.
- Prefer a read-only structural preflight, `--executor local`, and `--debug`
  for the first run. The default executor is Ray, but Ray is optional for a
  single-node conversion.
- Do not enable `--push-to-hub` until the local dataset opens and its task,
  episode, feature, and modality counts have been reviewed. Require an
  explicit `--repo-id` and confirm the destination is not an unintended
  existing dataset.
- The AgiBot implementation uses a custom metadata flush and dataset writer.
  It is version-sensitive and must be checked against the installed LeRobot
  API before conversion. In the verified environment, current LeRobot exposes
  `LeRobotDataset` and `LeRobotDatasetMetadata` under
  `lerobot.datasets.lerobot_dataset`, while the source import style also
  expects exports from `lerobot.datasets` and `lerobot.datasets.dataset_writer`.
  Treat an import-layout mismatch as a blocking compatibility issue, not as a
  reason to edit metadata by guesswork.
- Do not run a conversion, Ray cluster, video decode, download, or Hub push
  while only planning or validating this route.

## Route checklist

1. Confirm the release root contains `task_info/`, `observations/`, and
   `proprio_stats/`; confirm that the requested task IDs and episode IDs are
   present in the release rather than inferred from a filename alone.
2. Choose exactly one `--eef-type`: `gripper`, `dexhand`, or `tactile`. Keep
   task families separate. The gripper route means the tasks not reserved for
   dexhand or tactile in the built-in mapping; it is not a universal “all
   tasks” switch.
3. Check the selected task JSON records, HDF5 state/action paths, every required
   RGB/tactile video, and depth frame count when `--save-depth` is requested.
   Use the schemas in [data formats](references/data-formats.md).
4. Decide task granularity with `--episodes-per-task`. Use `1` for load
   balancing and isolation, or a larger value when task-start overhead and
   memory are acceptable. Chunk names are deterministic but are not semantic
   task IDs.
5. Select execution and resource flags from [workflows](references/workflows.md),
   including `--executor`, `--cpus-per-task`, `--tasks-per-job`, `--workers`,
   `--resume-dir`, and `--debug`. Start locally; only use Ray after cluster
   ownership, shared paths, optional dependencies, and worker memory have been
   confirmed. Budget roughly 20 GiB per active task and about 3 CPU cores per
   task as a starting point, then reduce concurrency if memory is constrained.
6. Preserve the frame task label (`task_name | init_scene_text`) and the
   per-episode `action_config`. Do not flatten or rename nested state/action
   keys without recording an explicit downstream schema change.
7. Interpret failures conservatively: missing video is skipped before loading,
   corrupt video is skipped when episode saving fails, action longer than state
   skips the episode, and depth count mismatch must be investigated rather than
   padded silently. See [troubleshooting](references/troubleshooting.md).
8. Validate the local result before resume or publication: feature names and
   shapes, task labels, action metadata, episode counts, depth presence, video
   readability, and absence of unexpected temporary output. Then hand shared
   cleanup, aggregation, resume, and Hub behavior to `generic-conversion`.

## AgiBot-specific transformation

The converter reads state and action arrays from `proprio_stats.h5`, emits one
frame per state sample, and attaches the natural-language task label to every
frame. Empty action arrays become zero-valued frames of the configured shape.
Short action arrays are reconstructed from the corresponding state stream and
placed at the recorded action indices when those indices exist; an empty
`action/.../index` may fall back to the joint index. An action stream longer
than the state stream is treated as corrupt and the episode is skipped. This is
alignment policy, not generic padding and must be recorded in provenance.

RGB and tactile streams remain video features; optional head depth is loaded as
float32 image data from depth frames and scaled from millimetres to metres. The
custom writer stores task indices, action configuration, episode statistics,
and video references while writing episode metadata as Parquet. These details
are summarized, with no source-code dependency, in the bundled references.

## Difficult synthetic case

For a mixed raw tree containing one gripper task, one dexhand task, and one
short-action episode, first filter by `--eef-type` and explicit `--task-ids`,
then verify that the short action is reconstructed only when the index/state
contract is valid. Add a task with a missing depth frame and another with a
missing or corrupt video: the video case should be skipped with a reason; the
depth case should stop or be excluded by preflight rather than silently
inventing frames. This case is suitable for an integration usability test and
requires no real AgiBot data.

## Handoff and evidence

Report the source release shape, selected end-effector and tasks, skipped
episodes with reasons, alignment and depth decisions, execution/resource
flags, compatibility checks, output validation, and any unresolved optional
backend gap. Evidence for this route was distilled from the repository README,
the AgiBot conversion README, `agibot_h5.py`, `agibot_utils/agibot_utils.py`,
`agibot_utils/config.py`, and `agibot_utils/lerobot_utils.py`; these artifact
names are provenance only and are not runtime dependencies.

Files in this skill

  • SKILL.md6.4 KB
  • references/data-formats.md8 KB
  • references/troubleshooting.md10 KB
  • references/workflows.md7.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…