> ## 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; The launch policies are Cosmos Nano DROID (/robotics/cosmos/nano-policy-droid/), DreamZero DROID (/robotics/dreamzero/droid/), and FLUX Action DROID (/robotics/flux-action/droid/), organized by model family and embodiment. 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.

# Get your first actions

> Send test observations to hosted Praxis-1 YAM and inspect an action chunk.

## Before you start

You need Python 3.12, the [Python SDK](https://docs.reactor.inc/sdk-reference/python/reactor.md), and a [Reactor API
key](https://reactor.inc/account/api-keys) with access to the hosted model. New to Reactor? [How the
API works](https://docs.reactor.inc/robotics/how-the-api-works.md) explains sessions, camera tracks, commands, and messages.

## Request a chunk

1. Connect a session to `reactor/praxis-1-yam` with the [Python SDK](https://docs.reactor.inc/sdk-reference/python/reactor.md)
   and wait for `READY`. Subscribe to `action_prediction` and `prediction_failed` messages before
   you send anything.
2. Publish the `top`, `wrist_left`, and `wrist_right` camera tracks at 15 fps. Send RGB `uint8`
   frames in 16:10 aspect, at most 416 pixels on the longer side. For a first test, synthetic frames
   are enough.
3. Send `set_task` with a task, for example
   `{"task": "Pick up the pen from the center of the table, then place the pen in the bag"}`.
4. Send `set_robot_state_json` with at least the last 25 rows of measured state at 15 Hz. See [Robot
   state](https://docs.reactor.inc/robotics/praxis/yam/reference.md#robot-state) for the format.
5. Wait for the first `action_prediction`. The session needs 25 frames of each camera first, so it
   arrives about two seconds after the cameras start. Check that `step` is `0`, that it has 21 rows,
   and that every value is finite.
6. To get the next chunk, send `set_executed_step` with that `step`. The next reply has `step: 1`
   and 24 rows.

Commands that carry JSON take it as a string inside the named field. For example,
`set_robot_state_json` takes
`{"robot_state_json": "{\"left\": {\"ee_pose\": ..., \"grip\": ...}, \"right\": {...}}"}`, not a
nested object.

Replies to synthetic frames and sample state only check connectivity and reply shape. Do not execute
them on hardware. If no chunk arrives, send `get_status`: its `waiting_for` field says what the
session still needs.

Next, [build a simulator adapter](https://docs.reactor.inc/robotics/praxis/yam/simulation.md) or use the [integration
guide](https://docs.reactor.inc/robotics/praxis/yam/integration.md).


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