VendoVendo Docs
ReferenceCLI

Vendo CLI

Install, log in, develop locally with real Vendo identity, validate manifests, SSH into deployments.

The Vendo CLI is vendo — a small Node-based tool for working against vendo.run from your terminal. Six commands cover the full surface: authenticate, develop locally, validate a manifest, and SSH into a running deployment.

Install

npm install -g @vendodev/cli
vendo --help

Requires Node 20 or newer.

Commands

CommandDescription
vendo loginAuthorize the CLI against your Vendo account
vendo logoutRevoke the local credential server-side and remove it locally
vendo whoamiShow the logged-in account, tenant, and credit balance
vendo validate [file]Lint vendo.yaml against the deploy manifest schema
vendo devWrite a .env.vendo-dev for sourcing into a local OSS app
vendo ssh <deployment>Open an interactive shell on a running deployment

Get per-command help with vendo <command> --help.

Global flags

FlagDescription
--help, -hPrint usage
--version, -vPrint the installed CLI version

vendo login accepts --api-base <url> to override the Vendo web URL (default https://vendo.run); the override is persisted in the local config so subsequent commands use it automatically.

An unknown command prints Unknown command: <name> followed by the help text and exits with code 2.

Local config

vendo login writes ~/.vendo/config.json with mode 0600 (the parent ~/.vendo directory is created with mode 0700):

{
  "apiBase": "https://vendo.run",
  "apiKey": "vendo_sk_…",
  "tenantId": "t_…",
  "appId": "app_…",
  "issuedToEmail": "[email protected]",
  "issuedAt": "2026-05-20T12:00:00Z"
}

The stored apiKey is a long-lived vendo_sk_* proxy key scoped to your tenant. Revoke it via vendo logout (which also clears the file) or from the dashboard's API Keys panel.

The config path is resolved as ${HOME}/.vendo/config.json, so overriding $HOME relocates the file. There is no XDG_CONFIG_HOME support.

The CLI does not respect VENDO_API_KEY from the environment — it always reads ~/.vendo/config.json. To use a different key for one command, run vendo logout and re-login, or pass --api-base to switch to a different Vendo instance.

Auth model

vendo login is a one-shot loopback browser bootstrap, not PKCE:

  1. The CLI starts an HTTP listener on http://127.0.0.1:<random-port>/done and a 5-minute timer.
  2. The CLI opens ${apiBase}/dev/cli-bootstrap?cb=<loopback>&mode=personal-key in your browser.
  3. After you click Issue dev API key, the page mints a fresh vendo_sk_* key server-side (revoking any previous CLI key for your account) and POSTs the JSON { apiKey, tenantId, appId, email, issuedAt, ... } directly to the loopback URL.
  4. The CLI writes the payload to ~/.vendo/config.json and exits.

There is no code verifier, no challenge, no state token, no POST /api/cli/exchange round-trip — the key is issued by the browser page and delivered straight to the loopback listener. The loopback handler answers the CORS preflight from apiBase and rejects bodies missing apiKey / tenantId. See vendo login for the full sequence.

The issued key is what every other CLI command (and every HTTP request through /api/cli/*) uses to authenticate.

Network surface

The CLI talks only to your apiBase (default vendo.run) plus, for vendo ssh, a WebSocket broker at ssh.vendo.run. No telemetry, no analytics endpoints.

Develop

To work on the CLI itself:

git clone [email protected]:runvendo/vendo-cli.git
cd vendo-cli
npm install
npm test
npm run smoke   # `vendo --help`

On this page