Gateway
پیکربندی
OpenClaw پیکربندی اختیاری <Tooltip tip="JSON5 supports comments and trailing commas">JSON5</Tooltip> را از ~/.openclaw/openclaw.json میخواند.
مسیر پیکربندی فعال باید یک فایل عادی باشد. چیدمانهای openclaw.json
که با symlink ساخته شدهاند برای نوشتنهای متعلق به OpenClaw پشتیبانی نمیشوند؛ نوشتن اتمیک ممکن است
بهجای حفظ symlink، مسیر را جایگزین کند. اگر پیکربندی را خارج از
دایرکتوری وضعیت پیشفرض نگه میدارید، OPENCLAW_CONFIG_PATH را مستقیم به فایل واقعی اشاره دهید.
اگر فایل وجود نداشته باشد، OpenClaw از پیشفرضهای امن استفاده میکند. دلایل رایج برای افزودن پیکربندی:
- اتصال کانالها و کنترل اینکه چه کسی میتواند به ربات پیام بدهد
- تنظیم مدلها، ابزارها، sandboxing یا خودکارسازی (cron، hookها)
- تنظیم sessionها، رسانه، شبکه یا UI
برای همه فیلدهای موجود، مرجع کامل را ببینید.
agentها و خودکارسازی باید پیش از ویرایش پیکربندی، برای مستندات دقیق در سطح فیلد از config.schema.lookup استفاده کنند.
از این صفحه برای راهنمایی taskمحور و از
مرجع پیکربندی برای نقشه گستردهتر
فیلدها و پیشفرضها استفاده کنید.
پیکربندی حداقلی
// ~/.openclaw/openclaw.json
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
ویرایش پیکربندی
ویزارد تعاملی
openclaw onboard # full onboarding flow
openclaw configure # config wizard
CLI (دستورهای تکخطی)
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKey
Control UI
http://127.0.0.1:18789 را باز کنید و از تب پیکربندی استفاده کنید.
Control UI فرمی را از schema پیکربندی زنده render میکند، شامل metadata مستندات
title / description فیلد بههمراه schemaهای plugin و کانال در صورت موجود بودن،
با یک ویرایشگر Raw JSON بهعنوان راه خروج اضطراری. برای UIهای drill-down
و ابزارهای دیگر، gateway همچنین config.schema.lookup را ارائه میکند تا
یک node schema محدود به مسیر بههمراه خلاصههای فرزند مستقیم را دریافت کند.
ویرایش مستقیم
~/.openclaw/openclaw.json را مستقیم ویرایش کنید. Gateway فایل را زیر نظر میگیرد و تغییرات را خودکار اعمال میکند (نگاه کنید به hot reload).
اعتبارسنجی سختگیرانه
openclaw config schema، JSON Schema canonical را که Control UI
و اعتبارسنجی استفاده میکنند چاپ میکند. config.schema.lookup یک node
محدود به مسیر بههمراه خلاصههای فرزند را برای ابزارهای drill-down دریافت میکند.
metadata مستندات title/description فیلد از میان objectهای تو در تو، wildcard (*)،
array-item ([]) و شاخههای anyOf/
oneOf/allOf عبور میکند. schemaهای runtime مربوط به plugin و کانال وقتی
manifest registry بارگذاری شده باشد merge میشوند.
وقتی اعتبارسنجی شکست میخورد:
- Gateway بوت نمیشود
- فقط دستورهای تشخیصی کار میکنند (
openclaw doctor،openclaw logs،openclaw health،openclaw status) - برای دیدن issueهای دقیق،
openclaw doctorرا اجرا کنید - برای اعمال تعمیرات،
openclaw doctor --fix(یا--yes) را اجرا کنید
Gateway پس از هر startup موفق، یک کپی مورد اعتماد از آخرین وضعیت سالم شناختهشده نگه میدارد،
اما startup و hot reload آن را خودکار restore نمیکنند. اگر openclaw.json
در اعتبارسنجی شکست بخورد (از جمله اعتبارسنجی plugin-local)، startup مربوط به Gateway شکست میخورد یا
reload رد میشود و runtime فعلی آخرین پیکربندی پذیرفتهشده را نگه میدارد.
برای تعمیر پیکربندی prefixed/clobbered یا restore کردن کپی آخرین وضعیت سالم شناختهشده،
openclaw doctor --fix (یا --yes) را اجرا کنید. وقتی یک
candidate شامل placeholderهای secret سانسورشده مانند *** باشد، promotion به آخرین وضعیت سالم شناختهشده انجام نمیشود.
کارهای رایج
راهاندازی یک کانال (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کاتالوگ مدل را تعریف میکند و برای/modelنقش allowlist را دارد.- برای افزودن entryهای allowlist بدون حذف مدلهای موجود، از
openclaw config set agents.defaults.models '<json>' --strict-json --mergeاستفاده کنید. جایگزینیهای سادهای که entryها را حذف کنند رد میشوند، مگر اینکه--replaceرا پاس بدهید. - refهای مدل از قالب
provider/modelاستفاده میکنند (مثلاanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxکوچکسازی تصویرهای transcript/tool را کنترل میکند (پیشفرض1200)؛ مقدارهای کمتر معمولا مصرف vision-token را در اجراهای پر از screenshot کاهش میدهند.- برای تغییر مدلها در chat، CLI مدلها و برای auth rotation و رفتار fallback، Failover مدل را ببینید.
- برای providerهای سفارشی/self-hosted، بخش providerهای سفارشی را در مرجع ببینید.
کنترل اینکه چه کسانی میتوانند به بات پیام بدهند
دسترسی DM برای هر کانال از طریق dmPolicy کنترل میشود:
"pairing"(پیشفرض): فرستندگان ناشناس یک کد جفتسازی یکبارمصرف برای تأیید دریافت میکنند"allowlist": فقط فرستندگانی که درallowFromهستند (یا در مخزن مجازِ جفتشده)"open": همه DMهای ورودی را مجاز کن (بهallowFrom: ["*"]نیاز دارد)"disabled": همه DMها را نادیده بگیر
برای گروهها، از groupPolicy + groupAllowFrom یا فهرستهای مجاز مخصوص کانال استفاده کنید.
برای جزئیات هر کانال، مرجع کامل را ببینید.
راهاندازی کنترل منشن در گفتوگوی گروهی
پیامهای گروهی بهطور پیشفرض نیازمند منشن هستند. الگوهای راهانداز را برای هر عامل پیکربندی کنید، و پاسخهای قابل مشاهده اتاق را روی مسیر پیشفرض ابزار پیام نگه دارید، مگر اینکه عمداً پاسخهای نهایی خودکار قدیمی را بخواهید:
{
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 } },
},
},
}
- منشنهای فراداده: @-منشنهای بومی (منشن با لمس در WhatsApp،
@botدر Telegram، و غیره) - الگوهای متنی: الگوهای regex امن در
mentionPatterns - پاسخهای قابل مشاهده:
messages.visibleRepliesمیتواند ارسال از طریق ابزار پیام را بهصورت سراسری الزامی کند؛messages.groupChat.visibleRepliesاین رفتار را برای گروهها/کانالها بازنویسی میکند. - برای حالتهای پاسخ قابل مشاهده، بازنویسیهای مخصوص کانال، و حالت خودگفتوگو، مرجع کامل را ببینید.
محدود کردن Skills برای هر عامل
از agents.defaults.skills برای یک خط پایه مشترک استفاده کنید، سپس عاملهای مشخص را با agents.list[].skills بازنویسی کنید:
{
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 با چه شدتی کانالهایی را که کهنه به نظر میرسند بازراهاندازی کند:
{
gateway: {
channelHealthCheckMinutes: 5,
channelStaleEventThresholdMinutes: 30,
channelMaxRestartsPerHour: 10,
},
channels: {
telegram: {
healthMonitor: { enabled: false },
accounts: {
alerts: {
healthMonitor: { enabled: true },
},
},
},
},
}
- برای غیرفعال کردن بازراهاندازیهای پایش سلامت بهصورت سراسری،
gateway.channelHealthCheckMinutes: 0را تنظیم کنید. channelStaleEventThresholdMinutesباید بزرگتر یا برابر با فاصله بررسی باشد.- برای غیرفعال کردن بازراهاندازی خودکار برای یک کانال یا حساب، بدون غیرفعال کردن پایشگر سراسری، از
channels.<provider>.healthMonitor.enabledیاchannels.<provider>.accounts.<id>.healthMonitor.enabledاستفاده کنید. - برای اشکالزدایی عملیاتی، بررسیهای سلامت و برای همه فیلدها مرجع کامل را ببینید.
تنظیم زمانسنج دستدهی WebSocket در Gateway
به کلاینتهای محلی زمان بیشتری بدهید تا دستدهی WebSocket پیش از احراز هویت را روی میزبانهای پربار یا کمتوان کامل کنند:
{
gateway: {
handshakeTimeoutMs: 30000,
},
}
- مقدار پیشفرض
15000میلیثانیه است. OPENCLAW_HANDSHAKE_TIMEOUT_MSهمچنان برای بازنویسیهای موردی سرویس یا پوسته اولویت دارد.- ابتدا رفع توقفهای راهاندازی/حلقه رویداد را ترجیح دهید؛ این کنترل برای میزبانهایی است که سالماند اما هنگام گرمشدن کند هستند.
پیکربندی نشستها و بازنشانیها
نشستها تداوم و جداسازی مکالمه را کنترل میکنند:
{
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
نشستهای agent را در 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 § تصاویر و راهاندازی ببینید.
برای راهنمای کامل، 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 خارجی ارسال کند. - از یک مجوز ارسال scoped به ثبتنام استفاده میکند که app جفتشده iOS آن را forward کرده است. gateway به token relay در سطح deployment نیاز ندارد.
- هر ثبتنام مبتنی بر relay را به هویت gatewayای که app iOS با آن جفت شده است bind میکند، بنابراین gateway دیگری نمیتواند از ثبتنام ذخیرهشده دوباره استفاده کند.
- buildهای محلی/دستی iOS را روی APNs مستقیم نگه میدارد. ارسالهای مبتنی بر relay فقط برای buildهای توزیعشده رسمی اعمال میشوند که از طریق relay ثبتنام کردهاند.
- باید با URL پایه relay که در build رسمی/TestFlight iOS baked شده است مطابقت داشته باشد، تا ترافیک ثبتنام و ارسال به همان deployment relay برسد.
جریان انتهابهانتها:
- یک build رسمی/TestFlight iOS را نصب کنید که با همان URL پایه relay کامپایل شده است.
gateway.push.apns.relay.baseUrlرا روی gateway پیکربندی کنید.- app iOS را با gateway جفت کنید و اجازه دهید هر دو نشست node و operator وصل شوند.
- app iOS هویت gateway را دریافت میکند، با استفاده از App Attest بههمراه receipt app در relay ثبتنام میکند، و سپس payload
push.apns.registerمبتنی بر relay را در gateway جفتشده منتشر میکند. - gateway، handle relay و مجوز ارسال را ذخیره میکند، سپس از آنها برای
push.test، تلنگرهای بیدارسازی، و بیدارسازیهای اتصال مجدد استفاده میکند.
نکات عملیاتی:
- اگر app iOS را به gateway دیگری تغییر دادید، app را دوباره وصل کنید تا بتواند ثبتنام relay جدیدی منتشر کند که به آن gateway bind شده است.
- اگر build جدیدی از iOS منتشر کردید که به deployment relay متفاوتی اشاره میکند، app ثبتنام relay cacheشده خود را بهجای استفاده دوباره از origin قدیمی relay تازهسازی میکند.
نکته سازگاری:
OPENCLAW_APNS_RELAY_BASE_URLوOPENCLAW_APNS_RELAY_TIMEOUT_MSهمچنان بهعنوان overrideهای موقت env کار میکنند.OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueهمچنان یک راه فرار توسعه فقط برای loopback است؛ URLهای relay مبتنی بر HTTP را در config ماندگار نکنید.
برای جریان انتهابهانتها، app iOS و برای مدل امنیتی relay، جریان احراز هویت و اعتماد را ببینید.
راهاندازی Heartbeat (check-inهای دورهای)
{
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: نشستهای run ایزوله تکمیلشده را ازsessions.jsonprune میکند (پیشفرض24h؛ برای غیرفعالسازیfalseرا تنظیم کنید).runLog:cron/runs/<jobId>.jsonlرا بر اساس اندازه و خطوط نگهداشتهشده prune میکند.- برای نمای کلی قابلیت و مثالهای CLI، jobهای Cron را ببینید.
راهاندازی Webhookها (hookها)
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اختصاصی استفاده کنید؛ token مشترک Gateway را دوباره استفاده نکنید. - احراز هویت hook فقط header-only است (
Authorization: Bearer ...یاx-openclaw-token)؛ tokenهای query-string رد میشوند. hooks.pathنمیتواند/باشد؛ ingress webhook را روی یک subpath اختصاصی مانند/hooksنگه دارید.- flagهای bypass محتوای ناامن را غیرفعال نگه دارید (
hooks.gmail.allowUnsafeExternalContent،hooks.mappings[].allowUnsafeExternalContent) مگر برای debugging با دامنه کاملا محدود. - اگر
hooks.allowRequestSessionKeyرا فعال میکنید،hooks.allowedSessionKeyPrefixesرا هم تنظیم کنید تا کلیدهای نشست انتخابشده توسط caller محدود شوند. - برای agentهای hook-driven، tierهای مدل مدرن و قوی و policy سختگیرانه ابزار را ترجیح دهید (برای مثال فقط messaging بههمراه sandboxing در صورت امکان).
برای همه گزینههای mapping و یکپارچهسازی Gmail، مرجع کامل را ببینید.
پیکربندی routing چند-agentی
چند agent ایزوله را با 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های دسترسی per-agent، Multi-Agent و مرجع کامل را ببینید.
تقسیم config به چند فایل ($include)
برای سازماندهی configهای بزرگ از $include استفاده کنید:
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/a.json5", "./clients/b.json5"],
},
}
- تکفایل: object دربرگیرنده را جایگزین میکند
- آرایهای از فایلها: بهترتیب deep-merge میشوند (مورد بعدی برنده است)
- کلیدهای sibling: پس از includeها merge میشوند (valueهای includeشده را override میکنند)
- includeهای nested: تا عمق 10 سطح پشتیبانی میشوند
- مسیرهای نسبی: نسبت به فایل includeکننده resolve میشوند
- نوشتنهای متعلق به OpenClaw: وقتی یک نوشتن فقط یک بخش top-level را تغییر میدهد
که توسط یک include تکفایلی مانند
plugins: { $include: "./plugins.json5" }پشتیبانی میشود، OpenClaw همان فایل includeشده را بهروزرسانی میکند وopenclaw.jsonرا دستنخورده میگذارد - write-through پشتیبانینشده: includeهای root، آرایههای include، و includeهایی با overrideهای sibling برای نوشتنهای متعلق به OpenClaw fail closed میشوند بهجای اینکه config را flatten کنند
- محصورسازی: مسیرهای
$includeباید زیر دایرکتوری حاویopenclaw.jsonresolve شوند. برای اشتراکگذاری یک tree میان machineها یا کاربران،OPENCLAW_INCLUDE_ROOTSرا به یک path-list (:در POSIX،;در Windows) از دایرکتوریهای اضافی که includeها میتوانند به آنها ارجاع دهند تنظیم کنید. Symlinkها resolve و دوباره بررسی میشوند، بنابراین مسیری که از نظر lexical داخل یک دایرکتوری config قرار دارد اما target واقعی آن از هر root مجاز خارج میشود همچنان رد میشود. - مدیریت خطا: خطاهای روشن برای فایلهای مفقود، خطاهای parse، و includeهای circular
reload داغ config
Gateway فایل ~/.openclaw/openclaw.json را watch میکند و تغییرات را بهصورت خودکار اعمال میکند - برای بیشتر تنظیمات، restart دستی لازم نیست.
ویرایشهای مستقیم فایل تا زمانی که validate نشوند غیرقابلاعتماد محسوب میشوند. watcher منتظر میماند
تا churn مربوط به temp-write/rename ویرایشگر آرام شود، فایل نهایی را میخواند، و
ویرایشهای خارجی نامعتبر را بدون بازنویسی openclaw.json رد میکند. نوشتنهای config
متعلق به OpenClaw پیش از نوشتن از همان schema gate استفاده میکنند؛ clobberهای مخرب مانند
حذف gateway.mode یا کوچککردن فایل بیش از نصف رد میشوند و
برای بررسی بهصورت .rejected.* ذخیره میشوند.
اگر config reload skipped (invalid config) را میبینید یا startup، Invalid config گزارش میکند، config را بررسی کنید، openclaw config validate را اجرا کنید، سپس برای repair، openclaw doctor --fix را اجرا کنید. برای checklist، عیبیابی Gateway
را ببینید.
حالتهای reload
| حالت | رفتار |
|---|---|
hybrid (پیشفرض) |
تغییرات safe را فورا hot-apply میکند. برای موارد critical بهصورت خودکار restart میکند. |
hot |
فقط تغییرات safe را hot-apply میکند. وقتی restart لازم باشد warning ثبت میکند - شما آن را انجام میدهید. |
restart |
Gateway را با هر تغییر config، safe یا غیر safe، restart میکند. |
off |
file watching را غیرفعال میکند. تغییرات در restart دستی بعدی اثر میکنند. |
{
gateway: {
reload: { mode: "hybrid", debounceMs: 300 },
},
}
چه چیزی hot-apply میشود و چه چیزی به restart نیاز دارد
بیشتر fieldها بدون downtime بهصورت hot-apply اعمال میشوند. در حالت hybrid، تغییراتی که به restart نیاز دارند خودکار مدیریت میشوند.
| دسته | fieldها | restart لازم است؟ |
|---|---|---|
| کانالها | channels.*, web (WhatsApp) - همه کانالهای داخلی و plugin |
خیر |
| Agent و مدلها | agent, agents, models, routing |
خیر |
| Automation | hooks, cron, agent.heartbeat |
خیر |
| نشستها و پیامها | session, messages |
خیر |
| ابزارها و media | tools, browser, skills, mcp, audio, talk |
خیر |
| UI و موارد متفرقه | ui, logging, identity, bindings |
خیر |
| سرور Gateway | gateway.* (port, bind, auth, tailscale, TLS, HTTP) |
بله |
| Infrastructure | discovery, canvasHost, plugins |
بله |
برنامهریزی reload
وقتی یک فایل منبع را که از طریق $include ارجاع شده است ویرایش میکنید، OpenClaw بارگذاری مجدد را بر اساس چیدمان نوشتهشده در منبع برنامهریزی میکند، نه نمای تختشده درون حافظه. این کار تصمیمهای بارگذاری داغ (اعمال داغ در برابر راهاندازی مجدد) را قابل پیشبینی نگه میدارد، حتی وقتی یک بخش سطحبالای واحد در فایل included خودش قرار دارد؛ مانند 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 راهاندازی مجدد بهروزرسانی و تأیید نسخه در حال اجرا پس از راهاندازی مجدد
Agentها باید config.schema.lookup را نخستین مقصد برای مستندات و محدودیتهای دقیق در سطح فیلد بدانند. وقتی به نقشه گستردهتر پیکربندی، پیشفرضها، یا پیوندها به مراجع اختصاصی زیرسامانهها نیاز دارند، از مرجع پیکربندی استفاده کنید.
نمونه patch جزئی:
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.patch --params '{
"raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
"baseHash": "<hash>"
}'
هر دو config.apply و config.patch، raw، baseHash، sessionKey، note و restartDelayMs را میپذیرند. وقتی پیکربندی از قبل وجود داشته باشد، baseHash برای هر دو method الزامی است.
متغیرهای محیطی
OpenClaw متغیرهای env را از parent process بهعلاوه موارد زیر میخواند:
.envاز دایرکتوری کاری فعلی (اگر وجود داشته باشد)~/.openclaw/.env(fallback سراسری)
هیچکدام از این فایلها متغیرهای env موجود را override نمیکنند. همچنین میتوانید متغیرهای env درونخطی را در پیکربندی تنظیم کنید:
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: { GROQ_API_KEY: "gsk-..." },
},
}
وارد کردن env پوسته (اختیاری)
اگر فعال باشد و کلیدهای مورد انتظار تنظیم نشده باشند، OpenClaw پوسته login شما را اجرا میکند و فقط کلیدهای missing را وارد میکند:
{
env: {
shellEnv: { enabled: true, timeoutMs: 15000 },
},
}
معادل متغیر env: OPENCLAW_LOAD_SHELL_ENV=1
جایگزینی متغیر env در مقادیر پیکربندی
در هر مقدار رشتهای پیکربندی با ${VAR_NAME} به متغیرهای env ارجاع دهید:
{
gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },
}
قواعد:
- فقط نامهای uppercase مطابق میشوند:
[A-Z_][A-Z0-9_]* - متغیرهای missing/empty هنگام load خطا میدهند
- برای خروجی literal با
$${VAR}escape کنید - داخل فایلهای
$includeکار میکند - جایگزینی درونخطی:
"${BASE}/v1"→"https://api.example.com/v1"
ارجاعهای secret (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) در مدیریت Secrets آمده است. مسیرهای credential پشتیبانیشده در سطح Credential مربوط به SecretRef فهرست شدهاند.
برای precedence و sourceهای کامل، محیط را ببینید.
مرجع کامل
برای مرجع کامل فیلدبهفیلد، مرجع پیکربندی را ببینید.
مرتبط: نمونههای پیکربندی · مرجع پیکربندی · Doctor