A local-first control plane and web dashboard for operating, inspecting, and developing SO-101 robot workflows. The dashboard is a standalone project: it does not require the Hashtag Robotics tic-tac-toe repository.
The application combines a FastAPI backend, a React/TypeScript dashboard, persistent jobs and audit records, deterministic safety checks, Strands agent workflows, LeRobot adapters, dataset management, and MuJoCo contract simulation.
Hardware actuation is disabled by default. Keep
HASHTAG_ENABLE_PHYSICAL=falseuntil the robot, calibration, limits, cameras, emergency stop, and workspace have been checked by an operator.
- Local SO-101 device discovery and stable device profiles
- Robot, teleoperator, camera, calibration, dataset, and policy manifests
- Deterministic jobs, resource leases, approvals, audit history, and E-STOP latch
- Teleoperation, recording, replay, training, evaluation, and policy workflows
- Strands Agents planning behind a permissioned command gateway
- Software-only and MuJoCo validation paths
- A production dashboard embedded in the Python wheel
The deterministic control plane owns execution and safety guarantees. Strands Agents reason and plan only through explicitly permitted actions; they never receive raw shell, serial, servo, or unrestricted robot access.
The end-to-end SO-101 Tic-Tac-Toe project is a concrete example of how this dashboard can support a robotics workflow: 3D-printed hardware, data collection, Hugging Face datasets, SmolVLA training, policy evaluation, and a guarded Strands-powered game agent.
The example is optional. Dashboard users can configure their own robots, datasets, tasks, and policies without cloning the tic-tac-toe repository.
| Layer | Responsibility |
|---|---|
| Strands Agents | Reasoning, structured planning, and bounded workflows |
| Strands Robots | Robot, policy, and simulation integration surface |
| LeRobot | SO-101 drivers, calibration, datasets, training, and rollouts |
| Hashtag Robotics | Profiles, jobs, leases, safety gates, audit, API, and UX |
Requirements:
- Python 3.12 or 3.13
uv- Node.js 22 or newer
Install the software-only development environment:
uv sync --extra dev --extra agents --extra sim
npm install --prefix frontendInstall the native Strands Robots integration when robot, policy, or MuJoCo adapters are needed:
uv sync --extra dev --extra agents --extra strands-robotsBuild the dashboard:
npm --prefix frontend run buildStart the local application with physical adapters disabled:
HASHTAG_DATA_DIR=.local-data \
HASHTAG_OPEN_BROWSER=false \
HASHTAG_ENABLE_PHYSICAL=false \
uv run hashtag-robotics serveUse the address printed by the server startup log. The configured default is
http://127.0.0.1:8765; another local port may be selected in your environment.
Run read-only system checks:
HASHTAG_DATA_DIR=.local-data uv run hashtag-robotics doctor
HASHTAG_DATA_DIR=.local-data uv run hashtag-robotics capabilities
uv run hashtag-robotics hil-checklistRun every software-only release gate:
bash scripts/verify.shThis checks Python linting and formatting, backend/API contracts, frontend typechecking and production build, the source distribution, and wheel contents. It also enforces the repository's English-only text gate. It does not prove physical hardware compatibility.
Before enabling a real robot, verify at minimum:
- Correct leader/follower roles and serial ports
- Calibration identity and revision for both arms
- Joint units, dimensions, limits, and relative-target clamps
- Camera device identity and dataset feature-key mapping
- Control frequency, latency, and policy action horizon
- A reachable physical emergency stop
- A clear workspace and explicit operator approval
Start with software-only checks, then simulation, then supervised hardware-in-the-loop validation. Never treat a passing software test as proof that physical motion is safe.
- The server binds to loopback by default.
- Host, origin, and session-token checks protect the local API.
- Provider credentials belong in the provider SDK credential chain or an OS secret store, never in repository files or command history.
- Client-supplied paths and hardware targets must not bypass server-owned resolution and safety checks.
Software and documentation are licensed under the Apache License 2.0. Hashtag Robotics names and logos are trademarks and are not licensed as product branding.