Diagnostics
متغیرهای محیطی
OpenClaw متغیرهای محیطی را از چندین منبع میخواند. قاعده این است: هرگز مقادیر موجود را بازنویسی نکن.
فایلهای .env فضای کاری منبعی با اعتماد کمتر هستند: OpenClaw پیش از اعمال ترتیب تقدم، اعتبارنامههای ارائهدهنده و کنترلهای محافظتشده runtime را از .env فضای کاری نادیده میگیرد.
ترتیب تقدم (بالاترین ← پایینترین)
- محیط فرایند (آنچه فرایند Gateway از قبل از شل/daemon والد دارد).
.envدر دایرکتوری کاری فعلی (پیشفرض dotenv؛ بازنویسی نمیکند؛ اعتبارنامههای ارائهدهنده و کنترلهای محافظتشده runtime نادیده گرفته میشوند)..envسراسری در~/.openclaw/.env(یا$OPENCLAW_STATE_DIR/.env؛ برای کلیدهای API ارائهدهنده توصیه میشود؛ بازنویسی نمیکند).- بلوک
envپیکربندی در~/.openclaw/openclaw.json(فقط اگر مقدار موجود نباشد اعمال میشود). - واردسازی اختیاری login-shell (
env.shellEnv.enabledیاOPENCLAW_LOAD_SHELL_ENV=1) که فقط برای کلیدهای مورد انتظارِ ناموجود اعمال میشود.
در نصبهای تازه Ubuntu که از دایرکتوری وضعیت پیشفرض استفاده میکنند، OpenClaw همچنین ~/.config/openclaw/gateway.env را پس از .env سراسری بهعنوان fallback سازگاری در نظر میگیرد. اگر هر دو فایل وجود داشته باشند و با هم ناسازگار باشند، OpenClaw مقدار ~/.openclaw/.env را نگه میدارد و هشدار چاپ میکند.
اگر فایل پیکربندی کاملا وجود نداشته باشد، مرحله 4 رد میشود؛ واردسازی شل همچنان در صورت فعال بودن اجرا میشود.
اعتبارنامههای ارائهدهنده و .env فضای کاری
کلیدهای API ارائهدهنده را فقط در .env فضای کاری نگه ندارید. OpenClaw متغیرهای محیطی اعتبارنامه ارائهدهنده را از فایلهای .env فضای کاری نادیده میگیرد، از جمله کلیدهای رایجی مانند 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.
برای اعتبارنامههای ارائهدهنده از یکی از این منابع مورد اعتماد استفاده کنید:
- محیط فرایند Gateway، مانند شل، واحد launchd/systemd، secret کانتینر، یا secret در CI.
- فایل dotenv سراسری runtime در
~/.openclaw/.envیا$OPENCLAW_STATE_DIR/.env. - بلوک
envپیکربندی در~/.openclaw/openclaw.json. - واردسازی اختیاری login-shell وقتی
env.shellEnv.enabledیاOPENCLAW_LOAD_SHELL_ENV=1فعال باشد.
اگر قبلا کلیدهای ارائهدهنده را فقط در .env فضای کاری ذخیره کردهاید، آنها را به یکی از منابع مورد اعتماد بالا منتقل کنید. .env فضای کاری همچنان میتواند متغیرهای عادی پروژه را که اعتبارنامه، تغییرمسیر endpoint، بازنویسی host، یا کنترلهای runtime با پیشوند OPENCLAW_* نیستند فراهم کند.
برای منطق امنیتی، فایلهای .env فضای کاری را ببینید.
بلوک env پیکربندی
دو روش معادل برای تنظیم inline env vars (هر دو غیر بازنویسنده هستند):
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, },}بلوک env پیکربندی فقط مقدارهای رشتهای literal را میپذیرد. مقدارهای
file:... را گسترش نمیدهد؛ برای مثال، XAI_API_KEY: "file:secrets/xai-api-key.txt"
دقیقا بهصورت همان رشته به ارائهدهندهها فرستاده میشود.
برای کلیدهای ارائهدهنده مبتنی بر فایل، روی فیلد اعتبارنامهای که از آن پشتیبانی میکند از SecretRef استفاده کنید:
{ secrets: { providers: { xai_key_file: { source: "file", path: "~/.openclaw/secrets/xai-api-key.txt", mode: "singleValue", }, }, }, models: { providers: { xai: { apiKey: { source: "file", provider: "xai_key_file", id: "value" }, }, }, },}برای فیلدهای پشتیبانیشده، مدیریت Secrets و سطح اعتبارنامه SecretRef را ببینید.
واردسازی env شل
env.shellEnv شل ورود شما را اجرا میکند و فقط کلیدهای مورد انتظارِ ناموجود را وارد میکند:
{ env: { shellEnv: { enabled: true, timeoutMs: 15000, }, },}معادلهای متغیر محیطی:
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000
snapshotهای شل exec
روی میزبانهای Gateway غیر Windows، دستورهای bash و zsh exec بهطور پیشفرض از snapshot زمان شروع استفاده میکنند.
برای غیرفعال کردن این مسیر، OPENCLAW_EXEC_SHELL_SNAPSHOT=0 را در محیط فرایند Gateway تنظیم کنید.
مقادیر false، no و off نیز آن را غیرفعال میکنند. مقدارهای exec.env در هر فراخوانی نمیتوانند
snapshotها را تغییر دهند یا cache مربوط به snapshot را تغییرمسیر دهند.
متغیرهای محیطی تزریقشده توسط runtime
OpenClaw همچنین نشانگرهای زمینه را به فرایندهای فرزند ایجادشده تزریق میکند:
OPENCLAW_SHELL=exec: برای دستورهایی که از طریق ابزارexecاجرا میشوند تنظیم میشود.OPENCLAW_SHELL=acp: برای ایجاد فرایندهای backend runtime مربوط به ACP تنظیم میشود (برای مثالacpx).OPENCLAW_SHELL=acp-client: برایopenclaw acp clientوقتی فرایند bridge مربوط به ACP را ایجاد میکند تنظیم میشود.OPENCLAW_SHELL=tui-local: برای دستورهای شل!در TUI محلی تنظیم میشود.OPENCLAW_CLI=1: برای فرایندهای فرزندی که توسط نقطه ورود CLI ایجاد میشوند تنظیم میشود.
اینها نشانگرهای runtime هستند (پیکربندی کاربر لازم نیستند). میتوان از آنها در منطق shell/profile برای اعمال قواعد ویژه هر زمینه استفاده کرد.
متغیرهای محیطی UI
OPENCLAW_THEME=light: وقتی terminal شما پسزمینه روشن دارد، palette روشن TUI را اجباری میکند.OPENCLAW_THEME=dark: palette تیره TUI را اجباری میکند.COLORFGBG: اگر terminal شما آن را export کند، OpenClaw از راهنمای رنگ پسزمینه برای انتخاب خودکار palette در TUI استفاده میکند.
جایگذاری متغیر محیطی در پیکربندی
میتوانید با استفاده از نحو ${VAR_NAME} مستقیما در مقدارهای رشتهای پیکربندی به env vars ارجاع دهید:
{ models: { providers: { "vercel-gateway": { apiKey: "${VERCEL_GATEWAY_API_KEY}", }, }, },}برای جزئیات کامل، پیکربندی: جایگذاری متغیر محیطی را ببینید.
secret refها در برابر رشتههای ${ENV}
OpenClaw از دو الگوی مبتنی بر env پشتیبانی میکند:
- جایگذاری رشتهای
${VAR}در مقدارهای پیکربندی. - آبجکتهای SecretRef (
{ source: "env", provider: "default", id: "VAR" }) برای فیلدهایی که از ارجاع به secrets پشتیبانی میکنند.
هر دو در زمان فعالسازی از env فرایند resolve میشوند. جزئیات SecretRef در مدیریت Secrets مستند شده است.
خود بلوک env پیکربندی، SecretRefها یا مقدارهای کوتاهنویسی
file:... را resolve نمیکند.
متغیرهای محیطی مرتبط با مسیر
| متغیر | هدف |
|---|---|
OPENCLAW_HOME |
دایرکتوری home استفادهشده برای پیشفرضهای مسیر داخلی OpenClaw را بازنویسی میکند (~/.openclaw/، دایرکتوریهای agent، sessionها، اعتبارنامهها، onboarding نصبکننده، و checkout پیشفرض dev). هنگام اجرای OpenClaw بهعنوان کاربر سرویس اختصاصی مفید است. |
OPENCLAW_STATE_DIR |
دایرکتوری وضعیت را بازنویسی میکند (پیشفرض ~/.openclaw). |
OPENCLAW_CONFIG_PATH |
مسیر فایل پیکربندی را بازنویسی میکند (پیشفرض ~/.openclaw/openclaw.json). |
OPENCLAW_INCLUDE_ROOTS |
فهرست مسیر دایرکتوریهایی که directiveهای $include ممکن است فایلهایی بیرون از دایرکتوری پیکربندی را در آنها resolve کنند (پیشفرض: هیچکدام — $include به دایرکتوری پیکربندی محدود است). Tilde-expanded. |
ثبت رخداد
| متغیر | هدف |
|---|---|
OPENCLAW_LOG_LEVEL |
سطح log را هم برای فایل و هم کنسول بازنویسی میکند (مثلا debug، trace). نسبت به logging.level و logging.consoleLevel در پیکربندی تقدم دارد. مقدارهای نامعتبر با هشدار نادیده گرفته میشوند. |
OPENCLAW_DEBUG_MODEL_TRANSPORT |
diagnostics زمانبندی هدفمند request/response مدل را در سطح info بدون فعال کردن logهای debug سراسری منتشر میکند. |
OPENCLAW_DEBUG_MODEL_PAYLOAD |
diagnostics payload مدل: summary، tools، یا full-redacted. full-redacted محدود و redacted است، اما ممکن است متن prompt/message را شامل شود. |
OPENCLAW_DEBUG_SSE |
diagnostics جریاندهی: events برای زمانبندی first/done، peek برای شامل کردن پنج رویداد SSE نخست که redacted شدهاند. |
OPENCLAW_DEBUG_CODE_MODE |
diagnostics سطح مدل در code-mode، شامل پنهانسازی provider-tool و اجرای اجباری exec/wait-only. |
OPENCLAW_HOME
وقتی تنظیم شود، OPENCLAW_HOME دایرکتوری home سیستم ($HOME / os.homedir()) را برای پیشفرضهای مسیر داخلی OpenClaw جایگزین میکند. این شامل دایرکتوری وضعیت پیشفرض، مسیر پیکربندی، دایرکتوریهای agent، اعتبارنامهها، فضای کاری onboarding نصبکننده، و checkout پیشفرض dev است که توسط openclaw update --channel dev استفاده میشود.
ترتیب تقدم: OPENCLAW_HOME > $HOME > USERPROFILE > fallback مربوط به home در Termux PREFIX روی Android > os.homedir()
مثال (macOS LaunchDaemon):
<key>EnvironmentVariables</key><dict> <key>OPENCLAW_HOME</key> <string>/Users/user</string></dict>OPENCLAW_HOME همچنین میتواند روی یک مسیر tilde تنظیم شود (مثلا ~/svc) که پیش از استفاده با همان زنجیره fallback مربوط به home در OS گسترش مییابد.
متغیرهای مسیر صریح مانند OPENCLAW_STATE_DIR، OPENCLAW_CONFIG_PATH و OPENCLAW_GIT_DIR همچنان تقدم دارند. کارهای مربوط به حساب OS مانند تشخیص فایل startup شل، راهاندازی package-manager، و گسترش ~ در host ممکن است همچنان از home واقعی سیستم استفاده کنند.
کاربران nvm: خطاهای TLS در web_fetch
اگر Node.js از طریق nvm نصب شده باشد (نه package manager سیستم)، fetch() داخلی از
CA store همراه nvm استفاده میکند که ممکن است CAهای ریشه مدرن را نداشته باشد (ISRG Root X1/X2 برای Let's Encrypt،
DigiCert Global Root G2، و غیره). این باعث میشود web_fetch در بیشتر سایتهای HTTPS با "fetch failed" شکست بخورد.
روی Linux، OpenClaw بهطور خودکار nvm را تشخیص میدهد و اصلاح را در محیط واقعی startup اعمال میکند:
openclaw gateway installمقدارNODE_EXTRA_CA_CERTSرا در محیط سرویس systemd مینویسد- نقطه ورود CLI یعنی
openclawپیش از startup مربوط به Node خودش را باNODE_EXTRA_CA_CERTSتنظیمشده دوباره exec میکند
اصلاح دستی (برای نسخههای قدیمیتر یا اجرای مستقیم node ...):
پیش از شروع OpenClaw، متغیر را export کنید:
export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crtopenclaw gateway runبرای این متغیر فقط به نوشتن در ~/.openclaw/.env اتکا نکنید؛ Node مقدار
NODE_EXTRA_CA_CERTS را هنگام startup فرایند میخواند.
متغیرهای محیطی legacy
OpenClaw فقط متغیرهای محیطی OPENCLAW_* را میخواند. پیشوندهای legacy
CLAWDBOT_* و MOLTBOT_* از انتشارهای قدیمیتر بیصدا
نادیده گرفته میشوند.
اگر هرکدام هنوز هنگام startup روی فرایند Gateway تنظیم باشند، OpenClaw یک
هشدار deprecation واحد از Node (OPENCLAW_LEGACY_ENV_VARS) منتشر میکند که
پیشوندهای شناساییشده و تعداد کل را فهرست میکند. هر مقدار را با جایگزین کردن
پیشوند legacy با OPENCLAW_ تغییرنام دهید (برای مثال CLAWDBOT_GATEWAY_TOKEN →
OPENCLAW_GATEWAY_TOKEN)؛ نامهای قدیمی اثری ندارند.