executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
agibot-conversionRoutes AgiBotWorld raw-tree conversion requests to LeRobot, covering end-effector selection, task filtering, episode alignment, depth and video handling, execution controls, and recovery.
Independent GitHub snapshot · Automated classification · Original documentation governs
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
for shared adapter lifecycle, temporary aggregation, local/Ray executor
semantics, resume logs, cleanup, and Hub publication; do not duplicate that
pipeline here.
--executor local, and --debug
for the first run. The default executor is Ray, but Ray is optional for a
single-node conversion.--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.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.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.--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.--save-depth is requested.
Use the schemas in data formats.--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.--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.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.generic-conversion.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.
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.
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.