Metadata-Version: 2.4
Name: simulo
Version: 0.22.0
Summary: Simulo SDK and CLI — define robotics simulation and training apps in Python and run them on the Simulo cloud.
Author-email: Simulo Team <team@simulo.ai>
License: BSD-3-Clause
Project-URL: Homepage, https://simulo.ai
Keywords: robotics,simulation,reinforcement-learning,simulo
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: simulo-interfaces<0.17,>=0.16.0
Requires-Dist: mcap<2,>=1.3
Requires-Dist: defusedxml>=0.7.1
Requires-Dist: usd-core<27,>=25.5
Provides-Extra: assets
Requires-Dist: usd-core<27,>=25.5; extra == "assets"
Provides-Extra: dev
Requires-Dist: black==26.5.1; extra == "dev"
Requires-Dist: isort==8.0.1; extra == "dev"
Requires-Dist: ruff==0.15.21; extra == "dev"
Requires-Dist: mypy==2.3.0; extra == "dev"
Requires-Dist: types-defusedxml==0.7.0.20260504; extra == "dev"
Requires-Dist: pytest>=8.2; extra == "dev"
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: twine>=5.1; extra == "dev"
Requires-Dist: setuptools>=68; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Provides-Extra: release
Requires-Dist: commitizen>=3.27; extra == "release"
Requires-Dist: build>=1.2; extra == "release"
Requires-Dist: twine>=5.1; extra == "release"

# simulo

The Simulo SDK and CLI — define robotics simulation and training apps in Python,
submit them to the Simulo cloud, monitor jobs, and retrieve trained models.

Simulo is a cloud-first robotics simulation and training platform. Write your app
against a small, stable Python API; Simulo handles running it.

## Install

```bash
pip install simulo
```

Requires Python 3.11+.

## Quickstart

The fastest way to start: scaffold a runnable app.

```bash
simulo create mybot
# Created training app in mybot/ (app.py + .simuloignore).
cd mybot
```

`--type` picks the starter shape (default `training`): `training` (a single
training job), `inference` (train → evaluate → rollout, self-contained), or
`scenario` (a scripted scene, no learning). No network call and no login
required — `simulo create` only writes files to your local folder. Edit
`app.py` for your own robot and task, then see "Log in and submit" below to
run it.

### Or write an app by hand

```python
# app.py
import simulo

app = simulo.App("hello")


@app.job(timeout=5 * 60)
def hello(name: str = "world", repeat: int = 3) -> dict:
    for i in range(repeat):
        print(f"[hello] {i + 1}/{repeat}: hello, {name}!")
    return {"greeting": f"hello, {name}", "repeat": repeat}


@app.entrypoint
def main(name: str = "world", repeat: int = 3) -> None:
    handle = hello.spawn(name=name, repeat=repeat)
    print(f"Submitted job: {handle.job_name}")
```

## Log in and submit to the cloud

```bash
simulo login
simulo run app.py --name robot --repeat 5
```

Without logging in, `simulo run` packages the app locally without submitting it.

Every cloud submit is fresh — running the same command twice trains twice, never a silent
no-op. To continue training from an earlier job's checkpoint instead, pass
`--from <job-ref>[:best|:latest]`. Job ids, and their unambiguous prefixes (`>=4` characters),
work anywhere the CLI takes a job id.

## Monitor jobs and retrieve results

```bash
simulo jobs                      # your jobs and their statuses
simulo logs --follow             # stream the latest job's logs live
simulo result                    # the completed job's result JSON
simulo models                    # list / download trained checkpoints (sha256-verified)
simulo recordings                # download MCAP flight recordings
simulo view                      # watch the live 3D scene (jobs submitted with --viewstream)
simulo cancel                    # cancel a queued or running job
```

Commands that take a job id default to the latest job, announcing what they
resolved to on stderr.

Learn more at [simulo.ai](https://simulo.ai).
