Skip to content

Configuration

Thibaut Rey edited this page Sep 7, 2026 · 1 revision

⚙️ Configuration

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

Core settings

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.

Clone this wiki locally