การอ้างอิง config หลักสำหรับDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
~/.openclaw/openclaw.json สำหรับภาพรวมแบบมุ่งงาน ดู การกำหนดค่า
ครอบคลุมพื้นผิว config หลักของ OpenClaw และลิงก์ออกไปเมื่อระบบย่อยมีเอกสารอ้างอิงเชิงลึกของตัวเอง แคตตาล็อกคำสั่งที่ช่องทางและ Plugin เป็นเจ้าของ รวมถึงปุ่มปรับแต่ง memory/QMD เชิงลึก อยู่ในหน้าของตัวเองแทนที่จะอยู่ในหน้านี้
ความจริงจากโค้ด:
openclaw config schemaพิมพ์ JSON Schema สดที่ใช้สำหรับการตรวจสอบความถูกต้องและ Control UI โดยรวม metadata ของ bundled/plugin/channel เข้ามาเมื่อมีconfig.schema.lookupคืนค่าโหนด schema หนึ่งรายการตาม path scope สำหรับเครื่องมือเจาะดูรายละเอียดpnpm config:docs:check/pnpm config:docs:genตรวจสอบ hash baseline ของเอกสาร config เทียบกับพื้นผิว schema ปัจจุบัน
gateway ชื่อ config.schema.lookup สำหรับ
เอกสารและข้อจำกัดระดับ field ที่แม่นยำก่อนแก้ไข ใช้
การกำหนดค่า สำหรับคำแนะนำแบบมุ่งงาน และใช้หน้านี้
สำหรับแผนที่ field ที่กว้างกว่า ค่าเริ่มต้น และลิงก์ไปยังเอกสารอ้างอิงของระบบย่อย
เอกสารอ้างอิงเชิงลึกเฉพาะทาง:
- เอกสารอ้างอิงการกำหนดค่า memory สำหรับ
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsและ config ของ dreaming ภายใต้plugins.entries.memory-core.config.dreaming - คำสั่ง slash สำหรับแคตตาล็อกคำสั่ง built-in + bundled ปัจจุบัน
- หน้าของช่องทาง/Plugin เจ้าของ สำหรับพื้นผิวคำสั่งเฉพาะช่องทาง
ช่องทาง
คีย์ config รายช่องทางย้ายไปยังหน้าเฉพาะแล้ว - ดู การกำหนดค่า - ช่องทาง สำหรับchannels.*
รวมถึง Slack, Discord, Telegram, WhatsApp, Matrix, iMessage และช่องทาง bundled อื่นๆ
(auth, การควบคุมการเข้าถึง, หลายบัญชี, mention gating)
ค่าเริ่มต้นของ agent, multi-agent, เซสชัน และข้อความ
ย้ายไปยังหน้าเฉพาะแล้ว - ดู การกำหนดค่า - agents สำหรับ:agents.defaults.*(workspace, model, thinking, Heartbeat, memory, media, Skills, sandbox)multiAgent.*(การกำหนดเส้นทางและการผูกของ multi-agent)session.*(วงจรชีวิตของเซสชัน, Compaction, การตัดแต่ง)messages.*(การส่งข้อความ, TTS, การเรนเดอร์ markdown)talk.*(โหมด Talk)talk.consultThinkingLevel: การ override ระดับ thinking สำหรับการรัน agent OpenClaw แบบเต็มเบื้องหลัง Control UI Talk realtime consultstalk.consultFastMode: การ override fast-mode แบบครั้งเดียวสำหรับ Control UI Talk realtime consultstalk.speechLocale: id locale BCP 47 แบบ optional สำหรับการรู้จำเสียงพูดของ Talk บน iOS/macOStalk.silenceTimeoutMs: เมื่อไม่ได้ตั้งค่า Talk จะคงหน้าต่างหยุดพักค่าเริ่มต้นของแพลตฟอร์มก่อนส่ง transcript (700 ms on macOS and Android, 900 ms on iOS)
เครื่องมือและผู้ให้บริการแบบกำหนดเอง
นโยบายเครื่องมือ, toggles เชิงทดลอง, config เครื่องมือที่มี provider รองรับ และการตั้งค่า provider / base-URL แบบกำหนดเอง ย้ายไปยังหน้าเฉพาะแล้ว - ดู การกำหนดค่า - เครื่องมือและผู้ให้บริการแบบกำหนดเองModels
นิยาม provider, allowlist ของ model และการตั้งค่า provider แบบกำหนดเองอยู่ใน การกำหนดค่า - เครื่องมือและผู้ให้บริการแบบกำหนดเอง rootmodels ยังเป็นเจ้าของพฤติกรรม model-catalog แบบ global ด้วย
models.mode: พฤติกรรมแคตตาล็อก provider (mergeหรือreplace)models.providers: map ของ provider แบบกำหนดเองที่ key ด้วย provider idmodels.providers.*.localService: process manager แบบ on-demand ที่เป็น optional สำหรับ เซิร์ฟเวอร์ model ในเครื่อง OpenClaw probe health endpoint ที่กำหนดค่าไว้, startcommandแบบ absolute เมื่อจำเป็น, รอความพร้อม แล้วจึงส่งคำขอ model ดู บริการ model ในเครื่องmodels.pricing.enabled: ควบคุม background pricing bootstrap ที่ เริ่มหลังจาก sidecars และช่องทางเข้าสู่เส้นทาง Gateway ready เมื่อเป็นfalseGateway จะข้ามการ fetch แคตตาล็อก pricing ของ OpenRouter และ LiteLLM; ค่าmodels.providers.*.models[].costที่กำหนดค่าไว้ยังคงใช้ได้สำหรับการประเมิน cost ในเครื่อง
MCP
นิยามเซิร์ฟเวอร์ MCP ที่ OpenClaw จัดการอยู่ภายใต้mcp.servers และถูก
ใช้โดย Pi แบบ embedded และ runtime adapters อื่นๆ คำสั่ง openclaw mcp list,
show, set และ unset จัดการ block นี้โดยไม่เชื่อมต่อไปยัง
เซิร์ฟเวอร์เป้าหมายระหว่างแก้ไข config
mcp.servers: นิยามเซิร์ฟเวอร์ MCP แบบ stdio หรือ remote ที่มีชื่อ สำหรับ runtimes ที่ expose เครื่องมือ MCP ที่กำหนดค่าไว้ entries แบบ remote ใช้transport: "streamable-http"หรือtransport: "sse";type: "http"เป็น alias แบบ CLI-native ที่openclaw mcp setและopenclaw doctor --fixnormalize ไปเป็น fieldtransportตาม canonicalmcp.sessionIdleTtlMs: idle TTL สำหรับ MCP runtimes แบบ bundled ที่ scope ตามเซสชัน การรัน embedded แบบ one-shot จะขอ cleanup เมื่อจบการรัน; TTL นี้เป็น backstop สำหรับ เซสชันที่อยู่ยาวและ callers ในอนาคต- การเปลี่ยนแปลงภายใต้
mcp.*hot-apply โดย dispose session MCP runtimes ที่ cache ไว้ การค้นพบ/ใช้งานเครื่องมือครั้งถัดไปจะสร้างใหม่จาก config ใหม่ ดังนั้น entries ของmcp.serversที่ถูกลบจะถูกเก็บกวาดทันทีแทนที่จะรอ idle TTL
Skills
allowBundled: allowlist แบบ optional สำหรับ Skills แบบ bundled เท่านั้น (ไม่กระทบ managed/workspace Skills)load.extraDirs: roots ของ skill ที่ใช้ร่วมกันเพิ่มเติม (precedence ต่ำสุด)load.allowSymlinkTargets: roots ของ target จริงที่เชื่อถือได้ซึ่ง symlink ของ skill อาจ resolve เข้าไปได้เมื่อ link อยู่ภายนอก source root ที่กำหนดค่าไว้install.preferBrew: เมื่อเป็น true ให้เลือกใช้ installers ของ Homebrew ก่อนเมื่อมีbrewพร้อมใช้งาน ก่อน fallback ไปยัง installer ชนิดอื่นinstall.nodeManager: preference ของตัวติดตั้ง node สำหรับ specsmetadata.openclaw.install(npm|pnpm|yarn|bun)install.allowUploadedArchives: อนุญาตให้ clients ของ Gateway ที่เป็นoperator.adminและเชื่อถือได้ ติดตั้ง zip archives ส่วนตัวที่ staged ผ่านskills.upload.*(ค่าเริ่มต้น: false) นี่เปิดใช้เฉพาะเส้นทาง uploaded-archive; การติดตั้ง ClawHub ปกติไม่ต้องใช้ค่านี้entries.<skillKey>.enabled: falseปิดใช้ skill แม้ว่าจะ bundled/installed อยู่ก็ตามentries.<skillKey>.apiKey: ความสะดวกสำหรับ Skills ที่ประกาศ env var หลัก (plaintext string หรือ SecretRef object)
Plugins
- โหลดจาก
~/.openclaw/extensions,<workspace>/.openclaw/extensionsรวมถึงplugins.load.paths - Discovery ยอมรับ Plugin native ของ OpenClaw รวมถึง bundles ของ Codex ที่เข้ากันได้ และ bundles ของ Claude รวมถึง bundles layout ค่าเริ่มต้นของ Claude ที่ไม่มี manifest
- การเปลี่ยน config ต้อง restart gateway
allow: allowlist แบบ optional (โหลดเฉพาะ Plugins ที่อยู่ในรายการ)denyมีสิทธิ์ชนะbundledDiscovery: ค่าเริ่มต้นเป็น"allowlist"สำหรับ configs ใหม่ ดังนั้นplugins.allowที่ไม่ว่างจะ gate bundled provider plugins ด้วย รวมถึง web-search runtime providers ด้วย Doctor เขียน"compat"สำหรับ configs allowlist เดิมที่ migrate มา เพื่อรักษาพฤติกรรม bundled provider ที่มีอยู่จนกว่าคุณจะ opt inplugins.entries.<id>.apiKey: field ความสะดวกสำหรับ API key ระดับ Plugin (เมื่อ Plugin รองรับ)plugins.entries.<id>.env: map ของ env var ที่ scope ตาม Pluginplugins.entries.<id>.hooks.allowPromptInjection: เมื่อเป็นfalsecore จะ blockbefore_prompt_buildและ ignore fields ที่ mutate prompt จาก legacybefore_agent_startในขณะที่ยังรักษา legacymodelOverrideและproviderOverrideไว้ ใช้กับ hooks ของ Plugin native และ hook directories ที่ bundle-provided และรองรับplugins.entries.<id>.hooks.allowConversationAccess: เมื่อเป็นtruePlugins ที่ไม่ใช่ bundled และเชื่อถือได้อาจอ่านเนื้อหาการสนทนาแบบ raw จาก typed hooks เช่นllm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeและagent_endplugins.entries.<id>.subagent.allowModelOverride: เชื่อถือ Plugin นี้อย่างชัดเจนให้ขอ overrideproviderและmodelต่อการรัน สำหรับ background subagent runsplugins.entries.<id>.subagent.allowedModels: allowlist แบบ optional ของ targetprovider/modelตาม canonical สำหรับ trusted subagent overrides ใช้"*"เฉพาะเมื่อคุณตั้งใจอนุญาต model ใดก็ได้plugins.entries.<id>.llm.allowModelOverride: เชื่อถือ Plugin นี้อย่างชัดเจนให้ขอ model overrides สำหรับapi.runtime.llm.completeplugins.entries.<id>.llm.allowedModels: allowlist แบบ optional ของ targetprovider/modelตาม canonical สำหรับ trusted plugin LLM completion overrides ใช้"*"เฉพาะเมื่อคุณตั้งใจอนุญาต model ใดก็ได้plugins.entries.<id>.llm.allowAgentIdOverride: เชื่อถือ Plugin นี้อย่างชัดเจนให้รันapi.runtime.llm.completeกับ agent id ที่ไม่ใช่ค่าเริ่มต้นplugins.entries.<id>.config: config object ที่ Plugin นิยาม (ตรวจสอบความถูกต้องด้วย schema ของ Plugin native OpenClaw เมื่อมี)- การตั้งค่า account/runtime ของ Channel Plugin อยู่ภายใต้
channels.<id>และควรถูกอธิบายโดย metadatachannelConfigsใน manifest ของ Plugin เจ้าของ ไม่ใช่โดย option registry กลางของ OpenClaw
Config ของ Codex harness Plugin
Plugincodex แบบ bundled เป็นเจ้าของการตั้งค่า native Codex app-server harness ภายใต้
plugins.entries.codex.config ดู
เอกสารอ้างอิง Codex harness สำหรับพื้นผิว config แบบเต็ม
และ Codex harness สำหรับ model ของ runtime
codexPlugins ใช้เฉพาะกับเซสชันที่เลือก native Codex harness เท่านั้น
มันไม่ได้เปิดใช้ Codex plugins สำหรับ Pi, การรัน provider OpenAI ปกติ, การผูกการสนทนา ACP
หรือ harness ใดๆ ที่ไม่ใช่ Codex
plugins.entries.codex.config.codexPlugins.enabled: เปิดใช้การรองรับ Plugin/แอป Codex แบบเนทีฟสำหรับ Codex harness ค่าเริ่มต้น:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: นโยบายการกระทำแบบทำลายข้อมูลเริ่มต้นสำหรับการร้องขอจากแอป Plugin ที่ย้ายมา ค่าเริ่มต้น:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: เปิดใช้ รายการ Plugin ที่ย้ายมาเมื่อcodexPlugins.enabledระดับโกลบอลเป็น true ด้วย ค่าเริ่มต้น:trueสำหรับรายการที่ระบุชัดเจน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: การแทนที่นโยบายการกระทำแบบทำลายข้อมูลราย Plugin เมื่อละไว้ จะใช้ค่าallow_destructive_actionsระดับโกลบอล
codexPlugins.enabled คือคำสั่งเปิดใช้ระดับโกลบอล รายการ Plugin ที่ระบุชัดเจน
ซึ่งเขียนโดยการย้ายข้อมูลคือชุดการติดตั้งและสิทธิ์ซ่อมแซมที่คงทน
ไม่รองรับ plugins["*"] ไม่มีสวิตช์ install และค่า
marketplacePath แบบโลคัลตั้งใจไม่ให้เป็นฟิลด์ config เพราะเป็นค่าเฉพาะโฮสต์
การตรวจสอบความพร้อมของ app/list จะถูกแคชไว้หนึ่งชั่วโมงและรีเฟรช
แบบอะซิงโครนัสเมื่อเก่าเกินไป config แอปของเธรด Codex จะถูกคำนวณตอนเริ่ม
เซสชัน Codex harness ไม่ใช่ทุกเทิร์น ใช้ /new, /reset หรือรีสตาร์ท gateway
หลังเปลี่ยน config Plugin แบบเนทีฟ
plugins.entries.firecrawl.config.webFetch: การตั้งค่าผู้ให้บริการ web-fetch ของ FirecrawlapiKey: คีย์ API ของ Firecrawl (ยอมรับ SecretRef) ถอยกลับไปใช้plugins.entries.firecrawl.config.webSearch.apiKey,tools.web.fetch.firecrawl.apiKeyแบบเก่า หรือ env varFIRECRAWL_API_KEYbaseUrl: URL ฐานของ Firecrawl API (ค่าเริ่มต้น:https://api.firecrawl.dev; การแทนที่แบบ self-hosted ต้องชี้ไปยัง endpoint ส่วนตัว/ภายใน)onlyMainContent: ดึงเฉพาะเนื้อหาหลักจากหน้าเว็บ (ค่าเริ่มต้น:true)maxAgeMs: อายุแคชสูงสุดเป็นมิลลิวินาที (ค่าเริ่มต้น:172800000/ 2 วัน)timeoutSeconds: timeout ของคำขอ scrape เป็นวินาที (ค่าเริ่มต้น:60)
plugins.entries.xai.config.xSearch: การตั้งค่า xAI X Search (การค้นเว็บของ Grok)enabled: เปิดใช้ผู้ให้บริการ X Searchmodel: โมเดล Grok ที่จะใช้สำหรับการค้นหา (เช่น"grok-4-1-fast")
plugins.entries.memory-core.config.dreaming: การตั้งค่า memory dreaming ดู Dreaming สำหรับเฟสและเกณฑ์enabled: สวิตช์หลักของ dreaming (ค่าเริ่มต้นfalse)frequency: จังหวะ cron สำหรับการ sweep dreaming แบบเต็มแต่ละครั้ง (ค่าเริ่มต้นคือ"0 3 * * *")model: การแทนที่โมเดล subagent ของ Dream Diary แบบไม่บังคับ ต้องมีplugins.entries.memory-core.subagent.allowModelOverride: true; จับคู่กับallowedModelsเพื่อจำกัดเป้าหมาย ข้อผิดพลาดโมเดลไม่พร้อมใช้งานจะลองใหม่หนึ่งครั้งด้วยโมเดลเริ่มต้นของเซสชัน ความล้มเหลวจาก trust หรือ allowlist จะไม่ถอยกลับแบบเงียบๆ- นโยบายเฟสและเกณฑ์เป็นรายละเอียดการใช้งานภายใน (ไม่ใช่คีย์ config ที่แสดงต่อผู้ใช้)
- config หน่วยความจำฉบับเต็มอยู่ใน เอกสารอ้างอิงการกำหนดค่าหน่วยความจำ:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Plugin บันเดิล Claude ที่เปิดใช้อยู่ยังสามารถให้ค่าเริ่มต้น Pi แบบฝังจาก
settings.jsonได้ด้วย OpenClaw จะนำค่าเหล่านั้นไปใช้เป็นการตั้งค่า agent ที่ผ่านการทำให้ปลอดภัยแล้ว ไม่ใช่เป็นแพตช์ config OpenClaw ดิบ plugins.slots.memory: เลือก id ของ Plugin หน่วยความจำที่ใช้งานอยู่ หรือ"none"เพื่อปิดใช้ Plugin หน่วยความจำplugins.slots.contextEngine: เลือก id ของ Plugin context engine ที่ใช้งานอยู่ ค่าเริ่มต้นเป็น"legacy"เว้นแต่คุณจะติดตั้งและเลือกเอนจินอื่น
ข้อผูกมัด
commitments ควบคุมหน่วยความจำการติดตามผลที่อนุมานได้: OpenClaw สามารถตรวจจับการ check-in จากเทิร์นบทสนทนาและส่งผ่านการรัน Heartbeat ได้
commitments.enabled: เปิดใช้การดึงข้อมูลด้วย LLM แบบซ่อน การจัดเก็บ และการส่งผ่าน Heartbeat สำหรับข้อผูกมัดการติดตามผลที่อนุมานได้ ค่าเริ่มต้น:false.commitments.maxPerDay: จำนวนข้อผูกมัดการติดตามผลที่อนุมานได้สูงสุดที่ส่งต่อเซสชัน agent ในหนึ่งวันแบบ rolling ค่าเริ่มต้น:3.
เบราว์เซอร์
evaluateEnabled: falseปิดใช้act:evaluateและwait --fn.tabCleanupเรียกคืนแท็บ agent หลักที่ติดตามไว้หลังจากไม่ได้ใช้งาน หรือเมื่อ เซสชันเกินขีดจำกัด ตั้งค่าidleMinutes: 0หรือmaxTabsPerSession: 0เพื่อ ปิดใช้โหมด cleanup รายการนั้นๆssrfPolicy.dangerouslyAllowPrivateNetworkถูกปิดใช้เมื่่อไม่ได้ตั้งค่า ดังนั้นการนำทางของเบราว์เซอร์จึงเข้มงวดโดยค่าเริ่มต้น- ตั้งค่า
ssrfPolicy.dangerouslyAllowPrivateNetwork: trueเฉพาะเมื่อคุณตั้งใจไว้วางใจการนำทางเบราว์เซอร์ในเครือข่ายส่วนตัว - ในโหมดเข้มงวด endpoint ของโปรไฟล์ CDP ระยะไกล (
profiles.*.cdpUrl) อยู่ภายใต้การบล็อกเครือข่ายส่วนตัวแบบเดียวกันระหว่างการตรวจสอบความสามารถในการเข้าถึง/การค้นพบ ssrfPolicy.allowPrivateNetworkยังรองรับเป็น alias แบบเก่า- ในโหมดเข้มงวด ให้ใช้
ssrfPolicy.hostnameAllowlistและssrfPolicy.allowedHostnamesสำหรับข้อยกเว้นที่ระบุชัดเจน - โปรไฟล์ระยะไกลเป็นแบบ attach-only (ปิดใช้ start/stop/reset)
profiles.*.cdpUrlยอมรับhttp://,https://,ws://, และwss://ใช้ HTTP(S) เมื่อคุณต้องการให้ OpenClaw ค้นพบ/json/version; ใช้ WS(S) เมื่อผู้ให้บริการของคุณให้ URL DevTools WebSocket โดยตรงremoteCdpTimeoutMsและremoteCdpHandshakeTimeoutMsใช้กับคำขอความสามารถในการเข้าถึง CDP ระยะไกลและattachOnlyรวมถึงคำขอเปิดแท็บ โปรไฟล์ local loopback ที่จัดการไว้จะคงค่าเริ่มต้น CDP แบบโลคัลไว้- หากบริการ CDP ที่จัดการจากภายนอกเข้าถึงได้ผ่าน loopback ให้ตั้งค่า
attachOnly: trueของโปรไฟล์นั้น ไม่เช่นนั้น OpenClaw จะถือว่า port loopback เป็น โปรไฟล์เบราว์เซอร์โลคัลที่จัดการอยู่ และอาจรายงานข้อผิดพลาดเรื่องการเป็นเจ้าของ port โลคัล - โปรไฟล์
existing-sessionใช้ Chrome MCP แทน CDP และสามารถ attach บน โฮสต์ที่เลือก หรือผ่าน node เบราว์เซอร์ที่เชื่อมต่ออยู่ - โปรไฟล์
existing-sessionสามารถตั้งค่าuserDataDirเพื่อกำหนดเป้าหมาย โปรไฟล์เบราว์เซอร์ที่ใช้ Chromium เฉพาะ เช่น Brave หรือ Edge - โปรไฟล์
existing-sessionคงข้อจำกัด route ปัจจุบันของ Chrome MCP: การกระทำที่ขับเคลื่อนด้วย snapshot/ref แทนการกำหนดเป้าหมายด้วย CSS selector, hook อัปโหลดไฟล์เดียว, ไม่มีการแทนที่ timeout ของ dialog, ไม่มีwait --load networkidle, และไม่มีresponsebody, การส่งออก PDF, การดักจับการดาวน์โหลด หรือการกระทำแบบ batch - โปรไฟล์
openclawแบบโลคัลที่จัดการไว้จะกำหนดcdpPortและcdpUrlอัตโนมัติ ให้ ตั้งค่าcdpUrlชัดเจนเฉพาะสำหรับ CDP ระยะไกล - โปรไฟล์โลคัลที่จัดการไว้สามารถตั้งค่า
executablePathเพื่อแทนที่ค่าbrowser.executablePathระดับโกลบอลสำหรับโปรไฟล์นั้น ใช้สิ่งนี้เพื่อรันโปรไฟล์หนึ่งใน Chrome และอีกโปรไฟล์ใน Brave - โปรไฟล์โลคัลที่จัดการไว้ใช้
browser.localLaunchTimeoutMsสำหรับการค้นพบ Chrome CDP HTTP หลังเริ่มโปรเซส และใช้browser.localCdpReadyTimeoutMsสำหรับ ความพร้อมของ CDP websocket หลังเปิดใช้งาน เพิ่มค่านี้บนโฮสต์ที่ช้ากว่าเมื่อ Chrome เริ่มสำเร็จแต่การตรวจสอบความพร้อมชนกับช่วง startup ค่าทั้งสองต้องเป็น จำนวนเต็มบวกไม่เกิน120000ms; ค่า config ที่ไม่ถูกต้องจะถูกปฏิเสธ - ลำดับการตรวจหาอัตโนมัติ: เบราว์เซอร์เริ่มต้นถ้าใช้ Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary
browser.executablePathและbrowser.profiles.<name>.executablePathทั้งคู่ ยอมรับ~และ~/...สำหรับไดเรกทอรี home ของ OS ก่อนเปิด ChromiumuserDataDirต่อโปรไฟล์บนโปรไฟล์existing-sessionจะถูกขยาย tilde ด้วย- บริการควบคุม: loopback เท่านั้น (port มาจาก
gateway.port, ค่าเริ่มต้น18791) extraArgsเพิ่มแฟล็กการเปิดใช้งานเพิ่มเติมให้ startup ของ Chromium โลคัล (เช่น--disable-gpu, ขนาดหน้าต่าง หรือแฟล็ก debug)
UI
seamColor: สีเน้นสำหรับ chrome ของ UI แอปเนทีฟ (สี bubble ของ Talk Mode ฯลฯ)assistant: การแทนที่ตัวตนของ Control UI ถอยกลับไปใช้ตัวตนของ agent ที่ใช้งานอยู่
Gateway
Gateway field details
Gateway field details
mode:local(เรียกใช้ gateway) หรือremote(เชื่อมต่อไปยัง gateway ระยะไกล) Gateway จะปฏิเสธการเริ่มทำงานเว้นแต่เป็นlocalport: พอร์ตมัลติเพล็กซ์พอร์ตเดียวสำหรับ WS + HTTP ลำดับความสำคัญ:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789bind: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") เพื่อฟังบนทุกอินเทอร์เฟซ - การตรวจสอบสิทธิ์: จำเป็นโดยค่าเริ่มต้น 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) โหมดนี้คาดหวังแหล่งที่มาของพร็อกซีที่ ไม่ใช่ loopback โดยค่าเริ่มต้น reverse proxy แบบ loopback บนโฮสต์เดียวกันต้องตั้งค่าgateway.auth.trustedProxy.allowLoopback = trueอย่างชัดเจน ผู้เรียกภายในบนโฮสต์เดียวกันสามารถใช้gateway.auth.passwordเป็น fallback โดยตรงในเครื่องได้ ส่วนgateway.auth.tokenยังคงใช้ร่วมกับโหมด trusted-proxy ไม่ได้gateway.auth.allowTailscale: เมื่อเป็นtrueเฮดเดอร์ตัวตนของ Tailscale Serve สามารถตอบสนองการตรวจสอบสิทธิ์ของ UI ควบคุม/WebSocket ได้ (ตรวจสอบผ่านtailscale whois) ปลายทาง HTTP API ไม่ ใช้การตรวจสอบสิทธิ์ด้วยเฮดเดอร์ Tailscale นั้น แต่จะใช้โหมดการตรวจสอบสิทธิ์ HTTP ปกติของ gateway แทน โฟลว์แบบไม่มีโทเค็นนี้ถือว่าโฮสต์ gateway น่าเชื่อถือ ค่าเริ่มต้นเป็นtrueเมื่อtailscale.mode = "serve"gateway.auth.rateLimit: ตัวจำกัดการตรวจสอบสิทธิ์ที่ล้มเหลวแบบเลือกได้ ใช้ต่อ IP ของไคลเอนต์และต่อขอบเขตการตรวจสอบสิทธิ์ (shared-secret และ device-token ถูกติดตามแยกกัน) ความพยายามที่ถูกบล็อกจะส่งคืน429+Retry-After- บนเส้นทาง UI ควบคุมของ Tailscale Serve แบบ async ความพยายามที่ล้มเหลวสำหรับ
{scope, clientIp}เดียวกันจะถูกจัดลำดับก่อนเขียนผลล้มเหลว ดังนั้นความพยายามผิดพร้อมกันจากไคลเอนต์เดียวกันอาจทำให้ตัวจำกัดทำงานตั้งแต่คำขอที่สอง แทนที่ทั้งสองคำขอจะแข่งผ่านไปเป็นเพียงการไม่ตรงกันธรรมดา gateway.auth.rateLimit.exemptLoopbackมีค่าเริ่มต้นเป็นtrue; ตั้งค่าเป็นfalseเมื่อคุณตั้งใจให้ทราฟฟิก localhost ถูกจำกัดอัตราด้วย (สำหรับการตั้งค่าทดสอบหรือการปรับใช้พร็อกซีแบบเข้มงวด)
- บนเส้นทาง UI ควบคุมของ Tailscale Serve แบบ async ความพยายามที่ล้มเหลวสำหรับ
- ความพยายามตรวจสอบสิทธิ์ WS ที่มีต้นทางจากเบราว์เซอร์จะถูกหน่วงเสมอโดยปิดการยกเว้น loopback (การป้องกันเชิงลึกต่อการ brute force localhost จากเบราว์เซอร์)
- บน loopback การล็อกเอาต์ที่มีต้นทางจากเบราว์เซอร์เหล่านั้นจะแยกตามค่า
Originที่ normalize แล้ว ดังนั้นความล้มเหลวซ้ำจากต้นทาง localhost หนึ่งจะไม่ล็อก ต้นทางอื่นโดยอัตโนมัติ tailscale.mode:serve(เฉพาะ tailnet, bind แบบ loopback) หรือfunnel(สาธารณะ, ต้องมีการตรวจสอบสิทธิ์)tailscale.preserveFunnel: เมื่อเป็นtrueและtailscale.mode = "serve"OpenClaw จะตรวจสอบtailscale funnel statusก่อนใช้ Serve ซ้ำตอนเริ่มต้น และข้าม หากเส้นทาง Funnel ที่กำหนดค่าจากภายนอกครอบคลุมพอร์ต gateway อยู่แล้ว ค่าเริ่มต้นfalsecontrolUi.allowedOrigins: allowlist ต้นทางเบราว์เซอร์อย่างชัดเจนสำหรับการเชื่อมต่อ WebSocket ของ Gateway จำเป็นเมื่อคาดว่าจะมีไคลเอนต์เบราว์เซอร์จากต้นทางที่ไม่ใช่ loopbackcontrolUi.chatMessageMaxWidth: ความกว้างสูงสุดแบบเลือกได้สำหรับข้อความแชทของ UI ควบคุมที่ถูกจัดกลุ่ม ยอมรับค่าความกว้าง CSS แบบมีขอบเขต เช่น960px,82%,min(1280px, 82%)และcalc(100% - 2rem)controlUi.dangerouslyAllowHostHeaderOriginFallback: โหมดอันตรายที่เปิดใช้ fallback ของต้นทางจากเฮดเดอร์ Host สำหรับการปรับใช้ที่ตั้งใจพึ่งพานโยบายต้นทางจากเฮดเดอร์ Hostremote.transport:ssh(ค่าเริ่มต้น) หรือdirect(ws/wss) สำหรับdirectค่าremote.urlต้องเป็นws://หรือwss://OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: ตัว override ฉุกเฉินของ environment ฝั่งไคลเอนต์ที่อนุญาต plaintextws://ไปยัง IP เครือข่ายส่วนตัว ที่เชื่อถือได้ ค่าเริ่มต้นยังคงเป็นเฉพาะ loopback สำหรับ plaintext ไม่มีค่าเทียบเท่าในopenclaw.jsonและการตั้งค่าเครือข่ายส่วนตัวของเบราว์เซอร์ เช่นbrowser.ssrfPolicy.dangerouslyAllowPrivateNetworkไม่มีผลต่อไคลเอนต์ WebSocket ของ Gatewaygateway.remote.token/.passwordเป็นฟิลด์ข้อมูลประจำตัวของไคลเอนต์ระยะไกล ฟิลด์เหล่านี้ไม่ได้กำหนดค่าการตรวจสอบสิทธิ์ของ gateway ด้วยตัวเองgateway.push.apns.relay.baseUrl: URL ฐาน HTTPS สำหรับรีเลย์ APNs ภายนอกที่ใช้โดยบิลด์ iOS ทางการ/TestFlight หลังจากเผยแพร่การลงทะเบียนแบบ relay-backed ไปยัง gateway แล้ว URL นี้ต้องตรงกับ URL รีเลย์ที่คอมไพล์ไว้ในบิลด์ iOSgateway.push.apns.relay.timeoutMs: timeout การส่งจาก gateway ไปยังรีเลย์เป็นมิลลิวินาที ค่าเริ่มต้นเป็น10000- การลงทะเบียนแบบ relay-backed จะถูกมอบหมายให้กับตัวตน gateway เฉพาะ แอป iOS ที่จับคู่จะดึง
gateway.identity.get, ใส่ตัวตนนั้นในการลงทะเบียนรีเลย์ และส่งต่อสิทธิ์อนุญาตการส่งที่จำกัดตามการลงทะเบียนไปยัง gateway gateway อื่นไม่สามารถนำการลงทะเบียนที่จัดเก็บไว้นั้นไปใช้ซ้ำได้ OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: env override ชั่วคราวสำหรับการกำหนดค่ารีเลย์ด้านบนOPENCLAW_APNS_RELAY_ALLOW_HTTP=true: ทางออกสำหรับการพัฒนาเท่านั้นสำหรับ URL รีเลย์ HTTP แบบ loopback URL รีเลย์สำหรับ production ควรอยู่บน HTTPSgateway.handshakeTimeoutMs: timeout การจับมือ WebSocket ของ Gateway ก่อนตรวจสอบสิทธิ์เป็นมิลลิวินาที ค่าเริ่มต้น:15000OPENCLAW_HANDSHAKE_TIMEOUT_MSมีลำดับความสำคัญเมื่อถูกตั้งค่า เพิ่มค่านี้บนโฮสต์ที่โหลดสูงหรือพลังประมวลผลต่ำ ซึ่งไคลเอนต์ในเครื่องอาจเชื่อมต่อขณะที่การอุ่นเครื่องตอนเริ่มต้นยังไม่เสร็จนิ่งgateway.channelHealthCheckMinutes: ช่วงเวลาตัวตรวจสอบสุขภาพ channel เป็นนาที ตั้งค่า0เพื่อปิดการรีสตาร์ทโดยตัวตรวจสอบสุขภาพทั่วทั้งระบบ ค่าเริ่มต้น:5gateway.channelStaleEventThresholdMinutes: เกณฑ์ stale-socket เป็นนาที ให้ค่านี้มากกว่าหรือเท่ากับgateway.channelHealthCheckMinutesค่าเริ่มต้น:30gateway.channelMaxRestartsPerHour: จำนวนการรีสตาร์ทสูงสุดโดยตัวตรวจสอบสุขภาพต่อ channel/account ในช่วงหนึ่งชั่วโมงแบบ rolling ค่าเริ่มต้น:10channels.<provider>.healthMonitor.enabled: การเลือกไม่ใช้การรีสตาร์ทโดยตัวตรวจสอบสุขภาพราย channel ขณะที่ยังเปิดตัวตรวจสอบทั่วทั้งระบบไว้channels.<provider>.accounts.<accountId>.healthMonitor.enabled: override ราย account สำหรับ channel แบบหลาย account เมื่อตั้งค่าแล้ว จะมีลำดับความสำคัญเหนือ override ระดับ channel- เส้นทางการเรียก local gateway สามารถใช้
gateway.remote.*เป็น fallback ได้เฉพาะเมื่อไม่ได้ตั้งค่าgateway.auth.* - หากกำหนดค่า
gateway.auth.token/gateway.auth.passwordอย่างชัดเจนผ่าน SecretRef และ resolve ไม่ได้ การ resolve จะล้มเหลวแบบปิด (ไม่มี remote fallback มาบดบัง) trustedProxies: IP ของ reverse proxy ที่ terminate TLS หรือแทรกเฮดเดอร์ forwarded-client ระบุเฉพาะพร็อกซีที่คุณควบคุม รายการ loopback ยังคงใช้ได้สำหรับการตั้งค่าพร็อกซี/การตรวจจับในเครื่องบนโฮสต์เดียวกัน (เช่น Tailscale Serve หรือ reverse proxy ในเครื่อง) แต่จะ ไม่ ทำให้คำขอ loopback มีสิทธิ์ใช้gateway.auth.mode: "trusted-proxy"allowRealIpFallback: เมื่อเป็นtruegateway จะยอมรับX-Real-IPหากไม่มีX-Forwarded-Forค่าเริ่มต้นfalseสำหรับพฤติกรรม fail-closedgateway.nodes.pairing.autoApproveCidrs: allowlist CIDR/IP แบบเลือกได้สำหรับอนุมัติการจับคู่อุปกรณ์ Node ครั้งแรกโดยอัตโนมัติเมื่อไม่มีขอบเขตที่ร้องขอ จะถูกปิดใช้งานเมื่อไม่ได้ตั้งค่า สิ่งนี้ไม่อนุมัติการจับคู่ของ operator/เบราว์เซอร์/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จะลบคำสั่งแม้ค่าเริ่มต้นของแพลตฟอร์มหรือการอนุญาตอย่างชัดเจนจะรวมคำสั่งนั้นไว้ หลังจาก 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 ว่างจะถือว่าไม่ได้ตั้งค่า; ใช้gateway.http.endpoints.responses.files.allowUrl=falseและ/หรือgateway.http.endpoints.responses.images.allowUrl=falseเพื่อปิดการดึง URL
- เฮดเดอร์เพิ่มความเข้มงวดของ response แบบเลือกได้:
gateway.http.securityHeaders.strictTransportSecurity(ตั้งค่าเฉพาะสำหรับต้นทาง HTTPS ที่คุณควบคุม; ดู การตรวจสอบสิทธิ์ผ่าน Trusted Proxy)
การแยกหลายอินสแตนซ์
เรียกใช้ gateway หลายตัวบนโฮสต์เดียวด้วยพอร์ตและไดเรกทอรีสถานะที่ไม่ซ้ำกัน:--dev (ใช้ ~/.openclaw-dev + พอร์ต 19001), --profile <name> (ใช้ ~/.openclaw-<name>)
ดู Gateway หลายตัว
gateway.tls
enabled: เปิดใช้การ terminate TLS ที่ listener ของ gateway (HTTPS/WSS) (ค่าเริ่มต้น:false)autoGenerate: สร้างคู่ cert/key แบบ self-signed ในเครื่องโดยอัตโนมัติเมื่อไม่ได้กำหนดค่าไฟล์อย่างชัดเจน; ใช้สำหรับ local/dev เท่านั้นcertPath: เส้นทางไฟล์ระบบไปยังไฟล์ใบรับรอง TLSkeyPath: เส้นทางไฟล์ระบบไปยังไฟล์ private key ของ TLS; จำกัดสิทธิ์การเข้าถึงไว้caPath: เส้นทาง CA bundle แบบเลือกได้สำหรับการตรวจสอบไคลเอนต์หรือ trust chain แบบกำหนดเอง
gateway.reload
mode: ควบคุมวิธีใช้การแก้ไข config ใน runtime"off": ไม่สนใจการแก้ไขแบบ live; การเปลี่ยนแปลงต้อง restart อย่างชัดเจน"restart": restart โปรเซส gateway เสมอเมื่อ config เปลี่ยน"hot": ใช้การเปลี่ยนแปลงในโปรเซสโดยไม่ restart"hybrid"(ค่าเริ่มต้น): ลอง hot reload ก่อน; fallback ไป restart หากจำเป็น
debounceMs: ช่วง debounce เป็น ms ก่อนใช้การเปลี่ยนแปลง config (จำนวนเต็มไม่ติดลบ)deferralTimeoutMs: เวลาสูงสุดแบบเลือกได้เป็น ms สำหรับรอการดำเนินการที่ยังค้างอยู่ก่อนบังคับ restart หรือ hot reload ของ channel ละไว้เพื่อใช้เวลารอแบบมีขอบเขตค่าเริ่มต้น (300000); ตั้งค่า0เพื่อรอไม่มีกำหนดและบันทึกคำเตือน still-pending เป็นระยะ
Hooks
Authorization: Bearer <token> หรือ x-openclaw-token: <token>
โทเค็นฮุกในสตริงคำค้นจะถูกปฏิเสธ
หมายเหตุด้านการตรวจสอบความถูกต้องและความปลอดภัย:
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จากเพย์โหลดคำขอจะถูกยอมรับเฉพาะเมื่อhooks.allowRequestSessionKey=true(ค่าเริ่มต้น:false)
POST /hooks/<name>→ แก้ผ่านhooks.mappings- ค่า
sessionKeyของการแมปที่เรนเดอร์จากเทมเพลตจะถือว่าเป็นค่าที่ส่งมาจากภายนอก และต้องใช้hooks.allowRequestSessionKey=trueเช่นกัน
- ค่า
รายละเอียดการแมป
รายละเอียดการแมป
match.pathจับคู่เส้นทางย่อยหลัง/hooks(เช่น/hooks/gmail→gmail)match.sourceจับคู่ฟิลด์เพย์โหลดสำหรับเส้นทางทั่วไป- เทมเพลตอย่าง
{{messages[0].subject}}อ่านค่าจากเพย์โหลด transformสามารถชี้ไปยังโมดูล JS/TS ที่คืนค่าการกระทำของฮุกได้transform.moduleต้องเป็นเส้นทางแบบสัมพัทธ์และอยู่ภายในhooks.transformsDir(เส้นทางแบบสัมบูรณ์และการไต่เส้นทางจะถูกปฏิเสธ)- เก็บ
hooks.transformsDirไว้ใต้~/.openclaw/hooks/transforms; ไดเรกทอรี Skills ของเวิร์กสเปซจะถูกปฏิเสธ หากopenclaw doctorรายงานว่าเส้นทางนี้ไม่ถูกต้อง ให้ย้ายโมดูลแปลงเข้าไปในไดเรกทอรีแปลงของฮุก หรือลบhooks.transformsDir
agentIdส่งต่อไปยังเอเจนต์เฉพาะ; ID ที่ไม่รู้จักจะย้อนกลับไปใช้ค่าเริ่มต้นallowedAgentIds: จำกัดการกำหนดเส้นทางแบบชัดเจน (*หรือไม่ได้ระบุ = อนุญาตทั้งหมด,[]= ปฏิเสธทั้งหมด)defaultSessionKey: คีย์เซสชันคงที่แบบไม่บังคับสำหรับการรันเอเจนต์ฮุกที่ไม่มีsessionKeyชัดเจนallowRequestSessionKey: อนุญาตให้ผู้เรียก/hooks/agentและคีย์เซสชันการแมปที่ขับเคลื่อนด้วยเทมเพลตตั้งค่าsessionKey(ค่าเริ่มต้น:false)allowedSessionKeyPrefixes: รายการอนุญาตคำนำหน้าแบบไม่บังคับสำหรับค่าsessionKeyที่ระบุชัดเจน (คำขอ + การแมป) เช่น["hook:"]จะกลายเป็นสิ่งจำเป็นเมื่อการแมปหรือพรีเซ็ตใดใช้sessionKeyแบบเทมเพลตdeliver: trueส่งคำตอบสุดท้ายไปยังช่องทาง;channelมีค่าเริ่มต้นเป็นlastmodelแทนที่ LLM สำหรับการรันฮุกนี้ (ต้องได้รับอนุญาตหากตั้งค่าแคตตาล็อกโมเดลไว้)
การผสานรวม Gmail
- พรีเซ็ต Gmail ในตัวใช้
sessionKey: "hook:gmail:{{messages[0].id}}" - หากคุณคงการกำหนดเส้นทางรายข้อความนั้นไว้ ให้ตั้งค่า
hooks.allowRequestSessionKey: trueและจำกัดhooks.allowedSessionKeyPrefixesให้ตรงกับเนมสเปซ Gmail เช่น["hook:", "hook:gmail:"] - หากคุณต้องใช้
hooks.allowRequestSessionKey: falseให้แทนที่พรีเซ็ตด้วยsessionKeyแบบคงที่แทนค่าเริ่มต้นแบบเทมเพลต
- Gateway เริ่ม
gog gmail watch serveอัตโนมัติเมื่อบูตหากมีการกำหนดค่าไว้ ตั้งค่าOPENCLAW_SKIP_GMAIL_WATCHER=1เพื่อปิดใช้งาน - อย่ารัน
gog gmail watch serveแยกต่างหากควบคู่กับ Gateway
โฮสต์ Plugin Canvas
- ให้บริการ 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 ต้องใช้การยืนยันตัวตน Gateway (โทเค็น/รหัสผ่าน/พร็อกซีที่เชื่อถือได้) เช่นเดียวกับพื้นผิว HTTP อื่นของ Gateway
- โดยทั่วไป Node WebViews ไม่ส่งส่วนหัวการยืนยันตัวตน; หลังจากจับคู่และเชื่อมต่อโหนดแล้ว Gateway จะประกาศ URL ความสามารถที่จำกัดขอบเขตตามโหนดสำหรับการเข้าถึง canvas/A2UI
- URL ความสามารถผูกกับเซสชัน WS ของโหนดที่ใช้งานอยู่และหมดอายุอย่างรวดเร็ว ไม่มีการใช้การย้อนกลับตาม IP
- แทรกไคลเอนต์โหลดซ้ำสดเข้าใน HTML ที่ให้บริการ
- สร้าง
index.htmlเริ่มต้นอัตโนมัติเมื่อว่างเปล่า - ให้บริการ A2UI ที่
/__openclaw__/a2ui/ด้วย - การเปลี่ยนแปลงต้องรีสตาร์ต Gateway
- ปิดใช้งานการโหลดซ้ำสดสำหรับไดเรกทอรีขนาดใหญ่หรือข้อผิดพลาด
EMFILE
การค้นพบ
mDNS (Bonjour)
minimal(ค่าเริ่มต้นเมื่อเปิดใช้งาน Pluginbonjourที่บันเดิลมา): ละcliPath+sshPortจากระเบียน TXTfull: รวมcliPath+sshPort; การโฆษณามัลติคาสต์ LAN ยังต้องเปิดใช้งาน Pluginbonjourที่บันเดิลมาoff: ระงับการโฆษณามัลติคาสต์ LAN โดยไม่เปลี่ยนการเปิดใช้งาน Plugin- Plugin
bonjourที่บันเดิลมาจะเริ่มอัตโนมัติบนโฮสต์ macOS และเป็นแบบเลือกเปิดบน Linux, Windows และการปรับใช้ Gateway แบบคอนเทนเนอร์ - ชื่อโฮสต์มีค่าเริ่มต้นเป็นชื่อโฮสต์ของระบบเมื่อเป็นป้าย DNS ที่ถูกต้อง มิฉะนั้นจะย้อนกลับไปใช้
openclawแทนที่ด้วยOPENCLAW_MDNS_HOSTNAME
พื้นที่กว้าง (DNS-SD)
~/.openclaw/dns/ สำหรับการค้นพบข้ามเครือข่าย ให้จับคู่กับเซิร์ฟเวอร์ DNS (แนะนำ CoreDNS) + Tailscale split DNS
การตั้งค่า: openclaw dns setup --apply
สภาพแวดล้อม
env (ตัวแปรสภาพแวดล้อมแบบอินไลน์)
- ตัวแปรสภาพแวดล้อมแบบอินไลน์จะถูกใช้เฉพาะเมื่อ process env ไม่มีคีย์นั้นอยู่
- ไฟล์
.env: CWD.env+~/.openclaw/.env(ทั้งสองไม่แทนที่ตัวแปรที่มีอยู่) shellEnv: นำเข้าคีย์ที่คาดไว้แต่ยังขาดจากโปรไฟล์ login shell ของคุณ- ดูลำดับความสำคัญทั้งหมดได้ที่ สภาพแวดล้อม
การแทนที่ตัวแปรสภาพแวดล้อม
อ้างอิงตัวแปรสภาพแวดล้อมในสตริง config ใดก็ได้ด้วย${VAR_NAME}:
- จับคู่เฉพาะชื่อที่เป็นตัวพิมพ์ใหญ่:
[A-Z_][A-Z0-9_]* - ตัวแปรที่หายไปหรือว่างจะทำให้เกิดข้อผิดพลาดขณะโหลด config
- Escape ด้วย
$${VAR}เพื่อให้ได้${VAR}แบบ literal - ใช้งานได้กับ
$include
ข้อมูลลับ
การอ้างอิงข้อมูลลับเป็นแบบเพิ่มทับ: ค่าข้อความธรรมดายังคงใช้งานได้SecretRef
ใช้รูปแบบอ็อบเจกต์เดียว:
- รูปแบบ
provider:^[a-z][a-z0-9_-]{0,63}$ - รูปแบบ id ของ
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - id ของ
source: "file": JSON pointer แบบ absolute (เช่น"/providers/openai/apiKey") - รูปแบบ id ของ
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$ - id ของ
source: "exec"ต้องไม่มีเซกเมนต์พาธที่คั่นด้วย slash เป็น.หรือ..(เช่นa/../bจะถูกปฏิเสธ)
พื้นผิวข้อมูลรับรองที่รองรับ
- เมทริกซ์มาตรฐาน: พื้นผิวข้อมูลรับรอง SecretRef
- เป้าหมาย
secrets applyรองรับพาธข้อมูลรับรองของopenclaw.json - การอ้างอิงใน
auth-profiles.jsonรวมอยู่ในการ resolve ขณะรันไทม์และขอบเขตการ audit
Config ของ provider ข้อมูลลับ
- provider
fileรองรับmode: "json"และmode: "singleValue"(idต้องเป็น"value"ในโหมด singleValue) - พาธของ provider แบบ file และ exec จะล้มเหลวแบบปิดเมื่อไม่สามารถตรวจสอบ Windows ACL ได้ ตั้งค่า
allowInsecurePath: trueเฉพาะกับพาธที่เชื่อถือได้ซึ่งไม่สามารถตรวจสอบได้เท่านั้น - provider
execต้องใช้พาธcommandแบบ absolute และใช้ protocol payload บน stdin/stdout - โดยค่าเริ่มต้น พาธคำสั่งที่เป็น symlink จะถูกปฏิเสธ ตั้งค่า
allowSymlinkCommand: trueเพื่ออนุญาตพาธ symlink พร้อมตรวจสอบความถูกต้องของพาธเป้าหมายที่ resolve แล้ว - หากกำหนดค่า
trustedDirsไว้ การตรวจสอบ trusted-dir จะใช้กับพาธเป้าหมายที่ resolve แล้ว - environment ของ child
execจะมีให้น้อยที่สุดโดยค่าเริ่มต้น ให้ส่งตัวแปรที่จำเป็นอย่างชัดเจนด้วยpassEnv - การอ้างอิงข้อมูลลับจะถูก resolve ตอน activation เป็น snapshot ในหน่วยความจำ จากนั้นพาธ request จะอ่านจาก snapshot เท่านั้น
- การกรอง active-surface จะใช้ระหว่าง activation: การอ้างอิงที่ resolve ไม่ได้บนพื้นผิวที่เปิดใช้งานจะทำให้ startup/reload ล้มเหลว ส่วนพื้นผิวที่ไม่ได้ใช้งานจะถูกข้ามพร้อม diagnostics
ที่จัดเก็บการยืนยันตัวตน
- โปรไฟล์ต่อ agent จะถูกเก็บไว้ที่
<agentDir>/auth-profiles.json auth-profiles.jsonรองรับการอ้างอิงระดับค่า (keyRefสำหรับapi_key,tokenRefสำหรับtoken) สำหรับโหมดข้อมูลรับรองแบบ static- แผนที่
auth-profiles.jsonแบบ flat เดิม เช่น{ "provider": { "apiKey": "..." } }ไม่ใช่รูปแบบรันไทม์;openclaw doctor --fixจะเขียนใหม่เป็นโปรไฟล์ API-key มาตรฐานprovider:defaultพร้อมข้อมูลสำรอง.legacy-flat.*.bak - โปรไฟล์โหมด OAuth (
auth.profiles.<id>.mode = "oauth") ไม่รองรับข้อมูลรับรอง auth-profile ที่อิงกับ SecretRef - ข้อมูลรับรองรันไทม์แบบ static มาจาก snapshot ที่ resolve แล้วในหน่วยความจำ; รายการ
auth.jsonแบบ static เดิมจะถูกล้างเมื่อพบ - การนำเข้า OAuth เดิมมาจาก
~/.openclaw/credentials/oauth.json - ดู OAuth
- พฤติกรรมรันไทม์ของข้อมูลลับและเครื่องมือ
audit/configure/apply: การจัดการข้อมูลลับ
auth.cooldowns
billingBackoffHours: ค่า backoff พื้นฐานเป็นชั่วโมงเมื่อโปรไฟล์ล้มเหลวจากข้อผิดพลาดด้านการเรียกเก็บเงินจริงหรือเครดิตไม่เพียงพอ (ค่าเริ่มต้น:5) ข้อความเกี่ยวกับการเรียกเก็บเงินที่ชัดเจนยังสามารถมาอยู่ที่นี่ได้แม้ในคำตอบ401/403แต่ตัวจับคู่ข้อความเฉพาะผู้ให้บริการจะยังจำกัดอยู่กับผู้ให้บริการที่เป็นเจ้าของเท่านั้น (เช่น OpenRouterKey limit exceeded) ข้อความ HTTP402ที่ลองใหม่ได้เกี่ยวกับกรอบเวลาการใช้งาน หรือขีดจำกัดการใช้จ่ายขององค์กร/เวิร์กสเปซ จะยังอยู่ในเส้นทางrate_limitแทนbillingBackoffHoursByProvider: การแทนที่รายผู้ให้บริการแบบไม่บังคับสำหรับจำนวนชั่วโมง backoff ด้านการเรียกเก็บเงินbillingMaxHours: เพดานเป็นชั่วโมงสำหรับการเติบโตแบบเอ็กซ์โพเนนเชียลของ backoff ด้านการเรียกเก็บเงิน (ค่าเริ่มต้น:24)authPermanentBackoffMinutes: ค่า backoff พื้นฐานเป็นนาทีสำหรับความล้มเหลวauth_permanentที่มีความมั่นใจสูง (ค่าเริ่มต้น:10)authPermanentMaxMinutes: เพดานเป็นนาทีสำหรับการเติบโตของ backoffauth_permanent(ค่าเริ่มต้น:60)failureWindowHours: หน้าต่างเลื่อนเป็นชั่วโมงที่ใช้สำหรับตัวนับ backoff (ค่าเริ่มต้น:24)overloadedProfileRotations: จำนวนสูงสุดของการหมุนเวียนโปรไฟล์การยืนยันตัวตนภายในผู้ให้บริการเดียวกันสำหรับข้อผิดพลาดโอเวอร์โหลด ก่อนสลับไปใช้ model fallback (ค่าเริ่มต้น:1) รูปแบบผู้ให้บริการไม่ว่าง เช่นModelNotReadyExceptionจะมาอยู่ที่นี่overloadedBackoffMs: ดีเลย์คงที่ก่อนลองหมุนเวียนผู้ให้บริการ/โปรไฟล์ที่โอเวอร์โหลดใหม่ (ค่าเริ่มต้น:0)rateLimitedProfileRotations: จำนวนสูงสุดของการหมุนเวียนโปรไฟล์การยืนยันตัวตนภายในผู้ให้บริการเดียวกันสำหรับข้อผิดพลาด rate-limit ก่อนสลับไปใช้ model fallback (ค่าเริ่มต้น:1) บักเก็ต rate-limit นั้นรวมข้อความที่มีรูปแบบจากผู้ให้บริการ เช่นToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededและresource exhausted
การบันทึกล็อก
- ไฟล์ล็อกเริ่มต้น:
/tmp/openclaw/openclaw-YYYY-MM-DD.log - ตั้งค่า
logging.fileเพื่อใช้เส้นทางคงที่ consoleLevelจะเพิ่มเป็นdebugเมื่อใช้--verbosemaxFileBytes: ขนาดไฟล์ล็อกที่ใช้งานอยู่สูงสุดเป็นไบต์ก่อนหมุนไฟล์ (จำนวนเต็มบวก; ค่าเริ่มต้น:104857600= 100 MB) OpenClaw จะเก็บไฟล์เก็บถาวรแบบมีหมายเลขไว้ข้างไฟล์ที่ใช้งานอยู่ได้สูงสุดห้าไฟล์redactSensitive/redactPatterns: การปิดบังแบบดีที่สุดเท่าที่ทำได้สำหรับเอาต์พุตคอนโซล, ไฟล์ล็อก, ระเบียนล็อก OTLP และข้อความถอดความเซสชันที่เก็บไว้redactSensitive: "off"ปิดใช้งานเฉพาะนโยบายล็อก/ข้อความถอดความทั่วไปนี้เท่านั้น; พื้นผิวความปลอดภัยของ UI/เครื่องมือ/การวินิจฉัยยังคงปิดบังความลับก่อนปล่อยออก
การวินิจฉัย
enabled: สวิตช์หลักสำหรับเอาต์พุตเครื่องมือวัด (ค่าเริ่มต้น:true)flags: อาร์เรย์ของสตริงแฟล็กที่เปิดใช้เอาต์พุตล็อกแบบเจาะจง (รองรับไวลด์การ์ด เช่น"telegram.*"หรือ"*")stuckSessionWarnMs: เกณฑ์อายุที่ไม่มีความคืบหน้าเป็นมิลลิวินาทีสำหรับจัดประเภทเซสชันประมวลผลที่ทำงานนานเป็นsession.long_running,session.stalledหรือsession.stuckการตอบกลับ, เครื่องมือ, สถานะ, บล็อก และความคืบหน้า ACP จะรีเซ็ตตัวจับเวลา; การวินิจฉัยsession.stuckที่ซ้ำจะ back off ขณะที่ยังไม่เปลี่ยนแปลงstuckSessionAbortMs: เกณฑ์อายุที่ไม่มีความคืบหน้าเป็นมิลลิวินาทีก่อนที่งานที่ใช้งานอยู่ซึ่งค้างและเข้าเกณฑ์อาจถูก abort-drained เพื่อกู้คืน เมื่อไม่ได้ตั้งค่า OpenClaw จะใช้หน้าต่างการรันแบบฝังที่ขยายและปลอดภัยกว่าอย่างน้อย 10 นาทีและ 5 เท่าของstuckSessionWarnMsotel.enabled: เปิดใช้ไปป์ไลน์การส่งออก OpenTelemetry (ค่าเริ่มต้น:false) สำหรับการกำหนดค่าเต็ม แคตตาล็อกสัญญาณ และโมเดลความเป็นส่วนตัว โปรดดู การส่งออก OpenTelemetryotel.endpoint: URL ของตัวรวบรวมสำหรับการส่งออก OTelotel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: endpoint OTLP เฉพาะสัญญาณแบบไม่บังคับ เมื่อตั้งค่าไว้ จะเขียนทับotel.endpointสำหรับสัญญาณนั้นเท่านั้นotel.protocol:"http/protobuf"(ค่าเริ่มต้น) หรือ"grpc"otel.headers: ส่วนหัวเมตาดาต้า HTTP/gRPC เพิ่มเติมที่ส่งพร้อมคำขอส่งออก OTelotel.serviceName: ชื่อบริการสำหรับแอตทริบิวต์ทรัพยากรotel.traces/otel.metrics/otel.logs: เปิดใช้การส่งออก trace, metrics หรือ logotel.sampleRate: อัตราการสุ่มตัวอย่าง trace0-1otel.flushIntervalMs: ช่วงเวลาการ flush telemetry เป็นระยะในมิลลิวินาทีotel.captureContent: การจับเนื้อหาดิบแบบเลือกเปิดสำหรับแอตทริบิวต์ span ของ OTEL ค่าเริ่มต้นคือปิด ค่า Booleantrueจะจับเนื้อหาข้อความ/เครื่องมือที่ไม่ใช่ระบบ; รูปแบบอ็อบเจ็กต์ให้คุณเปิดใช้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: สวิตช์สภาพแวดล้อมสำหรับโฮสต์ที่ได้ลงทะเบียน OpenTelemetry SDK ส่วนกลางไว้แล้ว จากนั้น OpenClaw จะข้ามการเริ่ม/ปิด SDK ที่ Plugin เป็นเจ้าของ ขณะยังคงให้ตัวฟังการวินิจฉัยทำงานอยู่OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTและOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: ตัวแปรสภาพแวดล้อม endpoint เฉพาะสัญญาณที่ใช้เมื่อไม่ได้ตั้งค่าคีย์การกำหนดค่าที่ตรงกันcacheTrace.enabled: บันทึกสแนปช็อต cache trace สำหรับการรันแบบฝัง (ค่าเริ่มต้น:false)cacheTrace.filePath: เส้นทางเอาต์พุตสำหรับ cache trace JSONL (ค่าเริ่มต้น:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl)cacheTrace.includeMessages/includePrompt/includeSystem: ควบคุมสิ่งที่รวมอยู่ในเอาต์พุต cache trace (ค่าเริ่มต้นทั้งหมด:true)
การอัปเดต
channel: ช่องทางเผยแพร่สำหรับการติดตั้ง npm/git -"stable","beta"หรือ"dev"checkOnStart: ตรวจหาการอัปเดต npm เมื่อ Gateway เริ่มทำงาน (ค่าเริ่มต้น:true)auto.enabled: เปิดใช้งานการอัปเดตอัตโนมัติในพื้นหลังสำหรับการติดตั้งแพ็กเกจ (ค่าเริ่มต้น:false)auto.stableDelayHours: ดีเลย์ขั้นต่ำเป็นชั่วโมงก่อนใช้การอัปเดตอัตโนมัติสำหรับช่องทาง stable (ค่าเริ่มต้น:6; สูงสุด:168)auto.stableJitterHours: หน้าต่างกระจายการ rollout เพิ่มเติมของช่องทาง stable เป็นชั่วโมง (ค่าเริ่มต้น:12; สูงสุด:168)auto.betaCheckIntervalHours: ความถี่ที่การตรวจสอบช่องทาง beta ทำงานเป็นชั่วโมง (ค่าเริ่มต้น:1; สูงสุด:24)
ACP
enabled: feature gate ส่วนกลางของ ACP (ค่าเริ่มต้น:true; ตั้งเป็นfalseเพื่อซ่อน ACP dispatch และ affordance การ spawn)dispatch.enabled: gate อิสระสำหรับการ dispatch turn ของเซสชัน ACP (ค่าเริ่มต้น:true) ตั้งเป็นfalseเพื่อคงคำสั่ง ACP ไว้ในขณะที่บล็อกการดำเนินการbackend: id แบ็กเอนด์รันไทม์ ACP เริ่มต้น (ต้องตรงกับ Plugin รันไทม์ ACP ที่ลงทะเบียนไว้) ติดตั้ง Plugin แบ็กเอนด์ก่อน และหากตั้งค่าplugins.allowไว้ ให้รวม id ของ Plugin แบ็กเอนด์ (เช่นacpx) มิฉะนั้นแบ็กเอนด์ ACP จะไม่โหลดdefaultAgent: id เอเจนต์เป้าหมาย ACP สำรองเมื่อการ spawn ไม่ได้ระบุเป้าหมายอย่างชัดเจนallowedAgents: allowlist ของ id เอเจนต์ที่อนุญาตสำหรับเซสชันรันไทม์ ACP; ค่าว่างหมายถึงไม่มีข้อจำกัดเพิ่มเติมmaxConcurrentSessions: จำนวนสูงสุดของเซสชัน ACP ที่ทำงานพร้อมกันstream.coalesceIdleMs: หน้าต่าง idle flush เป็นมิลลิวินาทีสำหรับข้อความที่สตรีมstream.maxChunkChars: ขนาดชิ้นสูงสุดก่อนแบ่งการฉายบล็อกที่สตรีมstream.repeatSuppression: ระงับบรรทัดสถานะ/เครื่องมือที่ซ้ำกันต่อ turn (ค่าเริ่มต้น:true)stream.deliveryMode:"live"สตรีมแบบเพิ่มทีละส่วน;"final_only"บัฟเฟอร์จนถึงเหตุการณ์สิ้นสุดของ turnstream.hiddenBoundarySeparator: ตัวคั่นก่อนข้อความที่มองเห็นได้หลังเหตุการณ์เครื่องมือที่ซ่อนอยู่ (ค่าเริ่มต้น:"paragraph")stream.maxOutputChars: จำนวนอักขระเอาต์พุตของผู้ช่วยสูงสุดที่ฉายต่อ ACP turnstream.maxSessionUpdateChars: จำนวนอักขระสูงสุดสำหรับบรรทัดสถานะ/อัปเดต ACP ที่ฉายstream.tagVisibility: ระเบียนของชื่อแท็กไปยังการแทนที่การมองเห็นแบบ boolean สำหรับเหตุการณ์ที่สตรีมruntime.ttlMinutes: TTL เมื่อ idle เป็นนาทีสำหรับ worker เซสชัน ACP ก่อนเข้าเกณฑ์ล้างข้อมูลruntime.installCommand: คำสั่งติดตั้งแบบไม่บังคับที่จะรันเมื่อ bootstrap สภาพแวดล้อมรันไทม์ ACP
CLI
cli.banner.taglineModeควบคุมสไตล์ tagline ของแบนเนอร์:"random"(ค่าเริ่มต้น): tagline ตลก/ตามฤดูกาลที่หมุนเวียน"default": tagline กลางแบบคงที่ (All your chats, one OpenClaw.)"off": ไม่มีข้อความ tagline (ยังแสดงชื่อ/เวอร์ชันของแบนเนอร์)
- หากต้องการซ่อนแบนเนอร์ทั้งหมด (ไม่ใช่แค่ tagline) ให้ตั้งค่า env
OPENCLAW_HIDE_BANNER=1
Wizard
เมตาดาต้าที่เขียนโดยโฟลว์ตั้งค่าแบบมีคำแนะนำของ CLI (onboard, configure, doctor):
ข้อมูลประจำตัว
ดูฟิลด์ข้อมูลประจำตัวagents.list ใต้ ค่าเริ่มต้นของเอเจนต์
Bridge (เลิกใช้แล้ว, ถูกนำออก)
บิลด์ปัจจุบันไม่มี TCP bridge อีกต่อไป Node เชื่อมต่อผ่าน WebSocket ของ Gateway คีย์bridge.* ไม่เป็นส่วนหนึ่งของสคีมาการกำหนดค่าอีกต่อไป (การตรวจสอบจะล้มเหลวจนกว่าจะนำออก; openclaw doctor --fix สามารถลบคีย์ที่ไม่รู้จักได้)
การกำหนดค่า bridge รุ่นเก่า (ข้อมูลอ้างอิงย้อนหลัง)
การกำหนดค่า bridge รุ่นเก่า (ข้อมูลอ้างอิงย้อนหลัง)
Cron
sessionRetention: ระยะเวลาที่เก็บเซสชันการรัน Cron แบบแยกที่เสร็จสมบูรณ์แล้วก่อนตัดออกจากsessions.jsonนอกจากนี้ยังควบคุมการล้าง transcript ของ Cron ที่ถูกลบและเก็บถาวรไว้ด้วย ค่าเริ่มต้น:24h; ตั้งเป็นfalseเพื่อปิดใช้งาน.runLog.maxBytes: ขนาดสูงสุดต่อไฟล์บันทึกการรัน (cron/runs/<jobId>.jsonl) ก่อนตัดข้อมูล ค่าเริ่มต้น:2_000_000ไบต์.runLog.keepLines: บรรทัดล่าสุดที่เก็บไว้เมื่อมีการตัดบันทึกการรัน ค่าเริ่มต้น:2000.webhookToken: โทเคน bearer ที่ใช้สำหรับการส่ง POST ของ Cron Webhook (delivery.mode = "webhook"), หากละไว้จะไม่ส่งส่วนหัว auth.webhook: URL ของ Webhook สำรองแบบเดิมที่เลิกใช้แล้ว (http/https) ใช้เฉพาะกับงานที่บันทึกไว้ซึ่งยังมีnotify: true.
cron.retry
maxAttempts: จำนวนครั้งสูงสุดในการลองใหม่สำหรับงานแบบครั้งเดียวเมื่อเกิดข้อผิดพลาดชั่วคราว (ค่าเริ่มต้น:3; ช่วง:0-10).backoffMs: อาร์เรย์ของระยะเวลาหน่วง backoff เป็นมิลลิวินาทีสำหรับแต่ละครั้งที่ลองใหม่ (ค่าเริ่มต้น:[30000, 60000, 300000]; 1-10 รายการ).retryOn: ประเภทข้อผิดพลาดที่ทำให้ลองใหม่ -"rate_limit","overloaded","network","timeout","server_error"ละไว้เพื่อลองใหม่กับประเภทชั่วคราวทั้งหมด.
cron.failureAlert
enabled: เปิดใช้การแจ้งเตือนความล้มเหลวสำหรับงาน Cron (ค่าเริ่มต้น:false).after: จำนวนความล้มเหลวต่อเนื่องก่อนส่งการแจ้งเตือน (จำนวนเต็มบวก, ต่ำสุด:1).cooldownMs: จำนวนมิลลิวินาทีขั้นต่ำระหว่างการแจ้งเตือนซ้ำสำหรับงานเดียวกัน (จำนวนเต็มไม่ติดลบ).includeSkipped: นับการรันที่ถูกข้ามต่อเนื่องรวมเข้ากับเกณฑ์การแจ้งเตือน (ค่าเริ่มต้น:false) การรันที่ถูกข้ามจะถูกติดตามแยกต่างหากและไม่กระทบ backoff ของข้อผิดพลาดการดำเนินการ.mode: โหมดการส่ง -"announce"ส่งผ่านข้อความของช่อง;"webhook"โพสต์ไปยัง Webhook ที่กำหนดค่าไว้.accountId: id ของบัญชีหรือช่องที่เป็นทางเลือกเพื่อจำกัดขอบเขตการส่งการแจ้งเตือน.
cron.failureDestination
- ปลายทางเริ่มต้นสำหรับการแจ้งเตือนความล้มเหลวของ Cron ในทุกงาน.
mode:"announce"หรือ"webhook"; ค่าเริ่มต้นเป็น"announce"เมื่อมีข้อมูลเป้าหมายเพียงพอ.channel: การแทนที่ช่องสำหรับการส่งแบบ announce"last"ใช้ช่องส่งล่าสุดที่ทราบซ้ำ.to: เป้าหมาย announce หรือ URL ของ Webhook ที่ระบุอย่างชัดเจน จำเป็นสำหรับโหมด Webhook.accountId: การแทนที่บัญชีสำหรับการส่งที่เป็นทางเลือก.delivery.failureDestinationรายงานต่องานจะแทนที่ค่าเริ่มต้นส่วนกลางนี้.- เมื่อไม่ได้ตั้งค่าปลายทางความล้มเหลวทั้งแบบส่วนกลางและรายงานต่องาน งานที่ส่งผ่าน
announceอยู่แล้วจะย้อนกลับไปใช้เป้าหมาย announce หลักนั้นเมื่อเกิดความล้มเหลว. - รองรับ
delivery.failureDestinationเฉพาะกับงานsessionTarget="isolated"เว้นแต่delivery.modeหลักของงานเป็น"webhook".
ตัวแปรเทมเพลตของโมเดลสื่อ
ตัวแทนเทมเพลตที่ขยายในtools.media.models[].args:
| ตัวแปร | คำอธิบาย |
|---|---|
{{Body}} | เนื้อหาข้อความขาเข้าทั้งหมด |
{{RawBody}} | เนื้อหาดิบ (ไม่มี wrapper ของประวัติ/ผู้ส่ง) |
{{BodyStripped}} | เนื้อหาที่ตัดการกล่าวถึงกลุ่มออกแล้ว |
{{From}} | ตัวระบุผู้ส่ง |
{{To}} | ตัวระบุปลายทาง |
{{MessageSid}} | id ข้อความของช่อง |
{{SessionId}} | UUID ของเซสชันปัจจุบัน |
{{IsNewSession}} | "true" เมื่อสร้างเซสชันใหม่ |
{{MediaUrl}} | pseudo-URL ของสื่อขาเข้า |
{{MediaPath}} | เส้นทางสื่อภายในเครื่อง |
{{MediaType}} | ประเภทสื่อ (รูปภาพ/เสียง/เอกสาร/…) |
{{Transcript}} | transcript เสียง |
{{Prompt}} | prompt สื่อที่แก้ค่าแล้วสำหรับรายการ CLI |
{{MaxChars}} | จำนวนอักขระเอาต์พุตสูงสุดที่แก้ค่าแล้วสำหรับรายการ CLI |
{{ChatType}} | "direct" หรือ "group" |
{{GroupSubject}} | หัวข้อกลุ่ม (พยายามอย่างดีที่สุด) |
{{GroupMembers}} | ตัวอย่างสมาชิกกลุ่ม (พยายามอย่างดีที่สุด) |
{{SenderName}} | ชื่อที่แสดงของผู้ส่ง (พยายามอย่างดีที่สุด) |
{{SenderE164}} | หมายเลขโทรศัพท์ของผู้ส่ง (พยายามอย่างดีที่สุด) |
{{Provider}} | คำใบ้ผู้ให้บริการ (whatsapp, telegram, discord ฯลฯ) |
การรวมไฟล์กำหนดค่า ($include)
แยกการกำหนดค่าออกเป็นหลายไฟล์:
- ไฟล์เดียว: แทนที่ออบเจ็กต์ที่ครอบอยู่.
- อาร์เรย์ของไฟล์: ผสานแบบลึกตามลำดับ (รายการหลังแทนที่รายการก่อน).
- คีย์พี่น้อง: ผสานหลัง include (แทนที่ค่าที่ include มา).
- include ซ้อนกัน: ลึกได้สูงสุด 10 ระดับ.
- เส้นทาง: แก้ค่าเทียบกับไฟล์ที่ include แต่ต้องยังอยู่ภายในไดเรกทอรีการกำหนดค่าระดับบนสุด (
dirnameของopenclaw.json) อนุญาตรูปแบบ absolute/../เฉพาะเมื่อยังแก้ค่าแล้วอยู่ภายในขอบเขตนั้น. - การเขียนที่ OpenClaw เป็นเจ้าของซึ่งเปลี่ยนเฉพาะส่วนระดับบนสุดหนึ่งส่วนที่รองรับโดย include ไฟล์เดียว จะเขียนทะลุไปยังไฟล์ที่ include นั้น ตัวอย่างเช่น
plugins installอัปเดตplugins: { $include: "./plugins.json5" }ในplugins.json5และปล่อยให้openclaw.jsonไม่เปลี่ยนแปลง. - root includes, อาร์เรย์ include และ include ที่มีการแทนที่ด้วยคีย์พี่น้องเป็นแบบอ่านอย่างเดียวสำหรับการเขียนที่ OpenClaw เป็นเจ้าของ; การเขียนเหล่านั้นจะล้มเหลวแบบปิดแทนการแผ่การกำหนดค่า.
- ข้อผิดพลาด: ข้อความชัดเจนสำหรับไฟล์ที่หายไป, ข้อผิดพลาดการแยกวิเคราะห์, และ include แบบวนซ้ำ.
ที่เกี่ยวข้อง: การกำหนดค่า · ตัวอย่างการกำหนดค่า · Doctor