On this page

Providers

Which clouds can Stado dispatch to, how is a provider enabled, and what does each one contribute? This page covers provider selection, quota, live VM inspection, and the Vast.ai host-listing bridge. Flag-level detail lives in cli.

Selection: WC_PROVIDERS

The compute provider list is providers in the selected STADO_CONFIG profile, overridable with the comma-separated WC_PROVIDERS environment variable. The order is the preference order. The default is empty: an unconfigured deployment has no provider rather than a hidden GCP dependency.

providers_disabled (env WC_DISABLED_PROVIDERS) is the explicit fence. A fenced provider stays visible in configuration — the profile can explain why a provisioned provider exists — but the scheduler never calls it.

The coordinator resolves this list into tick arms and, per provider and per tick, checks running jobs, reaps dead agents, and schedules queued jobs. A provider whose constructor fails (credentials missing) is logged and skipped, so a misconfigured provider never blocks the primary one. local is in the list but has no cloud tick arm: device-local agents claim assigned jobs directly, and there is no VM lifecycle to schedule or reap.

Inspect the full catalog — capability families, variants, providers, and the active selections — with:

stado capabilities
stado capabilities --json

The catalog answers what a user can ask Stado to provide and which providers implement, partially support, expose externally, or plan each family (compute, workload execution, object storage, quota and capacity, billing, inventory, observability, and the rest). Compute is only one facet: the storage backend is selected separately by WC_STORAGE_BACKEND, not by WC_PROVIDERS.

What each provider contributes

A cloud entry in WC_PROVIDERS contributes dispatch of paid agent VMs, and — per the capability catalog — quota reads, machine pricing, and inventory to the extent its adapter implements them. local contributes no provisioning at all: it attaches existing registered hosts, whose capacity comes from live CPU load, available RAM, disk gates, running jobs, and per-device free VRAM. box leases externally managed fixed-shape machines and reports account limits and available boxes. vast is not a dispatch provider: Stado is the host on Vast.ai, not the renter, and renter-side provisioning is not implemented.

Provider What Stado uses it for Where credentials live
gcp Google Compute Engine VM dispatch and reap; live accelerator quota; machine prices, BigQuery billing export, credits, budgets; GCP asset inventory Platform metadata identity where available, otherwise the stado-gcp Skarbiec item
azure Azure VM dispatch and reap; configured quota reservations; machine prices, balance, usage, billing health; Stado-owned VM inventory Azure managed identity preferred, then the stado-azure service-principal Skarbiec item
aws Amazon EC2 VM dispatch and reap; machine-price estimation; Stado-owned EC2 inventory stado-aws Skarbiec item (access_key_id, secret_access_key); IMDSv2 workload identity on adapter hosts without a grant; environment credential chains are disabled
box Leasing externally managed fixed-shape boxes; account limits and available boxes stado-box/api_key in Skarbiec
local Executing on existing registered hosts; no machine provisioning Registry SSH host keys in the selected credential store (stado fleet key); no OpenSSH-file fallback
vast Listing our own idle GPU host on the Vast.ai marketplace stado-vast/api_key in Skarbiec

Cloud locators and credentials are never caller overrides: an enabled adapter receives its exact profile and provider-plugin identity, and a workload-agent grant must never contain stado-gcp, stado-azure, or stado-aws. See configuration for the credential store itself.

Quota

stado quota inspects GPU quota and submits increase requests across every provider in WC_PROVIDERS. The default subcommand is show: live cloud quota minus reservation minus running, per provider. A provider whose quota fetch returns nothing — credentials absent, SDK not installed — appears as an empty entry rather than vanishing, so a missing adapter is distinguishable from zero quota. Iteration follows WC_PROVIDERS, so the picture matches what job scheduling actually considers each tick.

stado quota show
stado quota catalog
stado quota request nvidia-tesla-t4 --to 16
stado quota requests

request submits one quota-increase request per (provider, region) via the provider's Quotas API; regions default to every region the provider dispatches into, and GCP requires a reviewer contact email ($WC_QUOTA_CONTACT_EMAIL or --email). request-all covers every known GPU family, requests shows cross-provider in-flight requests and support communications, and azure-replies/azure-escalate answer open Azure quota support tickets. Why quota shapes dispatch decisions is covered in jobs and the spend side in costs.

Live instances

stado instances list shows every live agent VM across the configured providers and flags the ones no queue job or lease still references. --provider narrows to one provider; --json emits machine-readable output.

stado instances list
stado instances list --provider gcp --json

Reaping itself is not a manual command: the coordinator's per-provider tick reaps dead agents on every pass, including the scheduled autonomy ticks, so the list is an inspection surface, not the enforcement mechanism.

Renting out idle GPUs on Vast.ai

On GCP, Azure, and AWS, Stado is the renter. On Vast.ai it is the host: the operator owns the GPU box and lists it on the marketplace so external renters use otherwise-idle capacity when there is nothing to dispatch.

stado vast status
stado vast list
stado vast unlist
stado vast auto-list --dry-run

list publishes the configured machine at a per-GPU-hour price; it requires stado-vast/api_key in Skarbiec and WC_VAST_MACHINE_ID unless the machine can be discovered automatically. unlist removes every offer, blocking new renters without terminating existing rentals. status shows Vast's current view of the machine, and monitor is a one-shot snapshot of the bridge plus wisent-compute state. auto-list is the daemon form: it polls the configured Stado queue and the host's capacity blob, lists after the fleet has been idle for the configured window (default 300 s), unlists when work appears, and can cap the maximum rental length a renter can buy (default one hour). Existing rentals are never preempted — only new renters are blocked.

The provider-neutral rule

Every command above enters through Stado. Provider diagnostics belong inside the corresponding adapter and are unavailable unless that provider is explicitly enabled in the selected profile. Nothing falls back to a cloud CLI, provider SDK, direct bucket URL, ambient credential, or a different backend: stado overview resolves only the configured Stado backend and enabled adapters, and no bootstrap, health, recovery, or release path invokes gcloud, gsutil, or az. The operational consequences are in operations.

Source: this website