Gateway
مرجع پیکربندی
مرجع پیکربندی اصلی برای ~/.openclaw/openclaw.json. برای یک نمای کلی وظیفهمحور، پیکربندی را ببینید.
سطوح اصلی پیکربندی OpenClaw را پوشش میدهد و وقتی یک زیرسامانه مرجع عمیقتری از خودش دارد، به آن لینک میدهد. کاتالوگهای فرمان متعلق به کانال و Plugin و گزینههای عمیق حافظه/QMD بهجای این صفحه، در صفحههای خودشان قرار دارند.
حقیقت کد:
openclaw config schemaطرحواره زنده JSON را که برای اعتبارسنجی و Control UI استفاده میشود چاپ میکند و در صورت موجود بودن، فرادادههای bundled/plugin/channel را هم ادغام میکندconfig.schema.lookupیک گره طرحواره محدود به مسیر را برای ابزارهای بررسی عمیق برمیگرداندpnpm config:docs:check/pnpm config:docs:genهش مبنای مستندات پیکربندی را در برابر سطح طرحواره فعلی اعتبارسنجی میکنند
مسیر جستوجوی عامل: پیش از ویرایشها، برای مستندات و محدودیتهای دقیق در سطح فیلد از کنش ابزار gateway یعنی config.schema.lookup استفاده کنید. برای راهنمایی وظیفهمحور از پیکربندی و برای نقشه گستردهتر فیلدها، پیشفرضها، و لینکها به مراجع زیرسامانهها از این صفحه استفاده کنید.
مراجع عمیق اختصاصی:
- مرجع پیکربندی حافظه برای
agents.defaults.memorySearch.*،memory.qmd.*،memory.citations، و پیکربندی dreaming زیرplugins.entries.memory-core.config.dreaming - فرمانهای Slash برای کاتالوگ فعلی فرمانهای built-in + bundled
- صفحههای مالک کانال/Plugin برای سطوح فرمان اختصاصی کانال
قالب پیکربندی JSON5 است (کامنت و ویرگول انتهایی مجاز است). همه فیلدها اختیاریاند - OpenClaw هنگام حذف شدن آنها از پیشفرضهای امن استفاده میکند.
کانالها
کلیدهای پیکربندی هر کانال به یک صفحه اختصاصی منتقل شدهاند - برای channels.*، از جمله Slack، Discord، Telegram، WhatsApp، Matrix، iMessage، و دیگر کانالهای bundled (احراز هویت، کنترل دسترسی، چندحسابی، و gating برای mention)، پیکربندی - کانالها را ببینید.
پیشفرضهای عامل، چندعاملی، نشستها، و پیامها
به یک صفحه اختصاصی منتقل شده است - برای موارد زیر پیکربندی - عاملها را ببینید:
agents.defaults.*(workspace، model، thinking، heartbeat، memory، media، skills، sandbox)multiAgent.*(مسیریابی و bindingهای چندعاملی)session.*(چرخه عمر نشست، Compaction، هرس)messages.*(تحویل پیام، TTS، رندر Markdown)talk.*(حالت Talk)talk.speechLocale: شناسه locale اختیاری BCP 47 برای تشخیص گفتار Talk روی iOS/macOStalk.silenceTimeoutMs: وقتی تنظیم نشده باشد، Talk پیش از ارسال رونویسی، پنجره مکث پیشفرض پلتفرم را نگه میدارد (700 ms on macOS and Android, 900 ms on iOS)
ابزارها و ارائهدهندگان سفارشی
سیاست ابزار، سوییچهای آزمایشی، پیکربندی ابزار مبتنی بر ارائهدهنده، و راهاندازی ارائهدهنده سفارشی / base-URL به یک صفحه اختصاصی منتقل شدهاند - پیکربندی - ابزارها و ارائهدهندگان سفارشی را ببینید.
مدلها
تعریفهای ارائهدهنده، allowlistهای مدل، و راهاندازی ارائهدهنده سفارشی در پیکربندی - ابزارها و ارائهدهندگان سفارشی قرار دارند.
ریشه models رفتار سراسری کاتالوگ مدل را هم در اختیار دارد.
{
models: {
// Optional. Default: true. Requires a Gateway restart when changed.
pricing: { enabled: false },
},
}
models.mode: رفتار کاتالوگ ارائهدهنده (mergeیاreplace).models.providers: نگاشت ارائهدهنده سفارشی با کلید شناسه ارائهدهنده.models.pricing.enabled: bootstrap قیمتگذاری پسزمینه را کنترل میکند که پس از رسیدن sidecarها و کانالها به مسیر آماده Gateway شروع میشود. وقتیfalseباشد، Gateway دریافتهای کاتالوگ قیمتگذاری OpenRouter و LiteLLM را رد میکند؛ مقادیر پیکربندیشدهmodels.providers.*.models[].costهمچنان برای برآوردهای هزینه محلی کار میکنند.
MCP
تعریفهای سرور MCP مدیریتشده توسط OpenClaw زیر mcp.servers قرار دارند و توسط Pi توکار و دیگر آداپتورهای زمان اجرا مصرف میشوند. فرمانهای openclaw mcp list، show، set، و unset این بلوک را بدون اتصال به سرور هدف در زمان ویرایش پیکربندی مدیریت میکنند.
{
mcp: {
// Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction.
sessionIdleTtlMs: 600000,
servers: {
docs: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-fetch"],
},
remote: {
url: "https://example.com/mcp",
transport: "streamable-http", // streamable-http | sse
headers: {
Authorization: "Bearer ${MCP_REMOTE_TOKEN}",
},
},
},
},
}
mcp.servers: تعریفهای نامگذاریشده سرور MCP از نوع stdio یا remote برای runtimeهایی که ابزارهای MCP پیکربندیشده را ارائه میکنند. ورودیهای remote ازtransport: "streamable-http"یاtransport: "sse"استفاده میکنند؛type: "http"یک نام مستعار بومی CLI است کهopenclaw mcp setوopenclaw doctor --fixآن را به فیلد canonicaltransportنرمالسازی میکنند.mcp.sessionIdleTtlMs: TTL بیکاری برای runtimeهای bundled MCP محدود به نشست. اجراهای توکار یکباره، پاکسازی پایان اجرا را درخواست میکنند؛ این TTL پشتیبان نشستهای بلندمدت و فراخوانندههای آینده است.- تغییرات زیر
mcp.*با dispose کردن runtimeهای MCP نشست cacheشده، بهصورت hot-apply اعمال میشوند. کشف/استفاده بعدی ابزار آنها را از پیکربندی جدید دوباره میسازد، بنابراین ورودیهای حذفشدهmcp.serversبهجای انتظار برای TTL بیکاری، بلافاصله جمعآوری میشوند.
برای رفتار زمان اجرا، MCP و backendهای CLI را ببینید.
Skills
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/Projects/agent-scripts/skills"],
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun
},
entries: {
"image-lab": {
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string
env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
allowBundled: allowlist اختیاری فقط برای Skillsهای bundled (Skillsهای managed/workspace تحتتأثیر قرار نمیگیرند).load.extraDirs: ریشههای shared اضافی Skills (کمترین تقدم).install.preferBrew: وقتی true باشد، اگرbrewموجود باشد، پیش از fallback به انواع نصبکننده دیگر، نصبکنندههای Homebrew ترجیح داده میشوند.install.nodeManager: ترجیح نصبکننده Node برای specهایmetadata.openclaw.install(npm|pnpm|yarn|bun).entries.<skillKey>.enabled: falseیک skill را حتی اگر bundled/installed باشد غیرفعال میکند.entries.<skillKey>.apiKey: میانبر برای Skillsهایی که یک متغیر محیطی اصلی اعلام میکنند (رشته plaintext یا شیء SecretRef).
Pluginها
{
plugins: {
enabled: true,
allow: ["voice-call"],
bundledDiscovery: "allowlist",
deny: [],
load: {
paths: ["~/Projects/oss/voice-call-plugin"],
},
entries: {
"voice-call": {
enabled: true,
hooks: {
allowPromptInjection: false,
},
config: { provider: "twilio" },
},
},
},
}
- از
~/.openclaw/extensions،<workspace>/.openclaw/extensions، بهعلاوهplugins.load.pathsبارگذاری میشود. - Discovery، Pluginهای بومی OpenClaw بهعلاوه bundleهای سازگار Codex و bundleهای Claude را میپذیرد، از جمله bundleهای layout پیشفرض Claude بدون manifest.
- تغییرات پیکربندی به راهاندازی مجدد gateway نیاز دارد.
allow: allowlist اختیاری (فقط Pluginهای فهرستشده بارگذاری میشوند).denyاولویت دارد.bundledDiscovery: برای پیکربندیهای جدید بهصورت پیشفرض"allowlist"است، بنابراینplugins.allowغیرخالی، Pluginهای ارائهدهنده bundled، از جمله ارائهدهندگان runtime جستوجوی وب را نیز gate میکند. Doctor برای پیکربندیهای allowlist قدیمی مهاجرتدادهشده"compat"مینویسد تا رفتار موجود ارائهدهنده bundled را تا زمانی که opt in کنید حفظ کند.plugins.entries.<id>.apiKey: فیلد میانبر کلید API در سطح Plugin (وقتی توسط Plugin پشتیبانی شود).plugins.entries.<id>.env: نگاشت متغیر محیطی محدود به Plugin.plugins.entries.<id>.hooks.allowPromptInjection: وقتیfalseباشد، corebefore_prompt_buildرا مسدود میکند و فیلدهای تغییردهنده prompt ازbefore_agent_startقدیمی را نادیده میگیرد، در حالی کهmodelOverrideوproviderOverrideقدیمی را حفظ میکند. برای hookهای Plugin بومی و دایرکتوریهای hook ارائهشده توسط bundleهای پشتیبانیشده اعمال میشود.plugins.entries.<id>.hooks.allowConversationAccess: وقتیtrueباشد، Pluginهای غیر-bundled مورد اعتماد میتوانند محتوای خام مکالمه را از hookهای typed مانندllm_input،llm_output،before_model_resolve،before_agent_reply،before_agent_run،before_agent_finalize، وagent_endبخوانند.plugins.entries.<id>.subagent.allowModelOverride: بهصراحت به این Plugin اعتماد میکند تا برای اجراهای subagent پسزمینه، overrideهایproviderوmodelدر هر اجرا درخواست کند.plugins.entries.<id>.subagent.allowedModels: allowlist اختیاری از هدفهای canonicalprovider/modelبرای overrideهای subagent مورد اعتماد. فقط وقتی عمدا میخواهید هر مدلی را مجاز کنید از"*"استفاده کنید.plugins.entries.<id>.config: شیء پیکربندی تعریفشده توسط Plugin (در صورت موجود بودن، با طرحواره Plugin بومی OpenClaw اعتبارسنجی میشود).- تنظیمات حساب/زمان اجرای Plugin کانال زیر
channels.<id>قرار دارند و باید با فرادادهchannelConfigsدر manifest Plugin مالک توصیف شوند، نه با یک registry گزینه مرکزی OpenClaw. plugins.entries.firecrawl.config.webFetch: تنظیمات ارائهدهنده web-fetch مربوط به Firecrawl.apiKey: کلید API Firecrawl (SecretRef را میپذیرد). بهplugins.entries.firecrawl.config.webSearch.apiKey،tools.web.fetch.firecrawl.apiKeyقدیمی، یا متغیر محیطیFIRECRAWL_API_KEYfallback میکند.baseUrl: نشانی پایه API Firecrawl (پیشفرض:https://api.firecrawl.dev؛ overrideهای self-hosted باید endpointهای خصوصی/داخلی را هدف بگیرند).onlyMainContent: فقط محتوای اصلی صفحهها را استخراج میکند (پیشفرض:true).maxAgeMs: بیشینه عمر cache بر حسب میلیثانیه (پیشفرض:172800000/ ۲ روز).timeoutSeconds: timeout درخواست scrape بر حسب ثانیه (پیشفرض:60).
plugins.entries.xai.config.xSearch: تنظیمات xAI X Search (جستوجوی وب Grok).enabled: ارائهدهنده X Search را فعال میکند.model: مدل Grok برای استفاده در جستوجو (مثلا"grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: تنظیمات memory dreaming. برای فازها و آستانهها Dreaming را ببینید.enabled: سوییچ اصلی dreaming (پیشفرضfalse).frequency: cadence کرون برای هر پیمایش کامل dreaming (بهصورت پیشفرض"0 3 * * *").model: override اختیاری مدل subagent مربوط به Dream Diary. بهplugins.entries.memory-core.subagent.allowModelOverride: trueنیاز دارد؛ برای محدود کردن هدفها باallowedModelsهمراه کنید. خطاهای در دسترس نبودن مدل یک بار با مدل پیشفرض نشست retry میشوند؛ شکستهای trust یا allowlist بهصورت خاموش fallback نمیکنند.- سیاست فاز و آستانهها جزئیات پیادهسازیاند (کلیدهای پیکربندی قابل مشاهده برای کاربر نیستند).
- پیکربندی کامل حافظه در مرجع پیکربندی حافظه قرار دارد:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Pluginهای bundle شده Claude که فعال باشند، میتوانند از
settings.jsonپیشفرضهای Pi توکار نیز ارائه کنند؛ OpenClaw آنها را بهعنوان تنظیمات پاکسازیشده عامل اعمال میکند، نه بهعنوان patchهای خام پیکربندی OpenClaw. plugins.slots.memory: شناسه Plugin حافظه فعال را انتخاب کنید، یا برای غیرفعال کردن Pluginهای حافظه"none"را بگذارید.plugins.slots.contextEngine: شناسه Plugin فعال context engine را انتخاب کنید؛ مگر اینکه engine دیگری نصب و انتخاب کنید، پیشفرض"legacy"است.
Pluginها را ببینید.
تعهدها
commitments حافظه follow-up استنباطشده را کنترل میکند: OpenClaw میتواند check-inها را از turnهای مکالمه تشخیص دهد و آنها را از طریق اجراهای Heartbeat تحویل دهد.
commitments.enabled: استخراج، ذخیرهسازی، و تحویل Heartbeat مخفی LLM را برای تعهدهای follow-up استنباطشده فعال میکند. پیشفرض:false.commitments.maxPerDay: بیشینه تعهدهای follow-up استنباطشده که در یک روز rolling برای هر نشست عامل تحویل داده میشوند. پیشفرض:3.
تعهدهای استنباطشده را ببینید.
مرورگر
{
browser: {
enabled: true,
evaluateEnabled: true,
defaultProfile: "user",
ssrfPolicy: {
// dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
// allowPrivateNetwork: true, // legacy alias
// hostnameAllowlist: ["*.example.com", "example.com"],
// allowedHostnames: ["localhost"],
},
tabCleanup: {
enabled: true,
idleMinutes: 120,
maxTabsPerSession: 8,
sweepMinutes: 5,
},
profiles: {
openclaw: { cdpPort: 18800, color: "#FF4500" },
work: {
cdpPort: 18801,
color: "#0066CC",
executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
},
user: { driver: "existing-session", attachOnly: true, color: "#00AA00" },
brave: {
driver: "existing-session",
attachOnly: true,
userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
color: "#FB542B",
},
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
},
color: "#FF4500",
// headless: false,
// noSandbox: false,
// extraArgs: [],
// executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
// attachOnly: false,
},
}
evaluateEnabled: false،act:evaluateوwait --fnرا غیرفعال میکند.tabCleanupتبهای ردیابیشدهی عامل اصلی را پس از زمان بیکاری یا وقتی یک نشست از سقف خود فراتر میرود، بازپس میگیرد. برای غیرفعال کردن این حالتهای پاکسازی جداگانه،idleMinutes: 0یاmaxTabsPerSession: 0را تنظیم کنید.- وقتی
ssrfPolicy.dangerouslyAllowPrivateNetworkتنظیم نشده باشد غیرفعال است، بنابراین پیمایش مرورگر بهصورت پیشفرض سختگیرانه میماند. - فقط وقتی عمداً به پیمایش مرورگر در شبکهی خصوصی اعتماد دارید،
ssrfPolicy.dangerouslyAllowPrivateNetwork: trueرا تنظیم کنید. - در حالت سختگیرانه، نقاط پایانی پروفایل CDP راهدور (
profiles.*.cdpUrl) هنگام بررسیهای دسترسپذیری/کشف، مشمول همان مسدودسازی شبکهی خصوصی هستند. ssrfPolicy.allowPrivateNetworkهمچنان بهعنوان نام مستعار قدیمی پشتیبانی میشود.- در حالت سختگیرانه، برای استثناهای صریح از
ssrfPolicy.hostnameAllowlistوssrfPolicy.allowedHostnamesاستفاده کنید. - پروفایلهای راهدور فقط پیوستنی هستند (شروع/توقف/بازنشانی غیرفعال است).
profiles.*.cdpUrlمقدارهایhttp://،https://،ws://وwss://را میپذیرد. وقتی میخواهید OpenClaw مسیر/json/versionرا کشف کند، از HTTP(S) استفاده کنید؛ وقتی ارائهدهندهی شما URL مستقیم WebSocket ابزارهای توسعه را میدهد، از WS(S) استفاده کنید.remoteCdpTimeoutMsوremoteCdpHandshakeTimeoutMsبرای دسترسپذیری CDP راهدور وattachOnly، بهعلاوه درخواستهای باز کردن تب اعمال میشوند. پروفایلهای loopback مدیریتشده، پیشفرضهای CDP محلی را نگه میدارند.- اگر یک سرویس CDP مدیریتشدهی بیرونی از طریق loopback در دسترس است، برای آن
پروفایل
attachOnly: trueرا تنظیم کنید؛ در غیر این صورت OpenClaw درگاه loopback را بهعنوان یک پروفایل مرورگر مدیریتشدهی محلی در نظر میگیرد و ممکن است خطاهای مالکیت درگاه محلی گزارش کند. - پروفایلهای
existing-sessionبهجای CDP از Chrome MCP استفاده میکنند و میتوانند روی میزبان انتخابشده یا از طریق یک گره مرورگر متصل پیوست شوند. - پروفایلهای
existing-sessionمیتوانند برای هدفگیری یک پروفایل مرورگر مبتنی بر Chromium مانند Brave یا Edge، مقدارuserDataDirرا تنظیم کنند. - پروفایلهای
existing-sessionمحدودیتهای مسیر فعلی Chrome MCP را حفظ میکنند: کنشهای مبتنی بر snapshot/ref بهجای هدفگیری انتخابگر CSS، هوکهای بارگذاری یکفایلی، نبود بازنویسی مهلتزمان گفتوگو، نبودwait --load networkidle، و نبودresponsebody، خروجی PDF، رهگیری دانلود، یا کنشهای دستهای. - پروفایلهای
openclawمدیریتشدهی محلی،cdpPortوcdpUrlرا بهصورت خودکار تخصیص میدهند؛ فقط برای CDP راهدور،cdpUrlرا صریح تنظیم کنید. - پروفایلهای مدیریتشدهی محلی میتوانند برای بازنویسی
browser.executablePathسراسری برای همان پروفایل،executablePathرا تنظیم کنند. از این برای اجرای یک پروفایل در Chrome و پروفایل دیگر در Brave استفاده کنید. - پروفایلهای مدیریتشدهی محلی پس از شروع فرایند، برای کشف HTTP مربوط به Chrome CDP از
browser.localLaunchTimeoutMsو برای آمادهبودن websocket مربوط به CDP پس از اجرا ازbrowser.localCdpReadyTimeoutMsاستفاده میکنند. روی میزبانهای کندتر که Chrome با موفقیت شروع میشود اما بررسیهای آمادگی با شروع همزمان میشوند، آنها را افزایش دهید. هر دو مقدار باید عدد صحیح مثبت تا120000میلیثانیه باشند؛ مقدارهای پیکربندی نامعتبر رد میشوند. - ترتیب تشخیص خودکار: مرورگر پیشفرض اگر مبتنی بر Chromium باشد → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathوbrowser.profiles.<name>.executablePathهر دو~و~/...را برای پوشهی خانهی سیستمعامل شما پیش از اجرای Chromium میپذیرند.userDataDirبرای هر پروفایل در پروفایلهایexisting-sessionنیز با tilde بسط داده میشود.- سرویس کنترل: فقط loopback (درگاه مشتقشده از
gateway.port، پیشفرض18791). extraArgsپرچمهای اجرای اضافی را به شروع محلی Chromium اضافه میکند (برای مثال--disable-gpu، اندازهبندی پنجره، یا پرچمهای اشکالزدایی).
رابط کاربری
{
ui: {
seamColor: "#FF4500",
assistant: {
name: "OpenClaw",
avatar: "CB", // emoji, short text, image URL, or data URI
},
},
}
seamColor: رنگ تأکیدی برای قاب رابط کاربری برنامهی بومی (تهرنگ حباب حالت گفتوگو و غیره).assistant: بازنویسی هویت رابط کاربری کنترل. در صورت نبود، به هویت عامل فعال برمیگردد.
Gateway
{
gateway: {
mode: "local", // local | remote
port: 18789,
bind: "loopback",
auth: {
mode: "token", // none | token | password | trusted-proxy
token: "your-token",
// password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD
// trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth
allowTailscale: true,
rateLimit: {
maxAttempts: 10,
windowMs: 60000,
lockoutMs: 300000,
exemptLoopback: true,
},
},
tailscale: {
mode: "off", // off | serve | funnel
resetOnExit: false,
},
controlUi: {
enabled: true,
basePath: "/openclaw",
// root: "dist/control-ui",
// embedSandbox: "scripts", // strict | scripts | trusted
// allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs
// chatMessageMaxWidth: "min(1280px, 82%)", // optional grouped chat message max-width
// allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI
// dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode
// allowInsecureAuth: false,
// dangerouslyDisableDeviceAuth: false,
},
remote: {
url: "ws://gateway.tailnet:18789",
transport: "ssh", // ssh | direct
token: "your-token",
// password: "your-password",
},
trustedProxies: ["10.0.0.1"],
// Optional. Default false.
allowRealIpFallback: false,
nodes: {
pairing: {
// Optional. Default unset/disabled.
autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"],
},
allowCommands: ["canvas.navigate"],
denyCommands: ["system.run"],
},
tools: {
// Additional /tools/invoke HTTP denies
deny: ["browser"],
// Remove tools from the default HTTP deny list
allow: ["gateway"],
},
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
timeoutMs: 10000,
},
},
},
},
}
جزئیات فیلدهای Gateway
mode:local(اجرای Gateway) یاremote(اتصال به Gateway راهدور). Gateway شروع به کار را نمیپذیرد مگر اینکهlocalباشد.port: پورت چندراههٔ واحد برای WS + HTTP. ترتیب اولویت:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto،loopback(پیشفرض)،lan(0.0.0.0)،tailnet(فقط IP در Tailscale)، یاcustom.- نامهای مستعار bind قدیمی: در
gateway.bindاز مقدارهای حالت bind (auto،loopback،lan،tailnet،custom) استفاده کنید، نه نامهای مستعار میزبان (0.0.0.0،127.0.0.1،localhost،::،::1). - نکتهٔ Docker: bind پیشفرض
loopbackداخل کانتینر روی127.0.0.1گوش میدهد. با شبکهٔ bridge در Docker (-p 18789:18789)، ترافیک ازeth0وارد میشود، بنابراین Gateway در دسترس نیست. از--network hostاستفاده کنید، یاbind: "lan"(یاbind: "custom"باcustomBindHost: "0.0.0.0") را تنظیم کنید تا روی همهٔ واسطها گوش دهد. - احراز هویت: بهصورت پیشفرض الزامی است. bindهای غیر loopback به احراز هویت Gateway نیاز دارند. در عمل یعنی یک توکن/گذرواژهٔ مشترک یا یک پروکسی معکوس آگاه از هویت با
gateway.auth.mode: "trusted-proxy". راهنمای آغازبهکار بهصورت پیشفرض یک توکن تولید میکند. - اگر هر دو
gateway.auth.tokenوgateway.auth.passwordپیکربندی شدهاند (از جمله SecretRefs)،gateway.auth.modeرا صریحاً رویtokenیاpasswordتنظیم کنید. جریانهای شروع به کار و نصب/تعمیر سرویس وقتی هر دو پیکربندی شده باشند و mode تنظیم نشده باشد شکست میخورند. gateway.auth.mode: "none": حالت صریح بدون احراز هویت. فقط برای راهاندازیهای قابلاعتماد local loopback استفاده کنید؛ این مورد عمداً در اعلانهای آغازبهکار ارائه نمیشود.gateway.auth.mode: "trusted-proxy": احراز هویت مرورگر/کاربر را به یک پروکسی معکوس آگاه از هویت واگذار کنید و به سرآیندهای هویت ازgateway.trustedProxiesاعتماد کنید (نگاه کنید به احراز هویت پروکسی مورد اعتماد). این حالت بهصورت پیشفرض انتظار یک منبع پروکسی غیر loopback دارد؛ پروکسیهای معکوس same-host loopback بهgateway.auth.trustedProxy.allowLoopback = trueصریح نیاز دارند. فراخوانهای داخلی same-host میتوانند ازgateway.auth.passwordبهعنوان جایگزین مستقیم محلی استفاده کنند؛gateway.auth.tokenهمچنان با حالت trusted-proxy ناسازگار است.gateway.auth.allowTailscale: وقتیtrueباشد، سرآیندهای هویت Tailscale Serve میتوانند احراز هویت رابط کاربری کنترل/WebSocket را برآورده کنند (از طریقtailscale whoisتأیید میشود). نقطههای پایانی HTTP API از آن احراز هویت سرآیند Tailscale استفاده نمیکنند؛ در عوض از حالت عادی احراز هویت HTTP Gateway پیروی میکنند. این جریان بدون توکن فرض میکند میزبان Gateway قابلاعتماد است. وقتیtailscale.mode = "serve"باشد، پیشفرضtrueاست.gateway.auth.rateLimit: محدودکنندهٔ اختیاری برای احراز هویت ناموفق. بهازای هر IP مشتری و هر دامنهٔ احراز هویت اعمال میشود (shared-secret و device-token مستقل ردیابی میشوند). تلاشهای مسدودشده429+Retry-Afterبرمیگردانند.- در مسیر ناهمگام رابط کاربری کنترل Tailscale Serve، تلاشهای ناموفق برای همان
{scope, clientIp}پیش از نوشتن شکست، ترتیبی میشوند. بنابراین تلاشهای بد همزمان از همان مشتری میتوانند در درخواست دوم محدودکننده را فعال کنند، بهجای اینکه هر دو بهصورت عدمتطابق ساده از آن عبور کنند. gateway.auth.rateLimit.exemptLoopbackبهصورت پیشفرضtrueاست؛ وقتی عمداً میخواهید ترافیک localhost هم محدود نرخ شود (برای راهاندازیهای آزمایشی یا استقرارهای پروکسی سختگیرانه)، آن را رویfalseبگذارید.- تلاشهای احراز هویت WS با مبدأ مرورگر همیشه با غیرفعال بودن معافیت loopback محدود نرخ میشوند (دفاع عمیق در برابر حملهٔ brute force مبتنی بر مرورگر روی localhost).
- روی loopback، آن قفلشدنهای مبدأ مرورگر بهازای هر مقدار نرمالسازیشدهٔ
Originجدا میشوند، بنابراین شکستهای تکراری از یک مبدأ localhost بهصورت خودکار مبدأ دیگری را قفل نمیکند. tailscale.mode:serve(فقط tailnet، bind به loopback) یاfunnel(عمومی، نیازمند احراز هویت).controlUi.allowedOrigins: allowlist صریح مبدأ مرورگر برای اتصالهای WebSocket به Gateway. وقتی انتظار میرود مشتریان مرورگر از مبدأهای غیر loopback باشند، الزامی است.controlUi.chatMessageMaxWidth: حداکثر عرض اختیاری برای پیامهای گفتوگوی گروهبندیشدهٔ رابط کاربری کنترل. مقدارهای محدودشدهٔ عرض CSS مانند960px،82%،min(1280px, 82%)وcalc(100% - 2rem)را میپذیرد.controlUi.dangerouslyAllowHostHeaderOriginFallback: حالت خطرناکی که fallback مبدأ مبتنی بر سرآیند Host را برای استقرارهایی فعال میکند که عمداً به سیاست مبدأ مبتنی بر سرآیند Host متکی هستند.remote.transport:ssh(پیشفرض) یاdirect(ws/wss). برایdirect،remote.urlبایدws://یاwss://باشد.OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: دورزدن اضطراری سمت مشتری در محیط فرایند که اجازه میدهدws://متنی ساده به IPهای قابلاعتماد شبکهٔ خصوصی استفاده شود؛ پیشفرض برای متن ساده همچنان فقط loopback است. هیچ معادلopenclaw.jsonوجود ندارد، و پیکربندی شبکهٔ خصوصی مرورگر مانندbrowser.ssrfPolicy.dangerouslyAllowPrivateNetworkروی مشتریان WebSocket Gateway اثری ندارد.gateway.remote.token/.passwordفیلدهای اعتبارنامهٔ مشتری راهدور هستند. آنها بهتنهایی احراز هویت Gateway را پیکربندی نمیکنند.gateway.push.apns.relay.baseUrl: URL پایهٔ HTTPS برای relay خارجی APNs که buildهای رسمی/TestFlight iOS پس از انتشار ثبتنامهای relay-backed در Gateway از آن استفاده میکنند. این URL باید با URL relay کامپایلشده داخل build iOS مطابقت داشته باشد.gateway.push.apns.relay.timeoutMs: زمانانتظار ارسال Gateway به relay بر حسب میلیثانیه. پیشفرض10000است.- ثبتنامهای relay-backed به یک هویت مشخص Gateway واگذار میشوند. برنامهٔ iOS جفتشده
gateway.identity.getرا دریافت میکند، آن هویت را در ثبتنام relay قرار میدهد، و یک مجوز ارسال scoped به ثبتنام را به Gateway ارسال میکند. Gateway دیگری نمیتواند آن ثبتنام ذخیرهشده را دوباره استفاده کند. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: overrideهای موقت env برای پیکربندی relay بالا.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: راه فرار فقط مخصوص توسعه برای URLهای relay روی HTTP loopback. URLهای relay در تولید باید روی HTTPS بمانند.gateway.handshakeTimeoutMs: زمانانتظار handshake WebSocket پیش از احراز هویت Gateway بر حسب میلیثانیه. پیشفرض:15000. وقتیOPENCLAW_HANDSHAKE_TIMEOUT_MSتنظیم شده باشد اولویت دارد. این مقدار را روی میزبانهای پربار یا کمقدرتی افزایش دهید که مشتریان محلی میتوانند در حالی وصل شوند که گرمشدن شروع به کار هنوز در حال پایدار شدن است.gateway.channelHealthCheckMinutes: بازهٔ پایش سلامت کانال بر حسب دقیقه. برای غیرفعال کردن سراسری راهاندازی مجددهای پایش سلامت، روی0تنظیم کنید. پیشفرض:5.gateway.channelStaleEventThresholdMinutes: آستانهٔ stale-socket بر حسب دقیقه. این مقدار را بزرگتر یا مساویgateway.channelHealthCheckMinutesنگه دارید. پیشفرض:30.gateway.channelMaxRestartsPerHour: بیشینهٔ راهاندازی مجددهای پایش سلامت بهازای هر کانال/حساب در یک ساعت غلتان. پیشفرض:10.channels.<provider>.healthMonitor.enabled: انصراف بهازای هر کانال از راهاندازی مجددهای پایش سلامت، در حالی که پایشگر سراسری فعال میماند.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override بهازای هر حساب برای کانالهای چندحسابی. وقتی تنظیم شود، بر override سطح کانال اولویت دارد.- مسیرهای فراخوانی Gateway محلی فقط زمانی میتوانند از
gateway.remote.*بهعنوان fallback استفاده کنند کهgateway.auth.*تنظیم نشده باشد. - اگر
gateway.auth.token/gateway.auth.passwordصریحاً از طریق SecretRef پیکربندی شده و resolve نشده باشد، resolve بهصورت بسته شکست میخورد (بدون اینکه fallback راهدور آن را پنهان کند). trustedProxies: IPهای پروکسی معکوس که TLS را خاتمه میدهند یا سرآیندهای forwarded-client تزریق میکنند. فقط پروکسیهایی را فهرست کنید که کنترلشان میکنید. ورودیهای loopback همچنان برای راهاندازیهای تشخیص محلی/پروکسی same-host معتبرند (برای مثال Tailscale Serve یا یک پروکسی معکوس محلی)، اما آنها درخواستهای loopback را واجد شرایطgateway.auth.mode: "trusted-proxy"نمیکنند.allowRealIpFallback: وقتیtrueباشد، اگرX-Forwarded-Forوجود نداشته باشد GatewayX-Real-IPرا میپذیرد. پیشفرضfalseاست تا رفتار fail-closed باشد.gateway.nodes.pairing.autoApproveCidrs: allowlist اختیاری CIDR/IP برای تأیید خودکار جفتسازی نخستینبار دستگاه Node بدون scopeهای درخواستی. وقتی تنظیم نشده باشد غیرفعال است. این مورد جفتسازی operator/browser/Control UI/WebChat را خودکار تأیید نمیکند، و ارتقای role، scope، metadata یا public-key را هم خودکار تأیید نمیکند.gateway.nodes.allowCommands/gateway.nodes.denyCommands: شکلدهی سراسری allow/deny برای فرمانهای اعلامشدهٔ Node پس از جفتسازی و ارزیابی allowlist پلتفرم. ازallowCommandsبرای پذیرش فرمانهای خطرناک Node مانندcamera.snap،camera.clipوscreen.recordاستفاده کنید؛denyCommandsیک فرمان را حذف میکند حتی اگر پیشفرض پلتفرم یا allow صریح در حالت دیگر آن را شامل میشد. پس از اینکه یک Node فهرست فرمانهای اعلامشدهٔ خود را تغییر داد، آن جفتسازی دستگاه را رد و دوباره تأیید کنید تا Gateway snapshot فرمان بهروزشده را ذخیره کند.gateway.tools.deny: نامهای ابزار اضافی که برای HTTPPOST /tools/invokeمسدود میشوند (فهرست deny پیشفرض را گسترش میدهد).gateway.tools.allow: نامهای ابزار را از فهرست deny پیشفرض HTTP حذف میکند.
نقطههای پایانی سازگار با OpenAI
- Chat Completions: بهصورت پیشفرض غیرفعال است. با
gateway.http.endpoints.chatCompletions.enabled: trueفعال کنید. - Responses API:
gateway.http.endpoints.responses.enabled. - سختسازی URL-input برای Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistallowlistهای خالی تنظیمنشده تلقی میشوند؛ برای غیرفعال کردن دریافت URL ازgateway.http.endpoints.responses.files.allowUrl=falseو/یاgateway.http.endpoints.responses.images.allowUrl=falseاستفاده کنید.
- سرآیند سختسازی اختیاری پاسخ:
gateway.http.securityHeaders.strictTransportSecurity(فقط برای مبدأهای HTTPS که کنترلشان میکنید تنظیم کنید؛ نگاه کنید به احراز هویت پروکسی مورد اعتماد)
جداسازی چندنمونهای
چند Gateway را روی یک میزبان با پورتها و دایرکتوریهای state یکتا اجرا کنید:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
پرچمهای میانبر: --dev (از ~/.openclaw-dev + پورت 19001 استفاده میکند)، --profile <name> (از ~/.openclaw-<name> استفاده میکند).
نگاه کنید به چند Gateway.
gateway.tls
{
gateway: {
tls: {
enabled: false,
autoGenerate: false,
certPath: "/etc/openclaw/tls/server.crt",
keyPath: "/etc/openclaw/tls/server.key",
caPath: "/etc/openclaw/tls/ca-bundle.crt",
},
},
}
enabled: خاتمهٔ TLS را در listener Gateway (HTTPS/WSS) فعال میکند (پیشفرض:false).autoGenerate: وقتی فایلهای صریح پیکربندی نشدهاند، یک جفت cert/key محلی خودامضاشده تولید میکند؛ فقط برای استفادهٔ محلی/توسعه.certPath: مسیر فایلسیستم به فایل گواهی TLS.keyPath: مسیر فایلسیستم به فایل کلید خصوصی TLS؛ دسترسی آن را محدود نگه دارید.caPath: مسیر اختیاری bundle مربوط به CA برای تأیید مشتری یا زنجیرههای اعتماد سفارشی.
gateway.reload
{
gateway: {
reload: {
mode: "hybrid", // off | restart | hot | hybrid
debounceMs: 500,
deferralTimeoutMs: 300000,
},
},
}
mode: کنترل میکند ویرایشهای پیکربندی چگونه در زمان اجرا اعمال شوند."off": ویرایشهای زنده را نادیده میگیرد؛ تغییرات به راهاندازی مجدد صریح نیاز دارند."restart": همیشه هنگام تغییر پیکربندی، فرایند Gateway را راهاندازی مجدد میکند."hot": تغییرات را بدون راهاندازی مجدد، درون فرایند اعمال میکند."hybrid"(پیشفرض): ابتدا hot reload را امتحان میکند؛ اگر لازم باشد به راهاندازی مجدد fallback میکند.
debounceMs: پنجرهٔ debounce بر حسب ms پیش از اعمال تغییرات پیکربندی (عدد صحیح نامنفی).deferralTimeoutMs: حداکثر زمان اختیاری بر حسب ms برای انتظار عملیاتهای در حال اجرا پیش از اجبار به راهاندازی مجدد. برای استفاده از انتظار محدود پیشفرض (300000) آن را حذف کنید؛ برای انتظار نامحدود و ثبت هشدارهای دورهای still-pending، روی0تنظیم کنید.
Hookها
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
maxBodyBytes: 262144,
defaultSessionKey: "hook:ingress",
allowRequestSessionKey: true,
allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"],
allowedAgentIds: ["hooks", "main"],
presets: ["gmail"],
transformsDir: "~/.openclaw/hooks/transforms",
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "hooks",
wakeMode: "now",
name: "Gmail",
sessionKey: "hook:gmail:{{messages[0].id}}",
messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
deliver: true,
channel: "last",
model: "openai/gpt-5.4-mini",
},
],
},
}
احراز هویت: Authorization: Bearer <token> یا x-openclaw-token: <token>.
توکنهای hook در query-string رد میشوند.
نکات اعتبارسنجی و ایمنی:
hooks.enabled=trueبه یکhooks.tokenغیرخالی نیاز دارد.hooks.tokenباید ازgateway.auth.tokenمتمایز باشد؛ استفاده دوباره از توکن Gateway رد میشود.hooks.pathنمیتواند/باشد؛ از یک زیردرگاه اختصاصی مانند/hooksاستفاده کنید.- اگر
hooks.allowRequestSessionKey=trueاست،hooks.allowedSessionKeyPrefixesرا محدود کنید (برای مثال["hook:"]). - اگر یک نگاشت یا پیشتنظیم از
sessionKeyقالببندیشده استفاده میکند،hooks.allowedSessionKeyPrefixesوhooks.allowRequestSessionKey=trueرا تنظیم کنید. کلیدهای نگاشت ثابت به این فعالسازی صریح نیاز ندارند.
نقاط پایانی:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeyاز payload درخواست فقط وقتی پذیرفته میشود کهhooks.allowRequestSessionKey=trueباشد (پیشفرض:false).
POST /hooks/<name>→ از طریقhooks.mappingsحل میشود- مقادیر
sessionKeyنگاشت که با قالب رندر شدهاند، بهعنوان مقادیر بیرونی تأمینشده در نظر گرفته میشوند و همچنین بهhooks.allowRequestSessionKey=trueنیاز دارند.
- مقادیر
Mapping details
match.pathزیردرگاه پس از/hooksرا تطبیق میدهد (مثلاً/hooks/gmail→gmail).match.sourceیک فیلد payload را برای مسیرهای عمومی تطبیق میدهد.- قالبهایی مانند
{{messages[0].subject}}از payload خوانده میشوند. transformمیتواند به یک ماژول JS/TS اشاره کند که یک کنش hook برمیگرداند.transform.moduleباید یک مسیر نسبی باشد و داخلhooks.transformsDirباقی بماند (مسیرهای مطلق و پیمایش مسیر رد میشوند).hooks.transformsDirرا زیر~/.openclaw/hooks/transformsنگه دارید؛ دایرکتوریهای Skills در workspace رد میشوند. اگرopenclaw doctorاین مسیر را نامعتبر گزارش کرد، ماژول transform را به دایرکتوری transformهای hooks منتقل کنید یاhooks.transformsDirرا حذف کنید.agentIdبه یک عامل مشخص مسیریابی میکند؛ شناسههای ناشناخته به پیشفرض برمیگردند.allowedAgentIds: مسیریابی صریح را محدود میکند (*یا حذفشده = اجازه به همه،[]= رد همه).defaultSessionKey: کلید نشست ثابت اختیاری برای اجرای عامل hook بدونsessionKeyصریح.allowRequestSessionKey: به فراخوانهای/hooks/agentو کلیدهای نشست نگاشتِ مبتنی بر قالب اجازه میدهدsessionKeyرا تنظیم کنند (پیشفرض:false).allowedSessionKeyPrefixes: فهرست مجاز اختیاری پیشوندها برای مقادیرsessionKeyصریح (درخواست + نگاشت)، مثلاً["hook:"]. وقتی هر نگاشت یا پیشتنظیمی ازsessionKeyقالببندیشده استفاده کند، این مورد الزامی میشود.deliver: trueپاسخ نهایی را به یک کانال میفرستد؛channelبهطور پیشفرضlastاست.modelبرای این اجرای hook، LLM را بازنویسی میکند (اگر کاتالوگ مدل تنظیم شده باشد باید مجاز باشد).
یکپارچهسازی Gmail
- پیشتنظیم داخلی Gmail از
sessionKey: "hook:gmail:{{messages[0].id}}"استفاده میکند. - اگر این مسیریابی بهازای هر پیام را نگه میدارید،
hooks.allowRequestSessionKey: trueرا تنظیم کنید وhooks.allowedSessionKeyPrefixesرا برای تطبیق با فضای نام Gmail محدود کنید، برای مثال["hook:", "hook:gmail:"]. - اگر به
hooks.allowRequestSessionKey: falseنیاز دارید، پیشتنظیم را بهجای پیشفرض قالببندیشده، با یکsessionKeyثابت بازنویسی کنید.
{
hooks: {
gmail: {
account: "[email protected]",
topic: "projects/<project-id>/topics/gog-gmail-watch",
subscription: "gog-gmail-watch-push",
pushToken: "shared-push-token",
hookUrl: "http://127.0.0.1:18789/hooks/gmail",
includeBody: true,
maxBytes: 20000,
renewEveryMinutes: 720,
serve: { bind: "127.0.0.1", port: 8788, path: "/" },
tailscale: { mode: "funnel", path: "/gmail-pubsub" },
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
thinking: "off",
},
},
}
- Gateway هنگام راهاندازی، اگر پیکربندی شده باشد،
gog gmail watch serveرا بهطور خودکار شروع میکند. برای غیرفعالسازی،OPENCLAW_SKIP_GMAIL_WATCHER=1را تنظیم کنید. - یک
gog gmail watch serveجداگانه را در کنار Gateway اجرا نکنید.
میزبان Canvas
{
canvasHost: {
root: "~/.openclaw/workspace/canvas",
liveReload: true,
// enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1
},
}
- HTML/CSS/JS قابلویرایش توسط عامل و A2UI را از طریق HTTP زیر درگاه Gateway ارائه میکند:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- فقط محلی:
gateway.bind: "loopback"را نگه دارید (پیشفرض). - اتصالهای غیر loopback: مسیرهای canvas مانند سایر سطوح HTTP Gateway به احراز هویت Gateway نیاز دارند (توکن/گذرواژه/trusted-proxy).
- WebViewهای Node معمولاً سرآیندهای احراز هویت ارسال نمیکنند؛ پس از جفتشدن و اتصال یک Node، Gateway نشانیهای URL قابلیتِ محدود به Node را برای دسترسی canvas/A2UI اعلام میکند.
- نشانیهای URL قابلیت به نشست فعال WS همان Node متصلاند و بهسرعت منقضی میشوند. fallback مبتنی بر IP استفاده نمیشود.
- کلاینت بارگذاری مجدد زنده را به HTML ارائهشده تزریق میکند.
- وقتی خالی باشد،
index.htmlآغازین را بهطور خودکار ایجاد میکند. - A2UI را نیز در
/__openclaw__/a2ui/ارائه میکند. - تغییرات به راهاندازی مجدد Gateway نیاز دارند.
- بارگذاری مجدد زنده را برای دایرکتوریهای بزرگ یا خطاهای
EMFILEغیرفعال کنید.
کشف
mDNS (Bonjour)
{
discovery: {
mdns: {
mode: "minimal", // minimal | full | off
},
},
}
minimal(پیشفرض وقتی Plugin بستهبندیشدهbonjourفعال باشد):cliPath+sshPortرا از رکوردهای TXT حذف میکند.full: شاملcliPath+sshPortمیشود؛ تبلیغ multicast در LAN همچنان مستلزم فعال بودن Plugin بستهبندیشدهbonjourاست.off: تبلیغ multicast در LAN را بدون تغییر فعالسازی Plugin سرکوب میکند.- Plugin بستهبندیشده
bonjourروی میزبانهای macOS بهطور خودکار شروع میشود و روی Linux، Windows و استقرارهای Gateway کانتینری اختیاری است. - نام میزبان وقتی یک برچسب DNS معتبر باشد، بهطور پیشفرض نام میزبان سیستم است و در غیر این صورت به
openclawبرمیگردد. باOPENCLAW_MDNS_HOSTNAMEبازنویسی کنید.
گستردهناحیه (DNS-SD)
{
discovery: {
wideArea: { enabled: true },
},
}
یک zone یکپخشی DNS-SD را زیر ~/.openclaw/dns/ مینویسد. برای کشف میانشبکهای، آن را با یک سرور DNS (CoreDNS توصیه میشود) + Tailscale split DNS همراه کنید.
راهاندازی: openclaw dns setup --apply.
محیط
env (متغیرهای env درونخطی)
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: {
GROQ_API_KEY: "gsk-...",
},
shellEnv: {
enabled: true,
timeoutMs: 15000,
},
},
}
- متغیرهای env درونخطی فقط زمانی اعمال میشوند که env فرایند فاقد آن کلید باشد.
- فایلهای
.env: فایل.envدر CWD +~/.openclaw/.env(هیچکدام متغیرهای موجود را بازنویسی نمیکنند). shellEnv: کلیدهای مورد انتظارِ موجودنبودن را از پروفایل پوسته ورود شما وارد میکند.- برای تقدم کامل، محیط را ببینید.
جایگزینی متغیر env
در هر رشته پیکربندی با ${VAR_NAME} به متغیرهای env ارجاع دهید:
{
gateway: {
auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
},
}
- فقط نامهای حروف بزرگ منطبق میشوند:
[A-Z_][A-Z0-9_]*. - متغیرهای موجودنبودن/خالی هنگام بارگذاری پیکربندی خطا ایجاد میکنند.
- برای مقدار لفظی
${VAR}با$${VAR}escape کنید. - با
$includeکار میکند.
رازها
ارجاعهای راز افزایشی هستند: مقادیر متن ساده همچنان کار میکنند.
SecretRef
از یک شکل شیء استفاده کنید:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
اعتبارسنجی:
- الگوی
provider:^[a-z][a-z0-9_-]{0,63}$ - الگوی شناسه
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - شناسه
source: "file": اشارهگر JSON مطلق (برای مثال"/providers/openai/apiKey") - الگوی شناسه
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$ - شناسههای
source: "exec"نباید بخشهای مسیرِ جداشده با اسلش شامل.یا..داشته باشند (برای مثالa/../bرد میشود)
سطح اعتبارنامه پشتیبانیشده
- ماتریس مرجع: سطح اعتبارنامه SecretRef
- هدفهای
secrets applyمسیرهای اعتبارنامه پشتیبانیشدهopenclaw.jsonهستند. - ارجاعهای
auth-profiles.jsonدر پوشش حلوفصل زمان اجرا و ممیزی گنجانده شدهاند.
پیکربندی ارائهدهندگان راز
{
secrets: {
providers: {
default: { source: "env" }, // optional explicit env provider
filemain: {
source: "file",
path: "~/.openclaw/secrets.json",
mode: "json",
timeoutMs: 5000,
},
vault: {
source: "exec",
command: "/usr/local/bin/openclaw-vault-resolver",
passEnv: ["PATH", "VAULT_ADDR"],
},
},
defaults: {
env: "default",
file: "filemain",
exec: "vault",
},
},
}
یادداشتها:
- ارائهدهنده
fileازmode: "json"وmode: "singleValue"پشتیبانی میکند (idدر حالت singleValue باید"value"باشد). - مسیرهای ارائهدهنده فایل و exec وقتی اعتبارسنجی ACL ویندوز در دسترس نباشد، بسته و ناموفق میشوند.
allowInsecurePath: trueرا فقط برای مسیرهای معتمدی تنظیم کنید که قابل اعتبارسنجی نیستند. - ارائهدهنده
execبه مسیر مطلقcommandنیاز دارد و از payloadهای پروتکل روی stdin/stdout استفاده میکند. - بهطور پیشفرض، مسیرهای دستور symlink رد میشوند. برای اجازهدادن به مسیرهای symlink هنگام اعتبارسنجی مسیر هدف حلشده،
allowSymlinkCommand: trueرا تنظیم کنید. - اگر
trustedDirsپیکربندی شده باشد، بررسی دایرکتوری معتمد روی مسیر هدف حلشده اعمال میشود. - محیط فرزند
execبهطور پیشفرض حداقلی است؛ متغیرهای لازم را صراحتا باpassEnvعبور دهید. - ارجاعهای راز هنگام فعالسازی به یک snapshot درونحافظهای حل میشوند، سپس مسیرهای درخواست فقط همان snapshot را میخوانند.
- فیلترکردن سطح فعال در طول فعالسازی اعمال میشود: ارجاعهای حلنشده روی سطحهای فعال راهاندازی/بارگذاری دوباره را ناموفق میکنند، در حالی که سطحهای غیرفعال با diagnostics نادیده گرفته میشوند.
ذخیرهسازی احراز هویت
{
auth: {
profiles: {
"anthropic:default": { provider: "anthropic", mode: "api_key" },
"anthropic:work": { provider: "anthropic", mode: "api_key" },
"openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
},
order: {
anthropic: ["anthropic:default", "anthropic:work"],
"openai-codex": ["openai-codex:personal"],
},
},
}
- پروفایلهای هر عامل در
<agentDir>/auth-profiles.jsonذخیره میشوند. auth-profiles.jsonاز ارجاعهای سطح مقدار (keyRefبرایapi_key، وtokenRefبرایtoken) برای حالتهای اعتبارنامه ایستا پشتیبانی میکند.- نگاشتهای تخت قدیمی
auth-profiles.jsonمانند{ "provider": { "apiKey": "..." } }قالب زمان اجرا نیستند؛openclaw doctor --fixآنها را با یک پشتیبان.legacy-flat.*.bakبه پروفایلهای کلید API مرجعprovider:defaultبازنویسی میکند. - پروفایلهای حالت OAuth (
auth.profiles.<id>.mode = "oauth") از اعتبارنامههای پروفایل احراز هویت مبتنی بر SecretRef پشتیبانی نمیکنند. - اعتبارنامههای زمان اجرای ایستا از snapshotهای حلشده درونحافظهای میآیند؛ ورودیهای قدیمی ایستای
auth.jsonهنگام کشف پاکسازی میشوند. - واردسازیهای قدیمی OAuth از
~/.openclaw/credentials/oauth.json. - OAuth را ببینید.
- رفتار زمان اجرای رازها و ابزارهای
audit/configure/apply: مدیریت رازها.
auth.cooldowns
{
auth: {
cooldowns: {
billingBackoffHours: 5,
billingBackoffHoursByProvider: { anthropic: 3, openai: 8 },
billingMaxHours: 24,
authPermanentBackoffMinutes: 10,
authPermanentMaxMinutes: 60,
failureWindowHours: 24,
overloadedProfileRotations: 1,
overloadedBackoffMs: 0,
rateLimitedProfileRotations: 1,
},
},
}
billingBackoffHours: تأخیر پایه به ساعت هنگامی که یک پروفایل به دلیل خطاهای واقعی صورتحساب/اعتبار ناکافی شکست میخورد (پیشفرض:5). متن صریح صورتحساب همچنان میتواند حتی در پاسخهای401/403اینجا قرار بگیرد، اما تطبیقدهندههای متن ویژه ارائهدهنده در محدوده همان ارائهدهندهای میمانند که مالک آنهاست (برای مثال OpenRouterKey limit exceeded). پیامهای HTTP402قابل تلاش دوباره مربوط به بازه مصرف یا سقف هزینه سازمان/فضای کاری در عوض در مسیرrate_limitمیمانند.billingBackoffHoursByProvider: بازنویسیهای اختیاری برای هر ارائهدهنده برای ساعتهای تأخیر صورتحساب.billingMaxHours: سقف به ساعت برای رشد نمایی تأخیر صورتحساب (پیشفرض:24).authPermanentBackoffMinutes: تأخیر پایه به دقیقه برای شکستهایauth_permanentبا اطمینان بالا (پیشفرض:10).authPermanentMaxMinutes: سقف به دقیقه برای رشد تأخیرauth_permanent(پیشفرض:60).failureWindowHours: پنجره چرخان به ساعت که برای شمارندههای تأخیر استفاده میشود (پیشفرض:24).overloadedProfileRotations: حداکثر چرخشهای پروفایل احراز هویت همان ارائهدهنده برای خطاهای بارگذاری بیش از حد، پیش از رفتن به جایگزین مدل (پیشفرض:1). شکلهای مشغول بودن ارائهدهنده مانندModelNotReadyExceptionاینجا قرار میگیرند.overloadedBackoffMs: تأخیر ثابت پیش از تلاش دوباره برای چرخش ارائهدهنده/پروفایل بارگذاریشده بیش از حد (پیشفرض:0).rateLimitedProfileRotations: حداکثر چرخشهای پروفایل احراز هویت همان ارائهدهنده برای خطاهای محدودیت نرخ، پیش از رفتن به جایگزین مدل (پیشفرض:1). آن سطل محدودیت نرخ شامل متنهای با شکل ارائهدهنده مانندToo many concurrent requests،ThrottlingException،concurrency limit reached،workers_ai ... quota limit exceeded، وresource exhaustedاست.
ثبت گزارش
{
logging: {
level: "info",
file: "/tmp/openclaw/openclaw.log",
consoleLevel: "info",
consoleStyle: "pretty", // pretty | compact | json
redactSensitive: "tools", // off | tools
redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"],
},
}
- فایل گزارش پیشفرض:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - برای یک مسیر پایدار،
logging.fileرا تنظیم کنید. - هنگام استفاده از
--verbose، مقدارconsoleLevelبهdebugافزایش مییابد. maxFileBytes: بیشینه اندازه فایل گزارش فعال به بایت پیش از چرخش (عدد صحیح مثبت؛ پیشفرض:104857600= 100 MB). OpenClaw تا پنج آرشیو شمارهدار را کنار فایل فعال نگه میدارد.redactSensitive/redactPatterns: پوشاندن با بهترین تلاش برای خروجی کنسول، گزارشهای فایل، رکوردهای گزارش OTLP، و متن رونوشت نشستهای پایدارشده.redactSensitive: "off"فقط این سیاست عمومی گزارش/رونوشت را غیرفعال میکند؛ سطحهای ایمنی UI/ابزار/تشخیصی همچنان پیش از انتشار، رازها را حذف میکنند.
تشخیصها
{
diagnostics: {
enabled: true,
flags: ["telegram.*"],
stuckSessionWarnMs: 30000,
stuckSessionAbortMs: 600000,
otel: {
enabled: false,
endpoint: "https://otel-collector.example.com:4318",
tracesEndpoint: "https://traces.example.com/v1/traces",
metricsEndpoint: "https://metrics.example.com/v1/metrics",
logsEndpoint: "https://logs.example.com/v1/logs",
protocol: "http/protobuf", // http/protobuf | grpc
headers: { "x-tenant-id": "my-org" },
serviceName: "openclaw-gateway",
traces: true,
metrics: true,
logs: false,
sampleRate: 1.0,
flushIntervalMs: 5000,
captureContent: {
enabled: false,
inputMessages: false,
outputMessages: false,
toolInputs: false,
toolOutputs: false,
systemPrompt: false,
},
},
cacheTrace: {
enabled: false,
filePath: "~/.openclaw/logs/cache-trace.jsonl",
includeMessages: true,
includePrompt: true,
includeSystem: true,
},
},
}
enabled: کلید اصلی برای خروجی ابزارسازی (پیشفرض:true).flags: آرایهای از رشتههای پرچم برای فعال کردن خروجی گزارش هدفمند (از wildcardهایی مانند"telegram.*"یا"*"پشتیبانی میکند).stuckSessionWarnMs: آستانه سن بدون پیشرفت به میلیثانیه برای طبقهبندی نشستهای پردازشی طولانیمدت بهعنوانsession.long_running،session.stalled، یاsession.stuck. پاسخ، ابزار، وضعیت، بلوک، و پیشرفت ACP زمانسنج را بازنشانی میکنند؛ تشخیصهای تکراریsession.stuckتا زمانی که بدون تغییر باشند با تأخیر بیشتر ارسال میشوند.stuckSessionAbortMs: آستانه سن بدون پیشرفت به میلیثانیه پیش از آنکه کار فعال متوقفشده واجد شرایط بتواند برای بازیابی با تخلیه لغو شود. وقتی تنظیم نشده باشد، OpenClaw از پنجره امنتر اجرای تعبیهشده گستردهشده، حداقل ۱۰ دقیقه و ۵ برابرstuckSessionWarnMs، استفاده میکند.otel.enabled: خط لوله خروجی OpenTelemetry را فعال میکند (پیشفرض:false). برای پیکربندی کامل، کاتالوگ سیگنال، و مدل حریم خصوصی، خروجی OpenTelemetry را ببینید.otel.endpoint: URL گردآورنده برای خروجی OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: نقاط پایانی اختیاری OTLP ویژه سیگنال. وقتی تنظیم شوند، فقط برای همان سیگنال،otel.endpointرا بازنویسی میکنند.otel.protocol:"http/protobuf"(پیشفرض) یا"grpc".otel.headers: سرآیندهای فراداده اضافی HTTP/gRPC که همراه با درخواستهای خروجی OTel ارسال میشوند.otel.serviceName: نام سرویس برای ویژگیهای منبع.otel.traces/otel.metrics/otel.logs: خروجی ردیابی، معیارها، یا گزارش را فعال میکند.otel.sampleRate: نرخ نمونهبرداری ردیابی0-1.otel.flushIntervalMs: فاصله تخلیه دورهای تلهمتری به میلیثانیه.otel.captureContent: دریافت اختیاری محتوای خام برای ویژگیهای span در OTEL. بهصورت پیشفرض خاموش است. مقدار بولیtrueمحتوای پیام/ابزار غیرسیستمی را دریافت میکند؛ شکل شیء به شما اجازه میدهدinputMessages،outputMessages،toolInputs،toolOutputs، وsystemPromptرا صریح فعال کنید.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: کلید محیطی برای تازهترین ویژگیهای آزمایشی ارائهدهنده span در GenAI. بهصورت پیشفرض spanها برای سازگاری ویژگی قدیمیgen_ai.systemرا نگه میدارند؛ معیارهای GenAI از ویژگیهای معنایی محدود استفاده میکنند.OPENCLAW_OTEL_PRELOADED=1: کلید محیطی برای میزبانهایی که از قبل یک SDK جهانی OpenTelemetry ثبت کردهاند. سپس OpenClaw راهاندازی/خاموشسازی SDK متعلق به Plugin را رد میکند، در حالی که شنوندههای تشخیصی را فعال نگه میدارد.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT،OTEL_EXPORTER_OTLP_METRICS_ENDPOINT، وOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: متغیرهای محیطی نقطه پایانی ویژه سیگنال که وقتی کلید پیکربندی متناظر تنظیم نشده باشد استفاده میشوند.cacheTrace.enabled: عکسهای فوری ردیابی کش را برای اجراهای تعبیهشده ثبت میکند (پیشفرض:false).cacheTrace.filePath: مسیر خروجی برای JSONL ردیابی کش (پیشفرض:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: کنترل میکند چه چیزی در خروجی ردیابی کش گنجانده شود (همه بهصورت پیشفرض:true).
بهروزرسانی
{
update: {
channel: "stable", // stable | beta | dev
checkOnStart: true,
auto: {
enabled: false,
stableDelayHours: 6,
stableJitterHours: 12,
betaCheckIntervalHours: 1,
},
},
}
channel: کانال انتشار برای نصبهای npm/git -"stable"،"beta"، یا"dev".checkOnStart: هنگام شروع Gateway، بهروزرسانیهای npm را بررسی میکند (پیشفرض:true).auto.enabled: بهروزرسانی خودکار پسزمینه را برای نصبهای بسته فعال میکند (پیشفرض:false).auto.stableDelayHours: حداقل تأخیر به ساعت پیش از اعمال خودکار کانال پایدار (پیشفرض:6؛ حداکثر:168).auto.stableJitterHours: پنجره پخش انتشار اضافی کانال پایدار به ساعت (پیشفرض:12؛ حداکثر:168).auto.betaCheckIntervalHours: هر چند ساعت یک بار بررسیهای کانال بتا اجرا شوند (پیشفرض:1؛ حداکثر:24).
ACP
{
acp: {
enabled: true,
dispatch: { enabled: true },
backend: "acpx",
defaultAgent: "main",
allowedAgents: ["main", "ops"],
maxConcurrentSessions: 10,
stream: {
coalesceIdleMs: 50,
maxChunkChars: 1000,
repeatSuppression: true,
deliveryMode: "live", // live | final_only
hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph
maxOutputChars: 50000,
maxSessionUpdateChars: 500,
},
runtime: {
ttlMinutes: 30,
},
},
}
enabled: دروازه سراسری قابلیت ACP (پیشفرض:true؛ برای پنهان کردن ارسال ACP و امکانات spawn مقدارfalseتنظیم کنید).dispatch.enabled: دروازه مستقل برای ارسال نوبت نشست ACP (پیشفرض:true). برای در دسترس نگه داشتن فرمانهای ACP همزمان با مسدود کردن اجرا، مقدارfalseتنظیم کنید.backend: شناسه پیشفرض backend زمان اجرای ACP (باید با یک Plugin زمان اجرای ACP ثبتشده مطابقت داشته باشد). ابتدا Plugin مربوط به backend را نصب کنید، و اگرplugins.allowتنظیم شده است، شناسه Plugin مربوط به backend را وارد کنید (برای مثالacpx) وگرنه backend مربوط به ACP بارگذاری نمیشود.defaultAgent: شناسه agent هدف ACP برای fallback وقتی spawnها هدف صریحی مشخص نمیکنند.allowedAgents: فهرست مجاز شناسههای agent که برای نشستهای زمان اجرای ACP مجاز هستند؛ خالی بودن یعنی محدودیت اضافی وجود ندارد.maxConcurrentSessions: حداکثر نشستهای ACP فعال همزمان.stream.coalesceIdleMs: پنجره تخلیه بیکار به میلیثانیه برای متن جریانی.stream.maxChunkChars: بیشینه اندازه قطعه پیش از شکستن تصویر بلوک جریانی.stream.repeatSuppression: خطهای وضعیت/ابزار تکراری را در هر نوبت سرکوب میکند (پیشفرض:true).stream.deliveryMode:"live"بهصورت افزایشی جریان میدهد؛"final_only"تا رویدادهای پایانی نوبت buffer میکند.stream.hiddenBoundarySeparator: جداکننده پیش از متن قابل مشاهده پس از رویدادهای ابزار پنهان (پیشفرض:"paragraph").stream.maxOutputChars: بیشینه نویسههای خروجی دستیار که در هر نوبت ACP تصویر میشوند.stream.maxSessionUpdateChars: بیشینه نویسهها برای خطهای وضعیت/بهروزرسانی ACP تصویرشده.stream.tagVisibility: رکوردی از نامهای tag به بازنویسیهای دیدپذیری بولی برای رویدادهای جریانی.runtime.ttlMinutes: TTL بیکار به دقیقه برای workerهای نشست ACP پیش از پاکسازی واجد شرایط.runtime.installCommand: فرمان نصب اختیاری که هنگام راهاندازی اولیه محیط زمان اجرای ACP اجرا میشود.
CLI
{
cli: {
banner: {
taglineMode: "off", // random | default | off
},
},
}
cli.banner.taglineModeسبک tagline بنر را کنترل میکند:"random"(پیشفرض): taglineهای چرخشی طنز/فصلی."default": tagline ثابت و خنثی (All your chats, one OpenClaw.)."off": بدون متن tagline (عنوان/نسخه بنر همچنان نمایش داده میشود).
- برای پنهان کردن کل بنر (نه فقط taglineها)، متغیر محیطی
OPENCLAW_HIDE_BANNER=1را تنظیم کنید.
جادوگر
فرادادهای که توسط جریانهای راهاندازی هدایتشده CLI (onboard، configure، doctor) نوشته میشود:
{
wizard: {
lastRunAt: "2026-01-01T00:00:00.000Z",
lastRunVersion: "2026.1.4",
lastRunCommit: "abc1234",
lastRunCommand: "configure",
lastRunMode: "local",
},
}
هویت
فیلدهای هویت agents.list را زیر پیشفرضهای agent ببینید.
Bridge (قدیمی، حذفشده)
ساختهای فعلی دیگر شامل bridge مربوط به TCP نیستند. Nodeها از طریق WebSocket مربوط به Gateway متصل میشوند. کلیدهای bridge.* دیگر بخشی از طرحواره پیکربندی نیستند (اعتبارسنجی تا زمان حذف آنها شکست میخورد؛ openclaw doctor --fix میتواند کلیدهای ناشناخته را حذف کند).
پیکربندی bridge قدیمی (مرجع تاریخی)
{
"bridge": {
"enabled": true,
"port": 18790,
"bind": "tailnet",
"tls": {
"enabled": true,
"autoGenerate": true
}
}
}
Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs
webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth
sessionRetention: "24h", // duration string or false
runLog: {
maxBytes: "2mb", // default 2_000_000 bytes
keepLines: 2000, // default 2000
},
},
}
sessionRetention: مدت نگهداری نشستهای اجرای Cron جداشدهی تکمیلشده پیش از پاکسازی ازsessions.json. همچنین پاکسازی رونوشتهای Cron حذفشدهی بایگانیشده را کنترل میکند. پیشفرض:24h؛ برای غیرفعالسازی رویfalseتنظیم کنید.runLog.maxBytes: حداکثر اندازه برای هر فایل گزارش اجرا (cron/runs/<jobId>.jsonl) پیش از پاکسازی. پیشفرض:2_000_000بایت.runLog.keepLines: تازهترین خطهایی که هنگام فعال شدن پاکسازی گزارش اجرا حفظ میشوند. پیشفرض:2000.webhookToken: توکن bearer که برای تحویل POST وبهوک Cron (delivery.mode = "webhook") استفاده میشود؛ اگر حذف شود، هیچ هدر احراز هویتی ارسال نمیشود.webhook: URL وبهوک بازگشتی قدیمی و منسوخشده (http/https) که فقط برای کارهای ذخیرهشدهای استفاده میشود که هنوزnotify: trueدارند.
cron.retry
{
cron: {
retry: {
maxAttempts: 3,
backoffMs: [30000, 60000, 300000],
retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"],
},
},
}
maxAttempts: حداکثر تلاشهای دوباره برای کارهای یکباره در خطاهای گذرا (پیشفرض:3؛ بازه:0-10).backoffMs: آرایهای از تأخیرهای backoff بر حسب میلیثانیه برای هر تلاش دوباره (پیشفرض:[30000, 60000, 300000]؛ ۱ تا ۱۰ ورودی).retryOn: نوع خطاهایی که تلاش دوباره را فعال میکنند -"rate_limit"،"overloaded"،"network"،"timeout"،"server_error". برای تلاش دوباره روی همهی انواع گذرا، آن را حذف کنید.
فقط برای کارهای Cron یکباره اعمال میشود. کارهای تکرارشونده از مدیریت شکست جداگانه استفاده میکنند.
cron.failureAlert
{
cron: {
failureAlert: {
enabled: false,
after: 3,
cooldownMs: 3600000,
includeSkipped: false,
mode: "announce",
accountId: "main",
},
},
}
enabled: هشدارهای شکست را برای کارهای Cron فعال میکند (پیشفرض:false).after: تعداد شکستهای پیاپی پیش از ارسال هشدار (عدد صحیح مثبت، حداقل:1).cooldownMs: حداقل میلیثانیه بین هشدارهای تکراری برای یک کار یکسان (عدد صحیح نامنفی).includeSkipped: اجراهای ردشدهی پیاپی را در آستانهی هشدار حساب میکند (پیشفرض:false). اجراهای ردشده جداگانه ردیابی میشوند و روی backoff خطای اجرا اثر نمیگذارند.mode: حالت تحویل -"announce"از طریق پیام کانال ارسال میکند؛"webhook"به وبهوک پیکربندیشده پست میکند.accountId: شناسهی اختیاری حساب یا کانال برای محدود کردن دامنهی تحویل هشدار.
cron.failureDestination
{
cron: {
failureDestination: {
mode: "announce",
channel: "last",
to: "channel:C1234567890",
accountId: "main",
},
},
}
- مقصد پیشفرض برای اعلانهای شکست Cron در همهی کارها.
mode:"announce"یا"webhook"؛ وقتی دادهی کافی برای هدف وجود داشته باشد، پیشفرض"announce"است.channel: بازنویسی کانال برای تحویل اعلام."last"از آخرین کانال تحویل شناختهشده دوباره استفاده میکند.to: هدف اعلام صریح یا URL وبهوک. برای حالت وبهوک الزامی است.accountId: بازنویسی اختیاری حساب برای تحویل.delivery.failureDestinationدر سطح هر کار، این پیشفرض سراسری را بازنویسی میکند.- وقتی نه مقصد شکست سراسری و نه مقصد شکست در سطح کار تنظیم نشده باشد، کارهایی که از قبل از طریق
announceتحویل میشوند، هنگام شکست به همان هدف اصلی اعلام بازمیگردند. delivery.failureDestinationفقط برای کارهایsessionTarget="isolated"پشتیبانی میشود، مگر اینکهdelivery.modeاصلی کار"webhook"باشد.
کارهای Cron را ببینید. اجراهای Cron جداشده بهعنوان کارهای پسزمینه ردیابی میشوند.
متغیرهای قالب مدل رسانه
جاینگهدارهای قالب که در tools.media.models[].args گسترش مییابند:
| متغیر | توضیح |
|---|---|
{{Body}} |
بدنهی کامل پیام ورودی |
{{RawBody}} |
بدنهی خام (بدون پوششهای تاریخچه/فرستنده) |
{{BodyStripped}} |
بدنه با حذف mentionهای گروه |
{{From}} |
شناسهی فرستنده |
{{To}} |
شناسهی مقصد |
{{MessageSid}} |
شناسهی پیام کانال |
{{SessionId}} |
UUID نشست فعلی |
{{IsNewSession}} |
"true" وقتی نشست جدید ایجاد شده باشد |
{{MediaUrl}} |
شبه-URL رسانهی ورودی |
{{MediaPath}} |
مسیر رسانهی محلی |
{{MediaType}} |
نوع رسانه (تصویر/صدا/سند/…) |
{{Transcript}} |
رونوشت صوتی |
{{Prompt}} |
پرامپت رسانهی حلشده برای ورودیهای CLI |
{{MaxChars}} |
حداکثر نویسههای خروجی حلشده برای ورودیهای CLI |
{{ChatType}} |
"direct" یا "group" |
{{GroupSubject}} |
موضوع گروه (در حد امکان) |
{{GroupMembers}} |
پیشنمایش اعضای گروه (در حد امکان) |
{{SenderName}} |
نام نمایشی فرستنده (در حد امکان) |
{{SenderE164}} |
شماره تلفن فرستنده (در حد امکان) |
{{Provider}} |
راهنمای provider (whatsapp، telegram، discord و غیره) |
includeهای پیکربندی ($include)
پیکربندی را به چند فایل تقسیم کنید:
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
},
}
رفتار ادغام:
- فایل تکی: شیء دربرگیرنده را جایگزین میکند.
- آرایهای از فایلها: بهترتیب بهصورت عمیق ادغام میشوند (موردهای بعدی موردهای قبلی را بازنویسی میکنند).
- کلیدهای همسطح: پس از includeها ادغام میشوند (مقدارهای includeشده را بازنویسی میکنند).
- includeهای تودرتو: تا ۱۰ سطح عمق.
- مسیرها: نسبت به فایل includeکننده resolve میشوند، اما باید داخل دایرکتوری پیکربندی سطح بالا (
dirnameازopenclaw.json) باقی بمانند. فرمهای مطلق/../فقط وقتی مجازند که همچنان داخل آن مرز resolve شوند. - نوشتنهای متعلق به OpenClaw که فقط یک بخش سطح بالای متکی به include تکفایل را تغییر میدهند، مستقیماً در همان فایل includeشده نوشته میشوند. برای مثال،
plugins installمقدارplugins: { $include: "./plugins.json5" }را درplugins.json5بهروزرسانی میکند وopenclaw.jsonرا دستنخورده باقی میگذارد. - includeهای ریشه، آرایههای include، و includeهایی با بازنویسی همسطح برای نوشتنهای متعلق به OpenClaw فقط خواندنی هستند؛ این نوشتنها بهجای مسطح کردن پیکربندی، بهصورت بسته شکست میخورند.
- خطاها: پیامهای روشن برای فایلهای گمشده، خطاهای parse، و includeهای چرخهای.
مرتبط: پیکربندی · نمونههای پیکربندی · Doctor