Any model. Any compute. One control plane.

A project isolates keys, policy and config. Instances multiply it. Everything below the line is swappable.

projects — isolated keys · policy · instances
proj: lumen-legal14 instances
vault infisical model opus-4-8 compute local-relay cap $1/session
proj: paylo-support31 instances
vault doppler model haiku-4-5 compute vercel cap $0.05/session
Cervercontrol plane
open a session for an instance POST /v2/sessions { app_user_id, compute, model? }
run — SSE stream back POST /v2/sessions/{id}/run-llm { input }

vaults — keys never reach the client

Infisicalpull at boot
Dopplerpull at boot
Cerver-nativeencrypted paste-in

computes — provider-agnostic

local relayyour machine
Vercel Sandboxephemeral
E2Bephemeral
onlinehosted LLM

models — hot-swap & failover

Anthropicprimary
OpenAIfallback
Googlefallback
Mistralfallback

Built to not wake you up.

402

Caps enforced before the call

Failover mid-session

SSE streamed end-to-end

Sessions resume on fresh compute

🔐

Keys stay in the vault

Crons, per-minute, per-project

Run the experiment, not the argument.

same task, three models "fix the failing test"

Swap anything with one field.

POST /v2/sessions
{ "app_user_id": "inst_meyer_roth",
  "compute": { "provider": "vercel" },      // or "e2b" · "online" · your machine
  "metadata": { "cli_model": "opus-4-8" } }  // hot-swap per project, per session

# or race them from the CLI:
cerver compare "fix the failing test" claude/opus local codex/gpt-5.5 vercel

Two calls. Everything under them is swappable.