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

# Bring your own model

> WorldFlux records the runs you already do. It does not host GPUs, train models, or borrow your weights.

## Where the model lives

The model lives on whatever machine you trust to hold the data. WorldFlux watches the run from the side, picks up the manifest, and uploads it. That is the whole boundary.

| Source                           | What you do                                                                                      | What WorldFlux sees                                                                                                                         |
| -------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Local script**                 | `worldflux init`, drop your code into `run.py`, `worldflux run`.                                 | Manifest, metrics, logs, committed artifacts.                                                                                               |
| **Experimental runtime wrapper** | Use only when the installed wrapper and adapter metadata say the path is supported for your run. | Whatever the wrapper returns in `RuntimeResult`; unsupported wrappers should be treated as local experiments, not hosted WorldFlux compute. |
| **External model**               | `worldflux import lerobot:<model_id>` to pull it into the catalog.                               | The imported adapter shows up in `worldflux curated list`.                                                                                  |
| **External dataset**             | `worldflux import lerobot-dataset:<id>` to download.                                             | The dataset id is referenced from the recipe.                                                                                               |

Runs that reach Cloud use the same manifest shape. The dashboard reads the manifest and evidence package; production support for remote execution is determined by the adapter's support metadata, not by the presence of an installed wrapper.

## Data boundary

Three rules:

1. The CLI uploads manifest fields, metric numbers, log lines, and any artifact paths the recipe marks `commit`. Nothing else.
2. Secrets stay outside the manifest. The CLI keyring (or `~/.worldflux/credentials.toml` with `--allow-plaintext`) holds the API key. The audit payload never carries it.
3. API keys travel as `Authorization: Bearer wfx_…` headers, scoped to one workspace, expirable.

If a recipe writes a secret into a log line, the CLI does not strip it. That is yours to handle.

## Pre-flight

Before the first sync:

```bash theme={null}
worldflux doctor              # Python, uv, runtime plugins, cloud session
worldflux runtime doctor      # per-plugin diagnostics (modal, aws-ec2, replicate)
worldflux curated inspect <adapter>   # check VRAM floor + known issues
```

The doctor commands print one line per check. Lines starting with `error:` block runs.

## Pass `--json` from CI

```bash theme={null}
worldflux --json status
worldflux --json runs list --project demo-box
worldflux --json sync --project demo-box
```

The human-readable format is not stable across versions. The JSON envelope is.

## What changes when you sync

Nothing on disk. The CLI POSTs to FastAPI and exits. The next time the dashboard loads, the run shows up in the workspace's runs table. Failed uploads leave the local manifest untouched and `worldflux sync` re-tries from the same `client_run_id`.
