Gateway
مرجع پیکربندی
مرجع پیکربندی هسته برای ~/.openclaw/openclaw.json. برای نمای کلی وظیفهمحور، پیکربندی را ببینید.
سطوح اصلی پیکربندی OpenClaw را پوشش میدهد و وقتی یک زیرسیستم مرجع عمیقتری برای خودش دارد، به آن پیوند میدهد. کاتالوگهای دستور متعلق به کانال و plugin و تنظیمات عمیق حافظه/QMD در صفحههای خودشان قرار دارند، نه در این صفحه.
حقیقت کد:
openclaw config schemaJSON Schema زندهای را چاپ میکند که برای اعتبارسنجی و Control UI استفاده میشود، و در صورت موجود بودن، فراداده bundled/plugin/channel در آن ادغام میشودconfig.schema.lookupیک گره schema محدود به مسیر را برای ابزارهای بررسی عمیق برمیگرداندpnpm config:docs:check/pnpm config:docs:genهش مبنای مستندات پیکربندی را در برابر سطح schema فعلی اعتبارسنجی میکنند
مسیر جستوجوی agent: پیش از ویرایش، برای مستندات و محدودیتهای دقیق در سطح فیلد از کنش ابزار gateway یعنی config.schema.lookup استفاده کنید. برای راهنمایی وظیفهمحور از پیکربندی و برای نقشه گستردهتر فیلدها، پیشفرضها و پیوندها به مراجع زیرسیستمها از این صفحه استفاده کنید.
مراجع عمیق اختصاصی:
- مرجع پیکربندی حافظه برای
agents.defaults.memorySearch.*،memory.qmd.*،memory.citations، و پیکربندی dreaming زیرplugins.entries.memory-core.config.dreaming - دستورهای اسلش برای کاتالوگ دستور فعلیِ داخلی + bundled
- صفحههای کانال/plugin مالک برای سطوح دستور ویژه کانال
قالب پیکربندی JSON5 است (کامنتها + ویرگولهای پایانی مجازند). همه فیلدها اختیاریاند - OpenClaw وقتی فیلدی حذف شود از پیشفرضهای امن استفاده میکند.
کانالها
کلیدهای پیکربندی هر کانال به صفحهای اختصاصی منتقل شدهاند - برای channels.*، از جمله Slack، Discord، Telegram، WhatsApp، Matrix، iMessage و دیگر کانالهای bundled (احراز هویت، کنترل دسترسی، چندحسابی، gating اشاره)، پیکربندی - کانالها را ببینید.
پیشفرضهای agent، چند-agent، نشستها و پیامها
به صفحهای اختصاصی منتقل شده است - برای موارد زیر پیکربندی - agentها را ببینید:
agents.defaults.*(workspace، مدل، thinking، heartbeat، حافظه، رسانه، skills، sandbox)multiAgent.*(مسیریابی و bindingهای چند-agent)session.*(چرخه عمر نشست، compaction، هرس)messages.*(تحویل پیام، TTS، رندر markdown)talk.*(حالت Talk)talk.consultThinkingLevel: بازنویسی سطح thinking برای کل اجرای agent در OpenClaw پشت realtime consultهای Control UI Talktalk.consultFastMode: بازنویسی یکباره حالت سریع برای realtime consultهای Control UI Talktalk.speechLocale: شناسه locale اختیاری BCP 47 برای تشخیص گفتار Talk روی iOS/macOStalk.silenceTimeoutMs: وقتی تنظیم نشده باشد، Talk پنجره مکث پیشفرض پلتفرم را پیش از ارسال transcript نگه میدارد (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: fallback رله Gateway برای transcriptهای realtime نهاییشده Talk کهopenclaw_agent_consultرا رد میکنند
ابزارها و providerهای سفارشی
سیاست ابزار، toggleهای آزمایشی، پیکربندی ابزار پشتیبانیشده توسط provider، و راهاندازی provider / base-URL سفارشی به صفحهای اختصاصی منتقل شدهاند - پیکربندی - ابزارها و providerهای سفارشی را ببینید.
مدلها
تعریفهای provider، allowlistهای مدل، و راهاندازی provider سفارشی در پیکربندی - ابزارها و providerهای سفارشی قرار دارند.
ریشه models همچنین مالک رفتار سراسری کاتالوگ مدل است.
{ models: { // Optional. Default: true. Requires a Gateway restart when changed. pricing: { enabled: false }, },}models.mode: رفتار کاتالوگ provider (mergeیاreplace).models.providers: نگاشت provider سفارشی که با شناسه provider کلیدگذاری شده است.models.providers.*.localService: مدیر فرایند اختیاریِ هنگام نیاز برای سرورهای مدل محلی. OpenClaw endpoint سلامت پیکربندیشده را probe میکند، در صورت نیازcommandمطلق را شروع میکند، منتظر آمادگی میماند، سپس درخواست مدل را میفرستد. سرویسهای مدل محلی را ببینید.models.pricing.enabled: bootstrap قیمتگذاری پسزمینه را کنترل میکند که پس از رسیدن sidecarها و کانالها به مسیر آماده Gateway شروع میشود. وقتیfalseباشد، Gateway دریافت کاتالوگ قیمتگذاری OpenRouter و LiteLLM را رد میکند؛ مقادیر پیکربندیشدهmodels.providers.*.models[].costهمچنان برای برآورد هزینه محلی کار میکنند.
MCP
تعریفهای سرور MCP مدیریتشده توسط OpenClaw زیر mcp.servers قرار دارند و توسط OpenClaw جاسازیشده و adapterهای runtime دیگر مصرف میشوند. دستورهای 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 timeout: 20, connectTimeout: 5, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // Optional Codex app-server projection controls. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: تعریفهای نامدار سرور stdio یا remote MCP برای runtimeهایی که ابزارهای MCP پیکربندیشده را ارائه میکنند. ورودیهای remote ازtransport: "streamable-http"یاtransport: "sse"استفاده میکنند؛type: "http"یک alias بومی CLI است کهopenclaw mcp setوopenclaw doctor --fixآن را به فیلد canonicaltransportنرمالسازی میکنند.mcp.servers.<name>.enabled: رویfalseتنظیم کنید تا یک تعریف سرور ذخیرهشده را نگه دارید، در حالی که آن را از کشف MCP جاسازیشده OpenClaw و projection ابزار کنار میگذارید.mcp.servers.<name>.timeout/requestTimeoutMs: timeout درخواست MCP برای هر سرور، بر حسب ثانیه یا میلیثانیه.mcp.servers.<name>.connectTimeout/connectionTimeoutMs: timeout اتصال برای هر سرور، بر حسب ثانیه یا میلیثانیه.mcp.servers.<name>.supportsParallelToolCalls: راهنمای اختیاری همزمانی برای adapterهایی که میتوانند انتخاب کنند آیا فراخوانیهای ابزار MCP موازی صادر کنند یا نه.mcp.servers.<name>.auth: برای سرورهای HTTP MCP که به OAuth نیاز دارند، روی"oauth"تنظیم کنید. برای ذخیره tokenها زیر state OpenClaw،openclaw mcp login <name>را اجرا کنید.mcp.servers.<name>.oauth: بازنویسیهای اختیاری scope OAuth، URL redirect و URL فراداده client.mcp.servers.<name>.sslVerify،clientCert،clientKey: کنترلهای HTTP TLS برای endpointهای خصوصی و mutual TLS.mcp.servers.<name>.toolFilter: انتخاب اختیاری ابزار برای هر سرور.includeابزارهای MCP کشفشده را به نامهای مطابق محدود میکند؛excludeنامهای مطابق را پنهان میکند. ورودیها نام دقیق ابزار MCP یا globهای ساده*هستند. سرورهایی که resource یا prompt دارند همچنین نام ابزارهای utility تولید میکنند (resources_list،resources_read،prompts_list،prompts_get) و آن نامها از همان فیلتر استفاده میکنند.mcp.servers.<name>.codex: کنترلهای اختیاری projection برای app-server در Codex. این بلوک فقط برای threadهای app-server در Codex، فراداده OpenClaw است؛ روی نشستهای ACP، پیکربندی عمومی harness در Codex، یا adapterهای runtime دیگر اثر نمیگذارد.codex.agentsغیرخالی سرور را به شناسههای agent فهرستشده OpenClaw محدود میکند. فهرستهای agent محدودشده که خالی، blank یا نامعتبر باشند توسط اعتبارسنجی پیکربندی رد میشوند و مسیر projection runtime آنها را حذف میکند، نه اینکه جهانی شوند.codex.defaultToolsApprovalModeمقدار native Codex یعنیdefault_tools_approval_modeرا برای آن سرور emit میکند. OpenClaw پیش از ارسال پیکربندی nativemcp_serversبه Codex، بلوکcodexرا حذف میکند. برای اینکه سرور برای هر agent app-server در Codex با رفتار پیشفرض تأیید MCP در Codex project شود، این بلوک را حذف کنید.mcp.sessionIdleTtlMs: TTL بیکاری برای runtimeهای MCP bundled محدود به نشست. اجراهای جاسازیشده یکباره پاکسازی پایان اجرا را درخواست میکنند؛ این TTL پشتیبان نشستهای طولانیمدت و callerهای آینده است.- تغییرات زیر
mcp.*با dispose کردن runtimeهای MCP نشست cacheشده بهصورت hot-apply اعمال میشوند. کشف/استفاده بعدی از ابزار آنها را از پیکربندی جدید دوباره میسازد، بنابراین ورودیهای حذفشدهmcp.serversبهجای انتظار برای TTL بیکاری، فوراً جمعآوری میشوند. - کشف runtime همچنین با حذف کاتالوگ cacheشده برای آن نشست، اعلانهای تغییر فهرست ابزار MCP را رعایت میکند. سرورهایی که resource یا prompt اعلام میکنند ابزارهای utility برای فهرستکردن/خواندن resourceها و فهرستکردن/دریافت promptها میگیرند. شکستهای تکراری فراخوانی ابزار، سرور متأثر را برای مدت کوتاهی مکث میدهند پیش از آنکه فراخوانی دیگری تلاش شود.
برای رفتار runtime، MCP و backendهای CLI را ببینید.
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, 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 مدیریتشده/workspace بیتأثیرند).load.extraDirs: ریشههای skill مشترک اضافی (پایینترین اولویت).load.allowSymlinkTargets: ریشههای target واقعی و مورد اعتماد که symlinkهای skill میتوانند وقتی link بیرون از ریشه source پیکربندیشدهاش قرار دارد به آنها resolve شوند.workshop.allowSymlinkTargetWrites: به Skill Workshop apply اجازه میدهد از طریق targetهای symlink از پیش مورد اعتماد بنویسد (پیشفرض: false).install.preferBrew: وقتی true باشد، در صورت در دسترس بودنbrew، پیش از fallback به انواع installer دیگر، installerهای Homebrew را ترجیح میدهد.install.nodeManager: ترجیح installer مربوط به node برای specهایmetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: به clientهای Gateway مورد اعتمادoperator.adminاجازه میدهد archiveهای zip خصوصیِ stageشده از طریقskills.upload.*را نصب کنند (پیشفرض: false). این فقط مسیر archive آپلودشده را فعال میکند؛ نصبهای عادی ClawHub به آن نیاز ندارند.entries.<skillKey>.enabled: falseیک skill را حتی اگر bundled/installed باشد غیرفعال میکند.entries.<skillKey>.apiKey: میانبری برای skills که یک env var اصلی اعلام میکنند (رشته plaintext یا شیء SecretRef).
Plugins
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}- از دایرکتوریهای package یا bundle زیر
~/.openclaw/extensionsو<workspace>/.openclaw/extensions، بهعلاوه فایلها یا دایرکتوریهای فهرستشده درplugins.load.pathsبارگذاری میشود. - فایلهای Plugin مستقل را در
plugins.load.pathsقرار دهید؛ ریشههای extension که بهصورت خودکار کشف میشوند، فایلهای سطح بالای.js،.mjsو.tsرا نادیده میگیرند تا اسکریپتهای کمکی در آن ریشهها مانع راهاندازی نشوند. - کشف، Pluginهای بومی OpenClaw بهعلاوه bundleهای سازگار Codex و bundleهای Claude را میپذیرد، از جمله bundleهای چیدمان پیشفرض Claude بدون manifest.
- تغییرات پیکربندی به راهاندازی دوباره gateway نیاز دارند.
allow: allowlist اختیاری (فقط Pluginهای فهرستشده بارگذاری میشوند).denyبرنده است.plugins.entries.<id>.apiKey: فیلد راحتی کلید API در سطح Plugin (وقتی Plugin پشتیبانی کند).plugins.entries.<id>.env: نگاشت متغیر محیطی scoped به Plugin.plugins.entries.<id>.hooks.allowPromptInjection: وقتیfalseباشد، هستهbefore_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>.llm.allowModelOverride: بهصراحت به این Plugin اعتماد کنید تا برایapi.runtime.llm.completeدرخواست override مدل کند.plugins.entries.<id>.llm.allowedModels: allowlist اختیاری از هدفهای canonicalprovider/modelبرای overrideهای تکمیل LLM مورد اعتماد Plugin. فقط وقتی از"*"استفاده کنید که عمداً میخواهید هر مدلی را مجاز کنید.plugins.entries.<id>.llm.allowAgentIdOverride: بهصراحت به این Plugin اعتماد کنید تاapi.runtime.llm.completeرا روی یک شناسه agent غیرپیشفرض اجرا کند.plugins.entries.<id>.config: شیء پیکربندی تعریفشده توسط Plugin (در صورت وجود، با schema Plugin بومی OpenClaw اعتبارسنجی میشود).- تنظیمات حساب/زماناجرای Plugin کانال زیر
channels.<id>قرار میگیرند و باید توسط metadata متعلق به manifestchannelConfigsهمان Plugin توصیف شوند، نه توسط یک registry مرکزی گزینههای OpenClaw.
پیکربندی Plugin harness Codex
Plugin bundled به نام codex مالک تنظیمات بومی harness app-server Codex زیر
plugins.entries.codex.config است. برای سطح کامل پیکربندی، مرجع harness Codex و برای مدل زماناجرا harness Codex را ببینید.
codexPlugins فقط برای sessionهایی اعمال میشود که harness بومی Codex را انتخاب میکنند.
این گزینه Pluginهای Codex را برای اجراهای provider OpenClaw، bindingهای مکالمه ACP
یا هر harness غیر-Codex فعال نمیکند.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_destructive_actions: true, plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: پشتیبانی بومی Plugin/app را برای harness Codex فعال میکند. پیشفرض:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: سیاست پیشفرض اقدامهای destructive برای elicitations اپلیکیشن Plugin مهاجرتدادهشده. ازtrueبرای پذیرش schemaهای امن تأیید Codex بدون prompt، ازfalseبرای رد آنها، از"auto"برای مسیریابی تأییدهای موردنیاز Codex از طریق تأییدهای Plugin OpenClaw، یا از"ask"برای prompt گرفتن برای هر اقدام نوشتنی/destructive Plugin بدون تأیید پایدار استفاده کنید. حالت"ask"، overrideهای پایدار تأیید Codex در سطح هر ابزار را برای اپلیکیشن تحتتأثیر پاک میکند و پیش از شروع thread Codex، بازبین تأییدهای انسانی را برای آن اپلیکیشن انتخاب میکند. پیشفرض:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: وقتیcodexPlugins.enabledسراسری نیز true باشد، یک entry مهاجرتدادهشده Plugin را فعال میکند. پیشفرض:trueبرای entryهای صریح.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: هویت پایدار marketplace. V1 فقط از"openai-curated"پشتیبانی میکند.plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: هویت پایدار Plugin Codex از مهاجرت، برای مثال"google-calendar".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: override اقدام destructive در سطح هر Plugin. وقتی حذف شود، مقدار سراسریallow_destructive_actionsاستفاده میشود. مقدار در سطح هر Plugin همان سیاستهایtrue،false،"auto"یا"ask"را میپذیرد.
هر اپلیکیشن Plugin پذیرفتهشده که از "ask" استفاده میکند، درخواستهای تأیید همان اپلیکیشن
را به بازبین انسانی مسیریابی میکند. اپلیکیشنهای دیگر و تأییدهای thread غیر-app بازبین
پیکربندیشده خود را حفظ میکنند، بنابراین سیاستهای ترکیبی Plugin رفتار "ask" را به ارث نمیبرند.
codexPlugins.enabled دستور فعالسازی سراسری است. entryهای صریح Plugin که توسط مهاجرت
نوشته میشوند، مجموعه پایدار واجدشرایط نصب و تعمیر هستند. plugins["*"] پشتیبانی نمیشود،
switch با نام install وجود ندارد، و مقادیر محلی marketplacePath عمداً فیلدهای پیکربندی
نیستند چون به host وابستهاند.
بررسیهای آمادگی app/list برای یک ساعت cache میشوند و وقتی stale باشند بهصورت async
refresh میشوند. پیکربندی اپلیکیشن thread Codex هنگام برقراری session harness Codex محاسبه
میشود، نه در هر نوبت؛ پس از تغییر پیکربندی Plugin بومی از /new، /reset یا راهاندازی دوباره
gateway استفاده کنید.
plugins.entries.firecrawl.config.webFetch: تنظیمات provider واکشی وب Firecrawl.apiKey: کلید API اختیاری Firecrawl برای محدودیتهای بالاتر (SecretRef را میپذیرد). بهplugins.entries.firecrawl.config.webSearch.apiKey، کلید قدیمیtools.web.fetch.firecrawl.apiKeyیا متغیر محیطیFIRECRAWL_API_KEYبرمیگردد.baseUrl: URL پایه API Firecrawl (پیشفرض:https://api.firecrawl.dev؛ overrideهای self-hosted باید endpointهای private/internal را هدف بگیرند).onlyMainContent: فقط محتوای اصلی را از صفحهها استخراج میکند (پیشفرض:true).maxAgeMs: بیشینه سن cache بر حسب میلیثانیه (پیشفرض:172800000/ ۲ روز).timeoutSeconds: مهلت زمانی درخواست scrape بر حسب ثانیه (پیشفرض:60).
plugins.entries.xai.config.xSearch: تنظیمات جستوجوی X در xAI (جستوجوی وب Grok).enabled: provider جستوجوی X را فعال میکند.model: مدل Grok برای استفاده در جستوجو (مثلاً"grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: تنظیمات Dreaming حافظه. برای phaseها و آستانهها Dreaming را ببینید.enabled: switch اصلی Dreaming (پیشفرضfalse).frequency: cadence مربوط به cron برای هر sweep کامل Dreaming (بهصورت پیشفرض"0 3 * * *").model: override اختیاری مدل subagent با نام Dream Diary. بهplugins.entries.memory-core.subagent.allowModelOverride: trueنیاز دارد؛ برای محدود کردن هدفها باallowedModelsجفت کنید. خطاهای unavailable بودن مدل یک بار با مدل پیشفرض session دوباره تلاش میشوند؛ خطاهای اعتماد یا allowlist بهصورت silent fallback نمیکنند.- سیاست phase و آستانهها جزئیات پیادهسازی هستند (کلیدهای پیکربندی user-facing نیستند).
- پیکربندی کامل حافظه در مرجع پیکربندی حافظه قرار دارد:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Pluginهای bundle فعال Claude نیز میتوانند defaultهای embedded OpenClaw را از
settings.jsonاضافه کنند؛ OpenClaw آنها را بهعنوان تنظیمات sanitized agent اعمال میکند، نه بهعنوان patchهای خام پیکربندی OpenClaw. plugins.slots.memory: شناسه Plugin حافظه فعال را انتخاب کنید، یا برای غیرفعال کردن Pluginهای حافظه"none"را انتخاب کنید.plugins.slots.contextEngine: شناسه Plugin موتور context فعال را انتخاب کنید؛ پیشفرض"legacy"است مگر اینکه موتور دیگری را نصب و انتخاب کنید.
Pluginها را ببینید.
تعهدها
commitments حافظه follow-up استنتاجشده را کنترل میکند: OpenClaw میتواند check-inها را از نوبتهای مکالمه تشخیص دهد و آنها را از طریق اجراهای Heartbeat تحویل دهد.
commitments.enabled: استخراج پنهان LLM، ذخیرهسازی و تحویل Heartbeat را برای تعهدهای follow-up استنتاجشده فعال میکند. پیشفرض:false.commitments.maxPerDay: بیشینه تعهدهای follow-up استنتاجشده که در یک روز rolling برای هر session agent تحویل داده میشوند. پیشفرض: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برای استثناهای صریح استفاده کنید. - پروفایلهای راهدور فقط قابل اتصال هستند؛
start/stop/resetغیرفعال است. profiles.*.cdpUrlمقدارهایhttp://،https://،ws://وwss://را میپذیرد. وقتی میخواهید OpenClaw مسیر/json/versionرا کشف کند از HTTP(S) استفاده کنید؛ وقتی ارائهدهندهی شما یک URL مستقیم DevTools WebSocket میدهد از WS(S) استفاده کنید.remoteCdpTimeoutMsوremoteCdpHandshakeTimeoutMsبرای دسترسیپذیری CDP راهدور وattachOnly، بهعلاوهی درخواستهای باز کردن تب اعمال میشوند. پروفایلهای loopback مدیریتشده مقدارهای پیشفرض CDP محلی را نگه میدارند.- اگر یک سرویس CDP که بیرون از OpenClaw مدیریت میشود از طریق loopback در دسترس است،
برای آن پروفایل
attachOnly: trueرا تنظیم کنید؛ در غیر این صورت OpenClaw پورت loopback را بهعنوان یک پروفایل مرورگر مدیریتشدهی محلی در نظر میگیرد و ممکن است خطاهای مالکیت پورت محلی گزارش کند. - پروفایلهای
existing-sessionبهجای CDP از Chrome MCP استفاده میکنند و میتوانند روی میزبان انتخابشده یا از طریق یک گرهی مرورگر متصل، متصل شوند. - پروفایلهای
existing-sessionمیتوانندuserDataDirرا برای هدفگیری یک پروفایل مرورگر مبتنی بر Chromium مشخص، مانند Brave یا Edge، تنظیم کنند. - پروفایلهای
existing-sessionوقتی Chrome از قبل پشت یک نقطهی پایانی کشف HTTP(S) مربوط به DevTools یا یک نقطهی پایانی مستقیم WS(S) در حال اجراست، میتوانندcdpUrlرا تنظیم کنند. در آن حالت، OpenClaw بهجای استفاده از اتصال خودکار، نقطهی پایانی را به Chrome MCP میدهد؛userDataDirبرای آرگومانهای راهاندازی Chrome MCP نادیده گرفته میشود. - پروفایلهای
existing-sessionمحدودیتهای فعلی مسیر Chrome MCP را نگه میدارند: کنشهای مبتنی بر snapshot/ref بهجای هدفگیری انتخابگر CSS، hookهای بارگذاری یکفایلی، بدون بازنویسی مهلت زمانی دیالوگ، بدونwait --load networkidle، و بدونresponsebody، خروجی PDF، رهگیری دانلود، یا کنشهای دستهای. - پروفایلهای مدیریتشدهی محلی
openclawمقدارهایcdpPortوcdpUrlرا خودکار تخصیص میدهند؛cdpUrlرا فقط برای پروفایلهای CDP راهدور یا اتصال نقطهی پایانی existing-session بهصورت صریح تنظیم کنید. - پروفایلهای مدیریتشدهی محلی میتوانند
executablePathرا برای بازنویسیbrowser.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: رنگ تأکیدی برای chrome رابط کاربری برنامهی بومی (رنگ حباب حالت Talk و غیره).assistant: بازنویسی هویت Control UI. در صورت نبود، به هویت عامل فعال برمیگردد.
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://127.0.0.1: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 for owner/admin callers 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 قدیمی: از مقادیر حالت bind در
gateway.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") را تنظیم کنید تا روی همه واسطها گوش دهد. - Auth: بهصورت پیشفرض لازم است. bindهای غیر-loopback به احراز هویت gateway نیاز دارند. در عمل این یعنی یک توکن/رمز عبور مشترک یا یک reverse proxy آگاه از هویت با
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": احراز هویت مرورگر/کاربر را به یک reverse proxy آگاه از هویت واگذار کنید و به سربرگهای هویت ازgateway.trustedProxiesاعتماد کنید (نگاه کنید به احراز هویت Trusted Proxy). این حالت بهصورت پیشفرض یک منبع proxy غیر-loopback انتظار دارد؛ reverse proxyهای loopback روی همان میزبان بهgateway.auth.trustedProxy.allowLoopback = trueصریح نیاز دارند. فراخوانهای داخلی روی همان میزبان میتوانند ازgateway.auth.passwordبهعنوان fallback مستقیم محلی استفاده کنند؛gateway.auth.tokenهمچنان با حالت trusted-proxy ناسازگار است.gateway.auth.allowTailscale: وقتیtrueباشد، سربرگهای هویت Tailscale Serve میتوانند احراز هویت Control UI/WebSocket را برآورده کنند (باtailscale whoisتأیید میشود). endpointهای HTTP API از آن احراز هویت سربرگ Tailscale استفاده نمیکنند؛ در عوض حالت عادی احراز هویت HTTP مربوط به gateway را دنبال میکنند. این جریان بدون توکن فرض میکند میزبان gateway مورداعتماد است. وقتیtailscale.mode = "serve"باشد، پیشفرضtrueاست.gateway.auth.rateLimit: محدودکننده اختیاری تلاشهای ناموفق احراز هویت. بهازای هر IP کلاینت و هر دامنه احراز هویت اعمال میشود (shared-secret و device-token مستقل از هم ردیابی میشوند). تلاشهای مسدودشده429+Retry-Afterبرمیگردانند.- در مسیر async مربوط به Tailscale Serve Control UI، تلاشهای ناموفق برای همان
{scope, clientIp}پیش از نوشتن شکست، سریالی میشوند. بنابراین تلاشهای بد همزمان از همان کلاینت میتوانند در درخواست دوم محدودکننده را فعال کنند، بهجای اینکه هر دو مثل mismatch ساده همزمان عبور کنند. gateway.auth.rateLimit.exemptLoopbackبهصورت پیشفرضtrueاست؛ وقتی عمداً میخواهید ترافیک localhost هم محدودیت نرخ داشته باشد (برای تنظیمات آزمایشی یا استقرارهای proxy سختگیرانه)، آن را رویfalseتنظیم کنید.- تلاشهای احراز هویت WS با مبدأ مرورگر همیشه با معافیت loopback غیرفعال محدود میشوند (دفاع چندلایه در برابر brute force مبتنی بر مرورگر روی localhost).
- روی loopback، آن قفلشدنهای با مبدأ مرورگر بهازای مقدار نرمالسازیشده
Originجدا هستند، بنابراین شکستهای تکراری از یک مبدأ localhost بهصورت خودکار مبدأ دیگری را قفل نمیکند. tailscale.mode:serve(فقط tailnet، bind از نوع loopback) یاfunnel(عمومی، نیازمند احراز هویت).tailscale.serviceName: نام اختیاری Tailscale Service برای حالت Serve، مانندsvc:openclaw. وقتی تنظیم شود، OpenClaw آن را بهtailscale serve --serviceپاس میدهد تا Control UI بتواند از طریق یک Service نامگذاریشده، بهجای hostname دستگاه، ارائه شود. مقدار باید از قالب نام Service در Tailscale یعنیsvc:<dns-label>استفاده کند؛ راهاندازی URL مشتقشده Service را گزارش میکند.tailscale.preserveFunnel: وقتیtrueباشد وtailscale.mode = "serve"، OpenClaw پیش از اعمال دوباره Serve هنگام راهاندازی،tailscale funnel statusرا بررسی میکند و اگر یک مسیر Funnel پیکربندیشده بیرونی از قبل درگاه gateway را پوشش دهد، از آن صرفنظر میکند. پیشفرضfalse.controlUi.allowedOrigins: allowlist صریح مبدأهای مرورگر برای اتصالهای Gateway WebSocket. برای مبدأهای مرورگر عمومی غیر-loopback لازم است. بارگذاریهای UI خصوصی same-origin در LAN/Tailnet از loopback، RFC1918/link-local،.local،.ts.net، یا میزبانهای CGNAT در Tailscale بدون فعالسازی fallback سربرگ Host پذیرفته میشوند.controlUi.chatMessageMaxWidth: حداکثر عرض اختیاری برای پیامهای گفتوگوی گروهبندیشده Control UI. مقادیر محدودشده عرض CSS مانند960px،82%،min(1280px, 82%)، وcalc(100% - 2rem)را میپذیرد.controlUi.dangerouslyAllowHostHeaderOriginFallback: حالت خطرناکی که fallback مبدأ سربرگ Host را برای استقرارهایی فعال میکند که عمداً به سیاست مبدأ مبتنی بر سربرگ Host متکی هستند.remote.transport:ssh(پیشفرض) یاdirect(ws/wss). برایdirect،remote.urlبرای میزبانهای عمومی بایدwss://باشد؛ متن سادهws://فقط برای loopback، LAN، link-local،.local،.ts.net، و میزبانهای CGNAT در Tailscale پذیرفته میشود.remote.remotePort: درگاه gateway روی میزبان SSH راهدور. پیشفرض18789است؛ وقتی درگاه تونل محلی با درگاه gateway راهدور فرق دارد، از این استفاده کنید.remote.sshHostKeyPolicy: سیاست کلید میزبان تونل SSH در macOS.strictپیشفرض است و به کلیدی نیاز دارد که از قبل مورداعتماد باشد.opensshیک opt-in صریح به پیکربندی مؤثر OpenSSH برای نامهای مستعار مدیریتشده است؛ پیش از استفاده، تنظیمات SSH کاربر و سیستم مطابق را بازبینی کنید. برنامه macOS وconfigure-remoteهنگام تغییر هدفها، این سیاست را بهstrictبازنشانی میکنند مگر اینکه دوباره صراحتاً opt in شده باشد.gateway.remote.token/.passwordفیلدهای اعتبارنامه کلاینت راهدور هستند. آنها بهتنهایی احراز هویت gateway را پیکربندی نمیکنند.gateway.push.apns.relay.baseUrl: URL پایه HTTPS برای relay بیرونی APNs که پس از انتشار ثبتنامها از سوی buildهای iOS متکی بر relay به gateway استفاده میشود. buildهای عمومی App Store از relay میزبانیشده OpenClaw استفاده میکنند. URLهای relay سفارشی باید با یک مسیر build/استقرار iOS عمداً جداگانه مطابقت داشته باشند که URL relay آن به همان relay اشاره میکند.gateway.push.apns.relay.timeoutMs: timeout ارسال از gateway به relay برحسب میلیثانیه. پیشفرض10000.- ثبتنامهای متکی بر relay به یک هویت gateway مشخص واگذار میشوند. برنامه iOS جفتشده
gateway.identity.getرا واکشی میکند، آن هویت را در ثبتنام relay قرار میدهد، و یک مجوز ارسال محدود به ثبتنام را به 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: timeout دستدهی Gateway WebSocket پیش از احراز هویت برحسب میلیثانیه. پیشفرض:15000. وقتیOPENCLAW_HANDSHAKE_TIMEOUT_MSتنظیم شده باشد، تقدم دارد. روی میزبانهای پر بار یا کمقدرت که کلاینتهای محلی میتوانند درحالیکه گرمشدن راهاندازی هنوز در حال پایدار شدن است متصل شوند، این مقدار را افزایش دهید.gateway.channelHealthCheckMinutes: بازه health-monitor کانال برحسب دقیقه. برای غیرفعال کردن restartهای health-monitor بهصورت سراسری،0تنظیم کنید. پیشفرض:5.gateway.channelStaleEventThresholdMinutes: آستانه stale-socket برحسب دقیقه. این مقدار را بزرگتر یا مساویgateway.channelHealthCheckMinutesنگه دارید. پیشفرض:30.gateway.channelMaxRestartsPerHour: بیشینه restartهای health-monitor بهازای هر کانال/حساب در یک ساعت rolling. پیشفرض:10.channels.<provider>.healthMonitor.enabled: انصراف بهازای هر کانال از restartهای health-monitor در حالی که monitor سراسری فعال میماند.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override بهازای هر حساب برای کانالهای چندحسابی. وقتی تنظیم شود، بر override سطح کانال تقدم دارد.- مسیرهای فراخوانی gateway محلی فقط وقتی
gateway.auth.*تنظیم نشده باشد میتوانند ازgateway.remote.*بهعنوان fallback استفاده کنند. - اگر
gateway.auth.token/gateway.auth.passwordصراحتاً از طریق SecretRef پیکربندی شده و حلنشده باشد، resolution بهصورت fail-closed شکست میخورد (بدون پوشاندن با fallback راهدور). trustedProxies: IPهای reverse proxy که TLS را terminate میکنند یا سربرگهای forwarded-client تزریق میکنند. فقط proxyهایی را فهرست کنید که کنترلشان میکنید. ورودیهای loopback همچنان برای تنظیمات proxy/local-detection روی همان میزبان معتبرند (برای مثال Tailscale Serve یا یک reverse proxy محلی)، اما درخواستهای loopback را واجد شرایطgateway.auth.mode: "trusted-proxy"نمیکنند.allowRealIpFallback: وقتیtrueباشد، gateway در صورت نبودX-Forwarded-For،X-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برای opt in به فرمانهای خطرناک node مانندcamera.snap،camera.clip، وscreen.recordاستفاده کنید؛denyCommandsیک فرمان را حذف میکند حتی اگر پیشفرض پلتفرم یا allow صریح در غیر این صورت آن را شامل میشد. پس از اینکه یک node فهرست فرمان اعلامشده خود را تغییر داد، جفتسازی آن دستگاه را رد و دوباره تأیید کنید تا gateway snapshot بهروزشده فرمان را ذخیره کند.gateway.tools.deny: نام ابزارهای اضافی مسدودشده برای HTTPPOST /tools/invoke(فهرست deny پیشفرض را گسترش میدهد).gateway.tools.allow: نام ابزارها را از فهرست deny پیشفرض HTTP برای فراخوانهای owner/admin حذف کنید. این مورد فراخوانهای دارای هویتoperator.writeرا به دسترسی owner/admin ارتقا نمیدهد؛cron،gateway، وnodesحتی وقتی در allowlist باشند برای فراخوانهای غیر-owner در دسترس نمیمانند.
endpointهای سازگار با OpenAI
- HTTP RPC مدیر: بهصورت پیشفرض بهعنوان Plugin
admin-http-rpcخاموش است. Plugin را فعال کنید تاPOST /api/v1/admin/rpcثبت شود. نگاه کنید به HTTP RPC مدیر. - Chat Completions: بهصورت پیشفرض غیرفعال است. با
gateway.http.endpoints.chatCompletions.enabled: trueفعال کنید. - Responses API:
gateway.http.endpoints.responses.enabled. - سختسازی ورودی URL برای 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 که کنترل میکنید تنظیم کنید؛ نگاه کنید به احراز هویت Trusted Proxy)
جداسازی چندنمونهای
چند gateway را روی یک میزبان با درگاهها و دایرکتوریهای وضعیت یکتا اجرا کنید:
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: termination مربوط به TLS را در listener gateway فعال میکند (HTTPS/WSS) (پیشفرض:false).autoGenerate: وقتی فایلهای صریح پیکربندی نشدهاند، یک جفت cert/key خودامضای محلی را خودکار تولید میکند؛ فقط برای استفاده local/dev.certPath: مسیر filesystem به فایل گواهی TLS.keyPath: مسیر filesystem به فایل کلید خصوصی TLS؛ دسترسیها را محدود نگه دارید.caPath: مسیر اختیاری CA bundle برای تأیید کلاینت یا زنجیرههای اعتماد سفارشی.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: کنترل میکند ویرایشهای پیکربندی هنگام اجرا چگونه اعمال شوند."off": ویرایشهای زنده را نادیده بگیر؛ تغییرات به راهاندازی مجدد صریح نیاز دارند."restart": همیشه هنگام تغییر پیکربندی، فرایند Gateway را دوباره راهاندازی کن."hot": تغییرات را بدون راهاندازی مجدد، درون همان فرایند اعمال کن."hybrid"(پیشفرض): ابتدا بارگذاری مجدد داغ را امتحان کن؛ در صورت نیاز، به راهاندازی مجدد برگرد.
debounceMs: پنجره debounce بر حسب ms پیش از اعمال تغییرات پیکربندی (عدد صحیح نامنفی).deferralTimeoutMs: حداکثر زمان اختیاری بر حسب ms برای انتظار عملیات در حال اجرا، پیش از اجبار به راهاندازی مجدد یا بارگذاری مجدد داغ کانال. برای استفاده از انتظار محدود پیشفرض (300000) آن را حذف کنید؛ برای انتظار نامحدود و ثبت هشدارهای دورهای هنوز-در-انتظار، مقدار0را تنظیم کنید.
قلابها
{ 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>.
توکنهای قلاب در رشته پرسوجو رد میشوند.
نکات اعتبارسنجی و ایمنی:
hooks.enabled=trueبهhooks.tokenغیرخالی نیاز دارد.hooks.tokenباید با احراز هویت shared-secret فعال Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENیاgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD) متفاوت باشد؛ هنگام شناسایی استفاده دوباره، راهاندازی یک هشدار امنیتی غیرکشنده ثبت میکند.openclaw security auditاستفاده دوباره از احراز هویت قلاب/Gateway را، از جمله احراز هویت رمز عبور Gateway که فقط هنگام audit ارائه شده است (--auth password --password <password>)، بهعنوان یافتهای بحرانی علامتگذاری میکند.openclaw doctor --fixرا اجرا کنید تا یکhooks.tokenذخیرهشده و دوبارهاستفادهشده چرخانده شود، سپس فرستندههای قلاب خارجی را بهروزرسانی کنید تا از توکن قلاب جدید استفاده کنند.hooks.pathنمیتواند/باشد؛ از یک زیرمسیر اختصاصی مانند/hooksاستفاده کنید.- اگر
hooks.allowRequestSessionKey=trueاست،hooks.allowedSessionKeyPrefixesرا محدود کنید (برای مثال["hook:"]). - اگر یک نگاشت یا preset از
sessionKeyقالبدار استفاده میکند،hooks.allowedSessionKeyPrefixesوhooks.allowRequestSessionKey=trueرا تنظیم کنید. کلیدهای نگاشت ایستا به این opt-in نیاز ندارند.
نقاط پایانی:
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نگاشت که با template رندر شدهاند، خارجیتأمینشده در نظر گرفته میشوند و آنها نیز بهhooks.allowRequestSessionKey=trueنیاز دارند.
- مقادیر
Mapping details
match.pathزیرمسیر پس از/hooksرا تطبیق میدهد (مثلاً/hooks/gmail→gmail).match.sourceیک فیلد payload را برای مسیرهای عمومی تطبیق میدهد.- قالبهایی مانند
{{messages[0].subject}}از payload خوانده میشوند. transformمیتواند به یک ماژول JS/TS اشاره کند که یک کنش قلاب برمیگرداند.transform.moduleباید یک مسیر نسبی باشد و داخلhooks.transformsDirبماند (مسیرهای مطلق و پیمایش مسیر رد میشوند).hooks.transformsDirرا زیر~/.openclaw/hooks/transformsنگه دارید؛ پوشههای skill فضای کاری رد میشوند. اگرopenclaw doctorاین مسیر را نامعتبر گزارش کرد، ماژول transform را به پوشه transforms قلابها منتقل کنید یاhooks.transformsDirرا حذف کنید.agentIdبه یک agent مشخص مسیریابی میکند؛ شناسههای ناشناخته به agent پیشفرض برمیگردند.allowedAgentIds: مسیریابی مؤثر agent را محدود میکند، از جمله مسیر agent پیشفرض وقتیagentIdحذف شده باشد (*یا حذفشده = اجازه به همه،[]= رد همه).defaultSessionKey: کلید نشست ثابت اختیاری برای اجراهای agent قلاب بدونsessionKeyصریح.allowRequestSessionKey: به فراخوانهای/hooks/agentو کلیدهای نشست نگاشت مبتنی بر template اجازه میدهدsessionKeyرا تنظیم کنند (پیشفرض:false).allowedSessionKeyPrefixes: فهرست مجاز پیشوند اختیاری برای مقادیرsessionKeyصریح (درخواست + نگاشت)، مانند["hook:"]. وقتی هر نگاشت یا preset ازsessionKeyقالبدار استفاده کند، الزامی میشود.deliver: trueپاسخ نهایی را به یک کانال میفرستد؛channelبهطور پیشفرضlastاست.model، LLM را برای این اجرای قلاب بازنویسی میکند (اگر کاتالوگ مدل تنظیم شده باشد، باید مجاز باشد).
یکپارچهسازی Gmail
- preset داخلی Gmail از
sessionKey: "hook:gmail:{{messages[0].id}}"استفاده میکند. - اگر آن مسیریابی بهازای هر پیام را نگه میدارید،
hooks.allowRequestSessionKey: trueرا تنظیم کنید وhooks.allowedSessionKeyPrefixesرا به فضای نام Gmail محدود کنید، برای مثال["hook:", "hook:gmail:"]. - اگر به
hooks.allowRequestSessionKey: falseنیاز دارید، preset را با یکsessionKeyایستا بهجای پیشفرض قالبدار بازنویسی کنید.
{ hooks: { gmail: { account: "openclaw@gmail.com", 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 اجرا نکنید.
میزبان Plugin بوم
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- HTML/CSS/JS قابل ویرایش توسط agent و A2UI را از طریق HTTP زیر پورت Gateway سرو میکند:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- فقط محلی:
gateway.bind: "loopback"را نگه دارید (پیشفرض). - bindهای غیر-loopback: مسیرهای بوم، همانند دیگر سطوح HTTP Gateway، به احراز هویت Gateway نیاز دارند (token/password/trusted-proxy).
- WebViewهای Node معمولاً headerهای احراز هویت نمیفرستند؛ پس از جفتشدن و اتصال یک Node، Gateway نشانیهای URL قابلیتِ محدودهبندیشده به Node را برای دسترسی به بوم/A2UI تبلیغ میکند.
- نشانیهای URL قابلیت به نشست WS فعال Node بستهاند و سریع منقضی میشوند. fallback مبتنی بر IP استفاده نمیشود.
- کلاینت live-reload را به 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 خودکار شروع میشود و در استقرارهای Gateway روی Linux، Windows و container بهصورت opt-in است. - نام میزبان وقتی یک برچسب DNS معتبر باشد، بهطور پیشفرض نام میزبان سیستم است و در غیر این صورت به
openclawبرمیگردد. باOPENCLAW_MDNS_HOSTNAMEبازنویسی کنید.
گستره وسیع (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}یک ناحیه DNS-SD unicast زیر ~/.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: کلیدهای مورد انتظارِ مفقود را از پروفایل پوسته ورود شما import میکند.- برای تقدم کامل، محیط را ببینید.
جایگزینی متغیر env
در هر رشته پیکربندی با ${VAR_NAME} به متغیرهای env ارجاع دهید:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- فقط نامهای حروف بزرگ تطبیق داده میشوند:
[A-Z_][A-Z0-9_]*. - متغیرهای مفقود/خالی هنگام بارگذاری پیکربندی خطا ایجاد میکنند.
- برای یک
${VAR}لفظی، با$${VAR}escape کنید. - با
$includeکار میکند.
رازها
ارجاعهای راز افزایشی هستند: مقادیر plaintext همچنان کار میکنند.
SecretRef
از یک شکل object استفاده کنید:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }اعتبارسنجی:
- الگوی
provider:^[a-z][a-z0-9_-]{0,63}$ - الگوی id برای
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - id برای
source: "file": اشارهگر JSON مطلق (برای مثال"/providers/openai/apiKey") - الگوی id برای
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(selectorهای سبک AWS مانندsecret#json_keyرا پشتیبانی میکند) - idهای
source: "exec"نباید segmentهای مسیرِ جداشده با slash شامل.یا..داشته باشند (برای مثالa/../bرد میشود)
سطح اعتبارنامه پشتیبانیشده
- ماتریس canonical: سطح اعتبارنامه SecretRef
secrets applyمسیرهای اعتبارنامه پشتیبانیشدهopenclaw.jsonرا هدف میگیرد.- ارجاعهای
auth-profiles.jsonدر حلکردن هنگام اجرا و پوشش audit گنجانده میشوند.
پیکربندی ارائهدهندگان راز
{ 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"باشد). - وقتی اعتبارسنجی ACL در Windows در دسترس نباشد، مسیرهای ارائهدهنده file و exec fail closed میشوند.
allowInsecurePath: trueرا فقط برای مسیرهای مورد اعتمادی تنظیم کنید که قابل اعتبارسنجی نیستند. - ارائهدهنده
execبه مسیر مطلقcommandنیاز دارد و از payloadهای پروتکل روی stdin/stdout استفاده میکند. - بهطور پیشفرض، مسیرهای فرمان symlink رد میشوند. برای مجازکردن مسیرهای symlink در حالی که مسیر هدف حلشده اعتبارسنجی میشود،
allowSymlinkCommand: trueرا تنظیم کنید. - اگر
trustedDirsپیکربندی شده باشد، بررسی پوشه مورد اعتماد روی مسیر هدف حلشده اعمال میشود. - محیط child برای
execبهطور پیشفرض حداقلی است؛ متغیرهای لازم را صریحاً باpassEnvعبور دهید. - ارجاعهای راز هنگام فعالسازی به یک snapshot درونحافظهای حل میشوند، سپس مسیرهای درخواست فقط snapshot را میخوانند.
- فیلترکردن سطح فعال هنگام فعالسازی اعمال میشود: ارجاعهای حلنشده روی سطوح فعال باعث شکست startup/reload میشوند، در حالی که سطوح غیرفعال با diagnostics نادیده گرفته میشوند.
ذخیرهسازی احراز هویت
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai: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-key استانداردprovider:defaultبازنویسی میکند. - نمایههای حالت OAuth (
auth.profiles.<id>.mode = "oauth") از اعتبارنامههای نمایه احراز هویت مبتنی بر SecretRef پشتیبانی نمیکنند. - اعتبارنامههای ایستای زمان اجرا از اسنپشاتهای حلشده درونحافظهای میآیند؛ ورودیهای ایستای قدیمی
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به اینجا برسد، اما تطبیقدهندههای متن مختص ارائهدهنده در محدوده همان ارائهدهندهای میمانند که مالک آنهاست (برای نمونهKey limit exceededدر OpenRouter). پیامهای قابل تلاش مجدد 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: 300000, memoryPressureSnapshot: false, 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, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: کلید اصلی برای خروجی ابزارگذاری (پیشفرض:true).flags: آرایهای از رشتههای پرچم که خروجی ثبت وقایع هدفمند را فعال میکنند (از وایلدکارتهایی مانند"telegram.*"یا"*"پشتیبانی میکند).stuckSessionWarnMs: آستانه سن بدون پیشرفت بر حسب میلیثانیه برای طبقهبندی نشستهای پردازشی طولانیمدت بهعنوانsession.long_running،session.stalledیاsession.stuck. پاسخ، ابزار، وضعیت، بلوک، و پیشرفت ACP تایمر را بازنشانی میکنند؛ عیبیابیهای تکراریsession.stuckتا زمانی که تغییری رخ ندهد عقبنشینی میکنند.stuckSessionAbortMs: آستانه سن بدون پیشرفت بر حسب میلیثانیه پیش از آنکه کار فعال متوقفشده واجد شرایط، برای بازیابی با تخلیه-لغو پایان داده شود. وقتی تنظیم نشده باشد، OpenClaw از پنجره ایمنتر و طولانیتر اجرای تعبیهشده، حداقل ۵ دقیقه و ۳ برابرstuckSessionWarnMs، استفاده میکند.memoryPressureSnapshot: وقتی فشار حافظه بهcriticalمیرسد، یک اسنپشات پایداری ویرایششده پیش از OOM میگیرد (پیشفرض:false). برای افزودن اسکن/نوشتن فایل بسته پایداری، در حالی که رویدادهای عادی فشار حافظه حفظ میشوند، رویtrueتنظیم کنید.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.logsExporter: مقصد صدور ثبت وقایع:"otlp"(پیشفرض)،"stdout"برای یک شیء JSON در هر خط stdout، یا"both".otel.sampleRate: نرخ نمونهبرداری ردگیری0تا1.otel.flushIntervalMs: فاصله تخلیه دورهای دورسنجی بر حسب میلیثانیه.otel.captureContent: گرفتن محتوای خام بهصورت انتخابی برای ویژگیهای span در OTEL. پیشفرض خاموش است. مقدار بولیtrueمحتوای پیام/ابزار غیرسیستمی را میگیرد؛ شکل شیء به شما اجازه میدهدinputMessages،outputMessages،toolInputs،toolOutputs،systemPromptوtoolDefinitionsرا صراحتا فعال کنید.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: کلید محیطی برای تازهترین شکل آزمایشی span استنتاج GenAI، شامل نامهای span بهشکل{gen_ai.operation.name} {gen_ai.request.model}، نوع span برابرCLIENT، وgen_ai.provider.nameبهجایgen_ai.systemقدیمی. بهطور پیشفرض spanها برای سازگاریopenclaw.model.callو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: پنجره پخش rollout اضافی برای کانال پایدار بر حسب ساعت (پیشفرض: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؛ برای پنهانکردن امکانات dispatch و spawn در ACP رویfalseتنظیم کنید).dispatch.enabled: دروازه مستقل برای dispatch نوبت نشست ACP (پیشفرض:true). برای در دسترس نگهداشتن فرمانهای ACP و در عین حال مسدودکردن اجرا، رویfalseتنظیم کنید.backend: شناسه پیشفرض بکاند زمان اجرای ACP (باید با یک Plugin زمان اجرای ACP ثبتشده مطابقت داشته باشد). ابتدا Plugin بکاند را نصب کنید، و اگرplugins.allowتنظیم شده است، شناسه Plugin بکاند را وارد کنید (برای نمونهacpx) وگرنه بکاند ACP بارگذاری نمیشود.defaultAgent: شناسه عامل هدف جایگزین ACP وقتی spawnها هدف صریحی مشخص نمیکنند.allowedAgents: فهرست مجاز شناسههای عامل که برای نشستهای زمان اجرای ACP مجاز هستند؛ خالی بودن یعنی محدودیت اضافی وجود ندارد.maxConcurrentSessions: بیشینه نشستهای ACP همزمان فعال.stream.coalesceIdleMs: پنجره تخلیه بیکار بر حسب میلیثانیه برای متن جریانی.stream.maxChunkChars: بیشینه اندازه قطعه پیش از تقسیم نمایش بلوک جریانی.stream.repeatSuppression: خطهای وضعیت/ابزار تکراری را در هر نوبت سرکوب میکند (پیشفرض:true).stream.deliveryMode:"live"بهصورت افزایشی جریان میدهد؛"final_only"تا رویدادهای پایانی نوبت بافر میکند.stream.hiddenBoundarySeparator: جداکننده پیش از متن قابل مشاهده پس از رویدادهای ابزار پنهان (پیشفرض:"paragraph").stream.maxOutputChars: بیشینه تعداد نویسههای خروجی دستیار که در هر نوبت ACP نمایش داده میشوند.stream.maxSessionUpdateChars: بیشینه نویسهها برای خطهای وضعیت/بهروزرسانی ACP نمایشدادهشده.stream.tagVisibility: رکورد نامهای برچسب به بازنویسیهای بولی قابلیت مشاهده برای رویدادهای جریانی.runtime.ttlMinutes: TTL بیکار بر حسب دقیقه برای کارکنان نشست ACP پیش از واجد شرایط شدن برای پاکسازی.runtime.installCommand: فرمان نصب اختیاری برای اجرا هنگام راهاندازی اولیه محیط زمان اجرای ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModeسبک شعار بنر را کنترل میکند:"random"(default): شعارهای بامزه/فصلی چرخشی."default": شعار خنثای ثابت (All your chats, one OpenClaw.)."off": بدون متن شعار (عنوان/نسخه بنر همچنان نمایش داده میشود).
- برای پنهان کردن کل بنر (نه فقط شعارها)، env را روی
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", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}هویت
فیلدهای هویت agents.list را زیر پیشفرضهای عامل ببینید.
پل (قدیمی، حذفشده)
بیلدهای فعلی دیگر شامل پل TCP نیستند. Nodeها از طریق Gateway WebSocket متصل میشوند. کلیدهای bridge.* دیگر بخشی از شمای پیکربندی نیستند (اعتبارسنجی تا زمان حذف آنها ناموفق میشود؛ openclaw doctor --fix میتواند کلیدهای ناشناخته را حذف کند).
پیکربندی پل قدیمی (مرجع تاریخی)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; 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 قدیمی مبتنی بر فایل پذیرفته میشود. پیشفرض:2_000_000بایت.runLog.keepLines: جدیدترین ردیفهای تاریخچه اجرای SQLite که برای هر کار نگه داشته میشوند. پیشفرض:2000.webhookToken: توکن bearer که برای تحویل POST وبهوک Cron (delivery.mode = "webhook") استفاده میشود؛ اگر حذف شود، هیچ سربرگ احرازهویتی ارسال نمیشود.webhook: URL وبهوک قدیمی و منسوخشده بهعنوان fallback (http/https) کهopenclaw doctor --fixبرای مهاجرت کارهای ذخیرهشدهای استفاده میکند که هنوزnotify: trueدارند؛ تحویل در زمان اجرا ازdelivery.mode="webhook"بههمراهdelivery.toبرای هر کار، یا هنگام حفظ تحویل اعلان ازdelivery.completionDestinationاستفاده میکند.
cron.retry
{ cron: { retry: { maxAttempts: 3, backoffMs: [30000, 60000, 300000], retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"], }, },}maxAttempts: بیشینه تلاشهای مجدد برای کارهای Cron در خطاهای گذرا (پیشفرض:3؛ بازه:0-10).backoffMs: آرایهای از تأخیرهای backoff بر حسب میلیثانیه برای هر تلاش مجدد (پیشفرض:[30000, 60000, 300000]؛ ۱ تا ۱۰ ورودی).retryOn: انواع خطاهایی که باعث تلاش مجدد میشوند -"rate_limit"،"overloaded"،"network"،"timeout"،"server_error". برای تلاش مجدد روی همه انواع گذرا، آن را حذف کنید.
کارهای یکباره تا زمانی که تلاشهای مجدد تمام شوند فعال میمانند، سپس با حفظ وضعیت خطای نهایی غیرفعال میشوند. کارهای تکرارشونده از همان سیاست تلاش مجدد گذرا استفاده میکنند تا پیش از بازه زمانبندیشده بعدی، پس از backoff دوباره اجرا شوند؛ خطاهای دائمی یا تمام شدن تلاشهای مجدد گذرا با backoff خطا به زمانبندی تکرارشونده عادی برمیگردند.
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تحویل میدهند، هنگام شکست به همان هدف اعلان اصلی fallback میکنند. delivery.failureDestinationفقط برای کارهایsessionTarget="isolated"پشتیبانی میشود، مگر اینکهdelivery.modeاصلی کار"webhook"باشد.
کارهای Cron را ببینید. اجراهای Cron ایزوله بهعنوان کارهای پسزمینه ردیابی میشوند.
متغیرهای قالب مدل رسانه
جانگهدارهای قالب که در tools.media.models[].args گسترش مییابند:
| متغیر | توضیح |
|---|---|
{{Body}} |
بدنه کامل پیام ورودی |
{{RawBody}} |
بدنه خام (بدون پوششهای تاریخچه/فرستنده) |
{{BodyStripped}} |
بدنه با حذف اشارههای گروهی |
{{From}} |
شناسه فرستنده |
{{To}} |
شناسه مقصد |
{{MessageSid}} |
شناسه پیام کانال |
{{SessionId}} |
UUID نشست فعلی |
{{IsNewSession}} |
"true" هنگام ایجاد نشست جدید |
{{MediaUrl}} |
شبه-URL رسانه ورودی |
{{MediaPath}} |
مسیر محلی رسانه |
{{MediaType}} |
نوع رسانه (تصویر/صدا/سند/…) |
{{Transcript}} |
رونوشت صوتی |
{{Prompt}} |
prompt رسانه resolveشده برای ورودیهای CLI |
{{MaxChars}} |
بیشینه نویسههای خروجی resolveشده برای ورودیهای 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"], },}رفتار ادغام:
- فایل تکی: شیء دربرگیرنده را جایگزین میکند.
- آرایهای از فایلها: بهترتیب deep-merge میشوند (موارد بعدی موارد قبلی را بازنویسی میکنند).
- کلیدهای همسطح: پس از includeها ادغام میشوند (مقادیر includeشده را بازنویسی میکنند).
- includeهای تودرتو: تا عمق ۱۰ سطح.
- مسیرها: نسبت به فایل شاملکننده resolve میشوند، اما باید داخل دایرکتوری پیکربندی سطح بالا (
dirnameازopenclaw.json) بمانند. فرمهای مطلق/../فقط وقتی مجاز هستند که همچنان داخل آن مرز resolve شوند. مسیرها نباید بایت null داشته باشند و باید پیش و پس از resolve شدن، دقیقاً کوتاهتر از ۴۰۹۶ نویسه باشند. - نوشتنهای متعلق به OpenClaw که فقط یک بخش سطح بالا با پشتیبانی include تکفایلی را تغییر میدهند، مستقیماً در همان فایل includeشده نوشته میشوند. برای مثال،
plugins installمقدارplugins: { $include: "./plugins.json5" }را درplugins.json5بهروزرسانی میکند وopenclaw.jsonرا دستنخورده میگذارد. - includeهای ریشه، آرایههای include، و includeهایی با بازنویسیهای همسطح برای نوشتنهای متعلق به OpenClaw فقط خواندنی هستند؛ این نوشتنها بهجای flatten کردن پیکربندی، fail closed میشوند.
- خطاها: پیامهای روشن برای فایلهای گمشده، خطاهای parse، includeهای چرخهای، قالب مسیر نامعتبر، و طول بیش از حد.
مرتبط: پیکربندی · نمونههای پیکربندی · Doctor