Skip to content

Configuration — agents

agents.*multiAgent.*session.*messages.*talk.* 下的 Agent 作用域配置鍵。對於通道、工具、gateway 執行時和其他頂層鍵,請參閱 Configuration reference

預設值:若設定則為 OPENCLAW_WORKSPACE_DIR,否則為 ~/.openclaw/workspace

{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
}

明確的 agents.defaults.workspace 值優先於 OPENCLAW_WORKSPACE_DIR。當您不想將路徑寫入配置時,請使用環境變數將預設 agent 指向已掛載的工作區。

顯示在系統提示詞 Runtime 行中的選用存放庫根目錄。若未設定,OpenClaw 會透過從工作區向上巡覽自動偵測。

{
agents: { defaults: { repoRoot: "~/Projects/openclaw" } },
}

針對未設定 agents.list[].skills 的 agent,其選用的預設技能允許清單。

{
agents: {
defaults: { skills: ["github", "weather"] },
list: [
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no skills
],
},
}
  • 省略 agents.defaults.skills 以預設允許無限制的技能。
  • 省略 agents.list[].skills 以繼承預設值。
  • 設定 agents.list[].skills: [] 表示無技能。
  • 非空的 agents.list[].skills 列表即為該 agent 的最終集合;它 不會與預設值合併。

停用工作區引導檔案(AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.md)的自動建立。

{
agents: { defaults: { skipBootstrap: true } },
}

agents.defaults.skipOptionalBootstrapFiles

Section titled “agents.defaults.skipOptionalBootstrapFiles”

跳過建立選用的選定工作區檔案,同時仍寫入必要的引導檔案。有效值為:SOUL.mdUSER.mdHEARTBEAT.mdIDENTITY.md

{
agents: {
defaults: {
skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"],
},
},
}

控制何時將工作區啟動檔案注入到系統提示詞中。預設值:"always"

  • "continuation-skip":安全的延續輪次(在完成的助手回應之後)會跳過工作區啟動檔案的重新注入,以減少提示詞大小。心跳執行和壓縮後重試仍然會重建上下文。
  • "never":在每一輪都停用工作區啟動檔案和上下文檔案注入。僅對完全擁有其提示詞生命週期的代理程式使用此選項(自訂上下文引擎、自行建構上下文的原生執行時,或專用的無啟動檔案工作流程)。心跳和壓縮恢復輪次也會跳過注入。
{
agents: { defaults: { contextInjection: "continuation-skip" } },
}

個別代理程式覆寫:agents.list[].contextInjection。省略的值會繼承 agents.defaults.contextInjection

每個工作區啟動檔案在截斷前的最大字元數。預設值:12000

{
agents: { defaults: { bootstrapMaxChars: 12000 } },
}

個別代理程式覆寫:agents.list[].bootstrapMaxChars。省略的值會繼承 agents.defaults.bootstrapMaxChars

跨所有工作區啟動檔案注入的最大總字元數。預設值:60000

{
agents: { defaults: { bootstrapTotalMaxChars: 60000 } },
}

個別代理程式覆寫:agents.list[].bootstrapTotalMaxChars。省略的值 會繼承 agents.defaults.bootstrapTotalMaxChars

當某個代理程式需要與共用預設值不同的提示詞注入行為時,請使用個別代理程式啟動設定檔覆寫。省略的欄位會繼承自 agents.defaults

{
agents: {
defaults: {
contextInjection: "continuation-skip",
bootstrapMaxChars: 12000,
bootstrapTotalMaxChars: 60000,
},
list: [
{
id: "strict-worker",
contextInjection: "always",
bootstrapMaxChars: 50000,
bootstrapTotalMaxChars: 300000,
},
],
},
}

agents.defaults.bootstrapPromptTruncationWarning

Section titled “agents.defaults.bootstrapPromptTruncationWarning”

控制當啟動上下文被截斷時,代理程式可見的系統提示詞通知。 預設值:"always"

  • "off":絕不將截斷通知文字注入到系統提示詞中。
  • "once":每個唯一的截斷簽章注入一次簡潔通知。
  • "always":當存在截斷時,每次執行都注入一個簡潔通知(建議)。

詳細的原始/注入計數和配置調整欄位保留在診斷資訊中(例如上下文/狀態報告和日誌);常規的 WebChat 使用者/執行時上下文僅 會收到簡潔的恢復通知。

{
agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always
}

OpenClaw 擁有多個高吞吐量的提示詞/上下文預算,並且它們是按照子系統有意拆分的,而不是全部透過一個通用旋鈕流動。

  • agents.defaults.bootstrapMaxChars / agents.defaults.bootstrapTotalMaxChars: 正常的工作區引導注入。
  • agents.defaults.startupContext.*: 一次性重置/啟動模型運行前奏,包括最近的每日 memory/*.md 檔案。純聊天 /new/reset 指令會 被確認,而不調用模型。
  • skills.limits.*: 注入到系統提示詞中的精簡技能列表。
  • agents.defaults.contextLimits.*: 有界的執行時摘錄和注入的執行時擁有的區塊。
  • memory.qmd.limits.*: 已索引的記憶體搜尋摘錄和注入大小調整。

僅當某個 Agent 需要不同的預算時,才使用匹配的個別 Agent 覆蓋:

  • agents.list[].skillsLimits.maxSkillsPromptChars
  • agents.list[].contextInjection
  • agents.list[].bootstrapMaxChars
  • agents.list[].bootstrapTotalMaxChars
  • agents.list[].contextLimits.*

控制在重置/啟動模型運行時注入的首輪啟動前奏。 純聊天 /new/reset 指令會確認重置而不調用 模型,因此它們不會加載此前奏。

{
agents: {
defaults: {
startupContext: {
enabled: true,
applyOn: ["new", "reset"],
dailyMemoryDays: 2,
maxFileBytes: 16384,
maxFileChars: 1200,
maxTotalChars: 2800,
},
},
},
}

有界執行時上下文層面的共享預設值。

{
agents: {
defaults: {
contextLimits: {
memoryGetMaxChars: 12000,
memoryGetDefaultLines: 120,
toolResultMaxChars: 16000,
postCompactionMaxChars: 1800,
},
},
},
}
  • memoryGetMaxChars:在添加截斷元資料和續行通知之前的預設 memory_get 摘錄上限。
  • memoryGetDefaultLines:當省略 lines 時的預設 memory_get 行視窗。
  • toolResultMaxChars:用於持久化結果和溢出恢復的即時工具結果上限。
  • postCompactionMaxChars:在壓縮後重新整理注入期間使用的 AGENTS.md 摘錄上限。

共享 contextLimits 旋鈕的個別 Agent 覆蓋。省略的欄位繼承自 agents.defaults.contextLimits

{
agents: {
defaults: {
contextLimits: {
memoryGetMaxChars: 12000,
toolResultMaxChars: 16000,
},
},
list: [
{
id: "tiny-local",
contextLimits: {
memoryGetMaxChars: 6000,
toolResultMaxChars: 8000,
},
},
],
},
}

注入到系統提示詞中的精簡技能清單的全域上限。這不影響按需讀取 SKILL.md 檔案。

{
skills: {
limits: {
maxSkillsPromptChars: 18000,
},
},
}

agents.list[].skillsLimits.maxSkillsPromptChars

Section titled “agents.list[].skillsLimits.maxSkillsPromptChars”

針對每個 Agent 的技能提示詞預算覆寫。

{
agents: {
list: [
{
id: "tiny-local",
skillsLimits: {
maxSkillsPromptChars: 6000,
},
},
],
},
}

在呼叫提供者之前,逐字稿/工具圖像區塊中長邊的最大像素尺寸。 預設值:1200

較低的值通常會減少視覺 token 的使用量,以及針對截圖密集執行的請求負載大小。 較高的值則保留更多視覺細節。

{
agents: { defaults: { imageMaxDimensionPx: 1200 } },
}

系統提示詞內容的時區(非訊息時間戳記)。若未設定則回退至主機時區。

{
agents: { defaults: { userTimezone: "America/Chicago" } },
}

系統提示詞中的時間格式。預設值:auto(OS 偏好設定)。

{
agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
}
{
agents: {
defaults: {
models: {
"anthropic/claude-opus-4-6": { alias: "opus" },
"minimax/MiniMax-M2.7": { alias: "minimax" },
},
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["minimax/MiniMax-M2.7"],
},
imageModel: {
primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
},
imageGenerationModel: {
primary: "openai/gpt-image-2",
fallbacks: ["google/gemini-3.1-flash-image-preview"],
},
videoGenerationModel: {
primary: "qwen/wan2.6-t2v",
fallbacks: ["qwen/wan2.6-i2v"],
},
pdfModel: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
params: { cacheRetention: "long" }, // global default provider params
pdfMaxBytesMb: 10,
pdfMaxPages: 20,
thinkingDefault: "low",
verboseDefault: "off",
toolProgressDetail: "explain",
reasoningDefault: "off",
elevatedDefault: "on",
timeoutSeconds: 600,
mediaMaxMb: 5,
contextTokens: 200000,
maxConcurrent: 3,
},
},
}
  • model:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • 字串形式僅設定主要模型。
    • 物件形式設定主要模型以及有序的故障轉移模型。
  • imageModel:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • image 工具路徑用作其視覺模型配置。
    • 當選定/預設的模型無法接受圖像輸入時,也會作為故障轉移路由。
    • 偏好使用明確的 provider/model 引用。為相容性接受裸 ID;如果裸 ID 唯一匹配 models.providers.*.models 中設定的圖像功能項目,OpenClaw 會將其限定為該提供者。模糊的設定匹配需要明確的提供者前綴。
  • imageGenerationModel:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • 由共享的圖像生成功能以及任何未來會生成圖像的工具/外掛介面使用。
    • 典型值:原生 Gemini 圖像生成使用 google/gemini-3.1-flash-image-preview,fal 使用 fal/fal-ai/flux/dev,OpenAI Images 使用 openai/gpt-image-2,或是透明背景的 OpenAI PNG/WebP 輸出使用 openai/gpt-image-1.5
    • 如果您直接選擇了提供者/模型,也請設定相符的提供者驗證(例如針對 google/*GEMINI_API_KEYGOOGLE_API_KEY,針對 openai/gpt-image-2 / openai/gpt-image-1.5OPENAI_API_KEY 或 OpenAI Codex OAuth,或針對 fal/*FAL_KEY)。
    • 如果省略,image_generate 仍然可以推斷出由驗證支援的提供者預設值。它會先嘗試目前的預設提供者,然後依照提供者 ID 的順序嘗試其餘已註冊的圖像生成提供者。
  • musicGenerationModel:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • 由共享的音樂生成功能和內建的 music_generate 工具使用。
    • 典型值:google/lyria-3-clip-previewgoogle/lyria-3-pro-previewminimax/music-2.6
    • 如果省略,music_generate 仍然可以推斷出由驗證支援的提供者預設值。它會先嘗試目前的預設提供者,然後依照提供者 ID 的順序嘗試其餘已註冊的音樂生成提供者。
    • 如果您直接選擇了提供者/模型,也請設定相符的提供者驗證/API 金鑰。
  • videoGenerationModel:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • 由共享的影片生成功能和內建的 video_generate 工具使用。
    • 典型值:qwen/wan2.6-t2vqwen/wan2.6-i2vqwen/wan2.6-r2vqwen/wan2.6-r2v-flashqwen/wan2.7-r2v
    • 如果省略,video_generate 仍然可以推斷出由驗證支援的提供者預設值。它會先嘗試目前的預設提供者,然後依照提供者 ID 的順序嘗試其餘已註冊的影片生成提供者。
    • 如果您直接選擇了提供者/模型,也請設定相符的提供者驗證/API 金鑰。
    • 內建的 Qwen 影片生成供應商支援最多 1 個輸出影片、1 個輸入圖片、4 個輸入影片、10 秒持續時間,以及供應商層級的 sizeaspectRatioresolutionaudiowatermark 選項。
  • pdfModel:接受字串 ("provider/model") 或物件 ({ primary, fallbacks })。
    • pdf 工具用於模型路由。
    • 如果省略,PDF 工具會回退到 imageModel,然後再回退到解析的會話/預設模型。
  • pdfMaxBytesMb:當呼叫時未傳遞 maxBytesMb 時,pdf 工具的預設 PDF 大小限制。
  • pdfMaxPagespdf 工具中提取回退模式考慮的預設最大頁數。
  • verboseDefault:agents 的預設詳細等級。數值:"off""on""full"。預設值:"off"
  • toolProgressDetail/verbose 工具摘要和 progress-draft 工具行的詳細模式。數值:"explain" (預設,簡潔的人類可讀標籤) 或 "raw" (在可用時附加原始指令/細節)。個別 agent 的 agents.list[].toolProgressDetail 會覆寫此預設值。
  • reasoningDefault:agents 的預設推理可見性。數值:"off""on""stream"。個別 agent 的 agents.list[].reasoningDefault 會覆寫此預設值。配置的推理預設值僅在未設定每則訊息或會話推理覆寫時,針對擁有者、授權發送者或操作員管理員的 gateway 情境套用。
  • elevatedDefault:代理程式預設的提昇輸出等級。數值:"off""on""ask""full"。預設值:"on"
  • model.primary:格式 provider/model(例如用於 OpenAI API 金鑰或 Codex OAuth 存取的 openai/gpt-5.5)。如果您省略提供者,OpenClaw 會先嘗試別名,然後是該確切模型 ID 唯一匹配的已配置提供者,最後才回退到已配置的預設提供者(已棄用的相容性行為,因此建議使用明確的 provider/model)。如果該提供者不再公開已配置的預設模型,OpenClaw 將回退到第一個已配置的提供者/模型,而不會顯示陳舊的已移除提供者預設值。
  • models:針對 /model 已配置的模型目錄與允許清單。每個條目可以包含 alias(快捷方式)和 params(提供者特定,例如 temperaturemaxTokenscacheRetentioncontext1mresponsesServerCompactionresponsesCompactThresholdchat_template_kwargsextra_body/extraBody)。
    • 使用諸如 "openai-codex/*": {}"vllm/*": {} 之類的 provider/* 條目,以顯示所選提供者的所有已探索模型,而無需手動列出每個模型 ID。
    • 當該提供者的每個動態探索模型都應使用相同的執行環境時,請將 agentRuntime 新增到 provider/* 條目中。確切的 provider/model 執行環境政策仍優先於萬用字元。
    • 安全編輯:使用 openclaw config set agents.defaults.models '<json>' --strict-json --merge 來新增條目。除非您傳遞 --replace,否則 config set 將拒絕會移除現有允許清單條目的替換操作。
    • 提供者範圍的配置/上架流程會將選取的提供者模型合併到此對應表中,並保留已配置的無關提供者。
    • 對於直接的 OpenAI Responses 模型,伺服器端壓縮會自動啟用。使用 params.responsesServerCompaction: false 來停止注入 context_management,或使用 params.responsesCompactThreshold 來覆寫閾值。請參閱 OpenAI server-side compaction
  • params:套用至所有模型的全域預設提供者參數。在 agents.defaults.params 設定(例如 { cacheRetention: "long" })。
  • params 合併優先順序 (config):agents.defaults.params (全域基礎) 會被 agents.defaults.models["provider/model"].params (各模型) 覆寫,然後 agents.list[].params (符合的 agent id) 會依鍵值覆寫。詳情請參閱 Prompt Caching
  • params.extra_body/params.extraBody:先進的透傳 JSON,會合併到 OpenAI 相容代理的 api: "openai-completions" 請求主體中。如果與產生的請求鍵發生衝突,額外的 body 優先;非原生的完成路由之後仍會移除僅限 OpenAI 的 store
  • params.chat_template_kwargs:合併到頂層 api: "openai-completions" 請求主體的 vLLM/OpenAI 相容 chat-template 參數。對於思考功能關閉的 vllm/nemotron-3-*,內建的 vLLM 外掛程式會自動傳送 enable_thinking: falseforce_nonempty_content: true;明確的 chat_template_kwargs 會覆寫產生的預設值,而 extra_body.chat_template_kwargs 仍具有最終優先順序。對於 vLLM Qwen 思考控制,請將該模型條目上的 params.qwenThinkingFormat 設定為 "chat-template""top-level"
  • compat.thinkingFormat:OpenAI 相容的思考 payload 樣式。使用 "together" 表示 Together 風格的 reasoning.enabled,使用 "qwen" 表示 Qwen 風格的頂層 enable_thinking,或在支援請求層級 chat-template kwargs 的 Qwen 系列後端(例如 vLLM)上使用 "qwen-chat-template" 表示 chat_template_kwargs.enable_thinking。OpenClaw 會將停用的思考對應到 false,並將啟用的思考對應到 true
  • compat.supportedReasoningEfforts:依模型區分的 OpenAI 相容推理努力清單。針對真正接受它的自訂端點包含 "xhigh";接著 OpenClaw 會在指令選單、Gateway 工作階段列、工作階段修補驗證、agent CLI 驗證以及針對該已設定提供者/模型的 llm-task 驗證中公開 /think xhigh。當後端需要針對標準層級提供特定於提供者的值時,請使用 compat.reasoningEffortMap
  • params.preserveThinking:僅限 Z.AI 的保留思考選用功能。當啟用且思考開啟時,OpenClaw 會傳送 thinking.clear_thinking: false 並重放先前的 reasoning_content;請參閱 Z.AI 思考與保留思考
  • localService:適用於本地/自託管模型伺服器的選用提供者層級程序管理員。當選取的模型屬於該提供者時,OpenClaw 會探測 healthUrl(或 baseUrl + "/models"),如果端點已關閉則使用 args 啟動 command,等待最多 readyTimeoutMs,然後傳送模型請求。command 必須是絕對路徑。idleStopMs: 0 會讓程序保持運作直到 OpenClaw 結束;正值會在閒置該毫秒數後停止 OpenClaw 產生的程序。請參閱 本地模型服務
  • Runtime policy 屬於提供者或模型,而不屬於 agents.defaults。請使用 models.providers.<provider>.agentRuntime 設定適用於整個提供者的規則,或使用 agents.defaults.models["provider/model"].agentRuntime / agents.list[].models["provider/model"].agentRuntime 設定特定模型的規則。官方 OpenAI 提供者上的 OpenAI agent 模型預設會選擇 Codex。
  • 變更這些欄位的配置寫入器(例如 /models set/models set-image 以及 fallback add/remove 指令)會儲存標準物件形式,並盡可能保留現有的 fallback 清單。
  • maxConcurrent:跨會話的最大並行 agent 執行數量(每個會話仍為序列化)。預設值:4。
{
models: {
providers: {
openai: {
agentRuntime: { id: "codex" },
},
},
},
agents: {
defaults: {
model: "openai/gpt-5.5",
models: {
"anthropic/claude-opus-4-7": {
agentRuntime: { id: "claude-cli" },
},
"vllm/*": {
agentRuntime: { id: "pi" },
},
},
},
},
}
  • id"auto""pi"、已註冊的 plugin harness id,或支援的 CLI 後端別名。內建的 Codex plugin 註冊了 codex;內建的 Anthropic plugin 提供了 claude-cli CLI 後端。
  • id: "auto" 允許已註冊的 plugin harness 宣告支援的回合,並在沒有 harness 符合時使用 PI。明確指定的 plugin runtime(例如 id: "codex")需要該 harness,如果其無法使用或失敗,則會封閉式失敗。
  • Runtime 優先順序首先是精確的模型策略(agents.list[].models["provider/model"]agents.defaults.models["provider/model"]models.providers.<provider>.models[]),然後是 agents.list[] / agents.defaults.models["provider/*"],接著是 models.providers.<provider>.agentRuntime 處的提供者範圍策略。
  • 全 agent runtime 金鑰已過時。agents.defaults.agentRuntimeagents.list[].agentRuntime、session runtime pins 以及 OPENCLAW_AGENT_RUNTIME 會被 runtime 選擇忽略。請執行 openclaw doctor --fix 以移除過時的值。
  • OpenAI agent 模型預設使用 Codex harness;當您想要明確指定時,提供者/模型的 agentRuntime.id: "codex" 仍然有效。
  • 對於 Claude CLI 部署,建議優先使用 model: "anthropic/claude-opus-4-7" 加上模型範圍的 agentRuntime.id: "claude-cli"。舊版的 claude-cli/claude-opus-4-7 模型參照為了相容性仍然有效,但新配置應保持供應商/模型選擇的規範性,並將執行後端置於供應商/模型執行時期政策中。
  • 這僅控制文字代理回合的執行。媒體生成、視覺、PDF、音樂、視訊和 TTS 仍使用其各自的供應商/模型設定。

內建別名簡寫(僅在模型位於 agents.defaults.models 時適用):

別名模型
opusanthropic/claude-opus-4-6
sonnetanthropic/claude-sonnet-4-6
gptopenai/gpt-5.5
gpt-miniopenai/gpt-5.4-mini
gpt-nanoopenai/gpt-5.4-nano
geminigoogle/gemini-3.1-pro-preview
gemini-flashgoogle/gemini-3-flash-preview
gemini-flash-litegoogle/gemini-3.1-flash-lite-preview

您設定的別名優先順序永遠高於預設值。

Z.AI GLM-4.x 模型會自動啟用思考模式,除非您設定了 --thinking off 或自行定義了 agents.defaults.models["zai/<model>"].params.thinking。 Z.AI 模型預設針對工具呼叫串流啟用 tool_stream。將 agents.defaults.models["zai/<model>"].params.tool_stream 設定為 false 即可停用。 Anthropic Claude 4.6 模型在未設定明確思考等級時,預設為 adaptive 思考。

純文字後備執行(無工具呼叫)的選用 CLI 後端。當 API 供應商失敗時,可作為備份使用。

{
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
"my-cli": {
command: "my-cli",
args: ["--json"],
output: "json",
modelArg: "--model",
sessionArg: "--session",
sessionMode: "existing",
systemPromptArg: "--system",
// Or use systemPromptFileArg when the CLI accepts a prompt file flag.
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
},
},
},
},
}
  • CLI 後端以文字優先;工具一律停用。
  • 當設定 sessionArg 時支援 Sessions。
  • imageArg 接受檔案路徑時,支援影像直通。
  • reseedFromRawTranscriptWhenUncompacted: true 允許後端在第一個壓縮摘要存在之前,從有限的原始 OpenClaw 逐字稿尾部恢復安全的失效 Session。驗證設定檔或憑證時期的變更仍絕不會進行原始重播。

以固定字串取代整個由 OpenClaw 組合的系統提示詞。可在預設層級 (agents.defaults.systemPromptOverride) 或針對個別代理程式 (agents.list[].systemPromptOverride) 設定。個別代理程式的值優先;空白或僅含空白字元的值會被忽略。適用於受控的提示詞實驗。

{
agents: {
defaults: {
systemPromptOverride: "You are a helpful assistant.",
},
},
}

依模型系列套用於 OpenClaw 組合的提示層面上,與供應商無關的提示覆蓋。GPT-5 系列的模型 ID 會接收跨 PI/供應商路由的共享行為約定;personality 僅控制友善的互動樣式層。原生 Codex 應用伺服器路由會保留 Codex 擁有的基底/模型/人格指令,而非此 OpenClaw GPT-5 覆蓋層。

{
agents: {
defaults: {
promptOverlays: {
gpt5: {
personality: "friendly", // friendly | on | off
},
},
},
},
}
  • "friendly" (預設) 和 "on" 會啟用友善的互動樣式層。
  • "off" 僅停用友善層;已標記的 GPT-5 行為合約仍保持啟用。
  • 當未設定此共享設定時,仍會讀取舊版的 plugins.entries.openai.config.personality

定期心跳執行。

{
agents: {
defaults: {
heartbeat: {
every: "30m", // 0m disables
model: "openai/gpt-5.4-mini",
includeReasoning: false,
includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt
lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files
isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
skipWhenBusy: false, // default: false; true also waits for this agent's subagent/nested lanes
session: "main",
to: "+15555550123",
directPolicy: "allow", // allow (default) | block
target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
prompt: "Read HEARTBEAT.md if it exists...",
ackMaxChars: 300,
suppressToolErrorWarnings: false,
timeoutSeconds: 45,
},
},
},
}
  • every:持續時間字串 (ms/s/m/h)。預設值:30m (API 金鑰驗證) 或 1h (OAuth 驗證)。設為 0m 以停用。
  • includeSystemPromptSection:若為 false,則會從系統提示詞中省略 Heartbeat 區段,並跳過將 HEARTBEAT.md 注入至啟動內容。預設值:true
  • suppressToolErrorWarnings:若為 true,則會隱藏心跳執行期間的工具錯誤警告載荷。
  • timeoutSeconds:心跳代理程式回合在被中止前所允許的最大時間 (秒)。保留未設定以使用 agents.defaults.timeoutSeconds
  • directPolicy:直接/DM 傳遞原則。allow (預設) 允許直接目標傳遞。block 會抑制直接目標傳遞並發出 reason=dm-blocked
  • lightContext:若為 true,心跳執行會使用輕量級啟動內容,並僅保留工作區啟動檔案中的 HEARTBEAT.md
  • isolatedSession:當為 true 時,每次心跳都在沒有先前對話記錄的新會話中運行。與 cron sessionTarget: "isolated" 具有相同的隔離模式。將每次心跳的 token 成本從約 100K 降低到約 2-5K tokens。
  • skipWhenBusy:當為 true 時,心跳運行會在該代理的額外繁忙通道上延遲:其自身的會話密鑰子代理或嵌套命令工作。Cron 通道總是延遲心跳,即使沒有此標誌。
  • 每個代理:設置 agents.list[].heartbeat。當任何代理定義了 heartbeat 時,只有這些代理 會運行心跳。
  • 心跳運行完整的代理週期——較短的間隔會消耗更多 tokens。
{
agents: {
defaults: {
compaction: {
mode: "safeguard", // default | safeguard
provider: "my-provider", // id of a registered compaction provider plugin (optional)
timeoutSeconds: 900,
reserveTokensFloor: 24000,
keepRecentTokens: 50000,
identifierPolicy: "strict", // strict | off | custom
identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom
qualityGuard: { enabled: true, maxRetries: 1 },
midTurnPrecheck: { enabled: false }, // optional Pi tool-loop pressure check
postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection
model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override
truncateAfterCompaction: true, // rotate to a smaller successor JSONL after compaction
maxActiveTranscriptBytes: "20mb", // optional preflight local compaction trigger
notifyUser: true, // send brief notices when compaction starts and completes (default: false)
memoryFlush: {
enabled: true,
model: "ollama/qwen3:8b", // optional memory-flush-only model override
softThresholdTokens: 6000,
systemPrompt: "Session nearing compaction. Store durable memories now.",
prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
},
},
},
},
}
  • modedefaultsafeguard(針對長記錄的分塊摘要)。參閱 Compaction
  • provider:已註冊壓縮提供者插件的 ID。設置後,將調用提供者的 summarize() 而不是內建的 LLM 摘要。失敗時回退到內建方式。設置提供者會強制啟用 mode: "safeguard"。參閱 Compaction
  • timeoutSeconds:OpenClaw 中止單次壓縮操作之前允許的最大秒數。默認值:900
  • keepRecentTokens:用於逐字保留最新逐字稿尾部的 Pi 切割點預算。手動 /compact 在明確設置時會遵循此預算;否則手動壓縮是一個硬檢查點。
  • identifierPolicystrict(默認值)、offcustomstrict 會在壓縮摘要期間預置內建的不透明標識符保留指導。
  • identifierInstructions:當 identifierPolicy=custom 時使用的可選自定義標識符保留文本。
  • qualityGuard:retry-on-malformed-output 會檢查保護摘要。在保護模式下默認啟用;設置 enabled: false 以跳過審核。
  • midTurnPrecheck:選用的 Pi 工具迴圈壓力檢查。當設定為 enabled: true 時,OpenClaw 會在工具結果附加後、下一次模型呼叫前檢查上下文壓力。如果上下文超出容量,它會在提交提示之前中止當前嘗試,並重用現有的預檢恢復路徑來截斷工具結果或壓縮並重試。同時支援 defaultsafeguard 壓縮模式。預設值:停用。
  • postCompactionSections:選用的 AGENTS.md H2/H3 章節名稱,用於在壓縮後重新注入。預設為 ["Session Startup", "Red Lines"];設定 [] 可停用重新注入。當未設定或明確設為該預設配對時,舊的 Every Session/Safety 標題也會被接受作為舊版後備。
  • model:僅用於壓縮摘要的選用 provider/model-id 覆蓋值。當主工作階段應保留某個模型,但壓縮摘要應在另一個模型上執行時,請使用此設定;若未設定,壓縮將使用工作階段的主要模型。
  • maxActiveTranscriptBytes:選用的位元組閾值(number 或類似 "20mb" 的字串),當作用中的 JSONL 超過該閾值時,會在執行前觸發標準的本機壓縮。需要 truncateAfterCompaction,以便成功的壓縮能輪換至較小的後續逐字稿。當未設定或為 0 時停用。
  • notifyUser:當設定為 true 時,會在壓縮開始和完成時向使用者發送簡短通知(例如,「正在壓縮上下文…」和「壓縮完成」)。預設為停用以保持壓縮為靜默狀態。
  • memoryFlush:自動壓縮前的靜默代理回合,用於儲存持久記憶。當此維護回合應保持在本地模型上時,請將 model 設為特定的提供者/模型(例如 ollama/qwen3:8b);此覆蓋設定不會繼承作用中工作階段的後備鏈。當工作區為唯讀時會跳過。

嵌入式 Pi 執行器的外部執行迴圈重試迭代邊界,用於在故障恢復期間防止無限執行迴圈。請注意,此設定目前僅適用於嵌入式代理執行時,不適用於 ACP 或 CLI 執行時。

{
agents: {
defaults: {
runRetries: {
base: 24,
perProfile: 8,
min: 32,
max: 160,
},
},
list: [
{
id: "main",
runRetries: { max: 50 }, // optional per-agent overrides
},
],
},
}
  • base:外部執行迴圈的執行重試迭代基數。預設值:24
  • perProfile:針對每個後備設定檔候選項所授予的額外執行重試迭代次數。預設值:8
  • min:執行重試迭代的最小絕對限制。預設值:32
  • max:執行重試迭代的最大絕對限制,以防止失控執行。預設值:160

在發送至 LLM 之前,從記憶體內上下文中修剪舊的工具結果不會修改磁碟上的會話歷史記錄。

{
agents: {
defaults: {
contextPruning: {
mode: "cache-ttl", // off | cache-ttl
ttl: "1h", // duration (ms/s/m/h), default unit: minutes
keepLastAssistants: 3,
softTrimRatio: 0.3,
hardClearRatio: 0.5,
minPrunableToolChars: 50000,
softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
tools: { deny: ["browser", "canvas"] },
},
},
},
}
cache-ttl 模式行為
  • mode: "cache-ttl" 啟用修剪傳遞。
  • ttl 控制修剪可以再次執行的頻率(在最後一次快取接觸之後)。
  • 修剪會先軟修剪超大的工具結果,然後在需要時硬清除較舊的工具結果。

軟修剪 保留開頭 + 結尾並在中間插入 ...

硬清除 會用預留位置替換整個工具結果。

備註:

  • 圖像區塊從不會被修剪/清除。
  • 比例是基於字元的(近似值),而不是精確的 token 計數。
  • 如果存在的助理訊息少於 keepLastAssistants 則跳過修剪。

有關行為的詳細資訊,請參閱 會話修剪

{
agents: {
defaults: {
blockStreamingDefault: "off", // on | off
blockStreamingBreak: "text_end", // text_end | message_end
blockStreamingChunk: { minChars: 800, maxChars: 1200 },
blockStreamingCoalesce: { idleMs: 1000 },
humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs)
},
},
}
  • 非 Telegram 頻道需要明確的 *.blockStreaming: true 才能啟用區塊回覆。
  • 頻道覆寫:channels.<channel>.blockStreamingCoalesce(以及每個帳號的變體)。Signal/Slack/Discord/Google Chat 預設為 minChars: 1500
  • humanDelay:區塊回覆之間的隨機暫停。natural = 800–2500ms。每個代理的覆寫:agents.list[].humanDelay

請參閱 [串流](/en/concepts/streaming)以了解行為和區塊分割的詳細資訊。

{
agents: {
defaults: {
typingMode: "instant", // never | instant | thinking | message
typingIntervalSeconds: 6,
},
},
}
  • 預設值:對於直接聊天/提及為 instant,對於未提及的群組聊天為 message
  • 每個會話的覆寫:session.typingModesession.typingIntervalSeconds

請參閱 [輸入指示器](/en/concepts/typing-indicators)。

嵌入式代理的可選沙箱機制。完整指南請參閱 [沙箱機制](/en/gateway/sandboxing)。

{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
backend: "docker", // docker | ssh | openshell
scope: "agent", // session | agent | shared
workspaceAccess: "none", // none | ro | rw
workspaceRoot: "~/.openclaw/sandboxes",
docker: {
image: "openclaw-sandbox:bookworm-slim",
containerPrefix: "openclaw-sbx-",
workdir: "/workspace",
readOnlyRoot: true,
tmpfs: ["/tmp", "/var/tmp", "/run"],
network: "none",
user: "1000:1000",
capDrop: ["ALL"],
env: { LANG: "C.UTF-8" },
setupCommand: "apt-get update && apt-get install -y git curl jq",
pidsLimit: 256,
memory: "1g",
memorySwap: "2g",
cpus: 1,
ulimits: {
nofile: { soft: 1024, hard: 2048 },
nproc: 256,
},
seccompProfile: "/path/to/seccomp.json",
apparmorProfile: "openclaw-sandbox",
dns: ["1.1.1.1", "8.8.8.8"],
extraHosts: ["internal.service:10.0.0.5"],
binds: ["/home/user/source:/source:rw"],
},
ssh: {
target: "user@gateway-host:22",
command: "ssh",
workspaceRoot: "/tmp/openclaw-sandboxes",
strictHostKeyChecking: true,
updateHostKeys: true,
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
// SecretRefs / inline contents also supported:
// identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
// certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
// knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
},
browser: {
enabled: false,
image: "openclaw-sandbox-browser:bookworm-slim",
network: "openclaw-sandbox-browser",
cdpPort: 9222,
cdpSourceRange: "172.21.0.1/32",
vncPort: 5900,
noVncPort: 6080,
headless: false,
enableNoVnc: true,
allowHostControl: false,
autoStart: true,
autoStartTimeoutMs: 12000,
},
prune: {
idleHours: 24,
maxAgeDays: 7,
},
},
},
},
tools: {
sandbox: {
tools: {
allow: ["exec", "process", "read", "write", "edit", "apply_patch", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"],
deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
},
},
},
}
沙箱細節

後端:

  • docker:本機 Docker 執行環境(預設)
  • ssh:通用 SSH 支援的遠端執行環境
  • openshell:OpenShell 執行環境

當選擇 backend: "openshell" 時,特定於執行環境的設定會移至 plugins.entries.openshell.config

SSH 後端設定:

  • targetuser@host[:port] 格式的 SSH 目標
  • command:SSH 客戶端指令(預設:ssh
  • workspaceRoot:用於各範圍工作區的絕對遠端根目錄
  • identityFile / certificateFile / knownHostsFile:傳遞給 OpenSSH 的現有本機檔案
  • identityData / certificateData / knownHostsData:OpenClaw 在執行時具體化為暫存檔案的內嵌內容或 SecretRef
  • strictHostKeyChecking / updateHostKeys:OpenSSH 主機金鑰策略控制項

SSH 認證優先順序:

  • identityData 優先於 identityFile
  • certificateData 優先於 certificateFile
  • knownHostsData 優先於 knownHostsFile
  • SecretRef 支援的 *Data 值會在沙箱工作階段開始前,從作用中的秘密執行環境快照中解析

SSH 後端行為:

  • 在建立或重建之後,將遠端工作區初始化一次
  • 然後保持遠端 SSH 工作區為基準
  • 透過 SSH 路由 exec、檔案工具和媒體路徑
  • 不會自動將遠端變更同步回主機
  • 不支援沙箱瀏覽器容器

工作區存取:

  • none~/.openclaw/sandboxes 下的各範圍沙箱工作區
  • ro/workspace 處的沙箱工作區,代理程式工作區以唯讀方式掛載於 /agent
  • rw:代理程式工作區以讀寫方式掛載於 /workspace

範圍:

  • session:各工作階段容器 + 工作區
  • agent:每個代理程式一個容器 + 工作區(預設)
  • shared:共享容器和工作區(無跨工作階段隔離)

OpenShell 外掛程式設定:

{
plugins: {
entries: {
openshell: {
enabled: true,
config: {
mode: "mirror", // mirror | remote
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
gateway: "lab", // optional
gatewayEndpoint: "https://lab.example", // optional
policy: "strict", // optional OpenShell policy id
providers: ["openai"], // optional
autoProviders: true,
timeoutSeconds: 120,
},
},
},
},
}

OpenShell 模式:

  • mirror:執行前從本機初始化遠端,執行後同步回本機;本機工作區保持基準
  • remote:建立沙箱時初始化遠端一次,然後保持遠端工作區為基準

remote 模式下,在 OpenClaw 外部進行的本機編輯不會在初始化步驟後自動同步到沙箱中。 傳輸方式是 SSH 進入 OpenShell 沙箱,但外掛程式擁有沙箱生命週期和可選的鏡像同步。

setupCommand 在容器建立後執行一次(透過 sh -lc)。需要網路出口、可寫入根目錄、root 使用者。

容器預設為 network: "none" — 如果代理程式需要出站存取,請設定為 "bridge"(或自訂橋接網路)。 "host" 被阻擋。`“container:

預設被阻擋,除非您明確設定sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(緊急措施)。 Codex app-server 在作用中的 OpenClaw 沙箱內運作,會使用相同的出口設定來進行其原生程式碼模式的網路存取。

傳入附件會暫存至作用中工作區的 media/inbound/* 中。

docker.binds 會掛載額外的主機目錄;全域和各代理程式的綁定會合併。

沙箱化瀏覽器sandbox.browser.enabled):容器中的 Chromium + CDP。noVNC URL 會注入到系統提示中。不需要 browser.enabledopenclaw.json 中。 noVNC 觀察者存取預設使用 VNC 認證,且 OpenClaw 會發出一個短期有效的 Token URL(而不是在共用 URL 中暴露密碼)。

  • allowHostControl: false(預設)會阻擋沙箱工作階段將目標設為主機瀏覽器。
  • network 預設為 openclaw-sandbox-browser(專用橋接網路)。僅在您明確需要全域橋接連線時才設定為 bridge
  • cdpSourceRange 可選擇性地將容器邊緣的 CDP 進站限制為 CIDR 範圍(例如 172.21.0.1/32)。
  • sandbox.browser.binds 僅將額外的主機目錄掛載至沙箱瀏覽器容器中。當設定時(包括 []),它會取代瀏覽器容器的 docker.binds
  • 啟動預設值定義於 scripts/sandbox-browser-entrypoint.sh 中,並針對容器主機進行了微調:
    • --remote-debugging-address=127.0.0.1
    • `—remote-debugging-port=

`

  • --user-data-dir=${HOME}/.chrome
  • --no-first-run
  • --no-default-browser-check
  • --disable-3d-apis
  • --disable-gpu
  • --disable-software-rasterizer
  • --disable-dev-shm-usage
  • --disable-background-networking
  • --disable-features=TranslateUI
  • --disable-breakpad
  • --disable-crash-reporter
  • --renderer-process-limit=2
  • --no-zygote
  • --metrics-recording-only
  • --disable-extensions(預設啟用)
  • --disable-3d-apis--disable-software-rasterizer--disable-gpu 預設為啟用狀態,如果 WebGL/3D 使用需要,可以使用 OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 將其停用。
  • OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0 如果您的工作流程 依賴擴充功能,可以重新啟用它們。
  • --renderer-process-limit=2 可以使用 `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=

來變更;設定0` 以使用 Chromium 的 預設程序限制。

  • 當啟用 noSandbox 時,加上 --no-sandbox
  • 預設值是容器映像檔基準;使用具有自訂進入點的自訂瀏覽器映像檔來變更容器預設值。

瀏覽器沙盒機制和 sandbox.docker.binds 僅限於 Docker。

建構映像檔(從原始碼檢出):

Terminal window
scripts/sandbox-setup.sh # main sandbox image
scripts/sandbox-browser-setup.sh # optional browser image

對於未從原始碼檢出的 npm 安裝,請參閱 Sandboxing § Images and setup 以取得內聯 docker build 指令。

使用 agents.list[].tts 為代理指定自己的 TTS 提供者、語音、模型、樣式或自動 TTS 模式。代理區塊會對全域 messages.tts 進行深度合併,因此共用憑證可以保留在一處,而個別代理只需覆寫它們所需的語音或提供者欄位。作用中代理的覆寫會套用於自動口語回覆、/tts audio/tts status 以及 tts 代理工具。請參閱 Text-to-speech 以了解提供者範例和優先順序。

{
agents: {
list: [
{
id: "main",
default: true,
name: "Main Agent",
workspace: "~/.openclaw/workspace",
agentDir: "~/.openclaw/agents/main/agent",
model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
thinkingDefault: "high", // per-agent thinking level override
reasoningDefault: "on", // per-agent reasoning visibility override
fastModeDefault: false, // per-agent fast mode override
params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
tts: {
providers: {
elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
},
},
skills: ["docs-search"], // replaces agents.defaults.skills when set
identity: {
name: "Samantha",
theme: "helpful sloth",
emoji: "🦥",
avatar: "avatars/samantha.png",
},
groupChat: { mentionPatterns: ["@openclaw"] },
sandbox: { mode: "off" },
runtime: {
type: "acp",
acp: {
agent: "codex",
backend: "acpx",
mode: "persistent",
cwd: "/workspace/openclaw",
},
},
subagents: { allowAgents: ["*"] },
tools: {
profile: "coding",
allow: ["browser"],
deny: ["canvas"],
elevated: { enabled: true },
},
},
],
},
}
  • id:穩定的代理 ID(必填)。
  • default:當設定了多個時,以第一個為準(會記錄警告)。如果未設定任何值,則清單中的第一個項目為預設值。
  • model:字串形式會設定嚴格的個別代理主要模型,沒有模型後備;物件形式 { primary } 也是嚴格的,除非您新增 fallbacks。使用 { primary, fallbacks: [...] } 讓該代理選擇使用後備,或使用 { primary, fallbacks: [] } 明確指定嚴格行為。僅覆寫 primary 的 Cron 任務仍會繼承預設後備,除非您設定了 fallbacks: []
  • params:與 agents.defaults.models 中選定模型項目合併的個別代理串流參數。使用此項目進行代理專屬的覆寫,例如 cacheRetentiontemperaturemaxTokens,而無需複製整個模型目錄。
  • tts:可選的個別代理文字轉語音覆寫。此區塊會與 messages.tts 進行深度合併,因此請將共用的提供者憑證和後援策略保留在 messages.tts 中,並在此處僅設定角色特定的值,例如提供者、語音、模型、樣式或自動模式。
  • skills:可選的個別代理技能允許清單。如果省略,代理會在設定時繼承 agents.defaults.skills;明確的清單會取代預設值而非合併,而 [] 表示無技能。
  • thinkingDefault:可選的個別代理預設思考層級 (off | minimal | low | medium | high | xhigh | adaptive | max)。當未設定每則訊息或工作階段覆寫時,會覆寫此代理的 agents.defaults.thinkingDefault。選取的提供者/模型設定檔會控制哪些值有效;對於 Google Gemini,adaptive 會保留提供者擁有的動態思考 (thinkingLevel 在 Gemini 3/3.1 上省略,thinkingBudget: -1 在 Gemini 2.5 上)。
  • reasoningDefault:可選的個別代理預設推論可見性 (on | off | stream)。當未設定每則訊息或工作階段推論覆寫時,會覆寫此代理的 agents.defaults.reasoningDefault
  • fastModeDefault:可選的個別代理快速模式 (true | false) 預設值。當未設定每則訊息或工作階段快速模式覆寫時套用。
  • models:可選的個別代理模型目錄/執行時間覆寫,以完整的 provider/model id 為鍵值。使用 models["provider/model"].agentRuntime 進行個別代理執行時間例外處理。
  • runtime:可選的個別代理執行時間描述符。當代理應預設為 ACP harness 工作階段時,請使用帶有 runtime.acp 預設值 (agentbackendmodecwd) 的 type: "acp"
  • identity.avatar:工作區相對路徑、http(s) URL 或 data: URI。
  • identity 推導預設值:從 emoji 推導 ackReaction,從 name/emoji 推導 mentionPatterns
  • subagents.allowAgents:針對明確 sessions_spawn.agentId 目標的代理程式 ID 白名單(["*"] = 任何已設定的目標;預設值:僅限同一個代理程式)。當允許自我目標 agentId 呼叫時,應包含請求者 ID。
  • 沙箱繼承防護:如果請求者會話位於沙箱中,sessions_spawn 將拒絕會以非沙箱方式執行的目標。
  • subagents.requireAgentId:當為 true 時,封鎖省略 agentIdsessions_spawn 呼叫(強制明確選擇設定檔;預設:false)。

在單一 Gateway 中執行多個隔離的代理。請參閱 Multi-Agent

{
agents: {
list: [
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" },
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
}
  • type(選用):用於一般路由的 route(缺少類型預設為 route),用於持續性 ACP 對話綁定的 acp
  • match.channel(必填)
  • match.accountId(選用;* = 任何帳戶;省略 = 預設帳戶)
  • match.peer(選用;{ kind: direct|group|channel, id }
  • match.guildId / match.teamId(選用;特定通道)
  • acp(選用;僅限 type: "acp"):{ mode, label, cwd, backend }

決定性匹配順序:

  1. match.peer
  2. match.guildId
  3. match.teamId
  4. match.accountId(精確,無 peer/guild/team)
  5. match.accountId: "*"(通道範圍)
  6. 預設代理

在每個層級中,第一個匹配的 bindings 項目獲勝。

對於 type: "acp" 條目,OpenClaw 根據確切的交談身分 (match.channel + account + match.peer.id) 進行解析,並不使用上述的路由綁定層級順序。

完整存取 (無沙箱)
{
agents: {
list: [
{
id: "personal",
workspace: "~/.openclaw/workspace-personal",
sandbox: { mode: "off" },
},
],
},
}
唯讀工具 + 工作區
{
agents: {
list: [
{
id: "family",
workspace: "~/.openclaw/workspace-family",
sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
tools: {
allow: ["read", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"],
deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
},
},
],
},
}
無檔案系統存取權 (僅訊息傳遞)
{
agents: {
list: [
{
id: "public",
workspace: "~/.openclaw/workspace-public",
sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
tools: {
allow: ["sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", "whatsapp", "telegram", "slack", "discord", "gateway"],
deny: ["read", "write", "edit", "apply_patch", "exec", "process", "browser", "canvas", "nodes", "cron", "gateway", "image"],
},
},
],
},
}

請參閱 多代理程式沙箱與工具 以了解優先順序細節。


{
session: {
scope: "per-sender",
dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
identityLinks: {
alice: ["telegram:123456789", "discord:987654321012345678"],
},
reset: {
mode: "daily", // daily | idle
atHour: 4,
idleMinutes: 60,
},
resetByType: {
thread: { mode: "daily", atHour: 4 },
direct: { mode: "idle", idleMinutes: 240 },
group: { mode: "idle", idleMinutes: 120 },
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
maxEntries: 500,
resetArchiveRetention: "30d", // duration or false
maxDiskBytes: "500mb", // optional hard budget
highWaterBytes: "400mb", // optional cleanup target
},
threadBindings: {
enabled: true,
idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables)
maxAgeHours: 0, // default hard max age in hours (`0` disables)
},
mainKey: "main", // legacy (runtime always uses "main")
agentToAgent: { maxPingPongTurns: 5 },
sendPolicy: {
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
default: "allow",
},
},
}
Session 欄位詳情
  • scope:群組聊天內容的基礎會話分組策略。
    • per-sender(預設值):每個發送者在頻道內容中獲得一個獨立的會話。
    • global:頻道內容中的所有參與者共用單一會話(僅在預期共用內容時使用)。
  • dmScope:私人訊息(DM)的分組方式。
    • main:所有 DM 共用主會話。
    • per-peer:跨頻道依據發送者 ID 隔離。
    • per-channel-peer:依頻道 + 發送者隔離(建議用於多使用者收件匣)。
    • per-account-channel-peer:依帳戶 + 頻道 + 發送者隔離(建議用於多帳戶)。
  • identityLinks:將規範 ID 對應至供應商前綴的同儕(peers),以實現跨頻道會話共用。Dock 指令例如 /dock_discord 使用相同的對應表,將作用中會話的回覆路由切換至另一個連結的頻道同儕;請參閱頻道連接
  • reset:主要重設原則。daily 會在 atHour 當地時間重設;idle 會在 idleMinutes 之後重設。若兩者皆有設定,以先過期者為準。每日重設的新鮮度使用會話列的 sessionStartedAt;閒置重設的新鮮度使用 lastInteractionAt。背景/系統事件寫入(如心跳、喚醒 cron、執行通知和網關記帳)可以更新 updatedAt,但不會讓每日/閒置會話保持新鮮。
  • resetByType:各類型的覆寫設定(directgroupthread)。舊版的 dm 被接受為 direct 的別名。
  • mainKey:舊版欄位。執行階段總是針對主要的直接聊天區塊使用 "main"
  • agentToAgent.maxPingPongTurns:代理之間交換期間,代理之間的最大回傳輪次(整數,範圍:0-20,預設值:5)。0 會停用乒乓連鎖。
  • sendPolicy:依 channelchatTypedirect|group|channel,附帶舊版 dm 別名)、keyPrefixrawKeyPrefix 進行比對。優先採用第一個拒絕規則。
  • maintenance:會話儲存(session-store)清理 + 保留控制。
    • modewarn 僅發出警告;enforce 則執行清理。
    • pruneAfter:過時項目的保留期限截斷值(預設 30d)。
    • maxEntriessessions.json 中的項目數量上限(預設 500)。執行階段寫入會以少量高水位緩衝區批次執行清理,以適應生產環境等級的上限;openclaw sessions cleanup --enforce 會立即套用上限。
    • rotateBytes:已棄用且已忽略;openclaw doctor --fix 會將其從較舊的設定中移除。
    • resetArchiveRetention:`*.reset.

文字記錄封存的保留時間。預設為pruneAfter;設定 false` 以停用。

  • maxDiskBytes:選用的會話目錄磁碟預算。在 warn 模式下,它會記錄警告;在 enforce 模式下,它會優先移除最舊的成品/會話。
  • highWaterBytes:預算清理後的選用目標。預設為 80%maxDiskBytes
  • threadBindings:執行緒綁定會話功能的全域預設值。
    • enabled:主預設值開關(供應商可覆寫;Discord 使用 channels.discord.threadBindings.enabled
    • idleHours:預設的非活動自動取消聚焦時間(小時)(0 停用;供應商可覆寫)
    • maxAgeHours:預設的硬性最大期限(小時)(0 停用;供應商可覆寫)
    • spawnSessions:從 sessions_spawn 和 ACP 執行緒衍生建立執行緒綁定工作會話的預設閘門。啟用執行緒綁定時,預設為 true;供應商/帳戶可覆寫。
    • defaultSpawnContext:執行緒綁定衍生的預設原生子代理內容("fork""isolated")。預設為 "fork"

{
messages: {
responsePrefix: "🦞", // or "auto"
ackReaction: "👀",
ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
removeAckAfterReply: false,
queue: {
mode: "followup", // steer | followup | collect | interrupt
debounceMs: 500,
cap: 20,
drop: "summarize", // old | new | summarize
byChannel: {
whatsapp: "followup",
telegram: "followup",
},
},
inbound: {
debounceMs: 2000, // 0 disables
byChannel: {
whatsapp: 5000,
slack: 1500,
},
},
},
}

各通道/帳號覆寫:channels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix

解析順序(最優先者勝出):account → channel → global。"" 會停用並停止層疊。"auto" 會衍生 [{identity.name}]

範本變數:

變數說明範例
{model}簡短模型名稱claude-opus-4-6
{modelFull}完整模型識別碼anthropic/claude-opus-4-6
{provider}提供者名稱anthropic
{thinkingLevel}當前思考層級highlowoff
{identity.name}Agent 身分名稱(與 "auto" 相同)

變數不區分大小寫。{think}{thinkingLevel} 的別名。

  • 預設為作用中 agent 的 identity.emoji,否則為 "👀"。設定 "" 以停用。
  • 各通道覆寫:channels.<channel>.ackReactionchannels.<channel>.accounts.<id>.ackReaction
  • 解析順序:account → channel → messages.ackReaction → 身分備用。
  • 範圍:group-mentions(預設)、group-alldirectall
  • removeAckAfterReply:在支援反應的通道(如 Slack、Discord、Telegram、WhatsApp 和 iMessage)上回覆後移除 ack。
  • messages.statusReactions.enabled:在 Slack、Discord、Telegram 和 WhatsApp 上啟用生命週期狀態反應。 在 Slack 和 Discord 上,未設定會在啟用 ack 反應時保持狀態反應開啟。 在 Telegram 和 WhatsApp 上,需明確設為 true 以啟用生命週期狀態反應。
  • messages.statusReactions.emojis: 覆蓋生命週期表情符號鍵: queuedthinkingcompactingtoolcodingwebdeploybuildconciergedoneerrorstallSoft 以及 stallHard。 Telegram 僅允許固定的反應集,因此不支援的已配置表情符號將回退到該聊天中最接近的支援狀態變體。

將來自同一發送者的快速純文字訊息合併為單一代理程式輪次。媒體/附件會立即排清。控制命令會略過防抖。

{
messages: {
tts: {
auto: "always", // off | always | inbound | tagged
mode: "final", // final | all
provider: "elevenlabs",
summaryModel: "openai/gpt-4.1-mini",
modelOverrides: { enabled: true },
maxTextLength: 4000,
timeoutMs: 30000,
prefsPath: "~/.openclaw/settings/tts.json",
providers: {
elevenlabs: {
apiKey: "elevenlabs_api_key",
baseUrl: "https://api.elevenlabs.io",
voiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
applyTextNormalization: "auto",
languageCode: "en",
voiceSettings: {
stability: 0.5,
similarityBoost: 0.75,
style: 0.0,
useSpeakerBoost: true,
speed: 1.0,
},
},
microsoft: {
voice: "en-US-AvaMultilingualNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
},
openai: {
apiKey: "openai_api_key",
baseUrl: "https://api.openai.com/v1",
model: "gpt-4o-mini-tts",
voice: "alloy",
},
},
},
},
}
  • auto 控制預設的自動 TTS 模式:offalwaysinboundtagged/tts on|off 可以覆蓋本機偏好設定,而 /tts status 顯示有效狀態。
  • summaryModel 會覆蓋 agents.defaults.model.primary 以用於自動摘要。
  • modelOverrides 預設為啟用;modelOverrides.allowProvider 預設為 false (選用)。
  • API 金鑰會回退到 ELEVENLABS_API_KEY/XI_API_KEYOPENAI_API_KEY
  • 打包的語音提供者由外掛程式擁有。如果設定了 plugins.allow,請包含您想要使用的每個 TTS 提供者外掛程式,例如用於 Edge TTS 的 microsoft。舊版的 edge 提供者 ID 會被接受作為 microsoft 的別名。
  • providers.openai.baseUrl 會覆蓋 OpenAI TTS 端點。解析順序依次為設定、OPENAI_TTS_BASE_URL,然後是 https://api.openai.com/v1
  • providers.openai.baseUrl 指向非 OpenAI 端點時,OpenClaw 會將其視為 OpenAI 相容的 TTS 伺服器,並放寬模型/語音驗證。

說話模式的預設值(macOS/iOS/Android)。

{
talk: {
provider: "elevenlabs",
providers: {
elevenlabs: {
voiceId: "elevenlabs_voice_id",
voiceAliases: {
Clawd: "EXAVITQu4vr4xnSDxMaL",
Roger: "CwhRBWXzGAHq8TQ4Fs17",
},
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
},
mlx: {
modelId: "mlx-community/Soprano-80M-bf16",
},
system: {},
},
consultThinkingLevel: "low",
consultFastMode: true,
speechLocale: "ru-RU",
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
realtime: {
provider: "openai",
providers: {
openai: {
model: "gpt-realtime-2",
voice: "cedar",
},
},
instructions: "Speak warmly and keep answers brief.",
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
  • 當設定了多個 Talk 提供者時,talk.provider 必須符合 talk.providers 中的某個鍵。
  • 舊版的扁平 Talk 鍵(talk.voiceIdtalk.voiceAliasestalk.modelIdtalk.outputFormattalk.apiKey)僅供相容性使用。請執行 openclaw doctor --fix 將已保存的設定重寫為 talk.providers.<provider>
  • 語音 ID 會回退到 ELEVENLABS_VOICE_IDSAG_VOICE_ID
  • providers.*.apiKey 接受純文字字串或 SecretRef 物件。
  • ELEVENLABS_API_KEY 回退僅在未設定 Talk API 金鑰時套用。
  • providers.*.voiceAliases 允許 Talk 指令使用友善名稱。
  • providers.mlx.modelId 選擇 macOS 本機 MLX 協助程式所使用的 Hugging Face 儲存庫。若省略,macOS 會使用 mlx-community/Soprano-80M-bf16
  • macOS MLX 播放在存在時會透過內建的 openclaw-mlx-tts 協助程式執行,或是 PATH 上的可執行檔;OPENCLAW_MLX_TTS_BIN 可覆寫協助程式路徑以供開發使用。
  • consultThinkingLevel 控制 Control UI Talk 即時 openclaw_agent_consult 呼叫背後執行的完整 OpenClaw 代理程式之思考層級。保持未設定以維持正常的會話/模型行為。
  • consultFastMode 為 Control UI Talk 即時諮詢設定一次性快速模式覆寫,而不會變更會話的正常快速模式設定。
  • speechLocale 設定 iOS/macOS Talk 語音辨識所使用的 BCP 47 地區 ID。保持未設定以使用裝置預設值。
  • silenceTimeoutMs 控制 Talk 模式在使用者停止說話後、傳送逐字稿之前等待的時間長度。未設定則保持平台預設的暫停視窗(700 ms on macOS and Android, 900 ms on iOS)。
  • realtime.instructions 將提供者面向的系統指令附加到 OpenClaw 內建的即時提示詞,因此可以在不失去預設 openclaw_agent_consult 指引的情況下設定語音風格。