> ## Documentation Index
> Fetch the complete documentation index at: https://vendo-mintlify-24213046.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Production checklist

> The eight things that must be true before your users meet Vendo in production, and the command that checks your wiring.

Eight things must be true before your users meet Vendo in production.

## What must be true

| Must be true                                            | If it isn't                                                      | Where                                              |
| ------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------- |
| Your Cloud key is set, so every turn has a model        | Every message fails before it reaches your API                   | [Model credentials](/production/model-credentials) |
| Every request resolves to one stable user id            | Threads, approvals, and audit rows land on the wrong user        | [Auth](/howto/auth)                                |
| Your Cloud store is on, so threads outlive a restart    | Threads, apps, and audit rows vanish when the process restarts   | [Persistence](/production/persistence)             |
| The handler sits at one base path, streaming intact     | Replies arrive in one lump at the end, or not at all             | [Handler options](/reference/handler-options)      |
| Risky tools ask a human before they run                 | Every call runs on its own, including the ones that move money   | [Approvals](/generated/in-client-venue)            |
| Something calls `/tick` on a clock                      | Scheduled automations never run                                  | [Automations](/capabilities/automations)           |
| Every webhook source is registered and verified         | Anyone who finds the URL can start a run in your product         | [Automations](/capabilities/automations)           |
| Apps bigger than a screen have a sandbox to be built in | Those asks are refused instead of offered, and nothing is sealed | [Vendo Cloud](/production/vendo-cloud)             |

Rows 1, 3, 6, and 8 come with your Cloud key. The other four are yours to wire.

<Note>
  Row 6 enrols itself. A keyed deployment registers its own URL and tick secret
  at boot, so Cloud knocks once a minute — set `VENDO_BASE_URL` to your app's
  full public URL and there is nothing else to configure.
</Note>

***

## One command checks your wiring

`vendo doctor` reads your repo and your environment. It never calls the deployed
app, so run it where your source lives.

```bash Terminal highlight={1} theme={null}
$ npx vendo doctor

ok: createVendo server wiring found
ok: a visible agent surface is mounted (<VendoOverlay /> or an equivalent)
ok: model credential: VENDO_API_KEY (Vendo Cloud)
ok: the OpenAPI server mount and VENDO_BASE_URL agree on "/api/vendo"
ok: catalog: all 34 tools graded
ok: Vendo Cloud key present and well-formed
```

Exit 0 means every check passed. A hard failure prints `broken:`, a soft one
prints `warning:`.

Add `--json` and doctor prints one object with a `checks` array. A failing entry
carries its `error_code` and a `fix_ref` URL, for example
[`E-WIRE-004`](/production/troubleshooting/e-wire-004).

***

## What your process prints at boot

`createVendo` announces the seams it composed, once per process. Column two is
the venue that won each slot. Column three is what selected it.

```text vendo ready highlight={2,3,4} theme={null}
◆  vendo ready
│  ✓ sandbox   cloud    VENDO_API_KEY
│  ✓ store     cloud    VENDO_API_KEY
│  ✓ models    cloud    VENDO_API_KEY (gateway)
│  ✓ auth      clerk    auth: clerk()
```

If a row says something other than `cloud`, that slot was filled by an adapter
you passed.
