Metadata-Version: 2.4
Name: lucen-cli
Version: 0.1.0
Summary: MouseMouse CLI (`lucen`): push robot data, train and sim-test policies, hand them to a robot through a consent gate
License-Expression: Apache-2.0
License-File: LICENSE
Requires-Dist: typer>=0.20
Requires-Dist: rich>=14.0
Requires-Dist: httpx>=0.28
Requires-Dist: lucen-sdk>=0.1.0,<0.2
Requires-Dist: pyyaml>=6.0
Requires-Dist: huggingface-hub>=1.0,<2
Requires-Dist: mujoco==3.12.0 ; extra == 'rl'
Requires-Dist: onnxruntime==1.30.0 ; extra == 'rl'
Requires-Dist: numpy>=2.0,<3 ; extra == 'rl'
Requires-Dist: defusedxml>=0.7 ; extra == 'rl'
Requires-Dist: mujoco==3.12.0 ; extra == 'rollout'
Requires-Dist: onnxruntime==1.30.0 ; extra == 'rollout'
Requires-Dist: numpy>=2.0,<3 ; extra == 'rollout'
Requires-Dist: defusedxml>=0.7 ; extra == 'rollout'
Requires-Dist: onnxruntime==1.30.0 ; extra == 'serve'
Requires-Dist: numpy>=2.0,<3 ; extra == 'serve'
Requires-Dist: websockets>=14,<16 ; extra == 'serve'
Requires-Dist: msgpack>=1.0 ; extra == 'serve'
Requires-Dist: pyjwt[crypto]>=2.10 ; extra == 'serve'
Requires-Dist: lerobot[smolvla,peft,dataset]>=0.4,<0.7 ; extra == 'vla'
Requires-Python: >=3.12
Project-URL: Homepage, https://mousemouse.ai
Project-URL: Documentation, https://mousemouse.ai/docs/from-a-terminal
Project-URL: Repository, https://github.com/ICE-CUBA/lucen-hub
Provides-Extra: rl
Provides-Extra: rollout
Provides-Extra: serve
Provides-Extra: vla
Description-Content-Type: text/markdown

# `lucen-cli` — the MouseMouse command line

[MouseMouse](https://mousemouse.ai) is a hub for robots: datasets, models and
robot descriptions with the provenance between them, training and sim tests in
the cloud or on your own machine, hosted inference for the skill layer, and a
consent gate — a person approves before a policy reaches a robot. This package
is its command line, `lucen`, and its Python API, `from lucen import Hub`.

The distribution is **`lucen-cli`**; the command is **`lucen`**. The PyPI
project named `lucen` is an unrelated library.
[`mousemouse`](https://pypi.org/project/mousemouse/) is the same CLI under the
product's name.

## Install

```bash
uv tool install lucen-cli        # or: pipx install lucen-cli
lucen version
```

Extras bring the engines some commands need; everything else stays a few MB:

| Install | What it adds | Used by |
|---|---|---|
| `uv tool install "lucen-cli[rollout]"` | MuJoCo 3.12.0, ONNX Runtime | `lucen rollout` (sim tests), `lucen robot init\|validate\|publish` |
| `uv tool install "lucen-cli[rl]"` | the same wheels | `lucen worker run` with the built-in `ppo_mujoco` trainer |
| `uv tool install "lucen-cli[serve]"` | ONNX Runtime, websockets, msgpack | `lucen serve` (a hosted-endpoint server on your GPU box) |
| `uv tool install "lucen-cli[vla]"` | LeRobot, torch, PEFT | the `smolvla_lora` template |

A MouseMouse hub also serves its own copy of these wheels, built from the hub's
own commit: `curl -fsSL <hub API>/install.sh | sh -s -- cli` installs from
there and points the CLI at that hub.

## First steps

```bash
lucen auth login                 # asks for an API key; stores it in ~/.config/lucen/credentials (0600)
lucen quickstart --robot lucen/laika
lucen pull lucen/laika-demo ./laika-demo
lucen push you/my-dataset ./my-dataset --kind dataset --public
lucen train -f recipe.yaml --follow
lucen rollout you/my-policy --robot lucen/laika --battery smoke --local
```

`lucen --help` is grouped by task (get started, robots, data and models, train
and test, run on a robot). The key is read from `LUCEN_API_KEY` or the
credentials file, never from a flag; the hub from `LUCEN_API_URL` or the same
file. Every command has `--json`; stdout is the answer, stderr the progress.

## From Python

```python
from lucen import Hub

hub = Hub()  # LUCEN_API_URL / LUCEN_API_KEY, else the credentials file
hub.pull("lucen/laika", "./laika")  # every sha256 verified
run = hub.runs.create({"template": "ppo_mujoco", "robot": "lucen/laika"}, follow=True)
```

The same credentials rules, push/pull/follow code and refusal sentences as the
commands, as records and exceptions instead of lines and exit codes.

## Docs

- [Work from a terminal](https://mousemouse.ai/docs/from-a-terminal)
- [Train on your machine](https://mousemouse.ai/docs/train-on-your-machine)
- [Add your robot](https://mousemouse.ai/docs/add-your-robot)
- [The Python API](https://mousemouse.ai/docs/python)
- [API reference](https://mousemouse.ai/docs/api) — the CLI is a thin surface
  over the hub's REST API, through the generated client
  [`lucen-sdk`](https://pypi.org/project/lucen-sdk/)

The robot side of the consent gate is
[`lucen-device`](https://pypi.org/project/lucen-device/); the hub's tools for an
AI agent are [`lucen-mcp`](https://pypi.org/project/lucen-mcp/).

Apache-2.0. © 2026 Lucen Robotics.
