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

# Doctor error codes

> Every error code vendo doctor can print, grouped by the area it checks, with the page that fixes each one.

Every check `vendo doctor` runs prints a stable code when it fails, like
`E-WIRE-003`. Each code below has its own page with the symptom, the cause,
and the fix.

Find yours by area below. Codes are never renumbered or reused, so an old code
always names the same failure.

Doctor reads what is on disk. It never starts your app and never calls it, so
every code that needed a live probe is retired. Retired codes stay listed here,
with their page, so an older report still resolves.

## Wiring

| Code                                                 | What doctor found                                                 |
| ---------------------------------------------------- | ----------------------------------------------------------------- |
| [E-WIRE-001](/production/troubleshooting/e-wire-001) | No `createVendo` server wiring in an Express host                 |
| [E-WIRE-002](/production/troubleshooting/e-wire-002) | No `<VendoProvider>` in an Express host's client                  |
| [E-WIRE-003](/production/troubleshooting/e-wire-003) | No Next.js catch-all route at `app/api/vendo/[...vendo]/route.ts` |
| [E-WIRE-004](/production/troubleshooting/e-wire-004) | No layout or `_app` file mounts `<VendoProvider>`                 |
| [E-WIRE-005](/production/troubleshooting/e-wire-005) | Neither `@vendoai/vendo` nor the `vendoai` alias is declared      |
| [E-WIRE-006](/production/troubleshooting/e-wire-006) | Nothing visible is mounted, so users cannot open the agent        |
| [E-WIRE-007](/production/troubleshooting/e-wire-007) | No `createVendo` wiring on a host doctor cannot pattern-match     |
| [E-WIRE-008](/production/troubleshooting/e-wire-008) | No `<VendoProvider>` on a host doctor cannot pattern-match        |
| [E-WIRE-009](/production/troubleshooting/e-wire-009) | Server actions exist but are not registered into `createVendo`    |
| [E-WIRE-010](/production/troubleshooting/e-wire-010) | The host still names the removed `<VendoRoot>`                    |
| [E-WIRE-011](/production/troubleshooting/e-wire-011) | The `vendoai` alias resolves but `@vendoai/vendo` does not        |

## Config files

| Code                                               | What doctor found                                                                  |
| -------------------------------------------------- | ---------------------------------------------------------------------------------- |
| [E-CFG-001](/production/troubleshooting/e-cfg-001) | A required `.vendo/` file is missing                                               |
| [E-CFG-002](/production/troubleshooting/e-cfg-002) | `.vendo/data/.gitignore` is missing, risking a committed store                     |
| [E-CFG-003](/production/troubleshooting/e-cfg-003) | The OpenAPI server mount and `VENDO_BASE_URL`'s path prefix disagree               |
| [E-CFG-004](/production/troubleshooting/e-cfg-004) | A Next host's `next.config` does not keep `@vendoai/apps` out of the server bundle |

## Store persistence

| Code                                                   | What doctor found                                          |
| ------------------------------------------------------ | ---------------------------------------------------------- |
| [E-STORE-001](/production/troubleshooting/e-store-001) | The store's data directory sits on disk the platform wipes |

## Tenant connectors

| Code                                                     | What doctor found                                                          |
| -------------------------------------------------------- | -------------------------------------------------------------------------- |
| [E-TENANT-001](/production/troubleshooting/e-tenant-001) | Tenant connectors are wired but no store encryption key holds their tokens |

## Host dependencies

| Code                                               | What doctor found                                                            |
| -------------------------------------------------- | ---------------------------------------------------------------------------- |
| [E-DEP-001](/production/troubleshooting/e-dep-001) | The installed `ai` package is a major version Vendo does not support         |
| [E-DEP-002](/production/troubleshooting/e-dep-002) | Retired: the version skew between the running wire and the CLI was read live |
| [E-DEP-003](/production/troubleshooting/e-dep-003) | The installed `zod` predates 3.25 and the subpaths the AI SDK imports        |

## Ejected UI

| Code                                             | What doctor found                                                          |
| ------------------------------------------------ | -------------------------------------------------------------------------- |
| [E-UI-001](/production/troubleshooting/e-ui-001) | An ejected surface came from an older `@vendoai/ui` than the installed one |

## Dev server

| Code                                               | What doctor found                         |
| -------------------------------------------------- | ----------------------------------------- |
| [E-DEV-001](/production/troubleshooting/e-dev-001) | Retired: doctor never starts a dev server |

## Composition and status

| Code                                                 | What doctor found                                                          |
| ---------------------------------------------------- | -------------------------------------------------------------------------- |
| [E-LIVE-001](/production/troubleshooting/e-live-001) | Retired: `/status` answered with an invalid composition response           |
| [E-LIVE-002](/production/troubleshooting/e-live-002) | Retired: `/status` was unreachable                                         |
| [E-LIVE-003](/production/troubleshooting/e-live-003) | Retired: `/status` returned an unrecognized execution venue                |
| [E-LIVE-004](/production/troubleshooting/e-live-004) | Retired: the missing execution venue was read from live `/status`          |
| [E-LIVE-005](/production/troubleshooting/e-live-005) | Retired: the host predated the execution venue field in `/status`          |
| [E-LIVE-006](/production/troubleshooting/e-live-006) | Retired: the app's root page returned a server error when doctor loaded it |
| [E-LIVE-007](/production/troubleshooting/e-live-007) | Retired: `E2B_API_KEY` alone no longer selects an execution venue          |
| [E-LIVE-008](/production/troubleshooting/e-live-008) | Retired: the store family this warning covered has been replaced           |

## Credentials

| Code                                                 | What doctor found                                                                 |
| ---------------------------------------------------- | --------------------------------------------------------------------------------- |
| [E-AUTH-001](/production/troubleshooting/e-auth-001) | Retired: the present-credential probe's cookies and bearer never reached your API |
| [E-AUTH-002](/production/troubleshooting/e-auth-002) | Retired: the present-credential probe was unreachable                             |
| [E-AUTH-003](/production/troubleshooting/e-auth-003) | Retired: the present-credential probe was skipped with the app down               |
| [E-AUTH-004](/production/troubleshooting/e-auth-004) | Retired: an `actAs` credential minted and your principal resolver refused it      |
| [E-AUTH-005](/production/troubleshooting/e-auth-005) | Retired: the `actAs` probe was unreachable                                        |
| [E-AUTH-006](/production/troubleshooting/e-auth-006) | Retired: the `actAs` probe was skipped with the app down                          |
| [E-AUTH-007](/production/troubleshooting/e-auth-007) | Retired: the missing `actAs` seam was reported by the live probe                  |
| [E-AUTH-008](/production/troubleshooting/e-auth-008) | Retired: the `actAs` seam declined doctor's synthetic principal                   |
| [E-AUTH-009](/production/troubleshooting/e-auth-009) | `supabase()` is wired but neither `SUPABASE_JWT_SECRET` nor `SUPABASE_URL` is set |

## MCP door

| Code                                               | What doctor found                                                       |
| -------------------------------------------------- | ----------------------------------------------------------------------- |
| [E-MCP-001](/production/troubleshooting/e-mcp-001) | Retired: protected-resource metadata was fetched over HTTP              |
| [E-MCP-002](/production/troubleshooting/e-mcp-002) | Retired: authorization-server metadata was fetched over HTTP            |
| [E-MCP-003](/production/troubleshooting/e-mcp-003) | Retired: the MCP server card was fetched over HTTP                      |
| [E-MCP-004](/production/troubleshooting/e-mcp-004) | `server.json` does not meet MCP registry discovery requirements         |
| [E-MCP-005](/production/troubleshooting/e-mcp-005) | Retired: the `server.json` remote was compared against the live door    |
| [E-MCP-006](/production/troubleshooting/e-mcp-006) | `server.json` is invalid JSON                                           |
| [E-MCP-007](/production/troubleshooting/e-mcp-007) | The local MCP registry auth challenge is malformed                      |
| [E-MCP-008](/production/troubleshooting/e-mcp-008) | Retired: the deployed MCP registry auth challenge was fetched over HTTP |
| [E-MCP-009](/production/troubleshooting/e-mcp-009) | The door is wired but `VENDO_BASE_URL` is not set                       |

## Schedules

| Code                                                   | What doctor found                                                          |
| ------------------------------------------------------ | -------------------------------------------------------------------------- |
| [E-SCHED-001](/production/troubleshooting/e-sched-001) | Retired: the missing schedule caller was read from the live machines route |

## Model turn

| Code                                                 | What doctor found                                                    |
| ---------------------------------------------------- | -------------------------------------------------------------------- |
| [E-TURN-001](/production/troubleshooting/e-turn-001) | Retired: one real model turn went to the wire and no reply came back |
| [E-TURN-002](/production/troubleshooting/e-turn-002) | Retired: the live model turn was skipped with the app down           |

## Vendo Cloud key

| Code                                                   | What doctor found                     |
| ------------------------------------------------------ | ------------------------------------- |
| [E-CLOUD-001](/production/troubleshooting/e-cloud-001) | `VENDO_API_KEY` is set but not usable |

## Model credential

| Code                                                   | What doctor found                                               |
| ------------------------------------------------------ | --------------------------------------------------------------- |
| [E-MODEL-001](/production/troubleshooting/e-model-001) | No model credential resolves, so the agent cannot answer a turn |

## Tool catalog

| Code                                                   | What doctor found                                                     |
| ------------------------------------------------------ | --------------------------------------------------------------------- |
| [E-TOOLS-001](/production/troubleshooting/e-tools-001) | Every extracted host tool is disabled or excluded                     |
| [E-TOOLS-002](/production/troubleshooting/e-tools-002) | The extracted tool surface is empty                                   |
| [E-TOOLS-003](/production/troubleshooting/e-tools-003) | Part of the tool catalog is ungraded, so it asks on every call        |
| [E-TOOLS-004](/production/troubleshooting/e-tools-004) | Part of the tool catalog declares no request or response shape        |
| [E-TOOLS-005](/production/troubleshooting/e-tools-005) | Some extracted host tools are off, so the agent will never offer them |

## Not a doctor code

Doctor reads what is on disk, so it cannot see a failure that only happens
while your app is running. This one is common enough to have its own page.

| Page                                                             | What you're seeing                                              |
| ---------------------------------------------------------------- | --------------------------------------------------------------- |
| [MCP call times out at 60 seconds](/production/mcp-call-timeout) | A `tools/call` from a stock MCP client hangs or dies around 60s |
