armnet CLI¶
armnet-client installs several CLI entrypoints:
armnet --help # identity, secrets, volumes
armnet-policy-eval --help # evaluate a policy backend on a cell
armnet-lerobot-eval --help # evaluate a LeRobot policy on a cell
armnet-lerobot-train --help # train locally with background remote evals
armnet-openpi-eval --help # evaluate an OpenPI (pi0/pi0.5) policy on a cell
armnet-lerobot-teleop --help # remote-teleoperate a cell from a leader arm
armnet-lerobot-record --help # record a dataset via remote teleoperation
The policy and teleoperation commands have dedicated guides: Teleoperate and Record Datasets, Train and Deploy a LeRobot Policy, and Evaluate Policies. The sections below are a quick reference for the most common invocations.
Identity¶
armnet whoami
Prints the username associated with your API key.
Secrets¶
armnet secret list
armnet secret create huggingface-token hf_...
armnet secret delete huggingface-token
Secret values are not printed by list.
Volumes¶
armnet volume upload ./checkpoint openpi/checkpoints/my-checkpoint
armnet volume cp openpi/checkpoints/my-checkpoint ./checkpoint
armnet volume delete openpi/checkpoints/my-checkpoint
Uploads skip files that already exist in the cloud volume with the same hash,
unless --overwrite is provided.
LeRobot Evaluation¶
armnet-policy-eval \
--policy.path=volume://policies/my-policy \
--armnet.embodiment=lerobot/so-101 \
--armnet.task=assemble_block_tower \
--eval.n_episodes=10
Each eval episode is recorded as a LeRobot dataset using the same streaming
video encoding as data collection (software libsvtav1, which keeps episode
saves fast and produces training-friendly video). Override with
--armnet.vcodec, --armnet.encoder-threads, or disable streaming with
--armnet.streaming-encoding=false. The same options apply to
armnet-openpi-eval.
If your checkpoint is local, upload it while launching:
armnet-lerobot-eval \
--policy.path=./outputs/train/my_policy/checkpoints/005000/pretrained_model \
--armnet.volume_policy_path=policies/my-policy \
--armnet.embodiment=lerobot/so-101 \
--armnet.task=assemble_block_tower
OpenPI Evaluation¶
Evaluate an OpenPI (pi0 / pi0.5) checkpoint on a CUDA-capable cell. See Evaluate Policies:
armnet-policy-eval \
--policy.type=openpi \
--policy.path=volume://openpi/checkpoints/5000 \
--policy.config_name=pi05_so101_stacking_rings \
--armnet.n_episodes=3 \
--armnet.task="stack the rings" \
--armnet.secrets="{HF_TOKEN: huggingface-token}"
GR00T Evaluation¶
Evaluate a NVIDIA GR00T N1.7 checkpoint by selecting the GR00T backend:
armnet-policy-eval \
--policy.type=groot \
--policy.path=https://huggingface.co/pravsels/groot1.7_insert_candle \
--armnet.embodiment=lerobot/so-101 \
--armnet.task=insert_candle \
--armnet.n_episodes=1
LeRobot Training with Remote Evals¶
armnet-lerobot-train \
--output_dir=outputs/train/my_policy \
--save_freq=2000 \
--armnet.eval.n_episodes=10 \
--armnet.eval.embodiment=lerobot/so-101 \
--armnet.eval.task=assemble_block_tower
Remote Teleoperation¶
Drive a remote cell's follower from locally-attached leader arm(s), streaming the
follower back into Rerun — no data recorded (requires
pip install 'armnet-client[teleop]'). See
Teleoperate and Record Datasets:
armnet-lerobot-teleop \
--teleop.port=/dev/ttyACM0 \
--teleop.id=my_leader \
--armnet.duration_s=300
For a bimanual SO-101 cell, pass both local leader ports instead of
--teleop.port:
armnet-lerobot-teleop \
--teleop.left-port=/dev/ttyACM0 \
--teleop.right-port=/dev/ttyACM1 \
--teleop.id=my_bimanual_leader \
--armnet.task=<bimanual-task-slug> \
--armnet.duration_s=300
For bimanual jobs, set --armnet.task to the task served by the bimanual
cell so the job does not route to a single-arm SO-101 cell.
LeRobot Dataset Recording (Remote Teleop)¶
Record a LeRobot dataset on a remote cell by driving its follower from a
locally-attached leader arm, or a left/right leader pair for bimanual cells
(requires pip install 'armnet-client[teleop]'):
armnet-lerobot-record \
--teleop.port=/dev/ttyACM0 \
--teleop.id=my_leader \
--dataset.repo_id=my_user/so101_pick_place \
--dataset.single_task="Grab the black cube" \
--dataset.num_episodes=10 \
--secret HF_TOKEN=huggingface-token
For bimanual recording, use --teleop.left-port and --teleop.right-port, and
target the bimanual cell's task with --armnet.task.
The dataset is recorded inside the cell (your machine only streams leader
joint positions) and pushed to the HuggingFace Hub when the session ends
(--no-push-to-hub to skip). Camera frames are encoded to video in real time
on the cell (LeRobot streaming encoding) so saving an episode is near-instant;
tune or disable it with --dataset.vcodec (default libsvtav1),
--dataset.encoder-threads (default 2), or --dataset.no-streaming-encoding.
The default libsvtav1 (software) is used instead of auto because hardware
encoders ignore LeRobot's g=2 keyframe interval and emit a large GOP that
makes random-access training reads very slow; pass --dataset.vcodec=auto only
when training-read speed does not matter.
LeRobot's standard recording shortcuts work during the session:
- Right Arrow: save the episode; the remote arm returns to rest and the next episode starts once a cell operator confirms the workspace reset.
- Left Arrow: discard the episode and re-record it (same reset flow).
- Esc: stop the session, finalize and upload the dataset.