# LeRobot Documentation Redesign — Proposal **Status:** Draft for maintainer review · **Author:** Dev Rel · **Date:** June 2026 **Scope:** Information architecture + UX redesign of https://huggingface.co/docs/lerobot (source: `docs/source/`) --- ## 1. Executive summary **The problem, in five points:** 1. **No guided beginner path.** "Get started" is three pages (landing, install, CLI cheat-sheet). After that, a newcomer lands in a "Tutorials" section that mixes the core 652-line SO-101 walkthrough (`il_robots.mdx`) with RL (950-line `hilserl.mdx`), PEFT, multi-GPU, and rename-map content — four different audiences in one flat list. 2. **Zero decision guidance.** 11 robot pages, 12 policy pages, 10 benchmark pages — all flat alphabetical-ish lists. Nothing answers "which robot should I buy?", "which policy after ACT?", "which benchmark fits my claim?". 3. **The best beginner content isn't on the docs site.** `AGENT_GUIDE.md` (repo root) contains the most complete procedural guidance we have — data-collection golden rules, policy selection by VRAM tier, training-duration heuristics, eval success-rate targets — and none of it is published. 4. **Structural debt.** 14 orphan `policy_*_README.md` files sit in `docs/source/` unreferenced by the toctree (verbatim hand-copies of `src/lerobot/policies/*/README.md`); 6 of 17 CLI commands are completely undocumented; 1 of 15 teleoperators has a doc page; there is no troubleshooting page and no `_redirects.yml`. 5. **Pages do too many jobs.** Tutorial, how-to, and reference content is interleaved (e.g., `lerobot-dataset-v3.mdx` is simultaneously a format spec, a Python API guide, and a migration guide), which makes every page long and none of them skimmable. **The proposal, in five points:** 1. **A numbered "Learn: your first robot" course** (FastAPI-style): 11 small CLI-only pages taking an SO-101 owner from install to a trained, evaluated ACT policy. Each page ends with a checkpoint and a "Next" link. A one-page no-hardware quickstart runs in parallel. 2. **A sidebar that reads top-to-bottom as increasing expertise**, organized into 17 sections: Get started → task-oriented how-tos (Collect data / Train / Deploy & evaluate) → hardware catalogs → policy catalogs → concepts → RL → extending → reference → community. 3. **Every catalog section opens with a comparison/decision page**: Choosing a robot, Teleoperator overview, Choosing a policy, Reward models overview, Choosing a benchmark. 4. **Publish the missing content**: AGENT_GUIDE.md's tips become real docs pages; a full CLI reference covers all 17 commands; a symptom-organized troubleshooting page aggregates fixes currently buried across five pages. 5. **Minimal URL breakage**: existing slugs are kept wherever possible. Only **2 redirects** are needed (`cheat-sheet → cli_reference`, `il_robots → learn/index`); everything else is a toctree reposition. **Effort estimate:** ~4–5 person-weeks across 5 phases; phases 3 and 5 are parallelizable and community-friendly (see §9). --- ## 2. Current-state audit ### 2.1 By the numbers | Metric | Value | |---|---| | Files in `docs/source/` (excl. `_toctree.yml`) | 90 | | Pages in the toctree | 76 | | Orphan files (on disk, not in toctree) | 14 (`policy_*_README.md`) | | Top-level sidebar sections | 15, all flat (no nesting) | | Longest pages | `hilserl.mdx` ~950 lines · `il_robots.mdx` ~650 · `so100.mdx` ~640 | | CLI commands in `pyproject.toml [project.scripts]` | 17 — **6 with zero doc presence** (`lerobot-find-cameras`, `lerobot-setup-can`, `lerobot-find-joint-limits`, `lerobot-train-tokenizer`, `lerobot-imgtransform-viz`, `lerobot-info`) | | Teleoperators in `src/lerobot/teleoperators/` | 15 — **1 documented** (`phone_teleop.mdx`); keyboard, gamepad, leader arms covered only implicitly inside robot/tutorial pages | | Camera backends | 4 — `zmq` undocumented, `reachy2_camera` implicit | | Policies in `src/lerobot/policies/` | 19 — `diffusion`, `tdmpc`, `vqbet` have orphan READMEs but **no doc page**; `sac`, `gaussian_actor` undocumented | | Redirect infrastructure | None (`_redirects.yml` does not exist) | ### 2.2 Prioritized UX problems **Critical (blocks the main funnel):** | # | Problem | Evidence | |---|---|---| | C1 | No linear beginner path: install → ??? | "Get started" = `index.mdx` (brand copy) + `installation.mdx` + `cheat-sheet.mdx`. The actual path lives inside `il_robots.mdx`, filed under "Tutorials" with 9 unrelated pages. | | C2 | No "which robot do I buy?" guidance | 11 robot pages, no comparison. SO-101 vs SO-100 relationship is never stated; SO-100's page is *longer* than SO-101's. | | C3 | `il_robots.mdx` monolith | One 652-line page covers calibrate + teleoperate + cameras + record + train + evaluate, doubling every step in CLI *and* Python, all SO-101-specific despite the generic title. | | C4 | Best procedural content unpublished | `AGENT_GUIDE.md` §5 (data tips), §6 (policy choice), §7 (training duration), §8 (eval targets) exist only in the repo root. | | C5 | No hardware-free on-ramp | No "train on a Hub dataset in 15 minutes" page; `notebooks.mdx` is 30 lines of links. | **High (breaks common tasks):** | # | Problem | Evidence | |---|---|---| | H1 | Training guidance scattered | Spread across `act.mdx`, `hardware_guide.mdx`, `multi_gpu_training.mdx`, `il_robots.mdx` — no single "how to train" page. | | H2 | No policy comparison/decision page | 12 policy pages; ACT says "recommended first" but nothing maps VRAM/task/data-size → policy. | | H3 | Recording how-to fused with format spec | `il_robots.mdx` (procedure) vs `lerobot-dataset-v3.mdx` (spec + Python API + migration) — neither is a clean reference or a clean guide. | | H4 | No benchmark selection guidance | 10 benchmark pages in a flat list; "Adding a New Benchmark" (contributor content) sits *first*. | | H5 | No troubleshooting page | Fixes are buried in `installation.mdx`, `il_robots.mdx`, `lerobot-dataset-v3.mdx` "Common Issues", and AGENT_GUIDE §5.8. | | H6 | Teleoperators near-invisible | 15 implementations, 1 page. Keyboard/gamepad (`--teleop.type=keyboard|gamepad`) have no docs at all. | **Medium / low (debt and polish):** | # | Problem | Evidence | |---|---|---| | M1 | 14 orphan `policy_*_README.md` in `docs/source/` | Verbatim copies of `src/lerobot/policies/*/README.md`; not in toctree, not built; no sync script exists (verified by repo-wide grep) — hand-copied and already drifting. | | M2 | 6/17 CLI commands undocumented | See §2.1. `cheat-sheet.mdx` covers only the main workflow commands. | | M3 | Mixed-audience sections | "Tutorials" holds beginner + RL-researcher + contributor content; "Benchmarks" holds user + contributor content. | | M4 | Naming inconsistencies | "SO-101"/"SO101"/"so101" in prose; `` vs `> [!NOTE]` admonitions mixed; hyphen vs underscore slugs (`lerobot-dataset-v3` vs `multi_gpu_training`). | | M5 | Section opener pages missing | "Robot Processors" starts at "Introduction to Robot Processors" (good) but Robots/Policies/Benchmarks/Teleoperators start with an arbitrary instance page. | --- ## 3. What great docs do (and what we borrow) **Diátaxis** (diataxis.fr — adopted by Canonical, Cloudflare, Gatsby): documentation serves four distinct needs that should never share a page — *tutorials* (learning by doing), *how-to guides* (task recipes), *reference* (lookup facts), *explanation* (concepts). LeRobot's biggest pages fail precisely because they fuse three of these. → **We borrow:** the four-way separation as the organizing principle of the new sidebar; splits like `lerobot-dataset-v3` (spec) vs `using_lerobot_dataset` (how-to). **FastAPI**: famous for a numbered, linear tutorial where each chapter is small, runnable, and builds on the previous one; advanced topics live in a separate section so the learn-path is never interrupted. → **We borrow:** the numbered `learn/` course with one outcome per page and a "Next:" footer; advanced content (RL, multi-GPU) moved out of the beginner's way. **Ultralytics YOLO**: handles a many-models × many-tasks × many-modes matrix with *orthogonal* navigation axes plus comparison pages, instead of forcing one hierarchy. → **We borrow:** Robots, Teleoperators, Policies, and Benchmarks as separate catalog sections, each opening with a comparison table ("Choosing a…" pages). **HF Transformers** (same doc-builder tooling — everything it does, we can do): card-grid landing page, `` tabs with **persistent selection** (pick PyTorch once, every code block follows), nested collapsible toctree sections, subdirectory slugs (`model_doc/bert`), `_redirects.yml`. → **We borrow:** card-based `index`, site-wide `` / `id="os"` / `id="train_env"` tabs, a collapsible nested course section, and the redirects file. --- ## 4. Proposed information architecture **17 sections, ~101 toctree pages** (today: 15 sections, 76 pages — growth is almost entirely the 11 deliberately-small course pages; the 14 orphans are absorbed into 2 pages). The sidebar reads top-to-bottom as increasing expertise. Slugs in parentheses; annotations: **[NEW]** to be written · **[KEPT]** same file/slug · **[MOVED]** same file, new section · **[SPLIT from X]** · **[MERGED from X+Y]**. ``` Get started ├─ LeRobot (index) ........................................ [KEPT — rewritten as card-grid landing] ├─ Installation (installation) ............................ [KEPT — full install matrix, reference] ├─ Learn: your first robot — SO-101 course (nested, collapsible) │ ├─ Welcome: what you'll build (learn/index) ............ [NEW] │ ├─ 1. Install LeRobot (learn/install) .................. [SPLIT from installation — happy path only] │ ├─ 2. Assemble your SO-101 (learn/assemble) ............ [SPLIT from so101] │ ├─ 3. Set up the motors (learn/motors) ................. [SPLIT from so101] │ ├─ 4. Calibrate (learn/calibrate) ...................... [SPLIT from so101 + il_robots] │ ├─ 5. Teleoperate your arms (learn/teleoperate) ........ [SPLIT from il_robots] │ ├─ 6. Connect your cameras (learn/cameras) ............. [SPLIT from cameras + il_robots] │ ├─ 7. Record a dataset (learn/record) .................. [SPLIT from il_robots + AGENT_GUIDE §5.7] │ ├─ 8. Train your first policy (learn/train) ............ [SPLIT from il_robots + AGENT_GUIDE §7] │ ├─ 9. Evaluate your policy (learn/evaluate) ............ [SPLIT from il_robots + AGENT_GUIDE §8] │ └─ 10. Next steps (learn/next_steps) ................... [NEW] ├─ Quickstart without a robot (quickstart_no_robot) ....... [NEW — AGENT_GUIDE §3 Path B + notebooks] └─ Troubleshooting (troubleshooting) ...................... [NEW — aggregated from 5 pages + AGENT_GUIDE §5.8] Collect data ├─ Record a dataset (record_dataset) ...................... [SPLIT from il_robots — robot-agnostic, CLI+Python] ├─ Get high-quality data (data_collection_tips) ........... [NEW — AGENT_GUIDE §5] ├─ Visualize & replay episodes (visualize_replay) ......... [SPLIT from il_robots + using_dataset_tools] ├─ Edit datasets (using_dataset_tools) .................... [KEPT — retitled] ├─ Port large datasets to v3 (porting_datasets_v3) ........ [KEPT] └─ Add language instructions (language_and_recipes) ....... [KEPT — retitled] Train policies ├─ Train a policy (train_policy) .......................... [SPLIT from il_robots + AGENT_GUIDE §7; local/Colab/HF-Jobs tabs] ├─ Compute requirements (hardware_guide) .................. [KEPT — retitled] ├─ Multi-GPU training (multi_gpu_training) ................ [MOVED] ├─ Fine-tune with PEFT / LoRA (peft_training) ............. [MOVED] ├─ PyTorch accelerators (torch_accelerators) .............. [KEPT] └─ Rename map & empty cameras (rename_map) ................ [MOVED] Deploy & evaluate ├─ Evaluate a policy on your robot (evaluate_policy) ...... [SPLIT from il_robots + AGENT_GUIDE §8] ├─ Deploy a policy — lerobot-rollout (inference) .......... [KEPT] ├─ Async inference (async) ................................ [KEPT] └─ Real-time chunking — RTC (rtc) ......................... [KEPT — absorbs policy_rtc_README.md] Robots ├─ Choosing a robot (choose_a_robot) ...................... [NEW — comparison table + decision guidance] ├─ SO-101 (so101) ......................................... [SPLIT — assembly/motors/calibration → course; page becomes spec + sourcing + links] ├─ SO-100 — previous generation (so100) ................... [KEPT + legacy banner] ├─ Koch v1.1 (koch) · LeKiwi (lekiwi) · Hope Jr (hope_jr) · Reachy 2 (reachy2) │ Unitree G1 (unitree_g1) · Earth Rover Mini (earthrover_mini_plus) │ OMX (omx) · OpenArm (openarm) · reBot B601-DM (rebot_b601) ... [all KEPT, normalized to robot template] Teleoperators ├─ Teleoperator overview (teleoperators_overview) ......... [NEW — pairing matrix for all 15; keyboard/gamepad usage] └─ Phone teleoperation (phone_teleop) ..................... [KEPT] Cameras & motors ├─ Cameras (cameras) ...................................... [KEPT — expanded: ZMQ + Reachy 2 backends] ├─ Feetech motors & firmware (feetech) .................... [MOVED] └─ Damiao motors & CAN bus (damiao) ....................... [MOVED — documents lerobot-setup-can] Policies ├─ Choosing a policy (choose_a_policy) .................... [NEW — AGENT_GUIDE §6: VRAM tiers, decision rules] ├─ ACT (act) .............................................. [KEPT — absorbs policy_act_README.md] ├─ Diffusion Policy (diffusion) ........................... [NEW — from policy_diffusion_README.md; no page exists today] ├─ SmolVLA (smolvla) · π₀ (pi0) · π₀-FAST (pi0fast) · π₀.₅ (pi05) │ GR00T N1.5 (groot) · MolmoAct2 (molmoact2) · VLA-JEPA (vla_jepa) · EO-1 (eo1) │ X-VLA (xvla) · Multitask DiT (multi_task_dit) · WALL-OSS (walloss) ... [all KEPT, absorb matching READMEs, normalized to policy template] └─ Legacy policies — VQ-BeT, TDMPC (legacy_policies) ...... [NEW — MERGED from policy_vqbet_README + policy_tdmpc_README] Reward models ├─ Reward models overview (reward_models_overview) ........ [NEW] └─ SARM (sarm) · ROBOMETER (robometer) · TOPReward (topreward) ... [KEPT] Datasets in depth ├─ LeRobotDataset format — v3 spec (lerobot-dataset-v3) ... [SPLIT — keeps slug; format/layout/migration only] ├─ Load & stream datasets in Python (using_lerobot_dataset) [SPLIT from lerobot-dataset-v3 — Python API, streaming, transforms] ├─ Tool-calling columns (tools) ........................... [KEPT — retitled] ├─ Video encoding parameters (video_encoding_parameters) .. [KEPT] └─ Streaming video encoding (streaming_video_encoding) .... [KEPT] Simulation ├─ Environments from the Hub (envhub) ..................... [KEPT — section opener] ├─ LeIsaac: control & train in Isaac Sim (envhub_leisaac) . [KEPT] └─ NVIDIA IsaacLab Arena (envhub_isaaclab_arena) .......... [MOVED from Benchmarks] Benchmarks ├─ Choosing a benchmark (choose_a_benchmark) .............. [NEW — comparison + match-benchmark-to-claim guidance] └─ LIBERO (libero) · LIBERO-plus (libero_plus) · Meta-World (metaworld) RoboTwin 2.0 (robotwin) · RoboCasa365 (robocasa) · RoboCerebra (robocerebra) RoboMME (robomme) · VLABench (vlabench) ................ [all KEPT] Processors ├─ What are processors? (introduction_processors) ......... [KEPT — entry-level rewrite + diagram] ├─ Processors for robots & teleops (processors_robots_teleop) [KEPT] ├─ Environment processors (env_processor) ................. [KEPT] ├─ Action representations (action_representations) ........ [KEPT] └─ Debug a processor pipeline (debug_processor_pipeline) .. [KEPT] Reinforcement learning ├─ Train with RL on a real robot — HIL-SERL (hilserl) ..... [MOVED — split candidate, see §10 Q7] ├─ Train RL in simulation (hilserl_sim) ................... [MOVED] └─ Human-in-the-loop data collection (hil_data_collection) [MOVED] Extending LeRobot ├─ Add a policy (bring_your_own_policies) ................. [MOVED] ├─ Add a robot (integrate_hardware) ....................... [MOVED — retitled] ├─ Write your own processor (implement_your_own_processor) [MOVED] └─ Add a benchmark (adding_benchmarks) .................... [MOVED] Reference & resources ├─ CLI reference (cli_reference) .......................... [MERGED from cheat-sheet + NEW content for 6 undocumented commands] ├─ LeLab: browser GUI (lelab) ............................. [MOVED — placement is open question Q5] ├─ Notebooks (notebooks) .................................. [MOVED] └─ Backward compatibility (backwardcomp) .................. [MOVED] Community └─ Contribute to LeRobot (contributing) ................... [KEPT] ``` **`_redirects.yml`** (complete file — only two entries): ```yaml cheat-sheet: cli_reference il_robots: learn/index ``` Everything else keeps its slug; toctree moves and retitles don't change URLs in doc-builder. --- ## 5. The beginner course, page by page **Template for every course page:** goal sentence → "You need" list → numbered steps, each ending with a verifiable checkpoint ("you should see…") → mini-troubleshooting (≤3 most common failures) → "Next:" footer link. **CLI-only — Python appears nowhere in the course.** OS-specific commands use ``. Budget ≤200 lines per page (assembly exempt: media-heavy). | # | Slug | Title | Goal — the user can… | Content source | Length | Next | |---|---|---|---|---|---|---| | 0 | `learn/index` | Welcome: what you'll build | See the outcome (a trained ACT policy moving a real SO-101), the shopping list (~$200 kit, 2 cameras, GPU or Colab), time budget (~1 weekend) | NEW; framing from AGENT_GUIDE §2–3 | ~120 | 1 | | 1 | `learn/install` | Install LeRobot | Working env via one happy path (`pip install 'lerobot[feetech]'`), verified with `lerobot-info` | `installation.mdx` steps 1–3, trimmed to one path | ~100 | 2 | | 2 | `learn/assemble` | Assemble your SO-101 | Source/print parts, assemble leader + follower | `so101.mdx` sourcing + assembly sections (videos carry the load) | ~400 | 3 | | 3 | `learn/motors` | Set up the motors | Find ports (`lerobot-find-port`), set IDs (`lerobot-setup-motors`) for both arms | `so101.mdx` motor config + `cheat-sheet.mdx` | ~150 | 4 | | 4 | `learn/calibrate` | Calibrate | Run `lerobot-calibrate` on both arms; know where calibration files live | `so101.mdx` + `il_robots.mdx` calibration sections | ~120 | 5 | | 5 | `learn/teleoperate` | Teleoperate your arms | Run `lerobot-teleoperate` — the first "wow" moment, deliberately **before** cameras | `il_robots.mdx` teleop (CLI only) | ~80 | 6 | | 6 | `learn/cameras` | Connect your cameras | Detect with `lerobot-find-cameras`, position wrist + front cams, teleop with camera view | `cameras.mdx` + `il_robots.mdx` + AGENT_GUIDE §5.1 placement tips | ~120 | 7 | | 7 | `learn/record` | Record a dataset | Record 50 episodes of one task with `lerobot-record`; keyboard controls, resume, Hub push | `il_robots.mdx` record + AGENT_GUIDE §5.7 defaults ("50 episodes, one task, fixed camera") + §5.2 | ~180 | 8 | | 8 | `learn/train` | Train your first policy (ACT) | Launch `lerobot-train` with sane ACT defaults; know how long to wait and when to stop. Tabs: local GPU / Colab / HF Jobs (``) | `il_robots.mdx` train + AGENT_GUIDE §7.1, §7.3, §7.7 | ~150 | 9 | | 9 | `learn/evaluate` | Evaluate your policy | Run the policy, measure success over 10 trials, know what's "good" | `il_robots.mdx` eval + AGENT_GUIDE §8.1, §8.3, §5.8 | ~120 | 10 | | 10 | `learn/next_steps` | Next steps | Pick a direction: better data → `data_collection_tips`; language/multi-task → `smolvla`; mobile → `lekiwi`; RL → `hilserl`; sim → `envhub`; Discord | NEW; card grid | ~60 | — | **Parallel track — `quickstart_no_robot`:** one page mirroring steps 7–9 without hardware: pick a Hub dataset → `lerobot-dataset-viz` → train ACT (Colab button + local command) → evaluate in sim. Ends with "got a robot? start the course." Source: AGENT_GUIDE §3 Path B + `notebooks.mdx`. (Blessed dataset/env to be decided — §10 Q8.) --- ## 6. New pages — content briefs **Hub / decision pages:** - **`choose_a_robot`** — Comparison table of all 11 robots: photo, type (arm / mobile / humanoid / hand), DoF, motor family (Feetech / Dynamixel / Damiao), approx. price, sourcing (kit / 3D-print / buy), teleop options, docs maturity. Below: short decision paragraphs ("first robot → SO-101", "mobile manipulation → LeKiwi", "research platform → Reachy 2 / G1"). Ends with a card into the course. - **`teleoperators_overview`** — Pairing matrix: all 15 teleoperators × compatible robots, with the exact `--teleop.type=` value for each. Inline usage sections for **keyboard** and **gamepad** (currently undocumented); leader arms link to their robot pages; phone links to `phone_teleop`. - **`choose_a_policy`** — Table from AGENT_GUIDE §6.1: policy, params, min VRAM tier, single/multi-task, language-conditioned, inference speed, pretrained checkpoints, dataset-size sweet spot. Decision rules from §6.2 ("first policy → ACT; language + 16 GB → SmolVLA; ≥40 GB → π₀ / GR00T"). Legacy policies in a collapsed footnote. - **`reward_models_overview`** — Half page: what reward models are for (success classification for RL, episode filtering, eval scoring), where they plug into HIL-SERL, 3-row table (SARM / ROBOMETER / TOPReward: input modality, output, use case). - **`choose_a_benchmark`** — Table: benchmark, sim engine, # tasks, focus (long-horizon / language / generalization / bimanual), policies with reported results, GPU needs, Dockerfile availability (AGENT_GUIDE §8.2b). Guidance: match the benchmark to your policy's claim. **Getting started:** - **`index` (rewrite)** — Card grid replacing prose: "Build your first robot (course)" / "Quickstart without a robot" / "Choose a robot" / "Choose a policy" / "Browse datasets & models on the Hub" / "Join Discord". Keep the one-paragraph mission statement. - **`troubleshooting`** — Symptom-organized, one H2 per failure area: installation (ffmpeg, CUDA) · ports & permissions (find-port fails, udev) · motors (wrong ID, no torque, LED codes from AGENT_GUIDE) · calibration drift · cameras (fps, USB bandwidth) · recording (crashes, resume) · training (flat loss, OOM → compute guide) · policy acts erratically (AGENT_GUIDE §5.8 signal table). Each entry: symptom → cause → fix command. **How-to consolidations (Diátaxis splits):** - **`record_dataset`** — Robot-agnostic deep version of course step 7: full `lerobot-record` flag reference, `` per-robot commands, Python API in its own H2, Hub upload. - **`data_collection_tips`** — AGENT_GUIDE §5 nearly verbatim: ergonomics, practice runs, consistency, the "start small" golden rule, troubleshooting signals. - **`visualize_replay`** — `lerobot-dataset-viz`, the online Hub visualizer, `lerobot-replay`. - **`train_policy`** — One canonical training how-to: `lerobot-train` anatomy, steps/batch/LR guidance (AGENT_GUIDE §7), resume, checkpoints, W&B, local/Colab/HF-Jobs tabs. Links out to multi-GPU, PEFT, compute guide. - **`evaluate_policy`** — Real-robot eval protocol (n trials, success criteria, §8.3 targets), `lerobot-eval` for sim, comparing checkpoints. - **`using_lerobot_dataset`** — Python API split out of `lerobot-dataset-v3`: load from Hub, random access, `delta_timestamps`, DataLoader, streaming, image transforms (+ `lerobot-imgtransform-viz`). **Reference:** - **`cli_reference`** — Replaces cheat-sheet. All 17 commands, one H2 each, grouped by workflow: *Setup* (find-port, setup-motors, setup-can, calibrate, find-cameras, info) · *Data* (record, replay, dataset-viz, edit-dataset, imgtransform-viz, find-joint-limits) · *Train* (train, train-tokenizer) · *Deploy* (eval, rollout, teleoperate). Each: one-line purpose, copy-paste SO-101 example, link to the relevant guide. - **`diffusion`** — Standard policy-template page built from `policy_diffusion_README.md` (the only major policy with no page today). - **`legacy_policies`** — VQ-BeT + TDMPC on one page with a status banner ("maintained for reproducibility, not recommended for new projects"), minimal train/eval commands, paper links. --- ## 7. Migration table **Redirects needed: 2.** Orphan files aren't in the toctree (never built/served), so deleting them breaks no URLs. Toctree moves and retitles with unchanged slugs need no redirects. ### 7.1 Current toctree pages (76) | Old slug | Disposition | New location | Redirect | |---|---|---|---| | `index` | rewrite (card grid) | Get started | no | | `installation` | keep (reference matrix); happy path copied to `learn/install` | Get started | no | | `cheat-sheet` | **merge** into `cli_reference` | Reference & resources | **yes** | | `il_robots` | **split 8 ways** → `learn/{calibrate,teleoperate,cameras,record,train,evaluate}`, `record_dataset`, `visualize_replay`, `train_policy`, `evaluate_policy` | — | **yes → `learn/index`** | | `lelab` | move | Reference & resources | no | | `bring_your_own_policies` | move, retitle "Add a policy" | Extending | no | | `integrate_hardware` | move, retitle "Add a robot" | Extending | no | | `hilserl`, `hilserl_sim`, `hil_data_collection` | move | Reinforcement learning | no | | `multi_gpu_training`, `peft_training`, `torch_accelerators`, `rename_map` | move | Train policies | no | | `hardware_guide` | move, retitle "Compute requirements" | Train policies | no | | `lerobot-dataset-v3` | **split**: keeps slug as format spec; Python usage → `using_lerobot_dataset` | Datasets in depth | no | | `porting_datasets_v3`, `language_and_recipes` | move | Collect data | no | | `using_dataset_tools` | move, retitle "Edit datasets"; viz section → `visualize_replay` | Collect data | no | | `tools` | move, retitle "Tool-calling columns" | Datasets in depth | no | | `video_encoding_parameters`, `streaming_video_encoding` | move | Datasets in depth | no | | `act`, `smolvla`, `pi0`, `pi0fast`, `pi05`, `molmoact2`, `vla_jepa`, `eo1`, `groot`, `xvla`, `multi_task_dit`, `walloss` | keep; normalize to policy template; absorb matching orphan READMEs | Policies (after `choose_a_policy`) | no | | `sarm`, `robometer`, `topreward` | keep | Reward models (after overview) | no | | `inference` | keep, retitle "Deploy a policy (lerobot-rollout)" | Deploy & evaluate | no | | `async` | keep | Deploy & evaluate | no | | `rtc` | keep; absorb `policy_rtc_README.md` | Deploy & evaluate | no | | `envhub`, `envhub_leisaac` | keep | Simulation | no | | `envhub_isaaclab_arena` | move | Simulation | no | | `adding_benchmarks` | move, retitle "Add a benchmark" | Extending | no | | `libero`, `libero_plus`, `metaworld`, `robotwin`, `robocasa`, `robocerebra`, `robomme`, `vlabench` | keep | Benchmarks (after `choose_a_benchmark`) | no | | `introduction_processors` | keep; entry-level rewrite | Processors | no | | `processors_robots_teleop`, `env_processor`, `action_representations`, `debug_processor_pipeline` | keep | Processors | no | | `implement_your_own_processor` | move | Extending | no | | `so101` | **split**: assembly → `learn/assemble`, motors → `learn/motors`, calibration → `learn/calibrate`; page becomes spec/sourcing/overview linking into the course | Robots | no (slug unchanged) | | `so100` | keep + legacy banner ("SO-101 is the current generation") | Robots | no | | `koch`, `lekiwi`, `hope_jr`, `reachy2`, `unitree_g1`, `earthrover_mini_plus`, `omx`, `openarm`, `rebot_b601` | keep; normalize to robot template | Robots (after `choose_a_robot`) | no | | `phone_teleop` | keep | Teleoperators (after overview) | no | | `cameras` | keep; expand (ZMQ + Reachy 2 backends) | Cameras & motors | no | | `feetech`, `damiao` | move; document `lerobot-setup-can` in damiao | Cameras & motors | no | | `notebooks`, `backwardcomp` | move | Reference & resources | no | | `contributing` | keep | Community | no | ### 7.2 Orphan files (14 — delete from `docs/source/`, no redirects needed) Canonical copies remain in `src/lerobot/policies/*/README.md`. Verified: the docs/source copies are byte-identical hand-copies with **no sync script anywhere in the repo** — deletion is safe once unique content is folded in. | Orphan file | Disposition | |---|---| | `policy_act_README.md`, `policy_groot_README.md`, `policy_molmoact2_README.md`, `policy_multi_task_dit_README.md`, `policy_pi0_README.md`, `policy_pi05_README.md`, `policy_sarm_README.md`, `policy_smolvla_README.md`, `policy_vla_jepa_README.md`, `policy_walloss_README.md`, `policy_rtc_README.md` | Delete; fold any unique content into the corresponding `.mdx` page | | `policy_diffusion_README.md` | Delete; content seeds the **new** `diffusion.mdx` | | `policy_tdmpc_README.md`, `policy_vqbet_README.md` | Delete; content seeds the **new** `legacy_policies.mdx` | ### 7.3 New files (27) `learn/index`, `learn/install`, `learn/assemble`, `learn/motors`, `learn/calibrate`, `learn/teleoperate`, `learn/cameras`, `learn/record`, `learn/train`, `learn/evaluate`, `learn/next_steps`, `quickstart_no_robot`, `troubleshooting`, `record_dataset`, `data_collection_tips`, `visualize_replay`, `train_policy`, `evaluate_policy`, `using_lerobot_dataset`, `choose_a_robot`, `teleoperators_overview`, `choose_a_policy`, `diffusion`, `legacy_policies`, `reward_models_overview`, `choose_a_benchmark`, `cli_reference` — plus `_redirects.yml`. --- ## 8. Conventions & style guide **Naming** - Product names in prose: **SO-101**, SO-100, LeKiwi, π₀ (display) / `pi0` (slug/code), HIL-SERL, LeRobotDataset. Never "so101"/"SO101" in prose. - Slugs: lowercase with underscores for new files (`choose_a_robot`); course under `learn/`. Existing hyphenated slugs (`lerobot-dataset-v3`, `cheat-sheet`) are grandfathered, not propagated. - Titles: sentence case. How-to titles start with a verb ("Record a dataset"); reference titles are nouns ("CLI reference"); course titles are numbered ("3. Set up the motors"). - Placeholders in commands: consistent `` (e.g. `--robot.port=`). **Components** - `` with **fixed, site-wide ids** so a choice persists across pages: `id="robot"` · `id="os"` · `id="install"` · `id="train_env"` (local/colab/jobs). Tabs only for structurally parallel content; never hide unique content inside a tab. - `` for actionable advice; `` for anything that can damage hardware, lose data, or cost money. Standardize on `` in `.mdx`; `> [!NOTE]` only in plain `.md`. Max ~3 tips per page. - Card grids only on `index`, `learn/next_steps`, and section overview pages. - Every assembly/calibration video must have the same steps in text below it (accessibility + searchability). **Page templates & length budgets** | Type | Skeleton | Budget | |---|---|---| | Course page | goal → "you need" → numbered steps w/ checkpoints → mini-troubleshooting → Next | ≤200 lines (assembly exempt) | | How-to | problem statement → minimal working command → variations → edge cases → related links | ≤300 | | Robot page | hero photo → spec table → buy/build → calibration quirks → compatible teleops → known issues | ≤400 | | Policy page | summary card (params, VRAM, license, paper, checkpoints) → when to use → install → train → finetune → results → citation | ≤250 | | Concept page | what & why in 3 sentences → diagram → details → pointers to how-tos | ≤400 | Hard cap **500 lines** for any page → must split (`il_robots` at ~650 and `hilserl` at ~950 are the cautionary examples). --- ## 9. Phased rollout plan | Phase | Scope | PRs | Effort | Parallel? | |---|---|---|---|---| | **0. Sign-off** | This proposal reviewed; open questions (§10) decided | — | ~0.5 wk elapsed | — | | **1. Skeleton & cleanup** | New `_toctree.yml` (all KEPT/MOVED pages in final positions), `_redirects.yml`, delete 14 orphans, retitles, SO-100 legacy banner | 1 mechanical PR (no content changes — easy review) | 1–2 days | no | | **2. Beginner course** | 11 `learn/` pages, `so101` + `il_robots` splits, `quickstart_no_robot`, `troubleshooting`; `il_robots` redirect ships here | 3 PRs (steps 0–4 / 5–10 / quickstart+troubleshooting) | 5–8 days | partially — single author for voice; troubleshooting separable | | **3. Hub / decision pages** | `choose_a_robot`, `choose_a_policy`, `choose_a_benchmark`, `teleoperators_overview`, `reward_models_overview`, `index` rewrite | 6 independent PRs | 4–6 days | **fully** — good first issues per area owner | | **4. How-to consolidation** | `record_dataset`, `data_collection_tips`, `visualize_replay`, `train_policy`, `evaluate_policy`, dataset split, cheat-sheet → `cli_reference` (+ its redirect) | 3–4 PRs (data / train / deploy / datasets) | 5–7 days | parallel across clusters | | **5. Reference fill-in** | `diffusion`, `legacy_policies`, ZMQ camera docs, 6 undocumented CLI commands, keyboard/gamepad teleop content, policy/robot pages normalized to templates | many small PRs | 4–6 days | fully — community-friendly | Total ≈ **4–5 person-weeks**. Phases 2 and 3 can run concurrently after Phase 1 merges. Each URL-breaking change ships in the same PR as its redirect. --- ## 10. Open questions for maintainers 1. **Legacy policies (TDMPC, VQ-BeT):** combined `legacy_policies` page (proposed), full individual pages, or src READMEs only? 2. **Orphan READMEs:** verified byte-identical hand-copies of `src/lerobot/policies/*/README.md` with no sync script — OK to delete from `docs/source/` in Phase 1? Which copy is canonical going forward (proposed: src)? 3. **AGENT_GUIDE.md future:** large parts become docs pages (§5–§8). Slim it to a pointer file for AI agents (avoids divergence), or keep self-contained and accept dual maintenance? 4. **Course URL namespace:** `learn/` (proposed) vs `getting_started/` vs `tutorial/` — permanent once shipped, decide before Phase 2. 5. **LeLab status:** first-party and maintained? If yes, add a "prefer a GUI?" callout inside the course (teleop/record steps); if experimental, keep in Reference & resources as proposed. 6. **SO-100 messaging:** proposed banner "SO-101 is the current generation" + full docs retained. Strong enough, or formally deprecate? 7. **HIL-SERL split:** `hilserl.mdx` is ~950 lines. Split into "Setup & demonstrations" + "Reward classifier & training" in a later phase, or keep monolithic for its expert audience? 8. **Blessed no-hardware quickstart:** PushT, a Hub SO-101 dataset, gym-hil, or an EnvHub env? Determines `quickstart_no_robot` content. 9. **`` id taxonomy:** agree on the canonical ids (`robot`, `os`, `install`, `train_env`) — they persist site-wide once shipped. 10. **Reward models placement:** standalone section after Policies (proposed) vs nested under Reinforcement learning — depends on whether SARM/ROBOMETER/TOPReward are positioned as general eval tools or RL components. --- ## Appendix: sources & verification - Current nav: `docs/source/_toctree.yml` (76 pages, 15 sections — verified June 2026). - File census: 90 content files in `docs/source/`; orphans confirmed by toctree diff; orphan↔src byte-identity confirmed by `diff`; absence of a sync script confirmed by repo-wide grep. - CLI commands: `pyproject.toml [project.scripts]` (17 entries). - AGENT_GUIDE.md section references (§5 data tips, §6 policy choice, §7 training duration, §8 evaluation) verified against its headings. - Patterns referenced: Diátaxis (diataxis.fr) · FastAPI docs · Ultralytics YOLO docs · HF Transformers docs (doc-builder feature ceiling).