> ## 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

> Connect NVIDIA RoboLab's DROID environment to Reactor through the reference gateway.

The
[Cosmos gateway](https://github.com/reactor-team/reactor-cookbook/tree/main/robotics/sim/cosmos-droid)
accepts RoboLab's OpenPI-compatible WebSocket requests, publishes camera tracks and robot state to
Reactor, and returns joint targets to RoboLab. RoboLab runs the controller and scores the episode.
Model inference runs on Reactor.

## Prerequisites

Complete the [first-action setup](/robotics/cosmos/nano-policy-droid/quickstart) to obtain the
public client environment and an API key. Separately install
[NVIDIA RoboLab](https://github.com/NVlabs/RoboLab/blob/ad45d4f974725d020f82c2b0d77d78533aeba2b3/README.md#getting-started),
including its assets and an Isaac Sim-compatible NVIDIA GPU. This page references RoboLab revision
`ad45d4f974725d020f82c2b0d77d78533aeba2b3`; keep its simulator environment separate from the
gateway. Use RoboLab's documented
[hardware requirements](https://github.com/NVlabs/RoboLab/blob/ad45d4f974725d020f82c2b0d77d78533aeba2b3/README.md#requirements).

Check out the documented simulator revision before following its installation steps:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
git clone https://github.com/NVlabs/RoboLab.git
cd RoboLab
git checkout ad45d4f974725d020f82c2b0d77d78533aeba2b3
```

## Start the gateway

In a separate terminal on the simulator host, start at the root of the `reactor-cookbook` checkout:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
cd robotics/sim/cosmos-droid
uv sync --frozen --python 3.12
export REACTOR_API_KEY='your-api-key'
uv run --frozen python check_wiring.py
uv run --frozen python -m cosmos_droid_sim.main   --model reactor/cosmos-nano-policy-droid --host 127.0.0.1 --port 8000
```

`check_wiring.py` checks the observation split, payload encoding, and request/reply handoff without
GPU inference. The gateway listens once its Reactor connection is ready.

## Run one episode

In a second terminal, from the RoboLab checkout with its simulator Python environment activated:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
python policies/cosmos3/run.py   --task BananaInBowlTask --headless --num-envs 1 --num-runs 1   --remote-host 127.0.0.1 --remote-port 8000
```

Use one environment per gateway. The example owns one Reactor session and does not isolate parallel
simulator clients. If the simulator runs in a container, use host networking on Linux so
`127.0.0.1:8000` reaches the host gateway. Reactor replaces the policy-server step in
[NVIDIA's Cosmos3 instructions](https://github.com/NVlabs/RoboLab/blob/ad45d4f974725d020f82c2b0d77d78533aeba2b3/policies/cosmos3/README.md).

The simulator client composes wrist/left/right images; the gateway splits them into the three
[model tracks](/robotics/cosmos/nano-policy-droid/reference#camera-tracks). It executes 32 targets
at 15 Hz, then requests another chunk. Simulation waits for inference, so its success score does not
measure behavior under uninterrupted physical time or observation delay.

RoboLab writes scored episodes and recordings beneath `output/`; inspect those results rather than
treating receipt of an action chunk as task success.

For missing replies or uncertain timeouts, see
[troubleshooting](/robotics/cosmos/nano-policy-droid/troubleshooting#reference-client-behavior).


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