RepoPilotOpen in app →

huggingface/lerobot

🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning

Healthy

Healthy across the board

weakest axis
Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained — safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit today
  • 30+ active contributors
  • Distributed ownership (top contributor 39% of recent commits)
  • Apache-2.0 licensed
  • CI configured
  • No test directory detected

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/huggingface/lerobot)](https://repopilot.app/r/huggingface/lerobot)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/huggingface/lerobot on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: huggingface/lerobot

Generated by RepoPilot · 2026-05-07 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/huggingface/lerobot shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO — Healthy across the board

  • Last commit today
  • 30+ active contributors
  • Distributed ownership (top contributor 39% of recent commits)
  • Apache-2.0 licensed
  • CI configured
  • ⚠ No test directory detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live huggingface/lerobot repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/huggingface/lerobot.

What it runs against: a local clone of huggingface/lerobot — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in huggingface/lerobot | Confirms the artifact applies here, not a fork | | 2 | License is still Apache-2.0 | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | Last commit ≤ 30 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>huggingface/lerobot</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of huggingface/lerobot. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/huggingface/lerobot.git
#   cd lerobot
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of huggingface/lerobot and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "huggingface/lerobot(\\.git)?\\b" \\
  && ok "origin remote is huggingface/lerobot" \\
  || miss "origin remote is not huggingface/lerobot (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
  && ok "license is Apache-2.0" \\
  || miss "license drift — was Apache-2.0 at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/huggingface/lerobot"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

LeRobot is a PyTorch-based robotics framework that provides hardware-agnostic control interfaces, standardized Parquet+video datasets hosted on Hugging Face Hub, and pretrained end-to-end learning policies for real-world robot deployment. It abstracts hardware specifics (SO-100, Reachy 2, Koch, etc.) behind a unified Robot class while enabling efficient dataset streaming and model training across diverse robotic platforms. Monorepo structure: lerobot/robots/ contains hardware-specific implementations (MyRobot pattern); benchmarks/video/ holds performance testing; docker/ has environment-specific builds for each benchmark (libero, metaworld, robocasa, etc.); .github/workflows/ orchestrates testing across Python versions and dependency configurations; docs in docs/source/ with mdx files for feature documentation (act.mdx, action_representations.mdx, async.mdx).

👥Who it's for

Robotics researchers and engineers building production robot systems who need standardized dataset formats and pretrained policies; ML engineers contributing datasets or policies to the Hugging Face Hub; hardware teams integrating new robot platforms without rewriting control logic; academic labs implementing end-to-end learning without infrastructure overhead.

🌱Maturity & risk

Actively developed with comprehensive CI/CD (12 workflow files including benchmarks, Docker builds, security scans), extensive test coverage (fast_tests, full_tests, latest_deps_tests), and documentation generation workflows. Version published to PyPI with semantic versioning badges. Appears production-ready for research/deployment given Hugging Face backing and multiple benchmark suites, though younger than enterprise robotics stacks.

Heavy reliance on external ecosystem (PyTorch, Hugging Face Hub, multiple benchmark environments: LIBERO, MetaWorld, RoboCasa, RoboMimic). Breaking changes possible as it's pre-1.0 (implied by version badge). Hardware integration testing requires physical robots or simulators, creating CI brittleness. Dependency on Hub availability for dataset loading could cause silent failures in offline scenarios.

Active areas of work

Active maintenance visible via multiple workflow definitions for CI quality (quality.yml), dependency testing (latest_deps_tests.yml), documentation builds, and benchmark comparisons. Support for diverse benchmarks (LIBERO, MetaWorld, RoboCasa, RoboMimic, RobotWin, VLABench) indicates ongoing ecosystem integration. CLAUDE.md and claude.yml suggest recent Claude AI integration work.

🚀Get running

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e .
lerobot-info

Or install from PyPI: pip install lerobot. Refer to docs/source for detailed installation per https://huggingface.co/docs/lerobot/installation

Daily commands:

make help  # Check available targets
pip install -e .  # Development install
lerobot-info  # Verify CLI works

For benchmarks: python benchmarks/video/run_video_benchmark.py. Specific benchmark environments require Docker (see docker/Dockerfile.benchmark.* for environment setup).

🗺️Map of the codebase

  • .github/workflows/full_tests.yml: Defines comprehensive test matrix across Python versions and dependency configurations; critical for understanding CI expectations and test coverage
  • README.md: Documents the unified Robot interface pattern and quick-start installation; establishes the core abstraction contract
  • docker/Dockerfile.benchmark.libero: Example environment definition for benchmark execution; shows dependency isolation and reproducibility strategy
  • CONTRIBUTING.md: Specifies contribution workflows, coding standards, and PR review process
  • benchmarks/video/run_video_benchmark.py: Entry point for performance evaluation; shows how policies are benchmarked against standard environments
  • .github/workflows/docker_publish.yml: Manages containerized environment distribution; critical for reproducible deployments across benchmark suites

🛠️How to make changes

New robot hardware: Create lerobot/robots/yourrobot.py following MyRobot pattern shown in README, implement connect(), get_observation(), send_action(). New policy: Add to policy registry in training code. New benchmark: Create docker/Dockerfile.benchmark.yourenv and update .github/workflows/benchmark_tests.yml. Bug fixes: Run make targets (inferred from Makefile) before PR. Dataset work: Use LeRobotDataset in lerobot/ (specific path not visible but referenced in README).

🪤Traps & gotchas

Hugging Face Hub authentication: Dataset loading may fail silently if huggingface_hub login is missing (check CONTRIBUTING.md for credential setup). Hardware-specific imports: Attempting to use lerobot.robots.reachy2 on a system without Reachy 2 dependencies will error; imports are not lazy. Benchmark environment conflicts: Running multiple benchmark Docker images sequentially on limited disk can fail due to image size (each Dockerfile downloads full environments). Action representation format: Different robots use different action spaces (may be detailed in action_representations.mdx); mismatched formats silently produce poor policy performance. Parquet schema assumptions: Datasets must match strict column schemas; malformed Parquet files from custom data will fail during streaming without clear error messages.

💡Concepts to learn

  • Hardware Abstraction Layer (HAL) — LeRobot's core design pattern; the unified Robot interface decouples policy code from robot-specific implementations, allowing one policy to control SO-100, Reachy 2, or custom robots without code changes
  • End-to-End Learning / Imitation Learning — LeRobot's fundamental approach: policies learn to map observations (images, state) directly to actions from demonstration data, avoiding hand-crafted reward functions or explicit planning
  • Parquet + Columnar Storage — LeRobotDataset's storage format enables efficient subset selection and streaming of massive robotic trajectories without loading entire episodes into memory
  • Multi-Benchmark Evaluation — LeRobot's testing strategy (LIBERO, MetaWorld, RoboCasa, RoboMimic, etc.) validates transfer across simulator families and real-to-sim gaps; critical for claiming generalization
  • Model Hub / Model Sharing — Policies and datasets hosted on Hugging Face Hub enable distributed research and reduce cold-start for practitioners; LeRobot's distribution mechanism for reproducibility
  • Trajectory Dataset Format Standardization — LeRobotDataset schema (Parquet + video) unifies heterogeneous robot data (different action spaces, frame rates, sensors); reduces per-dataset custom parsing code
  • Asynchronous Policy Execution — Referenced in docs/source/async.mdx; allows policies to operate independently from sensor polling, reducing control latency on resource-constrained robots
  • openai/gym — Defines the standard observation/action interface pattern that LeRobot's Robot class emulates for hardware abstraction
  • pytorch/pytorch — Core dependency for all policy training and inference; LeRobot assumes PyTorch Lightning patterns for model training
  • huggingface/datasets — Provides the dataset loading and caching infrastructure that LeRobotDataset wraps for Parquet+video streaming
  • google-deepmind/open_x_embodied — Complementary robotics dataset and training framework; represents alternative standardized dataset format that LeRobot competes with
  • NVIDIA/Eureka — Related robotics learning framework from industry partner that may share benchmark environments or evaluation protocols

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add integration tests for environment processors and dataset pipelines

The repo has extensive documentation on env_processor.mdx and debug_processor_pipeline.mdx, but there's no visible dedicated test file for the processor pipeline logic. Given the complexity of data processing workflows in robotics (different camera formats, action representations, etc.), comprehensive integration tests would prevent regressions when modifying processor chains.

  • [ ] Create tests/test_processor_pipeline.py with fixtures for different processor configurations
  • [ ] Add tests for env_processor.py workflows referenced in docs/source/env_processor.mdx
  • [ ] Test processor chain composition with sample robot data from different benchmark environments (LIBERO, MetaWorld, RoboCasa)
  • [ ] Add CI workflow step to fast_tests.yml to run processor pipeline tests on each PR

Add monitoring and validation tests for benchmark Dockerfiles

The repo has 8 specialized benchmark Dockerfiles (libero, libero_plus, metaworld, robocasa, robocerebra, robomme, robotwin, vlabench) but no apparent testing to ensure they build successfully or validate their contents. A CI workflow to build and validate these could catch dependency conflicts early.

  • [ ] Create .github/workflows/dockerfile_validation.yml to build each benchmark Docker image
  • [ ] Add a validation script (docker/validate_benchmarks.py) that tests basic imports and environment setup in each image
  • [ ] Run this workflow on docker/* file changes and daily schedule to catch upstream dependency issues
  • [ ] Document expected build times and resource requirements in docker/README.md

Add comprehensive tests for policy/agent loading and action representation conversions

The docs reference multiple action representations (docs/source/action_representations.mdx) and several policy implementations (ACT in docs/source/act.mdx, custom policies in docs/source/bring_your_own_policies.mdx), but there's no visible test file verifying that policies load correctly and correctly handle different action representation formats. This is critical for preventing silent failures when users load pre-trained models.

  • [ ] Create tests/test_policy_loading.py with tests for loading policies with different action representations
  • [ ] Add tests that verify action tensors are correctly converted between representations (e.g., normalized joint angles, end-effector poses, etc.)
  • [ ] Test the ACT model architecture with sample inputs as documented in docs/source/act.mdx
  • [ ] Add tests for custom policy integration as described in docs/source/bring_your_own_policies.mdx
  • [ ] Include these tests in the fast_tests.yml workflow

🌿Good first issues

  • Add unit tests for Hardware Abstraction: The lerobot/robots/ directory likely lacks comprehensive tests for the base Robot interface and each hardware implementation. Create tests/robots/test_robot_interface.py with mock tests for connect(), get_observation(), send_action() contract to improve robustness before hardware-specific issues arise.
  • Document Action Representation Mapping: docs/source/action_representations.mdx exists but likely needs a concrete table showing action space format for each supported robot (SO-100, Reachy 2, Koch, etc.); add a comparison chart and worked example converting model outputs to hardware commands.
  • Extend Video Benchmark to Missing Environments: benchmarks/video/ only runs video benchmarks; add support for benchmark suites defined in docker/Dockerfile.benchmark.* (robocasa, robomme, robotwin, vlabench) by extending run_video_benchmark.py to orchestrate Docker container execution and parse results into a unified report.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • e99c55a — feat(policies): add EO-1 model (#3403) (HaomingSong)
  • 408e0ca — fix(robots): openarm features with openarmmini (#3524) (imstevenpmwork)
  • ce24063 — feat(dagger): adding smooth handover (#3506) (Maximellerbach)
  • 8293471 — chore(dep): bump transformers to 5.4.0 (#3374) (imstevenpmwork)
  • 401a217 — chore(ci): increase time stale (#3507) (imstevenpmwork)
  • 40094b0 — chore(ci): upgrade docker internal (#3505) (imstevenpmwork)
  • fdbfc01 — fix(peft): fix LoRA resume from Hub (PosixPath + double wrap) (#3485) (jashshah999)
  • d656da8 — fix(pi): keep training sampling outside compiled forwards (#3487) (HaomingSong)
  • b5f65e5 — Expose sarm package API and ship reward model card template (#3477) (s1lent4gnt)
  • cd6b43e — fix(train): migrate legacy RA-BC fields in train config loading (#3480) (s1lent4gnt)

🔒Security observations

The LeRobot repository demonstrates a reasonable security posture for an open-source research/production hybrid project, with established security reporting channels and CI/CD pipelines. However, critical gaps exist in dependency version pinning, Docker base image versioning, and incomplete security policy documentation. For a robotics system increasingly used in production, strengthening supply chain security (SBOM, lock files, container image scanning) and completing security disclosure procedures is essential. The presence of a security workflow suggests active security consideration, but visibility limitations prevent full assessment. No evident injection vulnerabilities or hardcoded secrets detected in the file structure provided.

  • Medium · Missing Dependency Pinning in Production — Root directory - dependency management files. The repository lacks a comprehensive lock file (requirements.lock or Pipfile.lock) visible in the provided structure. Without pinned versions, dependency resolution could pull vulnerable or incompatible versions during installation, particularly for robotics-critical dependencies. Fix: Implement and maintain a lock file (pip-tools, poetry, or pipenv) to ensure reproducible and auditable builds. Pin all direct and transitive dependencies to specific versions.
  • Medium · Docker Image Base Layer Security — docker/Dockerfile.benchmark.* files (libero, metaworld, robocasa, robocerebra, robomme, robotwin, vlabench, internal, user). Multiple Dockerfile.benchmark.* files present without visible version pinning of base images. Unversioned base images can introduce uncontrolled vulnerabilities in production robotic deployments. Fix: Pin base image versions to specific digest hashes (e.g., 'FROM python:3.10.13-slim@sha256:...' instead of 'FROM python:3.10'). Regularly update and audit base image security patches.
  • Medium · Incomplete Security Policy Documentation — SECURITY.md. The SECURITY.md file is truncated and incomplete. It lacks details on vulnerability disclosure timelines, supported versions, and patch procedures critical for production robotics systems. Fix: Complete the security policy with: (1) Vulnerability response SLA (target time to triage/patch), (2) List of supported/unsupported versions, (3) Patch release procedures, (4) Security advisory notification mechanism.
  • Low · No Evidence of SBOM (Software Bill of Materials) — Repository root - CI/CD configuration. No visible Software Bill of Materials (SBOM) or dependency scanning configuration. For robotics systems, transparent dependency tracking is crucial for supply chain security. Fix: Implement automated SBOM generation using tools like CycloneDX or SPDX. Add dependency scanning in CI/CD pipelines (.github/workflows/security.yml exists but content not provided).
  • Low · Potential Credential Exposure in Workflow Files — .github/workflows/* files. Multiple GitHub Actions workflows exist (.github/workflows/) that may contain secrets management. Without visible secrets scanning, credentials could be accidentally committed. Fix: Ensure all workflows use GitHub Secrets for sensitive data. Implement pre-commit hooks and GitHub Secret scanning. Audit workflow files for hardcoded API keys or tokens.
  • Low · Missing Security Headers in Documentation — .github/workflows/documentation.yml, documentation-upload-pr.yml. Documentation deployment workflows present without evidence of security header configuration (CSP, HSTS, X-Frame-Options) for the published docs site. Fix: Configure security headers in documentation deployment. Add Content-Security-Policy and other protective headers when serving docs.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.