理解設定結構
理解 OpenClaw 設定結構:openclaw.json、JSON5、strict schema、熱載入、last-known-good、環境變數和金鑰邊界。
📖 本篇術語速查表
| 英文 / 縮寫 | 中文 | 一句話解釋 |
|---|---|---|
| Configuration | 設定 | OpenClaw 的設定檔案。 |
| 層級 | scope | 全域 / 渠道 / agent 級。 |
| 優先順序 | priority | 多層設定生效順序。 |
不想讀完?把下面這段提示詞丟給 AI 幫你跑完——幫你理清 OpenClaw 設定的層級和關鍵項,改到對的地方。
你是 OpenClaw 設定顧問。
【角色】
OpenClaw 設定顧問,按最小夠用、安全優先的原則給可落地方案,每條結論都落到能照做的具體步驟或示例,不停留在「建議」「考慮一下」這類空泛表述。
【輸入】
- 想改的設定:___
- 適用範圍:___
- 現有設定:___
- 是否團隊共享:___
- 經驗水平:___
【工作流程】
1. 梳理設定層級
2. 把設定放到合適層
3. 說明優先順序
4. 標出常見衝突
5. 給驗證
【輸出規範】
▌一、設定層級
▌二、設定歸層
▌三、優先順序
▌四、衝突 + 驗證
【硬約束】
- 設定放對層級
- 敏感設定安全存放
- 改後驗證生效
- 不要替我臆測情況或編造不存在的功能,資訊不全先問清
- 不確定的設定或介面一律以官方文件為準,禁止照搬過時寫法
- 給的每條結論都要落到具體可照做的步驟或示例,不停留在「建議」「考慮一下」這類沒法直接執行的空泛表述OpenClaw 的主設定檔是 ~/.openclaw/openclaw.json。它不是“所有欄位都填滿才專業”的大表,而是 Gateway、Agent、Channel、tools、models、sandbox、automation 的執行契約。
這一章用 13 分鐘換什麼:你會知道什麼時候該用 onboarding、Control UI、openclaw config set、直接編輯檔案;也會知道設定壞了為什麼 Gateway 會拒絕啟動,而不是“先湊合跑”。
1. 先把設定理解成執行契約
openclaw.json 管的不是一個功能,而是多組邊界:
- Agent:workspace、skills、模型、bootstrap、sandbox。
- Channel:WhatsApp、Telegram、Discord、Slack 等入口。
- Session:不同人、不同群、不同賬號的上下文隔離。
- Tools 和 plugins:Agent 能呼叫哪些能力。
- Gateway:埠、認證、Control UI、記錄、熱載入。
- Automation:heartbeat、cron、hooks。
如果檔案不存在,OpenClaw 會使用 safe defaults(安全預設值)。真正需要設定,通常是因為你要接渠道、控訪問、設模型、開 sandbox、調 session 或加自動化。
flowchart TD
Config["openclaw.json"]
Gateway["Gateway 基礎設施"]
Agent["Agent 工作單元"]
Channel["Channel 訊息入口"]
Tools["Tools / Plugins"]
Automation["Automation"]
Security["訪問與金鑰邊界"]
Config --> Gateway
Config --> Agent
Config --> Channel
Config --> Tools
Config --> Automation
Config --> Security
style Config fill:#e0f2fe,stroke:#0284c7,stroke-width:2px
style Security fill:#fee2e2,stroke:#ef4444,stroke-width:2px
style Agent fill:#dcfce7,stroke:#22c55e,stroke-width:2px
最小設定不是空設定的反面:最小設定只表達目前需要的意圖。每多一個欄位,就多一個排障點和安全邊界。
2. openclaw.json 必須是真實檔案
官方最新設定檔特別強調:active config path 必須是 regular file(普通檔案)。把 ~/.openclaw/openclaw.json 做成 symlink(符號連結)不適合 OpenClaw 自己寫設定,因為 atomic write(原子寫入)可能替換路徑,而不是保留 symlink。
如果你把設定放在預設狀態目錄之外,應該用:
OPENCLAW_CONFIG_PATH=/path/to/real/openclaw.json| 做法 | 結果 |
|---|---|
預設 ~/.openclaw/openclaw.json | 新手首選,最少出錯 |
OPENCLAW_CONFIG_PATH 指向真實檔案 | 適合多例項或服務化部署 |
| symlink 到其他位置 | 不推薦,OpenClaw-owned writes 可能替換連結 |
不要把同步系統放在設定寫入路徑中間:如果你想跨機器同步設定,先搞清誰負責寫檔案、誰負責同步、誰負責回復。入門階段先用預設路徑。
3. 新手怎麼改設定
官方提供幾種入口:openclaw onboard、openclaw configure、openclaw config get/set/unset、Control UI,以及直接編輯檔案。
推薦順序:
- 第一次用 onboarding。
- 小改動用
openclaw config set。 - 想看結構用 Control UI。
- 需要查欄位約束時用
openclaw config schema或config.schema.lookup。 - 已經理解 schema 時再直接編輯 JSON5。
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKeyControl UI 會從 live config schema 渲染表單,還能顯示欄位 title / description 等 docs metadata。對 Agent 或自動化工具來說,config.schema.lookup 是寫設定前的第一站。
4. strict schema 不是限制,是保護
OpenClaw 只接受完全匹配 schema 的設定。未知欄位、型別錯誤、非法值都會讓 Gateway 拒絕啟動;根級例外只有 $schema 字串,方便編輯器掛 JSON Schema metadata。
這聽起來嚴格,但對一個能呼叫工具、接訊息、處理金鑰的系統來說,這是保護。
| 設定錯誤 | OpenClaw 的處理 |
|---|---|
| 未知欄位 | 拒絕啟動或拒絕 reload |
| 型別不對 | 拒絕啟動或拒絕 reload |
| plugin-local validation 失敗 | reload 跳過,目前 runtime 保持最後一次接受的設定 |
| 明顯 destructive clobber | 儲存為 .rejected.* 供檢查 |
| redacted secret 示例值參與候選 | 不提升為 last-known-good |
設定校驗失敗時,優先跑:
openclaw doctor
openclaw config validate
openclaw doctor --fixlast-known-good 不是自動魔法:Gateway 會保留成功啟動後的可信副本,但啟動和熱載入失敗時不會無腦自動恢復。你仍然要看診斷,再決定是否用 doctor --fix 修復或恢復。
5. 最小設定只表達最小意圖
官方最小例子通常表達兩個核心意圖:給 Agent 一個 workspace,給某個 channel 一個受控入口。
{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
},
},
channels: {
telegram: {
enabled: true,
botToken: "${TELEGRAM_BOT_TOKEN}",
dmPolicy: "pairing",
},
},
}這不是“推薦照抄上線”的完整設定。真實使用時,你還要根據平臺文件設定 token、allowlist、DM policy、群組策略、session、tools 和模型。
新手每次改設定前先問:
- 我接的是哪個渠道。
- 誰可以發訊息給它。
- 群組是否必須 mention。
- Agent 在哪個 workspace 工作。
- 這個入口能用哪些 tools 和 skills。
- 這次改動能不能單獨驗證。
6. 熱載入和重啟怎麼理解
Gateway 會監聽 openclaw.json,很多設定可以自動應用。預設 reload mode 是 hybrid:安全改動熱應用,關鍵基礎設施改動自動重啟。
| 型別 | 示例 | 是否通常需要重啟 |
|---|---|---|
| 業務設定 | channels、agents、models、hooks、cron、heartbeat、session、tools、skills | 否 |
| Gateway 入口 | port、bind、auth、TLS、HTTP server | 是 |
| 基礎設施 | discovery、canvasHost、plugins | 是 |
| reload / remote 自身 | gateway.reload、gateway.remote | 特殊例外 |
常見 reload mode:
| 模式 | 行為 |
|---|---|
hybrid | 預設;安全改動熱應用,關鍵改動自動重啟 |
hot | 只熱應用安全改動;需要重啟時只記錄 warning |
restart | 任意設定變化都重啟 Gateway |
off | 不監聽檔案變化,下次手動重啟生效 |
新手只要記住:儲存檔案不等於已經生效。要看 logs、health、doctor 和 Gateway 狀態。
7. 金鑰不要寫進公開設定
OpenClaw 會讀取父程序環境變數,也會讀取目前工作目錄 .env 和 ~/.openclaw/.env。這些檔案不會覆蓋已經存在的環境變數。
設定字串裡可以引用環境變數:
{
gateway: {
auth: {
token: "${OPENCLAW_GATEWAY_TOKEN}",
},
},
}但環境變數引用不是加密。涉及 token、API key、Gateway auth、模型 key、OAuth 時,不要把明文寫進教學倉、公開 workspace 或截圖裡。
| 內容 | 該放哪裡 |
|---|---|
| 示例欄位結構 | 公開文件可以寫 |
| 假佔位符 | 公開文件可以寫 |
| 真 API key / token | 環境變數、私有憑據或 ~/.openclaw/ |
| OAuth / auth profiles / sessions | 不進 workspace git,不進公開倉 |
金鑰缺失導致啟動失敗通常是好事:不要為了“先跑起來”把空 key 或真 key 隨便寫進公開設定。失敗比洩露更容易修。
8. 設定壞了先做什麼
設定壞了不要先刪檔案重來。官方診斷入口包括 doctor、logs、health、status、config validate。
推薦排障順序:
- 看 Gateway 是否還能啟動診斷命令。
- 執行
openclaw config validate。 - 執行
openclaw doctor。 - 看記錄裡具體 schema path。
- 需要自動修復時再跑
openclaw doctor --fix。 - 回復最近一次設定改動。
- 只修一個欄位,再驗證。
如果你一次改了十個欄位,就很難判斷真正壞在哪裡。
flowchart TD
Broken["設定出錯"]
Validate["openclaw config validate"]
Doctor["openclaw doctor"]
Logs["openclaw logs"]
Fix["openclaw doctor --fix"]
Small["只修一個欄位"]
Status["openclaw gateway status"]
Broken --> Validate
Validate --> Doctor
Doctor --> Logs
Logs --> Fix
Fix --> Small
Small --> Status
style Broken fill:#fee2e2,stroke:#ef4444,stroke-width:2px
style Small fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
style Status fill:#dcfce7,stroke:#22c55e,stroke-width:2px
9. 新手常見坑
- 直接複製完整設定,裡面的欄位自己並不理解。
- 把設定檔做成 symlink,又讓 OpenClaw 自己寫設定。
- 把明文金鑰放進
openclaw.json。 - 以為 workspace 是安全沙箱。
- 設定
open入口後沒有 session 和 tools 限制。 - 儲存檔案後不看 reload 記錄。
- 一次改十幾個欄位,導致診斷沒有錨點。
10. 怎麼判斷設定健康
健康標準:
openclaw doctor沒有關鍵設定錯誤。openclaw health能反映 Gateway 目前狀態。- 每個 channel 都有明確訪問控制。
- 每個 Agent 都有明確 workspace。
- 金鑰來自環境變數或安全憑據,不在公開檔案裡。
- 改動範圍小,能透過記錄解釋為什麼生效。
設定的目標是讓 OpenClaw 可執行、可審計、可恢復,而不是把所有欄位填滿。
穩定設定靠“一改一驗”:每次只改一個意圖,立刻跑 validate、doctor 或 health;不要把 channel、Agent、模型和遠端訪問混在一次提交裡。
11. 本章自檢
- 為什麼不建議把
openclaw.json做成 symlink? - strict schema 校驗失敗時,Gateway 會怎麼處理?
- 哪些設定通常熱載入,哪些通常需要重啟?
過關標準:你能用一句話說清 —— “OpenClaw 設定不是越多越好,而是用 schema、熱載入和診斷命令把執行邊界變得可驗證。”
12. 接下來去哪
設定 Agent Workspace
設定檔講執行契約,workspace 講 Agent 長期工作現場。
Gateway 設定
繼續深入 reload、health、doctor 和 Gateway 自身設定。
Agent 設定
繼續看 workspace、repoRoot、skills allowlist、agentDir 和多 Agent 路由邊界。