Gateway
پیکربندی
OpenClaw یک پیکربندی اختیاری JSON5 را از ~/.openclaw/openclaw.json میخواند.
مسیر پیکربندی فعال باید یک فایل معمولی باشد. چیدمانهای openclaw.json
که symlink شدهاند برای نوشتنهای متعلق به OpenClaw پشتیبانی نمیشوند؛ یک نوشتن اتمیک ممکن است
مسیر را بهجای حفظ symlink جایگزین کند. اگر پیکربندی را بیرون از
دایرکتوری وضعیت پیشفرض نگه میدارید، OPENCLAW_CONFIG_PATH را مستقیماً به فایل واقعی اشاره دهید.
اگر فایل وجود نداشته باشد، OpenClaw از پیشفرضهای ایمن استفاده میکند. دلایل رایج برای افزودن پیکربندی:
- اتصال کانالها و کنترل اینکه چه کسانی میتوانند به ربات پیام بدهند
- تنظیم مدلها، ابزارها، sandboxing، یا خودکارسازی (cron، hooks)
- تنظیم دقیق نشستها، رسانه، شبکه، یا 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 کنترل، فرمی را از طرحواره پیکربندی زنده نمایش میدهد، شامل فراداده مستندات
title / description برای فیلدها بهعلاوه طرحوارههای Plugin و کانال وقتی
موجود باشند، همراه با یک ویرایشگر JSON خام بهعنوان راه خروج. برای UIهای
ریزشونده و ابزارهای دیگر، Gateway همچنین config.schema.lookup را ارائه میکند تا
یک گره طرحواره محدود به مسیر بههمراه خلاصههای فرزند فوری را دریافت کند.
ویرایش مستقیم
~/.openclaw/openclaw.json را مستقیماً ویرایش کنید. Gateway فایل را پایش میکند و تغییرات را بهصورت خودکار اعمال میکند (بازبارگذاری داغ را ببینید).
اعتبارسنجی سختگیرانه
openclaw config schema طرحواره JSON مرجع را که UI کنترل
و اعتبارسنجی استفاده میکنند چاپ میکند. config.schema.lookup یک گره محدود به مسیر بههمراه
خلاصههای فرزند را برای ابزارهای ریزشونده دریافت میکند. فراداده مستندات title/description فیلد
از میان آبجکتهای تودرتو، wildcard (*)، آیتم آرایه ([])، و شاخههای anyOf/
oneOf/allOf عبور میکند. طرحوارههای Plugin و کانال در زمان اجرا، وقتی
رجیستری manifest بارگذاری شده باشد، ادغام میشوند.
وقتی اعتبارسنجی شکست میخورد:
- 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های راز 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)؛ مقدارهای کمتر معمولاً مصرف vision-token را در اجراهای سنگین با screenshot کاهش میدهند.- برای تغییر مدلها در گفتوگو، CLI مدلها و برای چرخش auth و رفتار fallback، Failover مدل را ببینید.
- برای ارائهدهندگان سفارشی/خودمیزبان، ارائهدهندگان سفارشی را در مرجع ببینید.
کنترل اینکه چه کسانی میتوانند به ربات پیام بدهند
دسترسی DM برای هر کانال از طریق dmPolicy کنترل میشود:
"pairing"(پیشفرض): فرستندگان ناشناخته یک کد جفتسازی یکبارمصرف برای تأیید دریافت میکنند"allowlist": فقط فرستندگان موجود درallowFrom(یا ذخیره مجاز جفتشده)"open": همه DMهای ورودی را مجاز میکند (نیازمندallowFrom: ["*"])"disabled": همه DMها را نادیده میگیرد
برای گروهها، از groupPolicy + groupAllowFrom یا allowlistهای مخصوص کانال استفاده کنید.
برای جزئیات هر کانال، مرجع کامل را ببینید.
راهاندازی mention gating برای گفتوگوی گروهی
پیامهای گروهی بهطور پیشفرض نیازمند mention هستند. الگوهای trigger را برای هر عامل پیکربندی کنید، و پاسخهای قابل مشاهده اتاق را روی مسیر پیشفرض message-tool نگه دارید، مگر اینکه عمداً پاسخهای نهایی خودکار legacy را بخواهید:
{ messages: { visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere groupChat: { visibleReplies: "message_tool", // default; use "automatic" for legacy room replies }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- Metadata mentions: @-mentionهای بومی (tap-to-mention در WhatsApp، @bot در Telegram و غیره)
- الگوهای متنی: الگوهای 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های خودکار برای یک کانال یا حساب بدون غیرفعال کردن مانیتور سراسری، از
channels.<provider>.healthMonitor.enabledیاchannels.<provider>.accounts.<id>.healthMonitor.enabledاستفاده کنید. - برای دیباگ عملیاتی، Health Checks و برای همه فیلدها، مرجع کامل را ببینید.
تنظیم timeout دستدهی WebSocket در Gateway
به کلاینتهای محلی زمان بیشتری بدهید تا دستدهی WebSocket پیش از auth را روی میزبانهای پربار یا کمتوان کامل کنند:
{ gateway: { handshakeTimeoutMs: 30000, },}- پیشفرض
15000میلیثانیه است. OPENCLAW_HANDSHAKE_TIMEOUT_MSهمچنان برای overrideهای موردی سرویس یا shell اولویت دارد.- ابتدا رفع گیرهای 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پشتیبانی میکند).- برای محدودهبندی، پیوندهای هویتی و سیاست ارسال، مدیریت نشست را ببینید.
- برای همه فیلدها، مرجع کامل را ببینید.
فعالسازی sandboxing
نشستهای عامل را در runtimeهای sandbox ایزوله اجرا کنید:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}ابتدا image را بسازید - از یک checkout سورس scripts/sandbox-setup.sh را اجرا کنید، یا از نصب npm، دستور درونخطی docker build را در Sandboxing § Images and setup ببینید.
برای راهنمای کامل، Sandboxing و برای همه گزینهها مرجع کامل را ببینید.
فعالسازی push مبتنی بر relay برای buildهای رسمی iOS
push مبتنی بر relay در openclaw.json پیکربندی میشود.
این را در پیکربندی 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 به token relay در سطح deployment نیاز ندارد.
- هر ثبت مبتنی بر relay را به هویت Gateway که برنامه iOS با آن جفت شده است متصل میکند، تا Gateway دیگری نتواند ثبت ذخیرهشده را دوباره استفاده کند.
- buildهای محلی/دستی iOS را روی APNs مستقیم نگه میدارد. ارسالهای مبتنی بر relay فقط برای buildهای توزیعشده رسمی اعمال میشوند که از طریق relay ثبت شدهاند.
- باید با URL پایه relay که در build رسمی/TestFlight iOS تعبیه شده مطابقت داشته باشد، تا ترافیک ثبت و ارسال به همان deployment relay برسد.
جریان سرتاسری:
- یک build رسمی/TestFlight iOS را نصب کنید که با همان URL پایه relay کامپایل شده است.
gateway.push.apns.relay.baseUrlرا روی Gateway پیکربندی کنید.- برنامه iOS را با Gateway جفت کنید و اجازه دهید هر دو نشست node و operator متصل شوند.
- برنامه iOS هویت Gateway را دریافت میکند، با استفاده از App Attest بههمراه رسید برنامه در relay ثبت میشود، و سپس payload مبتنی بر relay مربوط به
push.apns.registerرا در Gateway جفتشده منتشر میکند. - Gateway شناسه relay و مجوز ارسال را ذخیره میکند، سپس از آنها برای
push.test، تلنگرهای بیدارسازی و بیدارسازیهای اتصال مجدد استفاده میکند.
نکات عملیاتی:
- اگر برنامه iOS را به Gateway دیگری تغییر میدهید، برنامه را دوباره متصل کنید تا بتواند ثبت relay جدیدی را منتشر کند که به آن Gateway متصل است.
- اگر build جدیدی از iOS منتشر میکنید که به deployment relay دیگری اشاره میکند، برنامه ثبت relay کششده خود را بهجای استفاده دوباره از مبدا relay قدیمی تازهسازی میکند.
نکته سازگاری:
OPENCLAW_APNS_RELAY_BASE_URLوOPENCLAW_APNS_RELAY_TIMEOUT_MSهمچنان بهعنوان overrideهای موقت env کار میکنند.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:allow(پیشفرض) یاblockبرای هدفهای Heartbeat به سبک DM- برای راهنمای کامل، Heartbeat را ببینید.
پیکربندی jobهای Cron
{ cron: { enabled: true, maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution sessionRetention: "24h", runLog: { maxBytes: "2mb", keepLines: 2000, }, },}sessionRetention: نشستهای اجرای ایزوله تکمیلشده را ازsessions.jsonپاکسازی میکند (پیشفرض24h؛ برای غیرفعالسازیfalseرا تنظیم کنید).runLog: فایلcron/runs/<jobId>.jsonlرا بر اساس اندازه و خطهای نگهداریشده پاکسازی میکند.- برای نمای کلی قابلیت و مثالهای CLI، jobهای Cron را ببینید.
راهاندازی webhookها (hookها)
endpointهای 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, }, ], },}نکته امنیتی:
- همه محتوای payloadهای hook/webhook را ورودی غیرقابلاعتماد در نظر بگیرید.
- از یک
hooks.tokenاختصاصی استفاده کنید؛ token مشترک Gateway را دوباره استفاده نکنید. - احراز هویت hook فقط از طریق header است (
Authorization: Bearer ...یاx-openclaw-token)؛ tokenهای query-string رد میشوند. hooks.pathنمیتواند/باشد؛ ورودی webhook را روی یک زیردامنه مسیر اختصاصی مانند/hooksنگه دارید.- پرچمهای عبور از محتوای ناامن را غیرفعال نگه دارید (
hooks.gmail.allowUnsafeExternalContent،hooks.mappings[].allowUnsafeExternalContent) مگر برای اشکالزدایی با محدوده بسیار محدود. - اگر
hooks.allowRequestSessionKeyرا فعال میکنید،hooks.allowedSessionKeyPrefixesرا هم تنظیم کنید تا کلیدهای نشست انتخابشده توسط فراخواننده محدود شوند. - برای عاملهای مبتنی بر hook، tierهای مدل مدرن و قوی و سیاست ابزار سختگیرانه را ترجیح دهید (برای مثال فقط پیامرسانی بههمراه sandboxing در صورت امکان).
برای همه گزینههای mapping و یکپارچهسازی 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" } }, ],}برای قواعد binding و profileهای دسترسی بهازای هر عامل، چندعاملی و مرجع کامل را ببینید.
تقسیم config به چند فایل ($include)
برای سازماندهی configهای بزرگ از $include استفاده کنید:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- فایل تکی: شیء دربرگیرنده را جایگزین میکند
- آرایهای از فایلها: بهترتیب deep-merge میشوند (مورد بعدی برنده است)
- کلیدهای همسطح: پس از includeها merge میشوند (مقادیر includeشده را override میکنند)
- includeهای تودرتو: تا عمق ۱۰ سطح پشتیبانی میشوند
- مسیرهای نسبی: نسبت به فایل includeکننده resolve میشوند
- نوشتنهای متعلق به OpenClaw: وقتی یک نوشتن فقط یک بخش top-level را تغییر میدهد
که پشتوانه آن یک include تکفایلی مانند
plugins: { $include: "./plugins.json5" }است، OpenClaw آن فایل includeشده را بهروزرسانی میکند وopenclaw.jsonرا دستنخورده میگذارد - write-through پشتیبانینشده: includeهای root، آرایههای include و includeهایی با overrideهای همسطح، برای نوشتنهای متعلق به OpenClaw بهجای مسطحکردن config بهصورت بسته شکست میخورند
- محدودسازی: مسیرهای
$includeباید زیر دایرکتوری نگهدارندهopenclaw.jsonresolve شوند. برای اشتراکگذاری یک درخت میان ماشینها یا کاربران،OPENCLAW_INCLUDE_ROOTSرا به یک path-list (:در POSIX،;در Windows) از دایرکتوریهای اضافی تنظیم کنید که includeها میتوانند به آنها ارجاع دهند. Symlinkها resolve و دوباره بررسی میشوند، بنابراین مسیری که از نظر نوشتاری در یک دایرکتوری config قرار دارد اما هدف واقعی آن از هر root مجاز خارج میشود همچنان رد میشود. - مدیریت خطا: خطاهای روشن برای فایلهای گمشده، خطاهای parse و includeهای چرخهای
بارگذاری مجدد داغ config
Gateway فایل ~/.openclaw/openclaw.json را پایش میکند و تغییرات را بهصورت خودکار اعمال میکند - برای بیشتر تنظیمات به restart دستی نیاز نیست.
ویرایشهای مستقیم فایل تا زمانی که validate نشوند غیرقابلاعتماد تلقی میشوند. watcher منتظر میماند
تا 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 (پیشفرض) |
تغییرات امن را فورا بهصورت داغ اعمال میکند. برای موارد حیاتی بهصورت خودکار restart میکند. |
hot |
فقط تغییرات امن را بهصورت داغ اعمال میکند. وقتی restart لازم باشد warning ثبت میکند - شما آن را انجام میدهید. |
restart |
Gateway را برای هر تغییر config، چه امن باشد چه نباشد، restart میکند. |
off |
پایش فایل را غیرفعال میکند. تغییرات در restart دستی بعدی اعمال میشوند. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}چه چیزهایی داغ اعمال میشوند و چه چیزهایی به restart نیاز دارند
بیشتر فیلدها بدون downtime بهصورت داغ اعمال میشوند. در حالت hybrid، تغییراتی که به restart نیاز دارند بهصورت خودکار مدیریت میشوند.
| دستهبندی | فیلدها | نیاز به restart؟ |
|---|---|---|
| کانالها | 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برای بررسی یک زیرشاخه (گره schema کمعمق + خلاصههای فرزند)config.getبرای دریافت snapshot فعلی بههمراهhashconfig.patchبرای بهروزرسانیهای جزئی (JSON merge patch: اشیا merge میشوند،nullحذف میکند، آرایهها جایگزین میشوند)config.applyفقط وقتی قصد دارید کل پیکربندی را جایگزین کنیدupdate.runبرای خودبهروزرسانی صریح بههمراه راهاندازی مجدد؛ وقتی session پس از راهاندازی مجدد باید یک نوبت پیگیری اجرا کند،continuationMessageرا وارد کنیدupdate.statusبرای بررسی آخرین sentinel راهاندازی مجدد بهروزرسانی و تأیید نسخهی در حال اجرا پس از راهاندازی مجدد
عاملها باید 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 برای هر دو متد الزامی است.
متغیرهای محیطی
OpenClaw متغیرهای محیطی را از پردازهی والد بهعلاوهی موارد زیر میخواند:
.envاز دایرکتوری کاری فعلی (اگر وجود داشته باشد)~/.openclaw/.env(fallback سراسری)
هیچکدام از این فایلها متغیرهای محیطی موجود را override نمیکنند. همچنین میتوانید متغیرهای محیطی 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}" } } },}قواعد:
- فقط نامهای بزرگ matched میشوند:
[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