Gateway
پیکربندی
OpenClaw یک پیکربندی اختیاری JSON5 را از ~/.openclaw/openclaw.json میخواند.
مسیر پیکربندی فعال باید یک فایل معمولی باشد. چیدمانهای openclaw.json
که با symlink ساخته شدهاند، برای نوشتنهای متعلق به OpenClaw پشتیبانی نمیشوند؛ یک نوشتن اتمیک ممکن است
بهجای حفظ symlink، مسیر را جایگزین کند. اگر پیکربندی را بیرون از
دایرکتوری وضعیت پیشفرض نگه میدارید، OPENCLAW_CONFIG_PATH را مستقیما به فایل واقعی اشاره دهید.
اگر فایل وجود نداشته باشد، OpenClaw از پیشفرضهای امن استفاده میکند. دلایل رایج برای افزودن پیکربندی:
- اتصال کانالها و کنترل اینکه چه کسی میتواند به بات پیام بدهد
- تنظیم مدلها، ابزارها، sandboxing، یا خودکارسازی (cron، هوکها)
- تنظیم دقیق نشستها، رسانه، شبکه، یا UI
برای همه فیلدهای موجود، مرجع کامل را ببینید.
عاملها و خودکارسازی باید پیش از ویرایش پیکربندی، برای مستندات دقیق در سطح فیلد
از config.schema.lookup استفاده کنند. از این صفحه برای راهنمایی وظیفهمحور و از
مرجع پیکربندی برای نقشه گستردهتر
فیلدها و پیشفرضها استفاده کنید.
پیکربندی حداقلی
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}ویرایش پیکربندی
جادوگر تعاملی
openclaw onboard # full onboarding flowopenclaw configure # config wizardCLI (دستورهای تکخطی)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeyUI کنترل
http://127.0.0.1:18789 را باز کنید و از زبانه پیکربندی استفاده کنید.
UI کنترل یک فرم را از schema پیکربندی زنده رندر میکند، از جمله metadata مستندات
فیلدهای title / description بهعلاوه schemaهای Plugin و کانال، در صورت
موجود بودن، همراه با ویرایشگر JSON خام بهعنوان راه خروج. برای UIهای جزئیاتمحور
و ابزارهای دیگر، Gateway همچنین config.schema.lookup را برای
واکشی یک گره schema محدود به مسیر بههمراه خلاصههای فرزند بلافاصله ارائه میکند.
ویرایش مستقیم
~/.openclaw/openclaw.json را مستقیما ویرایش کنید. Gateway فایل را زیر نظر میگیرد و تغییرات را بهطور خودکار اعمال میکند (به بارگذاری مجدد داغ مراجعه کنید).
اعتبارسنجی سختگیرانه
openclaw config schema JSON Schema معیار را که Control UI
و اعتبارسنجی استفاده میکنند چاپ میکند. config.schema.lookup یک گره محدود به مسیر بههمراه
خلاصههای فرزند را برای ابزارهای جزئیاتمحور واکشی میکند. metadata مستندات فیلدهای title/description
از طریق آبجکتهای تودرتو، wildcard (*)، آیتم آرایه ([])، و شاخههای anyOf/
oneOf/allOf منتقل میشود. schemaهای Plugin و کانال در زمان اجرا وقتی
registry مانیفست بارگذاری شده باشد ادغام میشوند.
وقتی اعتبارسنجی شکست میخورد:
- Gateway بوت نمیشود
- فقط دستورهای تشخیصی کار میکنند (
openclaw doctor،openclaw logs،openclaw health،openclaw status) - برای دیدن مشکلات دقیق،
openclaw doctorرا اجرا کنید - برای اعمال تعمیرها،
openclaw doctor --fix(یا--yes) را اجرا کنید
Gateway پس از هر راهاندازی موفق، یک کپی مورد اعتماد از آخرین وضعیت سالم نگه میدارد،
اما راهاندازی و بارگذاری مجدد داغ آن را بهطور خودکار بازیابی نمیکنند. اگر openclaw.json
اعتبارسنجی را رد کند (از جمله اعتبارسنجی محلی Plugin)، راهاندازی Gateway شکست میخورد یا
بارگذاری مجدد نادیده گرفته میشود و runtime فعلی آخرین پیکربندی پذیرفتهشده را نگه میدارد.
برای تعمیر پیکربندی دارای پیشوند/بازنویسیشده یا
بازیابی کپی آخرین وضعیت سالم، openclaw doctor --fix (یا --yes) را اجرا کنید. ارتقا به آخرین وضعیت سالم زمانی نادیده گرفته میشود که یک
کاندید شامل placeholderهای secret redacted مانند *** باشد.
کارهای رایج
راهاندازی یک کانال (WhatsApp، Telegram، Discord، و غیره)
هر کانال بخش پیکربندی خودش را زیر channels.<provider> دارد. برای مراحل راهاندازی، صفحه اختصاصی کانال را ببینید:
- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
همه کانالها از الگوی سیاست DM یکسانی استفاده میکنند:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["tg:123"], // only for allowlist/open }, },}انتخاب و پیکربندی مدلها
مدل اصلی و fallbackهای اختیاری را تنظیم کنید:
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["openai/gpt-5.4"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "openai/gpt-5.4": { alias: "GPT" }, }, }, },}agents.defaults.modelsکاتالوگ مدل را تعریف میکند و بهعنوان allowlist برای/modelعمل میکند؛ ورودیهایprovider/*،/model،/modelsو انتخابگرهای مدل را به ارائهدهندگان منتخب محدود میکنند، در حالی که همچنان از کشف پویای مدل استفاده میشود.- برای افزودن ورودیهای allowlist بدون حذف مدلهای موجود، از
openclaw config set agents.defaults.models '<json>' --strict-json --mergeاستفاده کنید. جایگزینیهای سادهای که ورودیها را حذف کنند رد میشوند، مگر اینکه--replaceرا پاس بدهید. - ارجاعهای مدل از قالب
provider/modelاستفاده میکنند (مثلاanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxکوچکسازی تصویرهای transcript/tool را کنترل میکند (پیشفرض1200)؛ مقدارهای کمتر معمولا مصرف توکن بینایی را در اجراهای پر از اسکرینشات کاهش میدهند.- برای تغییر مدلها در چت، CLI مدلها را ببینید و برای چرخش auth و رفتار fallback، Failover مدل را ببینید.
- برای ارائهدهندگان سفارشی/خودمیزبان، ارائهدهندگان سفارشی را در مرجع ببینید.
کنترل اینکه چه کسی میتواند به بات پیام بدهد
دسترسی DM برای هر کانال از طریق dmPolicy کنترل میشود:
"pairing"(پیشفرض): فرستندگان ناشناخته یک کد pair یکبارمصرف برای تایید دریافت میکنند"allowlist": فقط فرستندگان موجود درallowFrom(یا ذخیره allow جفتشده)"open": همه DMهای ورودی را مجاز میکند (بهallowFrom: ["*"]نیاز دارد)"disabled": همه DMها را نادیده میگیرد
برای گروهها، از groupPolicy + groupAllowFrom یا allowlistهای مخصوص کانال استفاده کنید.
برای جزئیات هر کانال، مرجع کامل را ببینید.
راهاندازی gate کردن mention در چت گروهی
پیامهای گروهی بهصورت پیشفرض نیازمند mention هستند. الگوهای trigger را برای هر عامل پیکربندی کنید. پاسخهای معمول گروه/کانال بهطور خودکار ارسال میشوند؛ برای اتاقهای مشترکی که عامل باید تصمیم بگیرد چه زمانی صحبت کند، مسیر message-tool را فعال کنید:
{ messages: { visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere groupChat: { visibleReplies: "message_tool", // opt-in; visible output requires message(action=send) unmentionedInbound: "room_event", // unmentioned always-on group chatter is quiet context }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- mentionهای metadata: @-mentionهای بومی (WhatsApp tap-to-mention، Telegram @bot، و غیره)
- الگوهای متن: الگوهای regex امن در
mentionPatterns - پاسخهای قابل مشاهده:
messages.visibleRepliesمیتواند ارسال با message-tool را بهصورت سراسری الزامی کند؛messages.groupChat.visibleRepliesاین را برای گروهها/کانالها override میکند. - برای حالتهای پاسخ قابل مشاهده، overrideهای هر کانال، و حالت self-chat، مرجع کامل را ببینید.
محدود کردن Skills برای هر عامل
برای baseline مشترک از agents.defaults.skills استفاده کنید، سپس عاملهای خاص را با
agents.list[].skills override کنید:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults { id: "locked-down", skills: [] }, // no skills ], },}- برای Skills نامحدود بهصورت پیشفرض،
agents.defaults.skillsرا حذف کنید. - برای ارثبری پیشفرضها،
agents.list[].skillsرا حذف کنید. - برای نداشتن Skills،
agents.list[].skills: []را تنظیم کنید. - Skills، پیکربندی Skills، و مرجع پیکربندی را ببینید.
تنظیم دقیق پایش سلامت کانال Gateway
کنترل کنید Gateway با چه شدتی کانالهایی را که کهنه به نظر میرسند restart کند:
{ gateway: { channelHealthCheckMinutes: 5, channelStaleEventThresholdMinutes: 30, channelMaxRestartsPerHour: 10, }, channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- برای غیرفعال کردن restartهای health-monitor بهصورت سراسری،
gateway.channelHealthCheckMinutes: 0را تنظیم کنید. channelStaleEventThresholdMinutesباید بزرگتر یا مساوی بازه بررسی باشد.- برای غیرفعال کردن restart خودکار برای یک کانال یا حساب بدون غیرفعال کردن monitor سراسری، از
channels.<provider>.healthMonitor.enabledیاchannels.<provider>.accounts.<id>.healthMonitor.enabledاستفاده کنید. - برای اشکالزدایی عملیاتی، بررسیهای سلامت و برای همه فیلدها مرجع کامل را ببینید.
تنظیم دقیق timeout دستدهی WebSocket در Gateway
به clientهای محلی زمان بیشتری بدهید تا دستدهی WebSocket پیش از auth را روی میزبانهای پربار یا کمقدرت کامل کنند:
{ gateway: { handshakeTimeoutMs: 30000, },}- پیشفرض
15000میلیثانیه است. OPENCLAW_HANDSHAKE_TIMEOUT_MSهمچنان برای overrideهای موردی service یا shell اولویت دارد.- ابتدا رفع stallهای startup/event-loop را ترجیح دهید؛ این knob برای میزبانهایی است که سالماند اما هنگام warmup کند هستند.
پیکربندی نشستها و resetها
نشستها تداوم و جداسازی مکالمه را کنترل میکنند:
{ session: { dmScope: "per-channel-peer", // recommended for multi-user threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, }, reset: { mode: "daily", atHour: 4, idleMinutes: 120, }, },}dmScope:main(مشترک) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: پیشفرضهای سراسری برای مسیریابی نشستهای وابسته به رشته (Discord از/focus،/unfocus،/agents،/session idle، و/session max-ageپشتیبانی میکند).- برای دامنهبندی، پیوندهای هویت، و سیاست ارسال، مدیریت نشست را ببینید.
- برای همه فیلدها، مرجع کامل را ببینید.
فعالسازی ایزولهسازی
نشستهای عامل را در زماناجرای ایزولهشده اجرا کنید:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}ابتدا تصویر را بسازید - از یک checkout منبع، scripts/sandbox-setup.sh را اجرا کنید، یا از یک نصب npm، دستور درونخطی docker build را در ایزولهسازی § تصاویر و راهاندازی ببینید.
برای راهنمای کامل، ایزولهسازی و برای همه گزینهها مرجع کامل را ببینید.
فعالسازی push مبتنی بر relay برای buildهای رسمی iOS
push مبتنی بر relay برای buildهای عمومی App Store از relay میزبانیشده OpenClaw استفاده میکند: https://ios-push-relay.openclaw.ai.
استقرارهای relay سفارشی به یک مسیر build/استقرار iOS عمدا جداگانه نیاز دارند که URL relay آن با URL relay در gateway مطابقت داشته باشد. اگر از یک build relay سفارشی استفاده میکنید، این را در پیکربندی gateway تنظیم کنید:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // Optional. Default: 10000 timeoutMs: 10000, }, }, }, },}معادل CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comاین کار چه میکند:
- به gateway اجازه میدهد
push.test، تلنگرهای بیدارباش، و بیدارباشهای اتصال مجدد را از طریق relay خارجی ارسال کند. - از یک مجوز ارسال محدود به ثبتنام استفاده میکند که توسط اپ iOS جفتشده منتقل میشود. gateway به توکن relay سراسری برای استقرار نیاز ندارد.
- هر ثبتنام مبتنی بر relay را به هویت gateway که اپ iOS با آن جفت شده متصل میکند، بنابراین gateway دیگر نمیتواند از ثبتنام ذخیرهشده دوباره استفاده کند.
- buildهای محلی/دستی iOS را روی APNs مستقیم نگه میدارد. ارسالهای مبتنی بر relay فقط برای buildهای رسمی توزیعشدهای اعمال میشوند که از طریق relay ثبتنام کردهاند.
- باید با URL پایه relay که در build iOS تعبیه شده مطابقت داشته باشد، تا ترافیک ثبتنام و ارسال به همان استقرار relay برسد.
جریان سرتاسری:
- اپ رسمی iOS را نصب کنید.
- اختیاری:
gateway.push.apns.relay.baseUrlرا فقط زمانی روی gateway پیکربندی کنید که از یک build relay سفارشی عمدا جداگانه استفاده میکنید. - اپ iOS را با gateway جفت کنید و اجازه دهید هر دو نشست نود و اپراتور متصل شوند.
- اپ iOS هویت gateway را دریافت میکند، با استفاده از App Attest بههمراه رسید اپ در relay ثبتنام میکند، و سپس بار
push.apns.registerمبتنی بر relay را در gateway جفتشده منتشر میکند. - gateway دسته relay و مجوز ارسال را ذخیره میکند، سپس از آنها برای
push.test، تلنگرهای بیدارباش، و بیدارباشهای اتصال مجدد استفاده میکند.
نکات عملیاتی:
- اگر اپ iOS را به gateway دیگری منتقل کردید، اپ را دوباره متصل کنید تا بتواند یک ثبتنام relay جدیدِ متصل به آن gateway منتشر کند.
- اگر build جدیدی از iOS منتشر کنید که به استقرار relay متفاوتی اشاره دارد، اپ بهجای استفاده مجدد از مبدا relay قدیمی، ثبتنام relay کششده خود را تازهسازی میکند.
نکته سازگاری:
OPENCLAW_APNS_RELAY_BASE_URLوOPENCLAW_APNS_RELAY_TIMEOUT_MSهمچنان بهعنوان بازنویسیهای موقت env کار میکنند.- URLهای relay سفارشی gateway باید با URL پایه relay که در build iOS تعبیه شده مطابقت داشته باشند. مسیر انتشار عمومی App Store، بازنویسیهای URL relay سفارشی iOS را رد میکند.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueهمچنان یک راه فرار توسعه فقط برای loopback باقی میماند؛ URLهای relay مبتنی بر HTTP را در config پایدار نکنید.
برای جریان سرتاسری، اپ iOS و برای مدل امنیتی relay، جریان احراز هویت و اعتماد را ببینید.
راهاندازی Heartbeat (بررسیهای دورهای)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: رشته مدتزمان (30m،2h). برای غیرفعالسازی،0mرا تنظیم کنید.target:last|none|<channel-id>(برای مثالdiscord،matrix،telegram، یاwhatsapp)directPolicy: برای اهداف Heartbeat به سبک DM،allow(پیشفرض) یاblock- برای راهنمای کامل، Heartbeat را ببینید.
پیکربندی کارهای Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; cron dispatch + isolated cron agent-turn execution sessionRetention: "24h", runLog: { maxBytes: "2mb", keepLines: 2000, }, },}sessionRetention: نشستهای اجرای ایزوله تکمیلشده را ازsessions.jsonپاکسازی میکند (پیشفرض24h؛ برای غیرفعالسازیfalseرا تنظیم کنید).runLog: ردیفهای تاریخچه اجرای Cron نگهداریشده را برای هر کار پاکسازی میکند.maxBytesهمچنان برای لاگهای اجرای قدیمیترِ مبتنی بر فایل پذیرفته میشود.- برای نمای کلی قابلیت و مثالهای CLI، کارهای Cron را ببینید.
راهاندازی webhooks (hooks)
endpointهای HTTP Webhook را روی Gateway فعال کنید:
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: false, allowedSessionKeyPrefixes: ["hook:"], mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "main", deliver: true, }, ], },}نکته امنیتی:
- همه محتوای payload مربوط به hook/webhook را ورودی غیرقابل اعتماد در نظر بگیرید.
- از یک
hooks.tokenاختصاصی استفاده کنید؛ secretهای فعال احراز هویت Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENیاgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD) را دوباره استفاده نکنید. - احراز هویت hook فقط از طریق header است (
Authorization: Bearer ...یاx-openclaw-token)؛ توکنهای query-string رد میشوند. hooks.pathنمیتواند/باشد؛ ورودی webhook را روی یک زیرمسیر اختصاصی مانند/hooksنگه دارید.- flagهای عبور از محتوای ناامن را غیرفعال نگه دارید (
hooks.gmail.allowUnsafeExternalContent،hooks.mappings[].allowUnsafeExternalContent) مگر برای اشکالزدایی با دامنه بسیار محدود. - اگر
hooks.allowRequestSessionKeyرا فعال میکنید،hooks.allowedSessionKeyPrefixesرا نیز تنظیم کنید تا کلیدهای نشست انتخابشده توسط فراخوان محدود شوند. - برای عاملهای هدایتشده با hook، tierهای مدل مدرن قوی و سیاست ابزار سختگیرانه را ترجیح دهید (برای مثال فقط پیامرسانی بههمراه ایزولهسازی هر جا ممکن است).
برای همه گزینههای نگاشت و یکپارچهسازی Gmail، مرجع کامل را ببینید.
پیکربندی مسیریابی چندعاملی
چند عامل ایزوله را با workspaceها و نشستهای جداگانه اجرا کنید:
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}برای قواعد اتصال و پروفایلهای دسترسی برای هر عامل، چندعاملی و مرجع کامل را ببینید.
تقسیم config به چند فایل ($include)
از $include برای سازماندهی configهای بزرگ استفاده کنید:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- فایل تکی: شیء دربرگیرنده را جایگزین میکند
- آرایهای از فایلها: بهترتیب بهصورت عمیق ادغام میشوند (موردهای بعدی برندهاند)
- کلیدهای همسطح: پس از includeها ادغام میشوند (مقادیر includeشده را بازنویسی میکنند)
- includeهای تو در تو: تا عمق 10 سطح پشتیبانی میشوند
- مسیرهای نسبی: نسبت به فایلِ includeکننده resolve میشوند
- فرمت مسیر: مسیرهای include نباید شامل بایت null باشند و باید پیش و پس از resolve شدن، اکیدا کوتاهتر از 4096 کاراکتر باشند
- نوشتنهای مالکیتشده توسط OpenClaw: وقتی یک نوشتن فقط یک بخش سطحبالا را تغییر میدهد
که توسط یک include تکفایلی مانند
plugins: { $include: "./plugins.json5" }پشتیبانی میشود، OpenClaw همان فایل includeشده را بهروزرسانی میکند وopenclaw.jsonرا دستنخورده باقی میگذارد - write-through پشتیبانینشده: includeهای root، آرایههای include، و includeهایی با بازنویسیهای همسطح، برای نوشتنهای مالکیتشده توسط OpenClaw بهجای تخت کردن config، fail closed میشوند
- محدودسازی: مسیرهای
$includeباید زیر دایرکتوری نگهدارندهopenclaw.jsonresolve شوند. برای اشتراکگذاری یک درخت میان ماشینها یا کاربران،OPENCLAW_INCLUDE_ROOTSرا روی یک path-list (:در POSIX،;در Windows) از دایرکتوریهای اضافی تنظیم کنید که includeها میتوانند به آنها ارجاع دهند. symlinkها resolve و دوباره بررسی میشوند، بنابراین مسیری که از نظر لغوی در یک دایرکتوری config قرار دارد اما مقصد واقعی آن از همه rootهای مجاز خارج میشود همچنان رد میشود. - مدیریت خطا: خطاهای روشن برای فایلهای گمشده، خطاهای parse، includeهای چرخهای، فرمت مسیر نامعتبر، و طول بیش از حد
بارگذاری مجدد داغ config
Gateway فایل ~/.openclaw/openclaw.json را زیر نظر میگیرد و تغییرات را بهصورت خودکار اعمال میکند - برای بیشتر تنظیمات نیازی به راهاندازی مجدد دستی نیست.
ویرایشهای مستقیم فایل تا زمانی که اعتبارسنجی شوند غیرقابل اعتماد در نظر گرفته میشوند. ناظر منتظر میماند
تا churn ناشی از temp-write/rename ویرایشگر آرام شود، فایل نهایی را میخواند، و
ویرایشهای خارجی نامعتبر را بدون بازنویسی openclaw.json رد میکند. نوشتنهای config
مالکیتشده توسط OpenClaw پیش از نوشتن از همان gate schema استفاده میکنند؛ clobberهای مخرب مانند
حذف gateway.mode یا کوچک کردن فایل به بیش از نصف، رد میشوند و
برای بررسی بهصورت .rejected.* ذخیره میشوند.
اگر config reload skipped (invalid config) را میبینید یا startup گزارش Invalid config میدهد، config را بررسی کنید، openclaw config validate را اجرا کنید، سپس برای تعمیر openclaw doctor --fix را اجرا کنید. برای checklist، عیبیابی Gateway
را ببینید.
حالتهای بارگذاری مجدد
| حالت | رفتار |
|---|---|
hybrid (پیشفرض) |
تغییرات امن را فورا بهصورت داغ اعمال میکند. برای موارد حیاتی بهصورت خودکار راهاندازی مجدد میکند. |
hot |
فقط تغییرات امن را بهصورت داغ اعمال میکند. وقتی راهاندازی مجدد لازم باشد هشدار log میکند - مدیریت آن با شماست. |
restart |
Gateway را با هر تغییر config، امن یا غیرامن، راهاندازی مجدد میکند. |
off |
نظارت بر فایل را غیرفعال میکند. تغییرات در راهاندازی مجدد دستی بعدی اعمال میشوند. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}چه چیزهایی بهصورت داغ اعمال میشوند و چه چیزهایی به راهاندازی مجدد نیاز دارند
بیشتر فیلدها بدون downtime بهصورت داغ اعمال میشوند. در حالت hybrid، تغییراتی که به راهاندازی مجدد نیاز دارند بهصورت خودکار مدیریت میشوند.
| دستهبندی | فیلدها | نیاز به راهاندازی مجدد؟ |
|---|---|---|
| کانالها | channels.*، web (WhatsApp) - همهٔ کانالهای داخلی و Plugin |
خیر |
| عامل و مدلها | agent، agents، models، routing |
خیر |
| خودکارسازی | hooks، cron، agent.heartbeat |
خیر |
| نشستها و پیامها | session، messages |
خیر |
| ابزارها و رسانه | tools، browser، skills، mcp، audio، talk |
خیر |
| UI و متفرقه | ui، logging، identity، bindings |
خیر |
| سرور Gateway | gateway.* (port، bind، auth، tailscale، TLS، HTTP) |
بله |
| زیرساخت | discovery، plugins |
بله |
برنامهریزی بارگذاری مجدد
وقتی یک فایل منبع را که از طریق $include ارجاع داده شده ویرایش میکنید، OpenClaw
بارگذاری مجدد را از چیدمان نوشتهشده در منبع برنامهریزی میکند، نه از نمای تختشدهٔ درون حافظه.
این کار تصمیمهای بارگذاری مجدد داغ (اعمال داغ در برابر راهاندازی مجدد) را قابل پیشبینی نگه میدارد، حتی وقتی یک
بخش سطحبالای واحد در فایل include شدهٔ خودش قرار دارد، مانند
plugins: { $include: "./plugins.json5" }. اگر چیدمان منبع مبهم باشد، برنامهریزی بارگذاری مجدد بهصورت بسته شکست میخورد.
RPC پیکربندی (بهروزرسانیهای برنامهنویسیشده)
برای ابزارهایی که پیکربندی را از طریق API Gateway مینویسند، این جریان را ترجیح دهید:
config.schema.lookupبرای بررسی یک زیردرخت (گره طرحوارهٔ سطحی + خلاصههای فرزند)config.getبرای دریافت snapshot فعلی بههمراهhashconfig.patchبرای بهروزرسانیهای جزئی (JSON merge patch: آبجکتها merge میشوند،nullحذف میکند، آرایهها وقتی بهطور صریح باreplacePathsتأیید شده باشند جایگزین میشوند اگر ورودیهایی حذف شوند)config.applyفقط وقتی قصد دارید کل پیکربندی را جایگزین کنیدupdate.runبرای خودبهروزرسانی صریح بههمراه راهاندازی مجدد؛ وقتی نشست پس از راهاندازی مجدد باید یک نوبت پیگیری اجرا کند،continuationMessageرا شامل کنیدupdate.statusبرای بررسی آخرین نشانگر راهاندازی مجددِ بهروزرسانی و تأیید نسخهٔ در حال اجرا پس از راهاندازی مجدد
عاملها باید config.schema.lookup را اولین نقطهٔ مراجعه برای مستندات و محدودیتهای دقیق
در سطح فیلد بدانند. وقتی به نقشهٔ گستردهتر پیکربندی، پیشفرضها، یا لینک به مراجع اختصاصی
زیرسامانهها نیاز دارند، از مرجع پیکربندی استفاده کنید.
نمونه patch جزئی:
openclaw gateway call config.get --params '{}' # capture payload.hashopenclaw gateway call config.patch --params '{ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }", "baseHash": "<hash>"}'هر دو config.apply و config.patch مقدارهای raw، baseHash، sessionKey،
note، و restartDelayMs را میپذیرند. وقتی پیکربندی از قبل وجود داشته باشد،
baseHash برای هر دو روش الزامی است.
config.patch همچنین replacePaths را میپذیرد؛ آرایهای از مسیرهای پیکربندی که جایگزینی آرایهٔ
آنها عمدی است. اگر یک patch بخواهد آرایهای موجود را با ورودیهای کمتر جایگزین یا حذف کند،
Gateway نوشتن را رد میکند مگر اینکه همان مسیر دقیق در replacePaths آمده باشد؛ آرایههای تو در تو زیر ورودیهای آرایه از [] استفاده میکنند، مانند
agents.list[].skills. این کار از آن جلوگیری میکند که snapshotهای کوتاهشدهٔ config.get
آرایههای مسیریابی یا فهرست مجاز را بیصدا بازنویسی کنند. وقتی قصد دارید کل پیکربندی را جایگزین کنید، از config.apply استفاده کنید.
متغیرهای محیطی
OpenClaw متغیرهای محیطی را از فرایند والد بههمراه موارد زیر میخواند:
.envاز دایرکتوری کاری فعلی (اگر وجود داشته باشد)~/.openclaw/.env(fallback سراسری)
هیچکدام از این فایلها متغیرهای محیطی موجود را بازنویسی نمیکنند. همچنین میتوانید متغیرهای محیطی inline را در پیکربندی تنظیم کنید:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}درونریزی env شل (اختیاری)
اگر فعال باشد و کلیدهای مورد انتظار تنظیم نشده باشند، OpenClaw شل ورود شما را اجرا میکند و فقط کلیدهای مفقود را درونریزی میکند:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}معادل متغیر محیطی: OPENCLAW_LOAD_SHELL_ENV=1
جایگزینی متغیر محیطی در مقادیر پیکربندی
در هر مقدار رشتهای پیکربندی، با ${VAR_NAME} به متغیرهای محیطی ارجاع دهید:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}قواعد:
- فقط نامهای حروف بزرگ match میشوند:
[A-Z_][A-Z0-9_]* - متغیرهای مفقود/خالی هنگام load خطا ایجاد میکنند
- برای خروجی literal با
$${VAR}escape کنید - داخل فایلهای
$includeکار میکند - جایگزینی inline:
"${BASE}/v1"→"https://api.example.com/v1"
ارجاعهای محرمانه (env، file، exec)
برای فیلدهایی که از آبجکتهای SecretRef پشتیبانی میکنند، میتوانید از اینها استفاده کنید:
{models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, },},skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, },},channels: { googlechat: { serviceAccountRef: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}جزئیات SecretRef (از جمله secrets.providers برای env/file/exec) در مدیریت اسرار آمده است.
مسیرهای credential پشتیبانیشده در سطح credential برای SecretRef فهرست شدهاند.
برای تقدم کامل و منابع، محیط را ببینید.
مرجع کامل
برای مرجع کامل فیلدبهفیلد، مرجع پیکربندی را ببینید.
مرتبط: نمونههای پیکربندی · مرجع پیکربندی · Doctor