Skip to content

Examples

Build something real on every page. Each example gives you a complete app.py, the exact path to save it, the matching simulo run command, and the result to look for.

Build Save as What you will see
Hello hello/app.py A CPU job streaming logs and returning JSON in seconds.
Cartpole cartpole/app.py A GPU-trained balancing policy and durable checkpoint.
Cartpole Eval cartpole_eval/app.py Training, evaluation, and a recorded policy rollout from one app.
Cartpole Anomaly cartpole_anomaly/app.py A deliberate reward fault caught in a bounded debug recording.
Humanoid humanoid/app.py A 21-action locomotion policy learning to stay upright and move forward.
JetBot jetbot/app.py A two-wheel robot learning to follow changing directions.
Franka manipulation franka_reach/app.py, then franka_lift/app.py Task-space reaching, followed by grasping and lifting a movable block.
Scene scene/app.py A scripted multi-environment simulation you can watch live.

Save this complete CPU app as hello/app.py:

Show complete codeHide complete codehello/app.py
hello/app.py
from __future__ import annotations
import time
from typing import Any
import simulo
app = simulo.App("hello")
@app.job(timeout=5 * 60)
def hello(name: str = "world", repeat: int = 3) -> dict[str, Any]:
"""Print a few greeting lines (the log stream), return a dict (the result)."""
for index in range(repeat):
print(f"[hello] {index + 1}/{repeat}: hello, {name}!", flush=True)
time.sleep(0.3) # long enough for `simulo logs --follow` to visibly stream
return {"greeting": f"hello, {name}", "repeat": repeat}

Run it after simulo login:

Terminal window
simulo run hello/app.py --name robot --repeat 5

You will see five greeting lines followed by a successful result. Then choose the next example by outcome: Cartpole for the core training pattern, Cartpole Eval for a complete policy lifecycle, or Scene for a live scripted simulation.

To scaffold your own project instead, run simulo create <name> --type training|inference|scenario.