.env files are a lower-trust source: OpenClaw ignores provider credentials and protected runtime controls from workspace .env before applying precedence.
Precedence (highest to lowest)
- Process environment (what the Gateway process already has from the parent shell/daemon).
.envin the current working directory (dotenv default; does not override; provider credentials and protected runtime controls are ignored).- Global
.envat~/.openclaw/.env(aka$OPENCLAW_STATE_DIR/.env; recommended for provider API keys; does not override). - Config
envblock in~/.openclaw/openclaw.json(applied only if missing). - Optional login-shell import (
env.shellEnv.enabledorOPENCLAW_LOAD_SHELL_ENV=1), applied only for missing expected keys.
~/.config/openclaw/gateway.env as a compatibility fallback after the global .env. If both files exist and disagree, OpenClaw keeps ~/.openclaw/.env and prints a warning.
If the config file is missing entirely, step 4 is skipped; shell import still runs if enabled.
Supported operator-facing variables
The variables below are the supported environment contract for operators. UndocumentedOPENCLAW_* variables are internal implementation details and may disappear without notice.
Paths and instances
Gateway and authentication
Provider credentials
Core and bundled provider plugins recognize the following credential and provider-selection variables. Prefer each provider’s config or SecretRef fields when you need scoped credentials rather than one process-wide value.AI_GATEWAY_API_KEY, ANTHROPIC_ADMIN_API_KEY, ANTHROPIC_ADMIN_KEY, ANTHROPIC_API_KEY, ANTHROPIC_OAUTH_TOKEN, ARCEEAI_API_KEY, AZURE_OPENAI_API_KEY, AZURE_SPEECH_API_KEY, AZURE_SPEECH_KEY, AZURE_SPEECH_REGION, BASETEN_API_KEY, BRAVE_API_KEY, BYTEPLUS_API_KEY, BYTEPLUS_SEED_SPEECH_API_KEY, CEREBRAS_API_KEY, CHUTES_API_KEY, CHUTES_OAUTH_TOKEN, CLAWROUTER_API_KEY, CLOUDFLARE_AI_GATEWAY_API_KEY, CODEX_API_KEY, COHERE_API_KEY, COMFY_API_KEY, COMFY_CLOUD_API_KEY, COPILOT_GITHUB_TOKEN, DASHSCOPE_API_KEY, DEEPGRAM_API_KEY, DEEPINFRA_API_KEY, DEEPSEEK_API_KEY, ELEVENLABS_API_KEY, EXA_API_KEY, FAL_API_KEY, FAL_KEY, FEATHERLESS_API_KEY, FIRECRAWL_API_KEY, FIREWORKS_API_KEY, GCLOUD_PROJECT, GEMINI_API_KEY, GH_TOKEN, GITHUB_TOKEN, GMI_API_KEY, GOOGLE_API_KEY, GOOGLE_APPLICATION_CREDENTIALS, GOOGLE_CLOUD_API_KEY, GOOGLE_CLOUD_LOCATION, GOOGLE_CLOUD_PROJECT, GRADIUM_API_KEY, GROQ_API_KEY, HF_TOKEN, HUGGINGFACE_HUB_TOKEN, INWORLD_API_KEY, KILOCODE_API_KEY, KIMICODE_API_KEY, KIMI_API_KEY, LITELLM_API_KEY, LM_API_TOKEN, LONGCAT_API_KEY, MINIMAX_API_KEY, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY, MINIMAX_OAUTH_TOKEN, MISTRAL_API_KEY, MODELSTUDIO_API_KEY, MODEL_API_KEY, MOONSHOT_API_KEY, NOVITA_API_KEY, NVIDIA_API_KEY, OLLAMA_API_KEY, OPENAI_ADMIN_KEY, OPENAI_API_KEY, OPENCODE_API_KEY, OPENCODE_ZEN_API_KEY, OPENROUTER_API_KEY, PARALLEL_API_KEY, PERPLEXITY_API_KEY, PIXVERSE_API_KEY, QIANFAN_API_KEY, QWEN_API_KEY, QWEN_TOKEN_PLAN_API_KEY, RUNWAYML_API_SECRET, RUNWAY_API_KEY, SENSEAUDIO_API_KEY, SGLANG_API_KEY, SPEECH_KEY, SPEECH_REGION, STEPFUN_API_KEY, SYNTHETIC_API_KEY, TAVILY_API_KEY, TOGETHER_API_KEY, TOKENHUB_API_KEY, TOKENPLAN_API_KEY, VENICE_API_KEY, VLLM_API_KEY, VOLCANO_ENGINE_API_KEY, VOLCENGINE_TTS_API_KEY, VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOYAGE_API_KEY, VYDRA_API_KEY, XAI_API_KEY, XIAOMI_API_KEY, XIAOMI_TOKEN_PLAN_API_KEY, XI_API_KEY, ZAI_API_KEY, and Z_AI_API_KEY.
Installed third-party plugins may declare additional credential variables in their plugin manifests; those variables are contracts of the plugin that declares them, not core OpenClaw variables.
Logging and diagnostics
Feature and runtime toggles
Provider credentials and workspace .env
Do not keep provider API keys only in a workspace .env. OpenClaw blocks a large set of provider credential and endpoint-redirect keys from workspace .env files, including every known provider auth env var (for example GEMINI_API_KEY, GOOGLE_API_KEY, XAI_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, BRAVE_API_KEY, TAVILY_API_KEY, EXA_API_KEY, FIRECRAWL_API_KEY), plus any key ending in _API_HOST, _BASE_URL, _ENDPOINT, or _HOMESERVER, and the entire OPENCLAW_*, CLAWHUB_*, ANTHROPIC_API_KEY_*, and OPENAI_API_KEY_* namespaces.
Use one of these trusted sources for provider credentials instead:
- The Gateway process environment, such as a shell, launchd/systemd unit, container secret, or CI secret.
- The global runtime dotenv file at
~/.openclaw/.envor$OPENCLAW_STATE_DIR/.env. - The config
envblock in~/.openclaw/openclaw.json. - Optional login-shell import when
env.shellEnv.enabledorOPENCLAW_LOAD_SHELL_ENV=1is enabled.
.env, move them to one of the trusted sources above. Workspace .env can still provide ordinary project variables that are not credentials, endpoint redirects, host overrides, or OPENCLAW_* runtime controls.
See Workspace .env files for the security rationale.
Config env block
Two equivalent ways to set inline env vars (both are non-overriding):
env block accepts literal string values only. It does not expand
file:... values; for example, XAI_API_KEY: "file:secrets/xai-api-key.txt"
is passed to providers as that exact string.
For file-backed provider keys, use a SecretRef on the credential field that
supports it:
Shell env import
env.shellEnv runs your login shell and imports only missing expected keys:
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000(default15000)
Exec shell snapshots
On non-Windows Gateway hosts, bash and zshexec commands use a startup snapshot by default.
Set OPENCLAW_EXEC_SHELL_SNAPSHOT=0 in the Gateway process environment to disable this path.
Values false, no, and off also disable it. Per-call exec.env values cannot toggle
snapshots or redirect the snapshot cache.
Runtime-injected env vars
OpenClaw also injects context markers into spawned child processes:OPENCLAW_SHELL=exec: set for commands run through theexectool.OPENCLAW_SHELL=acp-client: set foropenclaw acp clientwhen it spawns the ACP bridge process.OPENCLAW_SHELL=tui-local: set for local TUI!shell commands.OPENCLAW_CLI=1: set for child processes spawned by the CLI entry point.
UI env vars
OPENCLAW_THEME=light: force the light TUI palette when your terminal has a light background.OPENCLAW_THEME=dark: force the dark TUI palette.COLORFGBG: if your terminal exports it, OpenClaw uses the background color hint to auto-pick the TUI palette.
Env var substitution in config
You can reference env vars directly in config string values using${VAR_NAME} syntax:
Secret refs vs ${ENV} strings
OpenClaw supports two env-driven patterns:
${VAR}string substitution in config values.- SecretRef objects (
{ source: "env", provider: "default", id: "VAR" }) for fields that support secrets references.
env block itself does not resolve SecretRefs or file:...
shorthand values.
Path-related env vars
Agent helper tool downloads
SetOPENCLAW_OFFLINE=1 to prevent OpenClaw from downloading its pinned fd
and ripgrep helper binaries. Existing helpers under the OpenClaw tools
directory and working system binaries remain eligible; a missing helper stays
unavailable instead of triggering a network request.
Logging
OPENCLAW_HOME
When set, OPENCLAW_HOME replaces the system home directory ($HOME / os.homedir()) for internal OpenClaw path defaults. This includes the default state directory, config path, agent directories, credentials, installer onboarding workspace, and the default dev checkout used by openclaw update --channel dev.
Precedence: OPENCLAW_HOME > $HOME > USERPROFILE > Termux PREFIX home fallback on Android > os.homedir()
Example (macOS LaunchDaemon):
OPENCLAW_HOME can also be set to a tilde path (e.g. ~/svc), which gets expanded using the same OS home fallback chain before use.
Explicit path variables such as OPENCLAW_STATE_DIR, OPENCLAW_CONFIG_PATH, and OPENCLAW_GIT_DIR still take precedence. OS-account tasks such as shell startup file detection, package-manager setup, and host ~ expansion may still use the real system home.
nvm users: web_fetch TLS failures
If Node.js was installed via nvm (not the system package manager), the built-infetch() uses
nvm’s bundled CA store, which may be missing modern root CAs (ISRG Root X1/X2 for Let’s Encrypt,
DigiCert Global Root G2, etc.). This causes web_fetch to fail with "fetch failed" on most HTTPS sites.
On Linux, OpenClaw automatically detects nvm and applies the fix in the actual startup environment:
openclaw gateway installwritesNODE_EXTRA_CA_CERTSinto the systemd service environment- the
openclawCLI entrypoint re-execs itself withNODE_EXTRA_CA_CERTSset before Node startup
node ... launches):
Export the variable before starting OpenClaw:
~/.openclaw/.env for this variable; Node reads
NODE_EXTRA_CA_CERTS at process startup.
Legacy environment variables
OpenClaw only readsOPENCLAW_* environment variables. The legacy
CLAWDBOT_* and MOLTBOT_* prefixes from earlier releases are silently
ignored.
If any are still set on the Gateway process at startup, OpenClaw emits a
single Node deprecation warning (OPENCLAW_LEGACY_ENV_VARS) listing the
detected prefixes and the total count. Rename each value by replacing the
legacy prefix with OPENCLAW_ (for example CLAWDBOT_GATEWAY_TOKEN to
OPENCLAW_GATEWAY_TOKEN); the old names take no effect.