-
-
Notifications
You must be signed in to change notification settings - Fork 6
Configuration
Thibaut Rey edited this page Sep 7, 2026
·
1 revision
The tables below separate application defaults from the effective values in the shipped Compose profile.
| Variable | Compose value | Note |
|---|---|---|
ADMIN_TOKEN |
change-me |
Unsafe placeholder; replace it before first use as shown above |
PROXY_API_KEY |
empty unless set in .env
|
Empty leaves inference routes open |
REQUEST_BODY_LIMIT |
500mb |
Overrides the 100mb application default |
MODELS_CLIENT_VERSION |
1.0.0 |
Overrides the application default |
PROXY_MODELS |
gpt-5.3-codex,gpt-5.2-codex,gpt-5-codex |
Fallback model catalog |
EXCLUDED_PROVIDER_MODELS |
openai-compatible:gpt-5.5,mistral:mistral-medium-latest |
Overrides the empty application default |
Compose uses .env for interpolation only. Variables not listed under the
service's environment section must be added there or supplied by an override
file before they reach the container.
Core settings — ports, storage, credentials, and models
| Variable | Default | Purpose |
|---|---|---|
MULTIVIBE_CONTROL_PLANE |
false (true in the container) |
Make Node serve only the control plane while Rust owns /v1
|
PORT |
1455 |
Node port in single-process mode; the Compose profile overrides it to 1456
|
HOST |
Node.js all-interface default | Node listen address; the native control plane pins literal loopback |
CONTROL_PLANE_PORT |
1456 |
Loopback Node control-plane port |
V1_EDGE_HOST |
0.0.0.0 |
Native Rust edge listen address |
V1_EDGE_PORT |
1455 |
Native Rust edge listen port |
V1_EDGE_BASE_URL |
http://127.0.0.1:1455 |
Internal URL used by control-plane jobs and host integrations |
NODE_CONTROL_PLANE_URL |
http://127.0.0.1:1456 |
Loopback target for non-/v1 edge fallback requests |
V1_EDGE_INTERNAL_JOB_TOKEN |
generated by the container entrypoint | Shared capability for control-plane job execution; never expose it publicly |
ADMIN_TOKEN |
empty | Dashboard/admin secret; empty disables the admin check |
PROXY_API_KEY |
empty | Shared inference/API key |
PROXY_API_KEYS |
empty | JSON object mapping application names to keys |
STORE_PATH |
/data/accounts.json |
Account and dashboard-managed state |
PROVIDER_AGENT_ENABLED |
false |
Supervise the packaged provider agent when explicitly enabled |
PROVIDER_AGENT_BINARY |
/opt/multivibe/bin/multivibe-provider-agent |
Absolute packaged agent binary path |
PROVIDER_AGENT_STATE_PATH |
beside STORE_PATH
|
Local explicit provider model selection |
PROVIDER_AGENT_RUNTIME_STATE_PATH |
beside STORE_PATH
|
Manual loopback endpoints and optional runtime bearers |
PROVIDER_AGENT_DEVICE_KEY_PATH |
beside STORE_PATH
|
Ed25519 device identity and relay-shadow sequence |
PROVIDER_AGENT_ENROLLMENT_STATE_PATH |
beside STORE_PATH
|
Submitted Cloud shadow node view without the grant |
PROVIDER_AGENT_CLOUD_API_URL |
https://auth.multivibe.cloud |
Fixed Cloud enrollment API origin |
OAUTH_STATE_PATH |
/data/oauth-state.json |
OAuth state |
TRACE_FILE_PATH |
/data/requests-trace.jsonl |
Recent traces |
TRACE_STATS_HISTORY_PATH |
/data/requests-stats-history.jsonl |
Long-term lightweight usage |
ANONYMOUS_USAGE_STATE_PATH |
/data/anonymous-usage-state.json |
Daily anonymous-sharing retry envelope |
ANONYMOUS_USAGE_API_BASE_URL |
https://api.multivibe.cloud |
Public allowlist and anonymous daily aggregate API |
CODEX_PROJECTS_PATH |
/data/codex-projects.json |
Codex project registry |
JOBS_DB_PATH |
/data/jobs.sqlite |
Legacy/control-plane job database |
V1_EDGE_JOBS_PATH |
beside STORE_PATH (/data/v1-edge-jobs.json in Compose) |
Native Rust edge deferred-job state |
JOB_WORKER_CONCURRENCY |
16 |
Global worker concurrency; destination capacity still applies |
REQUEST_BODY_LIMIT |
100mb |
JSON or decompressed-zstd body limit |
TRACE_RETENTION_MAX |
1000 |
Recent full traces retained; minimum 100 |
TRACE_INCLUDE_BODY |
false |
Persist full request bodies in recent traces |
TRACE_INCLUDE_HEADERS |
false |
Persist sanitized inbound headers in recent traces |
CODEX_PROJECT_REGISTRATION_TOKEN |
ADMIN_TOKEN |
Limited project-registration secret |
CODEX_SESSION_AFFINITY |
false |
In-memory per-session account stickiness |
CODEX_SESSION_AFFINITY_TTL_MS |
3600000 |
Affinity TTL in the native Rust edge |
CODEX_SESSION_AFFINITY_MAX_ENTRIES |
10000 |
Affinity cache limit |
INFERENCE_IDEMPOTENCY_TTL_MS |
300000 |
Completed synchronous inference replay TTL |
INFERENCE_IDEMPOTENCY_IN_FLIGHT_TIMEOUT_MS |
300000 |
Maximum single-flight reservation lifetime |
INFERENCE_IDEMPOTENCY_MAX_ENTRIES |
1000 |
Combined in-flight and completed entry limit |
INFERENCE_IDEMPOTENCY_MAX_BYTES |
33554432 |
Global completed-response memory budget |
INFERENCE_IDEMPOTENCY_MAX_RESPONSE_BYTES |
1048576 |
Per-response replay limit |
PROXY_MODELS |
gpt-5.3-codex,gpt-5.2-codex,gpt-5-codex |
Fallback model catalog |
MODELS_CLIENT_VERSION |
0.144.1 |
Codex identity used for discovery/runtime requests |
MODELS_CACHE_MS |
600000 |
Model-catalog refresh interval |
EXCLUDED_PROVIDER_MODELS |
empty | Comma-separated provider:model exclusions |
CLAUDE_CODE_MODEL |
gpt-5.6-luna |
Claude Code opus/sonnet upstream |
CLAUDE_CODE_FAST_MODEL |
gpt-5.4-mini |
Claude Code haiku/fast upstream |
Routing, cache, retry, and block tuning
| Variable | Default | Purpose |
|---|---|---|
USAGE_CACHE_TTL_MS |
300000 |
Usage snapshot freshness |
USAGE_REFRESH_INTERVAL_MS |
600000 |
Background quota refresh interval when no requests are running |
USAGE_TIMEOUT_MS |
10000 |
Provider usage-probe timeout |
USAGE_STALE_WHILE_REVALIDATE |
true |
Route with bounded stale/missing usage while refreshing |
USAGE_STALE_MAX_AGE_MS |
1800000 |
Maximum stale usage age |
MODELS_STALE_WHILE_REVALIDATE |
true |
Serve a bounded stale model catalog while refreshing |
MODELS_STALE_MAX_AGE_MS |
1800000 |
Maximum stale catalog age |
FIVE_HOUR_QUOTA_THRESHOLD_PERCENT |
90 |
Near-limit five-hour threshold |
BLOCK_FALLBACK_MS |
1800000 |
Quota block fallback without a usable reset |
RATE_LIMIT_BLOCK_MS |
60000 |
Ordinary rate-limit account/model block |
MODEL_NOT_FOUND_BLOCK_DURATION_MS |
3600000 |
Model-not-found account/model block |
MAX_ACCOUNT_RETRY_ATTEMPTS |
10 |
Candidate accounts tried after quota failures |
MAX_UPSTREAM_RETRIES |
5 |
Same-account transient retries |
UPSTREAM_BASE_DELAY_MS |
2000 |
Retry backoff base |
HANG_RETRY_INTERVAL_MS |
10000 |
Delay while all accounts are temporarily exhausted |
HANG_RETRY_MAX_DURATION_MS |
120000 |
Maximum all-account wait |
EMPTY_RESPONSE_BLOCK_THRESHOLD |
3 |
Empty outputs before a temporary block |
EMPTY_RESPONSE_BLOCK_DURATION_MS |
30000 |
Empty-output block duration |
EMPTY_RESPONSE_WINDOW_MS |
300000 |
Empty-output counting window |
TOKEN_REFRESH_MARGIN_MS |
60000 |
OAuth refresh margin |
ACCOUNT_FLUSH_INTERVAL_MS |
5000 |
Account-store write debounce |
Provider, OAuth, Realtime, and observability settings
| Variable | Default |
|---|---|
CHATGPT_BASE_URL |
https://chatgpt.com |
UPSTREAM_PATH |
/backend-api/codex/responses |
UPSTREAM_COMPACT_PATH |
/backend-api/codex/responses/compact |
MISTRAL_BASE_URL |
https://api.mistral.ai |
OPENCODE_BASE_URL |
https://opencode.ai/zen |
OPENCODE_CONSOLE_URL |
https://opencode.ai/console |
OPENCODE_OAUTH_CLIENT_ID |
opencode-cli |
ZAI_BASE_URL |
https://api.z.ai |
ZAI_MODELS_PATH |
/api/paas/v4/models |
XAI_BASE_URL |
https://cli-chat-proxy.grok.com/v1 |
XAI_AUTH_PATH |
$HOME/.grok/auth.json |
OAUTH_REDIRECT_URI |
http://localhost:1455/auth/callback |
REALTIME_PROVIDER |
openai |
REALTIME_WEBRTC_CALL_URL |
empty |
REALTIME_REQUEST_TIMEOUT_MS |
30000 |
SENTRY_DSN |
empty |
SENTRY_ENVIRONMENT |
NODE_ENV or production
|
SENTRY_TRACES_SAMPLE_RATE |
0.1 |
Provider endpoint paths, OAuth endpoints, and Grok client-identity fields can
also be overridden. The authoritative definitions live in
src/config.ts and
src/oauth-config.ts.