> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To build and serve your own model, start at /deploy/development/quickstart and /deploy/development/overview. Deploying is the default path: reactor init scaffolds a workspace, reactor auth login authenticates, and reactor model deploy registers the model, publishes the release with the weights/ folder, and activates it on Reactor's GPUs, in one command from that workspace. Docker must be running, because the publish step builds the image locally. Bump model.version in reactor.yaml before redeploying a change, because a release that already has an image is reactivated as it is. Deployment access is granted per account, so contact team@reactor.inc if a deploy is refused. Every key in reactor.yaml is documented at /deploy/platform/reactor-yaml. Model code imports reactor_runtime; Python client code imports reactor_sdk. The runtime overview explains the model interface. Running the model on your own machine with reactor run is optional and needs a GPU you attach with --gpus; /deploy/development/local-testing covers that loop and pairs a complete brightness model with a Python client test in a separate brightness-test workspace.
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The video model catalog — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Robotics policy documentation starts at /robotics/overview; X-WAM observations, actions, and client integration are under /robotics/xwam/; Cosmos3 Nano Policy DROID is under /robotics/cosmos/nano-policy-droid/. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# Run in simulation

> Run one LIBERO-Long episode with hosted LingBot-VA inference.

The [LIBERO example](https://github.com/reactor-team/reactor-cookbook/tree/main/robotics/sim/libero)
constructs the simulator, publishes its camera frames, executes returned chunks, and reports the
executed actions. Reactor runs inference; LIBERO runs the Panda controller and scores the task.

Complete [client setup](/robotics/lingbot-va/libero/quickstart#install-the-reference-client) for the
public client environment and an API key. Use a separate Python 3.10 environment for simulation. The
frozen lockfile records the tested Python SDK, robosuite `1.4.0`, and NumPy `1.26.4`; it constrains
PyTorch below `2.6` for LIBERO's saved initial states.

## Install LIBERO

From the `reactor-cookbook` repository root:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
cd robotics/sim/libero
uv sync --frozen --python 3.10
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git vendor/LIBERO
git -C vendor/LIBERO checkout 8f1084e3132a39270c3a13ebe37270a43ece2a01
touch vendor/LIBERO/libero/__init__.py
uv pip install --no-deps -e vendor/LIBERO
mkdir -p .libero
cat > .libero/config.yaml <<EOF_CONFIG
assets: $PWD/vendor/LIBERO/libero/libero/assets
bddl_files: $PWD/vendor/LIBERO/libero/libero/bddl_files
benchmark_root: $PWD/vendor/LIBERO/libero/libero
datasets: $PWD/vendor/LIBERO/libero/datasets
init_states: $PWD/vendor/LIBERO/libero/libero/init_files
EOF_CONFIG
export LIBERO_CONFIG_PATH="$PWD/.libero"
```

Pre-seeding the config avoids LIBERO's interactive first-import prompt. The package marker makes the
source checkout discoverable by its installer. The benchmark assets and initial states are part of
the
[pinned LIBERO source](https://github.com/Lifelong-Robot-Learning/LIBERO/tree/8f1084e3132a39270c3a13ebe37270a43ece2a01).
This rollout does not need a training-dataset download. Your host must support MuJoCo offscreen
rendering; use LIBERO's
[installation guidance](https://github.com/Lifelong-Robot-Learning/LIBERO/blob/8f1084e3132a39270c3a13ebe37270a43ece2a01/README.md)
for platform prerequisites.

## Check wiring and run one episode

Use the installed interpreter directly after the editable LIBERO install, so another environment
sync does not remove the extra package:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
.venv/bin/python check_wiring.py
export REACTOR_API_KEY='your-api-key'
.venv/bin/python -m libero_sim.main \
  --model reactor/lingbot-va --suite libero_10 --task-id 0 --init-state-id 0 \
  --max-episodes 1 --max-episode-steps 600 --max-seconds 180 \
  --exec-steps 16 --seed-skip 4 --record rollout.mp4 --overlay
```

`check_wiring.py` runs a local simulator smoke test with synthetic actions and no Reactor session.
The live command uses the benchmark's language instruction. `libero_10` is LIBERO-Long; change
`--task-id` and `--init-state-id` to evaluate other tasks and starts.

Keep `--exec-steps 16` and `--seed-skip 4`: the first chunk executes 12 rows, then each later chunk
executes 16. A smaller horizon can stall the server's next commit. `--seed` seeds the environment,
not model sampling; the reference bridge sends `reset {}`.

The process logs episode success and execution diagnostics and writes `rollout.mp4`. A time cap can
end a run before the task succeeds. Inspect the score and recording, not just the connection status.
Simulation pauses while waiting for inference, so success does not measure uninterrupted
physical-time behavior. Default recording includes these waits.

## Timing and client limits

The bridge publishes frames from each simulator step and waits `--echo-delay 0.1` seconds before
sending the completed echo. This reduces late-frame risk without guaranteeing frame/action pairing.
The Python SDK manages transport keepalive. The bridge rounds echoes to five decimal places;
identical rounded echoes can stop progress. Restart with a fresh session after an uncertain timeout;
see [troubleshooting](/robotics/lingbot-va/libero/troubleshooting).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.