Operator access is gated
Console sessions are server-side; admin APIs require a dedicated sys key, not a caller key. Humans authenticate via OIDC; secrets stay off the browser.
Security
Switchboard is built so provider credentials stay off caller machines, tenants stay namespaced, and operator actions are audited. Production cells enforce these controls; local/dev stand-ins are intentionally looser for smoke tests.
Credentials
Production cells use a node-local injector that adds credentials to outbound requests over a Unix socket—the gateway process is not meant to retain raw vault secrets. Destination hosts are pinned (including resolved-IP checks); private ranges are rejected; cells egress from fixed NAT IPs you can allowlist.
Console sessions are server-side; admin APIs require a dedicated sys key, not a caller key. Humans authenticate via OIDC; secrets stay off the browser.
BYO and provider secret maps seal with a cell passphrase (HKDF). Production refuses to start without SB_SECRETS_KEY.
Per-key deny/revoke, ip_allowlist, and anomaly hooks exist so a single compromised credential can be cut without taking the cell down.
Identity
Your services and MCP tool loops. Customer id must be namespaced; agents get approval gates and tighter limits.
External developers. Identity comes from the credential (or short-lived OAuth JWT), never a free-form header.
Platform operators and machines (console BFF, publish jobs). Admin routes require KindSys—caller keys get 403.
Reliability under failure
Last-known-good config when the control plane is down. Token leases when Redis blinks. Fail-closed hub dedupe—not silent double sends. Side-effect timeouts record unknown, never guess.