Skip to main content
snowglobe is configured through environment variables. They’re grouped into three layers so you can stop reading once you’ve found what you need:
  1. Connection & auth — the handful most setups touch.
  2. Throughput — three top-level knobs that cover the common “go faster / wait longer / retry more” cases. Prefer these.
  3. Advanced — the per-feature knobs the throughput knobs derive. Set these directly only when you have a specific reason.

Where to set them

Any of these work; later sources win over earlier ones:
  1. The built-in default (or, for an advanced knob, the value derived from a throughput knob).
  2. A line in .snowglobe/config.rc (KEY=value, one per line). This file is created by snowglobe init.
  3. An exported shell variable (export KEY=value) — always wins.
Values in .snowglobe/config.rc are loaded into the environment at startup, so a line in that file behaves exactly like exporting the variable in your shell.

Connection & auth

VariableDefaultWhat it does
SNOWGLOBE_API_KEY (or GUARDRAILS_API_KEY)requiredAPI key for all Snowglobe requests. Get one from the dashboard.
CONTROL_PLANE_URLhttps://api.snowglobe.guardrailsai.comSnowglobe API base URL. Override only when pointing at a preview environment.
SNOWGLOBE_APP_ID(none)Single-agent app-id override. Multi-agent projects use .snowglobe/agents.json instead.
SNOWGLOBE_CLIENT_PORT8000Port the wrapper’s local server binds. The single source of truth for the port — see below.
SNOWGLOBE_CLIENT_URLhttp://localhost:<SNOWGLOBE_CLIENT_PORT>Advanced override for the URL the wrapper uses to reach its own local server. Leave unset on a normal single-host setup.

Changing the port

The wrapper runs a local server (bound to SNOWGLOBE_CLIENT_PORT) and then calls itself over HTTP to drive completions. The URL it uses, SNOWGLOBE_CLIENT_URL, defaults to http://localhost:<SNOWGLOBE_CLIENT_PORT>, so to move the server you set only the port:
Set SNOWGLOBE_CLIENT_URL explicitly only for the unusual case where the wrapper’s server is reached on a different host or through a proxy:
Don’t set the port inside SNOWGLOBE_CLIENT_URL while also setting SNOWGLOBE_CLIENT_PORT to a different value — the wrapper would bind one port and call another. Set the port once via SNOWGLOBE_CLIENT_PORT.

Throughput

These three knobs cover what most users want to tune. Set one and the CLI derives a consistent set of advanced values for you (any advanced variable you set explicitly still wins).
VariableDefaultUse it to…
SNOWGLOBE_MAX_PARALLEL_COMPLETIONS10Control how many completions run in parallel.
SNOWGLOBE_COMPLETION_TIMEOUT_SECONDS300Control how long a single completion may take.
SNOWGLOBE_COMPLETION_RETRIES2Control how many times a failed completion is retried.
A higher-throughput run is usually a single line:
At startup the CLI checks your values against Snowglobe’s server-side ceilings and prints a one-line warning (non-fatal) if one is too high — for example a completion timeout longer than upstream services honor.

What each knob derives

If you need to understand or override the underlying behavior, here’s the mapping:
Throughput knobDerived advanced variables
SNOWGLOBE_MAX_PARALLEL_COMPLETIONS = NSNOWGLOBE_COMPLETION_DISPATCH_CONCURRENCY = N
COMPLETION_BATCH_SIZE = N
COMPLETIONS_PER_SECOND = max(120, N × 60)
COMPLETIONS_INTERVAL_SECONDS = 60
SNOWGLOBE_COMPLETION_TIMEOUT_SECONDS = TREQUEST_TIMEOUT_SECONDS = T
SNOWGLOBE_INFLIGHT_TEST_TTL_SECONDS = max(T × 2, 600)
SNOWGLOBE_COMPLETION_RETRIES = RSNOWGLOBE_HTTP_RETRY_ATTEMPTS = R + 1 (the initial call counts as an attempt)
SNOWGLOBE_HTTP_RETRY_BASE_SECONDS = 1.0
SNOWGLOBE_HTTP_RETRY_MAX_SECONDS = max(15, T × 0.05)

Advanced

Set these directly only when the throughput knobs don’t give you the shape you need. They are process-wide, not per-agent: one wrapper serving three agents shares one set of limits.

Dispatch & rate limiting

VariableDefaultWhat it does
SNOWGLOBE_COMPLETION_DISPATCH_CONCURRENCYderivedHow many completions dispatch in parallel.
COMPLETION_BATCH_SIZEderivedTest rows pulled per experiment per poll tick.
COMPLETIONS_PER_SECONDderivedDeprecated, misnamed. Max inbound completion requests per COMPLETIONS_INTERVAL_SECONDS window (not literally per-second). Prefer SNOWGLOBE_MAX_PARALLEL_COMPLETIONS.
COMPLETIONS_INTERVAL_SECONDS60Window length for the rate limit above.
CONCURRENT_RISK_EVALUATIONS120Max inbound risk-evaluation requests per its window.
CONCURRENT_RISK_EVALUATIONS_INTERVAL_SECONDS60Window length for the risk-evaluation limiter.
Raise dispatch concurrency and the inbound rate limit together. As a rule of thumb keep COMPLETIONS_PER_SECOND ≥ COMPLETION_BATCH_SIZE × 5, or self-dispatched completions get rate-limited under bursty polling. Using the SNOWGLOBE_MAX_PARALLEL_COMPLETIONS knob keeps this ratio correct automatically.

Timeouts & retries

VariableDefaultWhat it does
REQUEST_TIMEOUT_SECONDSderivedPer-request timeout for every Snowglobe call and every outbound completion.
SNOWGLOBE_INFLIGHT_TEST_TTL_SECONDSderivedHow long a test stays “in-flight” before the wrapper re-pulls it as stale.
SNOWGLOBE_HTTP_RETRY_ATTEMPTSderivedTotal attempts (initial call + retries) on transient failures. 1 disables retry.
SNOWGLOBE_HTTP_RETRY_BASE_SECONDS1.0Base for exponential backoff between retries.
SNOWGLOBE_HTTP_RETRY_MAX_SECONDSderivedCap on backoff delay per retry.

Polling & heartbeat

VariableDefaultWhat it does
SNOWGLOBE_APPLICATION_HEARTBEAT_INTERVAL_MINUTES5How often the wrapper reports liveness to Snowglobe. Changing this affects whether the dashboard sees the wrapper as online — leave at the default unless advised otherwise.
SNOWGLOBE_REPORT_INTERVAL_TICKS15Poll ticks between progress-summary log lines.
SNOWGLOBE_TOOL_POLL_TIMEOUT_SECONDS300.0Max wait for a mocked tool response from Snowglobe (when simulating with tools).
SNOWGLOBE_TOOL_POLL_INTERVAL_SECONDS1.0Sleep between tool-poll iterations (floored at 0.1).

Misc

VariableDefaultWhat it does
SNOWGLOBE_AUTH_CONFIGURE_PORT9011Local port the CLI binds during the browser-based snowglobe login flow.
DEBUGfalseSet to true for verbose debug logging.