strands-robots is a robot control library for Strands Agents. It provides policy inference, teleoperation, calibration, and simulation tools for physical robots.
Board: https://github.com/orgs/strands-labs/projects/2
Project ID: PVT_kwDOD151Fs4BSRJP
RULE: ALWAYS use the project board to track work. When creating follow-up items, create GitHub issues and add them to this board with Status + Priority set. Never track work only in local markdown — the board is the source of truth.
strands_robots/
├── policies/ # Policy providers (pluggable via registry)
│ ├── base.py # Abstract Policy base class
│ ├── factory.py # create_policy() factory + registry
│ ├── mock.py # MockPolicy for testing
│ ├── groot/ # NVIDIA GR00T N1.5/N1.6/N1.7 inference
│ │ ├── policy.py # Gr00tPolicy (ZMQ + HTTP modes)
│ │ ├── client.py # Gr00tInferenceClient
│ │ ├── data_config.py # Gr00tDataConfig + ModalityConfig
│ │ └── data_configs.json # 25 robot embodiment configs
│ └── lerobot_local/ # HuggingFace LeRobot direct inference
│ ├── policy.py # LerobotLocalPolicy (RTC support)
│ ├── processor.py # ProcessorBridge (pre/post pipelines)
│ └── resolution.py # Policy class resolution (v0.4/v0.5)
├── registry/ # JSON registry for policy discovery
├── tools/ # Strands @tool functions
│ ├── gr00t_inference.py # GR00T inference tool
│ ├── lerobot_calibrate.py
│ ├── lerobot_camera.py
│ ├── lerobot_teleoperate.py
│ ├── pose_tool.py
│ └── serial_tool.py
├── robot.py # Core Robot class
└── utils.py # Shared utilities (require_optional, etc.)
tests/ # Unit tests (run with: hatch run test)
tests_integ/ # Integration tests (run with: hatch run test-integ)
# Install with all optional deps
pip install -e ".[all,dev]"
# Run tests
hatch run test # unit tests
hatch run test-integ # integration tests (needs GPU + model weights)
# Lint & format
hatch run lint # ruff check, ruff format --check, mypy
hatch run format # ruff check --fix, ruff formatNote: Hatch uses
uvas installer (installer = "uv"in pyproject.toml) for faster environment creation. No manual uv install needed — hatch handles it.
- Python 3.12+ —
requires-python = ">=3.12"(LeRobot >=0.5.0 requires 3.12) - Dependency bounds —
>=1.0deps: cap major.<1.0deps: cap minor. E.g.lerobot>=0.5.0,<0.6.0 __init__.pymust be thin — exports only, no logic- Imports at file top — unless lazy-loading heavy deps with documented reason
- Raise on fatal errors — never warn-and-continue if the system will behave unexpectedly
- No silent defaults on error — returning zero-valued actions on failure is forbidden
- Use
require_optional()— fromstrands_robots/utils.pyfor all optional deps - Integration tests required — each policy needs
tests_integ/tests with real inference - Test behavior, not implementation — assert on outputs, not internal state
- No dead code — if it's not called and not part of base class, delete it
- Create feature branch from
main - Make changes, run
hatch run format && hatch run lint && hatch run test - All tests must pass, lint must be clean
- Open PR from your fork, address all review comments
- Track follow-up items as issues on the project board
- Squash merge into
main
- Flat asset paths (e.g.
"model_xml": "scene.xml") are the common case. - Nested asset paths (e.g.
"model_xml": "xmls/asimov.xml") are allowed when the upstream source repo uses a subdir layout. Example:asimov_v0maps toasimovinc/asimov-v0which hassim-model/xmls/asimov.xml+sim-model/assets/. The_safe_joinhelper instrands_robots/utils.pyguards against traversal (..). - Auto-download strategy — every robot with an
assetblock must declare exactly one of:asset.robot_descriptions_module(preferred)asset.sourcewithtype: "github"asset.auto_download: false(explicit opt-out) Enforced bytests/test_registry_integrity.py.