Gateway
پیکربندی
OpenClaw یک پیکربندی اختیاری JSON5 را از ~/.openclaw/openclaw.json میخواند. اگر فایل وجود نداشته باشد، OpenClaw از پیشفرضهای امن استفاده میکند.
مسیر پیکربندی فعال باید یک فایل معمولی باشد. نوشتنهای متعلق به OpenClaw آن را بهصورت اتمی جایگزین میکنند (با تغییر نام روی مسیر)، بنابراین هدف یک openclaw.json پیوند نمادین، بهجای نوشتن از طریق آن، جایگزین میشود — از چیدمانهای پیکربندی دارای پیوند نمادین پرهیز کنید. اگر پیکربندی را خارج از دایرکتوری پیشفرض وضعیت نگه میدارید، OPENCLAW_CONFIG_PATH را مستقیماً به فایل واقعی اشاره دهید.
دلایل رایج برای افزودن پیکربندی:
- کانالها را متصل کنید و کنترل کنید چه کسانی میتوانند به بات پیام دهند
- مدلها، ابزارها، سندباکسسازی یا خودکارسازی (cron، هوکها) را تنظیم کنید
- نشستها، رسانه، شبکه یا رابط کاربری را تنظیم دقیق کنید
برای مشاهده همه فیلدهای موجود، مرجع کامل را ببینید.
پیکربندی از یک قاعده دوبخشی پیروی میکند: همسطحهای ریشه، زیرساخت و پیشفرضهای میانعامل را نگه میدارند، درحالیکه agents.defaults رفتار حلقه عامل را نگه میدارد. ورودیهای زیر agents.entries میتوانند هرکدام از این دو بخش را، در جاهایی که شِما از بازنویسی بهازای هر عامل پشتیبانی میکند، بازنویسی کنند.
عاملها و خودکارسازی باید پیش از ویرایش پیکربندی، برای مستندات دقیق در سطح فیلد
از config.schema.lookup استفاده کنند. از این صفحه برای راهنمایی وظیفهمحور و از
مرجع پیکربندی برای نقشه گستردهتر
فیلدها و پیشفرضها استفاده کنید.
پیکربندی حداقلی
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}ویرایش پیکربندی
ویزارد تعاملی
openclaw onboard # فرایند کامل آغاز به کارopenclaw configure # ویزارد پیکربندیCLI (دستورهای تکخطی)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeyرابط کاربری کنترل
http://127.0.0.1:18789 را باز کنید و از زبانه Config استفاده کنید.
رابط کاربری کنترل، فرمی را از شِمای زنده پیکربندی رندر میکند که شامل فراداده مستندات
فیلد title / description و نیز شِماهای Plugin و کانال در صورت
موجود بودن است و یک ویرایشگر Raw JSON را بهعنوان راه گریز ارائه میدهد. برای رابطهای کاربری
جزئینگر و ابزارهای دیگر، Gateway همچنین config.schema.lookup را ارائه میکند تا
یک گره شِمای محدود به مسیر را همراه با خلاصه فرزندان مستقیم واکشی کند.
تنظیمات ابتدا فیلدهای رایج را نمایش میدهند. هر بخش فیلدهای پیشرفته خود را
در یک گروه جمعشده Advanced (N) نگه میدارد؛ برای بازکردن همه
گروهها از Show advanced استفاده کنید. جستوجوی تنظیمات همیشه هر دو سطح را در بر میگیرد و در صورت نیاز
گروه پیشرفته منطبق را باز میکند.
ویرایش مستقیم
~/.openclaw/openclaw.json را مستقیماً ویرایش کنید. Gateway فایل را زیر نظر میگیرد و تغییرات را بهطور خودکار اعمال میکند (بارگذاری مجدد فوری را ببینید).
اعتبارسنجی سختگیرانه
openclaw config schema، JSON Schema متعارفی را که رابط کاربری کنترل
و اعتبارسنجی استفاده میکنند چاپ میکند. config.schema.lookup یک گره محدود به مسیر را همراه با
خلاصه فرزندان برای ابزارهای جزئینگر واکشی میکند. فراداده مستندات فیلد title/description
در اشیای تودرتو، نویسه عام (*)، عضو آرایه ([]) و شاخههای anyOf/
oneOf/allOf منتقل میشود. شِماهای زمان اجرای Plugin و کانال هنگام بارگذاری
رجیستری مانیفست ادغام میشوند.
هر برگ پیکربندی در uiHints دارای سطح نمایش رایج یا پیشرفته است.
advanced: false تنظیمات رایج و advanced: true تنظیمات پیشرفته را
مشخص میکند. برگی که راهنمای مستقیمی ندارد، سطح نزدیکترین نیای خود را به ارث میبرد؛
مسیرهایی که هیچ نیای تعریفشدهای ندارند بهطور پیشفرض پیشرفتهاند. این فقط بر نمایش
اثر میگذارد، نه بر اعتبارسنجی، پیشفرضها، رفتار بارگذاری مجدد یا امکان تنظیم کلید.
هنگام شکست اعتبارسنجی:
- Gateway راهاندازی نمیشود
- فقط دستورهای تشخیصی کار میکنند (
openclaw doctor،openclaw logs،openclaw health،openclaw status) - برای مشاهده مشکلات دقیق،
openclaw doctorرا اجرا کنید - برای اعمال تعمیرات،
openclaw doctor --fixرا اجرا کنید (--repairهمان پرچم است؛--yesاعلانها را رد میکند)
Gateway پس از هر راهاندازی موفق یک نسخه قابلاعتماد از آخرین پیکربندی سالم نگه میدارد،
اما راهاندازی و بارگذاری مجدد فوری آن را بهطور خودکار بازیابی نمیکنند — فقط openclaw doctor --fix
این کار را انجام میدهد. اگر اعتبارسنجی openclaw.json شکست بخورد (از جمله اعتبارسنجی محلی Plugin)، راهاندازی Gateway
شکست میخورد یا بارگذاری مجدد نادیده گرفته میشود و زمان اجرای فعلی آخرین پیکربندی پذیرفتهشده را
نگه میدارد. یک نوشتن ردشده نیز برای بررسی با نام <path>.rejected.<timestamp> ذخیره میشود.
Gateway نوشتنهایی را که شبیه بازنویسی کامل تصادفی باشند مسدود میکند — حذف gateway.mode،
از دست رفتن بلوک meta یا کوچکشدن فایل به بیش از نصف — مگر اینکه نوشتن
صراحتاً تغییرات مخرب را مجاز کند. اگر گزینه پیشنهادی حاوی جاینگهدار راز سانسورشدهای مانند *** یا [redacted] باشد،
ارتقای آن به آخرین پیکربندی سالم انجام نمیشود.
کارهای رایج
راهاندازی یک کانال (WhatsApp، Telegram، Discord و غیره)
هر کانال بخش پیکربندی خود را زیر channels.<provider> دارد. برای مراحل راهاندازی، صفحه اختصاصی کانال را ببینید:
- Discord —
channels.discord - Feishu —
channels.feishu - Google Chat —
channels.googlechat - iMessage —
channels.imessage - Mattermost —
channels.mattermost - Microsoft Teams —
channels.msteams - Signal —
channels.signal - Slack —
channels.slack - Telegram —
channels.telegram - WhatsApp —
channels.whatsapp
همه کانالها از الگوی سیاست پیام مستقیم یکسانی استفاده میکنند:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // جفتسازی | فهرست مجاز | باز | غیرفعال allowFrom: ["tg:123"], // فقط برای فهرست مجاز/باز }, },}انتخاب و پیکربندی مدلها
مدل اصلی و جایگزینهای اختیاری را تنظیم کنید:
{ 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نامهای مستعار و تنظیمات هر مدل را ذخیره میکند؛ افزودن یک ورودی هرگز بازنویسیهای/modelیا--modelرا محدود نمیکند.agents.defaults.modelPolicy.allowفهرست مجاز صریح برای بازنویسیها و انتخابگرهای مدل است. این فهرست ارجاعهای دقیق و نویسههای عامprovider/*را میپذیرد؛ برای مجاز کردن هر مدلی، آن را حذف کنید یا از[]استفاده کنید.- ارجاعهای مدل از قالب
provider/modelاستفاده میکنند (برای مثالanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxکوچکسازی تصاویر رونوشت/ابزار را کنترل میکند (پیشفرض1200)؛ مقادیر کمتر معمولاً مصرف توکن بینایی را در اجراهای دارای اسکرینشات زیاد کاهش میدهند.- برای تعویض مدلها در گفتوگو، CLI مدلها و برای چرخش احراز هویت و رفتار جایگزینی، جایگزینی مدل را ببینید.
- برای ارائهدهندگان سفارشی/خودمیزبان، بخش ارائهدهندگان سفارشی را در مرجع ببینید.
کنترل افرادی که میتوانند به بات پیام دهند
دسترسی پیام مستقیم برای هر کانال از طریق dmPolicy کنترل میشود (پیشفرض "pairing"):
"pairing": فرستندگان ناشناخته یک کد جفتسازی یکبارمصرف برای تأیید دریافت میکنند"allowlist": فقط فرستندگان موجود درallowFrom(یا مخزن مجازِ جفتشده)"open": همه پیامهای مستقیم ورودی را مجاز میکند (بهallowFrom: ["*"]نیاز دارد)"disabled": همه پیامهای مستقیم را نادیده میگیرد
برای گروهها، از groupPolicy ("allowlist" | "open" | "disabled") همراه با groupAllowFrom یا فهرستهای مجاز مختص کانال استفاده کنید.
برای جزئیات هر کانال، مرجع کامل را ببینید.
راهاندازی محدودسازی اشاره در گفتوگوی گروهی
پیامهای گروهی بهطور پیشفرض به اشاره نیاز دارند. الگوهای فعالسازی را برای هر عامل پیکربندی کنید. پاسخهای عادی گروه/کانال بهطور خودکار ارسال میشوند؛ برای اتاقهای مشترکی که عامل باید درباره زمان صحبتکردن تصمیم بگیرد، مسیر ابزار پیام را فعال کنید:
{ messages: { visibleReplies: "automatic", // برای الزام ارسال با ابزار پیام در همهجا، روی "message_tool" تنظیم کنید groupChat: { visibleReplies: "message_tool", // اختیاری؛ خروجی قابلمشاهده به message(action=send) نیاز دارد unmentionedInbound: "room_event", // گفتوگوی گروهی همیشگیِ بدون اشاره، زمینهای بیصدا است }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- اشارههای فرادادهای: اشارههای بومی @ (اشاره با لمس در WhatsApp، @bot در Telegram و غیره)
- الگوهای متنی: الگوهای عبارت منظم امن در
mentionPatterns - پاسخهای قابلمشاهده:
messages.visibleRepliesمیتواند ارسال با ابزار پیام را بهصورت سراسری الزامی کند؛messages.groupChat.visibleRepliesآن را برای گروهها/کانالها بازنویسی میکند. - برای حالتهای پاسخ قابلمشاهده، بازنویسیهای هر کانال و حالت گفتوگو با خود، مرجع کامل را ببینید.
محدودکردن Skills برای هر عامل
برای خط پایه مشترک از agents.defaults.skills استفاده کنید، سپس عاملهای
مشخص را با agents.entries.*.skills بازنویسی کنید:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // github و weather را به ارث میبرد { id: "docs", skills: ["docs-search"] }, // پیشفرضها را جایگزین میکند { id: "locked-down", skills: [] }, // بدون Skills ], },}- برای نامحدود بودن Skills بهطور پیشفرض،
agents.defaults.skillsرا حذف کنید. - برای بهارثبردن پیشفرضها،
agents.entries.*.skillsرا حذف کنید. - برای نداشتن Skills،
agents.entries.*.skills: []را تنظیم کنید. - Skills، پیکربندی Skills و مرجع پیکربندی را ببینید.
پیکربندی پایش سلامت برای هر کانال
راهاندازی مجدد خودکار سلامت را برای یک کانال یا حساب غیرفعال یا فعال کنید:
{ channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- برای کنترل راهاندازی مجدد خودکار یک کانال یا حساب، از
channels.<provider>.healthMonitor.enabledیاchannels.<provider>.accounts.<id>.healthMonitor.enabledاستفاده کنید. - برای اشکالزدایی عملیاتی، بررسیهای سلامت و برای همه فیلدها، مرجع کامل را ببینید.
پیکربندی نشستها و بازنشانیها
نشستها تداوم و جداسازی مکالمه را کنترل میکنند:
{ session: { dmScope: "per-channel-peer", // برای چندکاربر توصیه میشود 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: پیشفرضهای سراسری برای مسیریابی نشست متصل به رشته./focus،/unfocus،/agents،/session idleو/session max-ageاین اتصال را برای هر نشست برقرار، قطع، فهرست و تنظیم میکنند (Discord رشتهها را متصل میکند و Telegram موضوعها/مکالمهها را).- برای محدودهبندی، پیوندهای هویتی و سیاست ارسال، به مدیریت نشست مراجعه کنید.
- برای همه فیلدها، مرجع کامل را ببینید.
فعالسازی سندباکس
نشستهای عامل را در محیطهای اجرای سندباکس ایزوله اجرا کنید:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}ابتدا ایمیج را بسازید — در یک نسخه دریافتشده از کد منبع، scripts/sandbox-setup.sh را اجرا کنید؛ یا برای نصب از npm، فرمان درونخطی docker build را در سندباکس § ایمیجها و راهاندازی ببینید.
برای راهنمای کامل به سندباکس و برای همه گزینهها به مرجع کامل مراجعه کنید.
فعالسازی پوش مبتنی بر رله برای بیلدهای رسمی iOS
پوش مبتنی بر رله برای بیلدهای عمومی App Store از رله میزبانیشده OpenClaw استفاده میکند: https://ios-push-relay.openclaw.ai.
استقرارهای سفارشی رله به مسیر بیلد/استقرار iOS عمداً مجزایی نیاز دارند که URL رله آن با URL رله Gateway مطابقت داشته باشد. اگر از بیلد رله سفارشی استفاده میکنید، این مورد را در پیکربندی Gateway تنظیم کنید:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // اختیاری. پیشفرض: 10000 timeoutMs: 10000, }, }, }, },}معادل CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comکارکرد این تنظیم:
- به Gateway امکان میدهد
push.test، تلنگرهای بیدارسازی و بیدارسازیهای اتصال مجدد را از طریق رله خارجی ارسال کند. - از مجوز ارسال مختص ثبتنام استفاده میکند که برنامه جفتشده iOS آن را منتقل میکند. Gateway به توکن رله سراسریِ استقرار نیاز ندارد.
- هر ثبتنام مبتنی بر رله را به هویت Gateway جفتشده با برنامه iOS متصل میکند تا Gateway دیگری نتواند از ثبتنام ذخیرهشده دوباره استفاده کند.
- بیلدهای محلی/دستی iOS را روی APNs مستقیم نگه میدارد. ارسالهای مبتنی بر رله فقط برای بیلدهای رسمی توزیعشدهای اعمال میشوند که از طریق رله ثبتنام کردهاند.
- باید با URL پایه رله تعبیهشده در بیلد iOS مطابقت داشته باشد تا ترافیک ثبتنام و ارسال به همان استقرار رله برسد.
جریان سرتاسری:
- برنامه رسمی iOS را نصب کنید.
- اختیاری: فقط هنگام استفاده از یک بیلد رله سفارشی و عمداً مجزا،
gateway.push.apns.relay.baseUrlرا روی Gateway پیکربندی کنید. - برنامه iOS را با Gateway جفت کنید و اجازه دهید نشستهای Node و اپراتور هر دو متصل شوند.
- برنامه iOS هویت Gateway را دریافت میکند، با استفاده از App Attest بههمراه رسید برنامه در رله ثبتنام میکند و سپس محموله
push.apns.registerمبتنی بر رله را در Gateway جفتشده منتشر میکند. - Gateway هندل رله و مجوز ارسال را ذخیره میکند، سپس از آنها برای
push.test، تلنگرهای بیدارسازی و بیدارسازیهای اتصال مجدد استفاده میکند.
نکات عملیاتی:
- اگر برنامه iOS را به Gateway دیگری منتقل کردید، برنامه را دوباره متصل کنید تا بتواند ثبتنام رله جدیدی را که به آن Gateway متصل است منتشر کند.
- اگر بیلد جدیدی از iOS منتشر کنید که به استقرار رله دیگری اشاره میکند، برنامه بهجای استفاده مجدد از مبدأ رله قدیمی، ثبتنام رله ذخیرهشده خود را تازهسازی میکند.
نکته سازگاری:
OPENCLAW_APNS_RELAY_BASE_URLوOPENCLAW_APNS_RELAY_TIMEOUT_MSهمچنان بهعنوان بازنویسیهای موقت محیطی کار میکنند.- URLهای رله سفارشی Gateway باید با URL پایه رله تعبیهشده در بیلد iOS مطابقت داشته باشند؛ مسیر انتشار عمومی App Store بازنویسیهای URL رله سفارشی iOS را رد میکند.
OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueهمچنان یک راه گریز توسعهای محدود به loopback است؛ URLهای رله HTTP را در پیکربندی ماندگار نکنید.
برای جریان سرتاسری، برنامه iOS و برای مدل امنیتی رله، جریان احراز هویت و اعتماد را ببینید.
راهاندازی Heartbeat (بررسیهای دورهای)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: رشته مدتزمان (30m،2h). برای غیرفعالسازی،0mرا تنظیم کنید. پیشفرض:30m.target:last|none|<channel-id>(برای نمونهdiscord،matrix،telegramیاwhatsapp)directPolicy:allow(پیشفرض) یاblockبرای مقصدهای Heartbeat به سبک پیام مستقیم- برای راهنمای کامل به Heartbeat مراجعه کنید.
پیکربندی کارهای Cron
{ cron: { enabled: true, sessionRetention: "24h", },}sessionRetention: نشستهای تکمیلشده اجرای ایزوله را از ردیفهای نشست SQLite پاکسازی میکند (پیشفرض24h؛ برای غیرفعالسازی،falseرا تنظیم کنید).- تاریخچه اجرا بهطور خودکار جدیدترین 2000 ردیف ترمینال را برای هر کار نگه میدارد؛ ردیفهای گمشده بازه پاکسازی 24 ساعته خود را حفظ میکنند.
- برای نمای کلی قابلیت و نمونههای CLI به کارهای Cron مراجعه کنید.
راهاندازی Webhookها (هوکها)
نقاط پایانی Webhook مبتنی بر HTTP را روی 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, }, ], },}نکته امنیتی:
- تمام محتوای محموله هوک/Webhook را ورودی غیرقابلاعتماد در نظر بگیرید.
- از یک
hooks.tokenاختصاصی استفاده کنید؛ اسرار فعال احراز هویت Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENیاgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD) را دوباره استفاده نکنید. - احراز هویت هوک فقط از طریق هدر انجام میشود (
Authorization: Bearer ...یاx-openclaw-token)؛ توکنهای رشته پرسوجو رد میشوند. hooks.pathنمیتواند/باشد؛ ورودی Webhook را روی یک زیرمسیر اختصاصی مانند/hooksنگه دارید.- پرچمهای دور زدن محتوای ناامن (
hooks.gmail.allowUnsafeExternalContent،hooks.mappings[].allowUnsafeExternalContent) را غیرفعال نگه دارید، مگر هنگام اشکالزدایی با محدوده کاملاً محدود. - اگر
hooks.allowRequestSessionKeyرا فعال میکنید،hooks.allowedSessionKeyPrefixesرا نیز تنظیم کنید تا کلیدهای نشست انتخابشده توسط فراخواننده محدود شوند. - برای عاملهای هدایتشده با هوک، ردههای قدرتمند مدلهای مدرن و سیاست سختگیرانه ابزار را ترجیح دهید (برای نمونه، فقط پیامرسانی بههمراه سندباکس در صورت امکان).
برای همه گزینههای نگاشت و یکپارچهسازی Gmail به مرجع کامل مراجعه کنید.
پیکربندی مسیریابی چندعاملی
چند عامل ایزوله را با فضاهای کاری و نشستهای جداگانه اجرا کنید:
{ 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" } }, ],}برای قواعد اتصال و پروفایلهای دسترسی هر عامل، چندعاملی و مرجع کامل را ببینید.
تقسیم پیکربندی میان چند فایل ($include)
برای سازماندهی پیکربندیهای بزرگ از $include استفاده کنید:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- یک فایل: شیء دربرگیرنده را جایگزین میکند
- آرایهای از فایلها: بهترتیب بهصورت عمیق ادغام میشوند (مورد بعدی اولویت دارد)، تا عمق 10 سطح تودرتو
- کلیدهای همسطح: پس از includeها ادغام میشوند (مقادیر includeشده را بازنویسی میکنند)
- مسیرهای نسبی: نسبت به فایل includeکننده تفکیک میشوند
- قالب مسیر: مسیرهای include نباید شامل بایت null باشند و باید پیش و پس از تفکیک، اکیداً کوتاهتر از 4096 نویسه باشند
- نوشتنهای متعلق به OpenClaw: وقتی یک نوشتن فقط یک بخش سطحبالا را تغییر میدهد
که پشتوانه آن یک include تکفایلی مانند
plugins: { $include: "./plugins.json5" }است، OpenClaw همان فایل includeشده را بهروزرسانی میکند وopenclaw.jsonرا دستنخورده باقی میگذارد - نوشتن عبوری پشتیبانینشده: includeهای ریشه، آرایههای include و includeهایی که بازنویسی همسطح دارند، برای نوشتنهای متعلق به OpenClaw بهصورت بسته و ایمن شکست میخورند، بهجای اینکه پیکربندی را تخت کنند
- محصورسازی: مسیرهای
$includeباید در دایرکتوری نگهدارندهopenclaw.jsonتفکیک شوند. برای اشتراکگذاری یک درخت میان چند ماشین یا کاربر،OPENCLAW_INCLUDE_ROOTSرا روی فهرستی از مسیرها (:در POSIX، ;در Windows) شامل دایرکتوریهای اضافی قابل ارجاع توسط includeها تنظیم کنید. پیوندهای نمادین تفکیک و دوباره بررسی میشوند؛ بنابراین مسیری که از نظر واژگانی در دایرکتوری پیکربندی قرار دارد، اما مقصد واقعیاش از همه ریشههای مجاز خارج میشود، همچنان رد خواهد شد. - مدیریت خطا: خطاهای روشن برای فایلهای مفقود، خطاهای تجزیه، includeهای حلقوی، قالب نامعتبر مسیر و طول بیشازحد
بارگذاری مجدد فوری پیکربندی
Gateway بر ~/.openclaw/openclaw.json نظارت میکند و تغییرات را بهطور خودکار اعمال میکند — برای بیشتر تنظیمات نیازی به راهاندازی مجدد دستی نیست.
ویرایش مستقیم فایل تا زمان اعتبارسنجی، غیرقابلاعتماد در نظر گرفته میشود. ناظر منتظر میماند
تا آشفتگی ناشی از نوشتن فایل موقت/تغییرنام توسط ویرایشگر فروکش کند، فایل نهایی را میخواند و
ویرایشهای خارجی نامعتبر را بدون بازنویسی openclaw.json رد میکند. نوشتنهای پیکربندی
متعلق به OpenClaw پیش از نوشتن از همان دروازه طرحواره عبور میکنند (برای قواعد بازنویسی/بازگردانی
اعمالشده بر همه نوشتنها، اعتبارسنجی سختگیرانه را ببینید).
اگر config reload skipped (invalid config) را مشاهده کردید یا هنگام راهاندازی Invalid config گزارش شد، پیکربندی را بررسی کنید، openclaw config validate و سپس برای تعمیر openclaw doctor --fix را اجرا کنید. برای چکلیست به عیبیابی Gateway
مراجعه کنید.
حالتهای بارگذاری مجدد
| حالت | رفتار |
|---|---|
hybrid (پیشفرض) |
تغییرات امن را فوراً و بدون راهاندازی مجدد اعمال میکند. برای تغییرات حیاتی بهطور خودکار راهاندازی مجدد میشود. |
hot |
فقط تغییرات امن را بدون راهاندازی مجدد اعمال میکند. وقتی راهاندازی مجدد لازم باشد، هشداری ثبت میکند — مدیریت آن بر عهده شماست. |
restart |
با هر تغییر پیکربندی، چه امن باشد چه نباشد، Gateway را راهاندازی مجدد میکند. |
off |
پایش فایل را غیرفعال میکند. تغییرات در راهاندازی مجدد دستی بعدی اعمال میشوند. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}چه چیزهایی بدون راهاندازی مجدد اعمال میشوند و چه چیزهایی به راهاندازی مجدد نیاز دارند
بیشتر فیلدها بدون وقفه و بدون راهاندازی مجدد اعمال میشوند؛ برخی بخشهایی که بدون راهاندازی مجدد اعمال میشوند، بهجای کل Gateway فقط همان
زیرسامانه (کانال، cron، heartbeat، پایشگر سلامت) را راهاندازی مجدد میکنند. در حالت
hybrid، تغییراتی که به راهاندازی مجدد Gateway نیاز دارند، بهطور خودکار مدیریت میشوند.
| دسته | فیلدها | نیازمند راهاندازی مجدد Gateway؟ |
|---|---|---|
| کانالها | channels.*، web (WhatsApp) — همه کانالهای داخلی و کانالهای Plugin |
خیر (همان کانال را راهاندازی مجدد میکند) |
| عامل و مدلها | agent، agents، models، routing |
خیر |
| خودکارسازی | hooks، cron، agent.heartbeat |
خیر (همان زیرسامانه را راهاندازی مجدد میکند) |
| نشستها و پیامها | session، messages |
خیر |
| ابزارها و رسانه | tools، skills، mcp، audio، talk |
خیر |
| پیکربندی Plugin | plugins.entries.*، plugins.allow، plugins.deny، plugins.enabled |
خیر (زماناجرای Plugin را بارگذاری مجدد میکند) |
| رابط کاربری و موارد متفرقه | ui، logging، identity، bindings |
خیر |
| سرور Gateway | gateway.* (درگاه، اتصال، احراز هویت، tailscale، TLS، HTTP، ارسال) |
بله |
| زیرساخت | discovery، browser، plugins.load، plugins.installs |
بله |
برنامهریزی بارگذاری مجدد
وقتی فایل منبعی را که از طریق $include ارجاع شده است ویرایش میکنید، OpenClaw
بارگذاری مجدد را براساس چیدمان نوشتهشده در منبع برنامهریزی میکند، نه نمای مسطحشده در حافظه.
این کار تصمیمهای بارگذاری مجدد بدون توقف (اعمال مستقیم در برابر راهاندازی مجدد) را حتی زمانی قابلپیشبینی نگه میدارد که
یک بخش سطحبالا در فایل شاملشده جداگانهای مانند
plugins: { $include: "./plugins.json5" } قرار داشته باشد. اگر
چیدمان منبع مبهم باشد، برنامهریزی بارگذاری مجدد بهصورت ایمن متوقف میشود.
RPC پیکربندی (بهروزرسانیهای برنامهنویسیشده)
برای ابزارهایی که پیکربندی را از طریق API مربوط به Gateway مینویسند، این روند ترجیح داده میشود:
config.schema.lookupبرای بررسی یک زیردرخت (گره کمعمق طرحواره + خلاصههای فرزندان)config.getبرای دریافت تصویر لحظهای فعلی بههمراهhashconfig.patchبرای بهروزرسانیهای جزئی (وصله ادغام JSON: اشیا ادغام میشوند،nullحذف میکند و آرایهها، اگر حذف ورودیها باreplacePathsصریحاً تأیید شده باشد، جایگزین میشوند)config.applyفقط زمانی که قصد دارید کل پیکربندی را جایگزین کنیدupdate.runبرای خودبهروزرسانی صریح بههمراه راهاندازی مجدد؛ اگر نشست پس از راهاندازی مجدد باید یک نوبت پیگیری را اجرا کند،continuationMessageرا وارد کنیدupdate.statusبرای بررسی جدیدترین نشانگر راهاندازی مجددِ بهروزرسانی و تأیید نسخه در حال اجرا پس از راهاندازی مجدد
عاملها باید config.schema.lookup را نخستین مرجع برای مستندات و محدودیتهای دقیق
در سطح فیلد در نظر بگیرند. وقتی به نقشه گستردهتر پیکربندی، مقادیر پیشفرض یا پیوندهای ارجاعات اختصاصی
زیرسامانهها نیاز دارند، از مرجع پیکربندی
استفاده کنند.
نمونه وصله جزئی:
openclaw gateway call config.get --params '{}' # ثبت 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 را میپذیرد؛ آرایهای از مسیرهای پیکربندی که
جایگزینی آرایه در آنها عمدی است. اگر وصلهای یک آرایه موجود را با ورودیهای کمتر جایگزین
یا حذف کند، Gateway نوشتن را رد میکند، مگر آنکه همان مسیر دقیق در
replacePaths وجود داشته باشد؛ آرایههای تودرتوی داخل ورودیهای آرایه از [] استفاده میکنند، مانند
agents.entries.*.skills. این کار مانع میشود تصاویر لحظهای ناقص config.get
آرایههای مسیریابی یا فهرست مجاز را بیسروصدا بازنویسی کنند. وقتی قصد دارید
کل پیکربندی را جایگزین کنید، از config.apply استفاده کنید.
متغیرهای محیطی
OpenClaw متغیرهای محیطی را از فرایند والد و همچنین موارد زیر میخواند:
.envاز دایرکتوری کاری فعلی (در صورت وجود)~/.openclaw/.env(جایگزین سراسری)
هیچیک از این فایلها متغیرهای محیطی موجود را بازنویسی نمیکنند. همچنین میتوانید متغیرهای محیطی درونخطی را در پیکربندی تنظیم کنید:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}واردکردن محیط پوسته (اختیاری)
اگر فعال باشد و کلیدهای مورد انتظار تنظیم نشده باشند، OpenClaw پوسته ورود شما را اجرا و فقط کلیدهای موجودنبوده را وارد میکند:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}متغیر محیطی معادل: OPENCLAW_LOAD_SHELL_ENV=1. مقدار پیشفرض timeoutMs: 15000.
جایگزینی متغیر محیطی در مقادیر پیکربندی
با ${VAR_NAME} در هر مقدار رشتهای پیکربندی به متغیرهای محیطی ارجاع دهید:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}قواعد:
- فقط نامهای بزرگنویسیشده تطبیق داده میشوند:
[A-Z_][A-Z0-9_]* - متغیرهای موجودنبوده یا خالی هنگام بارگذاری خطا ایجاد میکنند
- برای خروجی تحتاللفظی با
$${VAR}از نویسه گریز استفاده کنید - درون فایلهای
$includeکار میکند - جایگزینی درونخطی:
"${BASE}/v1"→"https://api.example.com/v1"
ارجاعات محرمانه (محیط، فایل، اجرا)
برای فیلدهایی که از اشیای 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: { serviceAccount: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}جزئیات SecretRef (از جمله secrets.providers برای env/file/exec) در مدیریت اسرار آمده است.
مسیرهای اعتبارنامه پشتیبانیشده در سطح اعتبارنامه SecretRef فهرست شدهاند.
برای تقدم کامل و منابع، محیط را ببینید.
مرجع کامل
برای مرجع کامل فیلدبهفیلد، مرجع پیکربندی را ببینید.
مرتبط: نمونههای پیکربندی · مرجع پیکربندی · Doctor