快速开始
配置 — 智能体
智能体级配置键位于 agents.*、multiAgent.*、session.*、
messages.* 和 talk.* 下。有关渠道、工具、Gateway 网关运行时及其他
顶层键,请参阅配置参考。
智能体默认值
agents.defaults.workspace
默认值:设置 OPENCLAW_WORKSPACE_DIR 时为该值,否则为 ~/.openclaw/workspace(当 OPENCLAW_PROFILE 设置为非默认配置文件时,则为 ~/.openclaw/workspace-<profile>)。
{ agents: { defaults: { workspace: "~/.openclaw/workspace" } },}显式的 agents.defaults.workspace 值优先于
OPENCLAW_WORKSPACE_DIR。如果不想将路径写入配置,可使用该环境变量将默认智能体
指向已挂载的工作区。
agents.defaults.repoRoot
可选的仓库根目录,显示在系统提示词的 Runtime 行中。如果未设置,OpenClaw 会从工作区开始向上遍历以自动检测。
{ agents: { defaults: { repoRoot: "~/Projects/openclaw" } },}agents.defaults.skills
可选的默认技能允许列表,适用于未设置
agents.list[].skills 的智能体。
{ agents: { defaults: { skills: ["github", "weather"] }, list: [ { id: "writer" }, // 继承 github、weather { id: "docs", skills: ["docs-search"] }, // 替换默认值 { id: "locked-down", skills: [] }, // 不使用任何技能 ], },}- 默认情况下,省略
agents.defaults.skills表示不限制技能。 - 省略
agents.list[].skills以继承默认值。 - 设置
agents.list[].skills: []表示不使用任何技能。 - 非空的
agents.list[].skills列表是该智能体的最终集合; 不会与默认值合并。
agents.defaults.skipBootstrap
禁用自动创建工作区引导文件(AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md、BOOTSTRAP.md)。
{ agents: { defaults: { skipBootstrap: true } },}agents.defaults.skipOptionalBootstrapFiles
跳过创建选定的可选工作区文件,同时仍写入必需的引导文件(AGENTS.md、TOOLS.md、BOOTSTRAP.md)。有效值:SOUL.md、USER.md、HEARTBEAT.md 和 IDENTITY.md。
{ agents: { defaults: { skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"], }, },}agents.defaults.contextInjection
控制何时将工作区引导文件注入系统提示词。默认值:"always"。
"continuation-skip":安全的继续轮次(在助手完成响应后)会跳过重新注入工作区引导内容,从而减小提示词大小。Heartbeat 运行和压缩后重试仍会重建上下文。"never":在每个轮次中禁用工作区引导内容和上下文文件注入。仅对完全自行管理提示词生命周期的智能体使用此选项(自定义上下文引擎、自行构建上下文的原生运行时,或不使用引导内容的专用工作流)。Heartbeat 和压缩恢复轮次也会跳过注入。
{ agents: { defaults: { contextInjection: "continuation-skip" } },}按智能体覆盖:agents.list[].contextInjection。省略的值将继承
agents.defaults.contextInjection。
agents.defaults.bootstrapMaxChars
每个工作区引导文件在截断前允许的最大字符数。默认值:20000。
{ agents: { defaults: { bootstrapMaxChars: 20000 } },}按智能体覆盖:agents.list[].bootstrapMaxChars。省略的值将继承
agents.defaults.bootstrapMaxChars。
agents.defaults.bootstrapTotalMaxChars
所有工作区引导文件合计注入的最大字符数。默认值:60000。
{ agents: { defaults: { bootstrapTotalMaxChars: 60000 } },}按智能体覆盖:agents.list[].bootstrapTotalMaxChars。省略的值
将继承 agents.defaults.bootstrapTotalMaxChars。
按智能体覆盖引导配置文件
当某个智能体所需的提示词注入行为不同于共享默认值时,可使用按智能体覆盖的引导配置文件。省略的字段将继承
agents.defaults。
{ agents: { defaults: { contextInjection: "continuation-skip", bootstrapMaxChars: 20000, bootstrapTotalMaxChars: 60000, }, list: [ { id: "strict-worker", contextInjection: "always", bootstrapMaxChars: 50000, bootstrapTotalMaxChars: 300000, }, ], },}agents.defaults.bootstrapPromptTruncationWarning
控制引导上下文被截断时智能体可见的系统提示词通知。
默认值:"always"。
"off":绝不将截断通知文本注入系统提示词。"once":对每个唯一的截断特征仅注入一次简明通知。"always":存在截断时,在每次运行中注入简明通知(推荐)。
详细的原始/注入计数和配置调优字段仍保留在诊断信息中,例如上下文/状态报告和日志;常规 WebChat 用户/运行时上下文只会收到简明的恢复通知。
{ agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always}上下文预算归属映射
OpenClaw 有多项大容量提示词/上下文预算,这些预算有意按子系统拆分,而不是全部通过一个通用 参数控制。
| 预算 | 涵盖范围 |
|---|---|
agents.defaults.bootstrapMaxChars / bootstrapTotalMaxChars |
常规工作区引导内容注入 |
agents.defaults.startupContext.* |
一次性重置/启动模型运行的前置内容,包括近期的每日 memory/*.md 文件。纯聊天 /new 和 /reset 会得到确认,但不会调用模型 |
skills.limits.* |
注入系统提示词的精简 Skills 列表 |
agents.defaults.contextLimits.* |
有界的运行时摘录和注入的运行时自有块 |
memory.qmd.limits.* |
已索引记忆搜索片段及其注入大小 |
对应的按智能体覆盖项:
agents.list[].skillsLimits.maxSkillsPromptCharsagents.list[].contextInjectionagents.list[].bootstrapMaxCharsagents.list[].bootstrapTotalMaxCharsagents.list[].contextLimits.*
agents.defaults.startupContext
控制重置/启动模型运行时在首轮注入的启动前置内容。
纯聊天 /new 和 /reset 命令会确认重置而不调用
模型,因此不会加载此前置内容。
{ agents: { defaults: { startupContext: { enabled: true, applyOn: ["new", "reset"], dailyMemoryDays: 2, maxFileBytes: 16384, maxFileChars: 1200, maxTotalChars: 2800, }, }, },}agents.defaults.contextLimits
有界运行时上下文界面的共享默认值。
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000, memoryGetDefaultLines: 120, postCompactionMaxChars: 1800, }, }, },}memoryGetMaxChars:添加截断 元数据和继续通知之前的默认memory_get摘录上限。memoryGetDefaultLines:省略lines时的默认memory_get行窗口。toolResultMaxChars:用于持久化 结果和溢出恢复的高级实时工具结果上限。保持未设置可使用模型上下文自动上限: 低于 100K 个 token 时为16000个字符,达到 100K+ 个 token 时为32000个字符,达到 200K+ 个 token 时为64000个字符。对于长上下文模型,接受不超过1000000的显式值, 但有效上限仍限制为模型上下文窗口的约 30%。openclaw doctor --deep会输出有效上限, 且 Doctor 仅在显式覆盖值已过时或不起作用时发出警告。postCompactionMaxChars:压缩后 刷新注入期间使用的 AGENTS.md 摘录上限。
agents.list[].contextLimits
共享 contextLimits 参数的按智能体覆盖项。省略的字段将继承
agents.defaults.contextLimits。
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000 }, }, list: [ { id: "tiny-local", contextLimits: { memoryGetMaxChars: 6000, toolResultMaxChars: 8000, // 此智能体的高级上限 }, }, ], },}skills.limits.maxSkillsPromptChars
注入系统提示词的精简 Skills 列表的全局上限。
这不会影响按需读取 SKILL.md 文件。
{ skills: { limits: { maxSkillsPromptChars: 18000 } },}agents.list[].skillsLimits.maxSkillsPromptChars
Skills 提示词预算的按智能体覆盖项。
{ agents: { list: [{ id: "tiny-local", skillsLimits: { maxSkillsPromptChars: 6000 } }], },}agents.defaults.imageMaxDimensionPx
调用提供商之前,转录/工具图像块中图像最长边允许的最大像素尺寸。
默认值:1200。
较低的值通常可以减少大量使用截图的运行中的视觉 token 用量和请求负载大小。 较高的值可保留更多视觉细节。
{ agents: { defaults: { imageMaxDimensionPx: 1200 } },}agents.defaults.imageQuality
针对从文件路径、URL 和媒体引用加载的图像,设置图像工具的压缩/细节偏好。
默认值:auto。
OpenClaw 会根据所选图像模型调整缩放梯度。例如,Claude Opus 4.8、OpenAI GPT-5.6 Sol、Qwen VL 和托管的 Llama 4 视觉模型可使用比旧版/默认高细节视觉路径更大的图像,而多图像轮次在 auto 模式下会进行更激进的压缩,以控制 token 和延迟成本。
值:
auto:根据模型限制和图像数量进行调整。efficient:优先使用较小的图像,以降低 token 和字节用量。balanced:使用标准的折中缩放梯度。high:为截图、图表和文档图像保留更多细节。
{ agents: { defaults: { imageQuality: "auto" } },}agents.defaults.userTimezone
系统提示词上下文的时区(不适用于消息时间戳)。回退为主机时区。
{ agents: { defaults: { userTimezone: "America/Chicago" } },}agents.defaults.timeFormat
系统提示词中的时间格式。默认值:auto(操作系统偏好设置)。
{ agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24}agents.defaults.model
{ 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"], }, utilityModel: "openai/gpt-5.4-mini", 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" }, // 全局默认提供商参数 pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", verboseDefault: "off", toolProgressDetail: "explain", reasoningDefault: "off", elevatedDefault: "on", timeoutSeconds: 600, mediaMaxMb: 5, contextTokens: 200000, maxConcurrent: 4, }, },}model:接受字符串("provider/model")或对象({ primary, fallbacks })。- 字符串形式仅设置主模型。
- 对象形式设置主模型以及按顺序排列的故障转移模型。
utilityModel:用于短时内部任务的可选provider/model引用或别名。目前用于生成 Control UI 会话标题、Telegram 私信主题标题、Discord 自动话题串标题以及进度草稿叙述。未设置时,如果主提供商声明了默认小模型,OpenClaw 将采用该模型(OpenAI →gpt-5.6-luna,Anthropic →claude-haiku-4-5);否则,标题任务回退到智能体的主模型,而叙述保持关闭。设置utilityModel: ""可完全禁用实用任务路由。agents.list[].utilityModel会覆盖默认值(每智能体的空值会为该智能体禁用此功能),特定操作的模型覆盖优先于这两者。实用任务会单独调用模型,并将任务特定内容发送给所选模型提供商。生成仪表板标题时,最多发送第一条非命令消息的前 1,000 个字符;叙述会发送入站请求以及经过脱敏的精简工具摘要。请选择符合你的成本和数据处理要求的提供商。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_KEY或GOOGLE_API_KEY;为openai/gpt-image-2/openai/gpt-image-1.5配置OPENAI_API_KEY或 OpenAI Codex OAuth;为fal/*配置FAL_KEY)。 - 如果省略,
image_generate仍可推断具有身份验证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的图像生成提供商。
musicGenerationModel:接受字符串("provider/model")或对象({ primary, fallbacks })。- 供共享音乐生成能力和内置
music_generate工具使用。 - 典型值:
google/lyria-3-clip-preview、google/lyria-3-pro-preview或minimax/music-2.6。 - 如果省略,
music_generate仍可推断具有身份验证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的音乐生成提供商。 - 如果直接选择提供商或模型,还需配置匹配的提供商身份验证/API key。
- 供共享音乐生成能力和内置
videoGenerationModel:接受字符串("provider/model")或对象({ primary, fallbacks })。- 供共享视频生成能力和内置
video_generate工具使用。 - 典型值:
qwen/wan2.6-t2v、qwen/wan2.6-i2v、qwen/wan2.6-r2v、qwen/wan2.6-r2v-flash或qwen/wan2.7-r2v。 - 如果省略,
video_generate仍可推断具有身份验证支持的提供商默认值。它会先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的视频生成提供商。 - 如果直接选择提供商或模型,还需配置匹配的提供商身份验证/API key。
- 官方 Qwen 视频生成插件最多支持输出 1 个视频、输入 1 张图像、输入 4 个视频、10 秒时长,以及提供商级别的
size、aspectRatio、resolution、audio和watermark选项。
- 供共享视频生成能力和内置
pdfModel:接受字符串("provider/model")或对象({ primary, fallbacks })。- 由
pdf工具用于模型路由。 - 如果省略,PDF 工具会先回退到
imageModel,然后回退到解析后的会话模型或默认模型。
- 由
pdfMaxBytesMb:调用时未传递maxBytesMb的情况下,pdf工具的默认 PDF 大小限制。pdfMaxPages:pdf工具在提取回退模式下考虑的默认最大页数。verboseDefault:智能体的默认详细程度。值:"off"、"on"、"full"。默认值:"off"。toolProgressDetail:/verbose工具摘要和进度草稿工具行的详细信息模式。值:"explain"(默认,精简的人类可读标签)或"raw"(可用时附加原始命令/详细信息)。每智能体的agents.list[].toolProgressDetail会覆盖此默认值。reasoningDefault:智能体推理内容的默认可见性。值:"off"、"on"、"stream"。每智能体的agents.list[].reasoningDefault会覆盖此默认值。仅当上下文属于所有者、获授权发送者或操作员管理员 Gateway 网关,且未设置每消息或会话级推理覆盖时,才会应用配置的推理默认值。elevatedDefault:智能体提升权限输出的默认级别。值:"off"、"on"、"ask"、"full"。默认值:"on"。model.primary:格式为provider/model(例如,用于 Codex OAuth 访问的openai/gpt-5.6-sol)。如果省略提供商,OpenClaw 会先尝试别名,再查找与该确切模型 ID 唯一匹配的已配置提供商,最后才回退到已配置的默认提供商(这是已弃用的兼容行为,因此建议显式使用provider/model)。如果该提供商不再提供已配置的默认模型,OpenClaw 会回退到首个已配置的提供商/模型,而不是返回已移除提供商所造成的过期默认值。models:/model的已配置模型目录和允许列表。每个条目可包含alias(快捷方式)和params(提供商特定参数,例如temperature、maxTokens、cacheRetention、context1m、responsesServerCompaction、responsesCompactThreshold、OpenRouterprovider路由、chat_template_kwargs、extra_body/extraBody)。- 使用
provider/*条目(例如"openai/*": {}或"vllm/*": {}),可显示所选提供商发现的所有模型,无需手动列出每个模型 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 服务器端压缩。
- 使用
params:应用于所有模型的全局默认提供商参数。在agents.defaults.params中设置(例如{ cacheRetention: "long" })。params合并优先级(配置):agents.defaults.params(全局基础)会被agents.defaults.models["provider/model"].params(每模型)覆盖,然后agents.list[].params(匹配的智能体 ID)按键覆盖。详情请参阅提示词缓存。models.providers.openrouter.params.provider:OpenRouter 全局默认提供商路由策略。OpenClaw 会将其转发到 OpenRouter 请求的provider对象;每模型的agents.defaults.models["openrouter/<model>"].params.provider和智能体参数会按键覆盖。请参阅 OpenRouter 提供商路由。params.extra_body/params.extraBody:高级透传 JSON,会合并到 OpenAI 兼容代理的api: "openai-completions"请求正文中。如果它与生成的请求键冲突,额外正文中的值优先;非原生 completions 路由随后仍会移除仅适用于 OpenAI 的store。params.chat_template_kwargs:合并到顶层api: "openai-completions"请求正文中的 vLLM/OpenAI 兼容聊天模板参数。当vllm/nemotron-3-*关闭思考时,内置 vLLM 插件会自动发送enable_thinking: false和force_nonempty_content: true;显式的chat_template_kwargs会覆盖生成的默认值,而extra_body.chat_template_kwargs仍具有最终优先级。已配置的 vLLM Qwen 和 Nemotron 思考模型提供二元/think选项(off、on),而不是多级工作量阶梯。compat.thinkingFormat:OpenAI 兼容的思考负载样式。Together 风格的reasoning.enabled使用"together",Qwen 风格的顶层enable_thinking使用"qwen";对于支持请求级聊天模板 kwargs 的 Qwen 系列后端(例如 vLLM),chat_template_kwargs.enable_thinking使用"qwen-chat-template"。OpenClaw 会将禁用思考映射为false,将启用思考映射为true;已配置的 vLLM Qwen 模型会为这些格式提供二元/think选项。compat.supportedReasoningEfforts:每模型的 OpenAI 兼容推理工作量列表。对于确实接受"xhigh"的自定义端点,请将其包含在内;随后 OpenClaw 会在命令菜单、Gateway 网关会话行、会话补丁验证、智能体 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 启动的进程。请参阅本地模型服务。- 运行时策略应配置在提供商或模型上,而不是配置在
agents.defaults上。使用models.providers.<provider>.agentRuntime配置提供商范围的规则,或使用agents.defaults.models["provider/model"].agentRuntime/agents.list[].models["provider/model"].agentRuntime配置特定模型的规则。仅有提供商/模型前缀绝不会选择 harness。当 runtime 未设置或为auto时,仅当路由与官方 HTTPS Platform Responses 或 ChatGPT Responses 路由完全匹配,且请求中没有显式覆盖设置时,OpenAI 才可能隐式选择 Codex。请参阅 OpenAI 隐式 Agent Runtimes。 - 修改这些字段的配置写入程序(例如
/models set、/models set-image以及添加/移除回退项的命令)会保存规范对象形式,并尽可能保留现有的回退列表。 maxConcurrent:跨会话并行运行的智能体数量上限(每个会话仍按顺序执行)。默认值:4。
运行时策略
{ models: { providers: { openai: { agentRuntime: { id: "codex" }, }, }, }, agents: { defaults: { model: "openai/gpt-5.6-sol", models: { "anthropic/claude-opus-4-8": { agentRuntime: { id: "claude-cli" }, }, "vllm/*": { agentRuntime: { id: "openclaw" }, }, }, }, },}id:"auto"、"openclaw"、已注册的插件 harness ID,或受支持的 CLI 后端别名。内置 Codex 插件注册codex;内置 Anthropic 插件提供claude-cliCLI 后端。id: "auto"允许已注册的插件 harness 接管声明或以其他方式满足其支持契约的有效路由,并在没有匹配的 harness 时使用 OpenClaw。显式插件运行时(如id: "codex")要求该 harness 和兼容的有效路由;如果任一项不可用,或执行失败,它都会以失败关闭方式处理。id: "pi"仅作为openclaw的已弃用别名接受,以保留 v2026.5.22 及更早版本中已发布的配置。新配置应使用openclaw。- 运行时优先级依次为:精确模型策略(
agents.list[].models["provider/model"]、agents.defaults.models["provider/model"]或models.providers.<provider>.models[])、agents.list[]/agents.defaults.models["provider/*"],最后是models.providers.<provider>.agentRuntime中提供商范围的策略。 - 整个智能体范围的运行时键属于旧版配置。运行时选择会忽略
agents.defaults.agentRuntime、agents.list[].agentRuntime、会话运行时固定设置和OPENCLAW_AGENT_RUNTIME。运行openclaw doctor --fix以移除过时值。 - 符合条件的官方精确 HTTPS OpenAI Responses/ChatGPT 路由,如果没有手动指定的请求覆盖设置,可以隐式使用 Codex harness。提供商/模型
agentRuntime.id: "codex"会将 Codex 设为失败时关闭的必要条件,但不会使不兼容的路由变得兼容。 - 对于 Claude CLI 部署,建议使用
model: "anthropic/claude-opus-4-8"加模型范围的agentRuntime.id: "claude-cli"。旧版claude-cli/<model>引用仍可用于兼容,但新配置应保持提供商/模型选择的规范形式,并将执行后端放在提供商/模型运行时策略中。 - 这只控制文本智能体轮次的执行。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用各自的提供商/模型设置。
内置别名简写(仅当模型位于 agents.defaults.models 中时适用):
| 别名 | 模型 |
|---|---|
opus |
anthropic/claude-opus-4-8 |
sonnet |
anthropic/claude-sonnet-4-6 |
gpt |
openai/gpt-5.4 |
gpt-mini |
openai/gpt-5.4-mini |
gpt-nano |
openai/gpt-5.4-nano |
gemini |
google/gemini-3.1-pro-preview |
gemini-flash |
google/gemini-3-flash-preview |
gemini-flash-lite |
google/gemini-3.1-flash-lite |
你配置的别名始终优先于默认值。
除非设置 --thinking off 或自行定义 agents.defaults.models["zai/<model>"].params.thinking,否则 Z.AI GLM-4.x 模型会自动启用思考模式。
Z.AI 模型默认启用 tool_stream,用于工具调用流式传输。将 agents.defaults.models["zai/<model>"].params.tool_stream 设为 false 可将其禁用。
在 OpenClaw 中,Anthropic Claude Opus 4.8 默认关闭思考;显式启用自适应思考后,由 Anthropic 提供商控制的默认推理强度为 high。未显式设置思考级别时,Claude 4.6 模型默认为 adaptive。
agents.defaults.cliBackends
用于纯文本后备运行的可选 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后支持会话。 - 当
imageArg接受文件路径时,支持图像直通传递。 reseedFromRawTranscriptWhenUncompacted: true允许后端在首次压缩摘要生成之前,从有界的原始 OpenClaw 转录尾部恢复可安全恢复的失效会话。身份验证配置文件或凭据纪元发生变化时,仍绝不会使用原始内容重新播种。
agents.defaults.promptOverlays
与提供商无关的提示词叠加层,按模型系列应用于由 OpenClaw 组装的提示词界面。GPT-5 系列模型 ID 会在 OpenClaw/提供商路由中接收共享行为契约;personality 只控制友好的交互风格层。原生 Codex app-server 路由保留由 Codex 控制的基础/模型指令,而不使用此 OpenClaw GPT-5 叠加层,并且 OpenClaw 会为原生线程禁用 Codex 的内置人格。
{ agents: { defaults: { promptOverlays: { gpt5: { personality: "friendly", // friendly | on | off }, }, }, },}"friendly"(默认)和"on"会启用友好的交互风格层。"off"只禁用友好层;带标签的 GPT-5 行为契约仍保持启用。- 未设置此共享设置时,仍会读取旧版
plugins.entries.openai.config.personality。
agents.defaults.heartbeat
周期性 Heartbeat 运行。
{ 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 时,在 Heartbeat 运行期间抑制工具错误警告载荷。timeoutSeconds:Heartbeat 智能体轮次在被中止前允许的最长时间(秒)。保持未设置时,如果已设置agents.defaults.timeoutSeconds,则使用该值;否则使用 Heartbeat 周期,且上限为 600 秒。directPolicy:直接消息/私信投递策略。allow(默认)允许向直接目标投递。block会抑制向直接目标投递,并发出reason=dm-blocked。lightContext:设为 true 时,Heartbeat 运行使用轻量级引导上下文,并且仅保留工作区引导文件中的HEARTBEAT.md。isolatedSession:设为 true 时,每次 Heartbeat 都在没有任何先前对话历史的新会话中运行。隔离模式与 cronsessionTarget: "isolated"相同。将每次 Heartbeat 的 token 成本从约 100K 降至约 2-5K 个 token。skipWhenBusy:设为 true 时,如果该智能体的额外繁忙通道正在工作,Heartbeat 运行会推迟:包括其自身按会话键控的子智能体或嵌套命令工作。即使不设置此标志,cron 通道也始终会推迟 Heartbeat。- 按智能体配置:设置
agents.list[].heartbeat。只要任一智能体定义了heartbeat,就只有这些智能体运行 Heartbeat。 - Heartbeat 会运行完整的智能体轮次——间隔越短,消耗的 token 越多。
agents.defaults.compaction
{ agents: { defaults: { compaction: { mode: "safeguard", // default | safeguard provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 180, reserveTokensFloor: 24000, keepRecentTokens: 50000, recentTurnsPreserve: 3, maxHistoryShare: 0.7, 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 tool-loop pressure check postIndexSync: "async", // off | async | await postCompactionSections: ["Session Startup", "Red Lines"], // opt in to AGENTS.md section 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, // notices when compaction starts/completes and on memory-flush degradation (default: false) memoryFlush: { enabled: true, model: "ollama/qwen3:8b", // optional memory-flush-only model override softThresholdTokens: 6000, forceFlushTranscriptBytes: "2mb", 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.", }, }, }, },}mode:default或safeguard(对较长历史记录进行分块摘要)。请参阅压缩。provider:已注册压缩提供商插件的 ID。设置后,将调用该提供商的summarize(),而不是内置的 LLM 摘要。失败时回退到内置摘要。设置提供商会强制使用mode: "safeguard"。请参阅压缩。timeoutSeconds:单次压缩操作在 OpenClaw 中止前允许使用的最大秒数。默认值:180。reserveTokens:压缩后为模型输出和未来工具结果预留的 token 余量。当模型上下文窗口已知时,OpenClaw 会限制实际预留量,使其不会占用提示词预算。reserveTokensFloor:嵌入式运行时强制执行的最小预留量。设置0可禁用此下限。此下限仍受当前上下文窗口上限约束。keepRecentTokens:用于逐字保留最新转录尾部的智能体截断点预算。显式设置时,手动/compact会遵循此值;否则,手动压缩将作为硬检查点。recentTurnsPreserve:在保护性摘要之外逐字保留的最近用户/助手轮次数。默认值:3。maxHistoryShare:压缩后允许保留的历史记录占总上下文预算的最大比例(范围为0.1-0.9)。identifierPolicy:strict(默认)、off或custom。strict会在压缩摘要期间前置内置的不透明标识符保留指导。identifierInstructions:在identifierPolicy=custom时使用的可选自定义标识符保留文本。qualityGuard:针对保护性摘要格式异常输出的重试检查。在保护模式下默认启用;设置enabled: false可跳过审计。midTurnPrecheck:可选的工具循环压力检查。当enabled: true时,OpenClaw 会在附加工具结果后、下一次模型调用前检查上下文压力。如果上下文已无法容纳,它会在提交提示词前中止当前尝试,并复用现有的预检查恢复路径来截断工具结果,或执行压缩并重试。适用于default和safeguard两种压缩模式。默认值:禁用。postIndexSync:压缩后的会话记忆重新索引模式。默认值:"async"。使用"await"可获得最高的新鲜度,使用"async"可降低压缩延迟;仅当会话记忆同步由其他位置处理时,才使用"off"。postCompactionSections:压缩后要重新注入的可选 AGENTS.md H2/H3 章节名称。未设置或设为[]时,重新注入处于禁用状态。显式设置["Session Startup", "Red Lines"]会启用该章节组合,并保留旧版Every Session/Safety回退。仅当额外上下文的价值足以抵消重复项目指导的风险时才启用此项,因为这些指导可能已包含在压缩摘要中。model:仅用于压缩摘要的可选provider/model-id或来自agents.defaults.models的裸别名。裸别名会在分派前解析;发生冲突时,配置的字面模型 ID 优先。当主会话应继续使用一个模型、而压缩摘要应在另一个模型上运行时使用此项;未设置时,压缩使用会话的主模型。truncateAfterCompaction:压缩后轮换当前会话转录,使未来轮次仅加载摘要和未摘要的尾部,同时归档先前的完整转录。可防止长时间运行的会话中当前转录无限增长。默认值:false。maxActiveTranscriptBytes:可选的字节阈值(number或类似"20mb"的字符串);当转录历史记录增长超过该阈值时,会在运行前触发常规本地压缩。需要启用truncateAfterCompaction,以便成功压缩后轮换到更小的后继转录。未设置或设为0时禁用。notifyUser:当true时,向用户发送简短的上下文维护通知:压缩开始和完成时(例如,“正在压缩上下文……”和“压缩完成”),以及压缩前记忆刷新耗尽、回复因而以降级状态继续时(例如,“记忆维护暂时失败;正在继续你的回复。”)。默认禁用,以保持这些通知静默。memoryFlush:自动压缩前用于存储持久记忆的静默智能体轮次。如果此维护轮次应始终使用本地模型,请将model设置为具体的提供商/模型,例如ollama/qwen3:8b;该覆盖设置不会继承当前会话的回退链。即使 token 计数器已过时,forceFlushTranscriptBytes也会在转录大小达到阈值时强制执行刷新。工作区为只读时跳过。
agents.defaults.runRetries
嵌入式智能体运行时的外层运行循环重试迭代边界,用于防止故障恢复期间出现无限执行循环。此设置仅适用于嵌入式智能体运行时,不适用于 ACP 或 CLI 运行时。
{ agents: { defaults: { runRetries: { base: 24, perProfile: 8, min: 32, max: 160, }, }, list: [ { id: "main", runRetries: { max: 50 }, // 可选的按智能体覆盖设置 }, ], },}base:外层运行循环的基础运行重试迭代次数。默认值:24。perProfile:为每个回退配置候选项额外授予的运行重试迭代次数。默认值:8。min:运行重试迭代次数的最小绝对限制。默认值:32。max:运行重试迭代次数的最大绝对限制,用于防止失控执行。默认值:160。
agents.defaults.contextPruning
在发送给 LLM 之前,从内存上下文中修剪旧工具结果。不会修改磁盘上的会话历史记录。默认禁用;设置 mode: "cache-ttl" 可启用。
{ agents: { defaults: { contextPruning: { mode: "cache-ttl", // off(默认)| cache-ttl ttl: "1h", // 时长(ms/s/m/h),默认单位:分钟;默认值:5m keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, hardClear: { enabled: true, placeholder: "[旧工具结果内容已清除]" }, tools: { deny: ["browser", "canvas"] }, }, }, },}cache-ttl 模式行为
mode: "cache-ttl"启用修剪处理。ttl控制修剪多久可以再次运行(从上次缓存触碰后计算)。默认值:5m。- 修剪首先对过大的工具结果执行软修剪,然后在需要时硬清除较旧的工具结果。
softTrimRatio和hardClearRatio接受从0.0到1.0的值;配置验证会拒绝超出该范围的值。
软修剪会保留开头和结尾,并在中间插入 ...。
硬清除会使用占位符替换整个工具结果。
注意:
- 图像块永远不会被修剪或清除。
- 比例按字符计算(近似值),不是精确的 token 数量。
- 如果助手消息少于
keepLastAssistants条,则跳过修剪。
有关行为详情,请参阅会话修剪。
分块流式传输
{ agents: { defaults: { blockStreamingDefault: "off", // on | off blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200, breakPreference: "paragraph" }, blockStreamingCoalesce: { idleMs: 1000 }, humanDelay: { mode: "natural" }, // off(默认)| natural | custom(使用 minMs/maxMs) }, },}- 非 Telegram 渠道需要显式设置
*.streaming.block.enabled: true才能启用分块回复。QQ Bot 例外:它没有streaming.block键,除非channels.qqbot.streaming.mode为"off",否则会流式传输分块回复。 - 渠道覆盖设置:
channels.<channel>.streaming.block.coalesce(以及按账号设置的变体)。Discord、Google Chat、Mattermost、MS Teams、Signal 和 Slack 默认为minChars: 1500/idleMs: 1000。 blockStreamingChunk.breakPreference:首选分块边界("paragraph" | "newline" | "sentence")。humanDelay:分块回复之间的随机暂停。默认值:off。natural= 800-2500ms。custom使用minMs/maxMs(任何未设置的边界都会回退到自然范围)。按智能体覆盖设置:agents.list[].humanDelay。
有关行为和分块详情,请参阅流式传输。
输入状态指示器
{ agents: { defaults: { typingMode: "instant", // never | instant | thinking | message typingIntervalSeconds: 6, }, },}- 默认值:直接聊天/提及时为
instant,未提及的群聊中为message。 typingIntervalSeconds默认值:6。- 按会话覆盖设置:
session.typingMode、session.typingIntervalSeconds。
请参阅输入状态指示器。
agents.defaults.sandbox
嵌入式智能体的可选沙箱隔离。完整指南请参阅沙箱隔离。
{ agents: { defaults: { sandbox: { mode: "non-main", // off (default) | non-main | all backend: "docker", // docker (default) | ssh | openshell scope: "agent", // session | agent (default) | shared workspaceAccess: "none", // none (default) | 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, gpus: "all", 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"], }, }, },}上面显示的默认值(off/docker/agent/none/bookworm-slim 镜像/none 网络等)是 OpenClaw 的实际默认值,并非仅供说明的示例值。
沙箱详情
后端:
docker:本地 Docker 运行时(默认)ssh:由通用 SSH 支持的远程运行时openshell:OpenShell 运行时
选择 backend: "openshell" 后,运行时专用设置将移至
plugins.entries.openshell.config。
SSH 后端配置:
target:采用user@host[:port]格式的 SSH 目标command:SSH 客户端命令(默认:ssh)workspaceRoot:用于各作用域工作区的远程绝对根目录(默认:/tmp/openclaw-sandboxes)identityFile/certificateFile/knownHostsFile:传递给 OpenSSH 的现有本地文件identityData/certificateData/knownHostsData:OpenClaw 在运行时具体化为临时文件的内联内容或 SecretRefsstrictHostKeyChecking/updateHostKeys:OpenSSH 主机密钥策略选项(两者默认均为true)
SSH 身份验证优先级:
identityData优先于identityFilecertificateData优先于certificateFileknownHostsData优先于knownHostsFile- 沙箱会话启动前,会从当前密钥运行时快照中解析由 SecretRef 支持的
*Data值
SSH 后端行为:
- 在创建或重新创建后,仅初始化一次远程工作区
- 随后将远程 SSH 工作区保持为规范工作区
- 通过 SSH 路由
exec、文件工具和媒体路径 - 不会自动将远程更改同步回主机
- 不支持沙箱浏览器容器
工作区访问权限:
none:位于~/.openclaw/sandboxes下的各作用域沙箱工作区(默认)ro:沙箱工作区位于/workspace,Agent 工作区以只读方式挂载到/agentrw:Agent 工作区以读写方式挂载到/workspace
作用域:
session:每个会话使用独立的容器和工作区agent:每个智能体使用一个容器和工作区(默认)shared:共享容器和工作区(会话之间不隔离)
OpenShell 插件配置:
{plugins: { entries: { openshell: { enabled: true, config: { mode: "mirror", // mirror (default) | remote command: "openshell", 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" 会被阻止。除非明确设置
sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true(紧急解锁),否则默认会阻止 "container:<id>"。
活跃 OpenClaw 沙箱中的 Codex app-server 轮次,其原生代码模式网络访问也使用相同的出口设置。
入站附件会暂存到当前工作区中的 media/inbound/*。
docker.binds 用于挂载额外的主机目录;全局绑定和按智能体绑定会进行合并。
沙箱浏览器(sandbox.browser.enabled,默认 false):在容器中运行 Chromium + CDP。noVNC URL 会注入系统提示词。在 openclaw.json 中不需要 browser.enabled。
默认情况下,noVNC 观察者访问使用 VNC 身份验证,并且 OpenClaw 会生成一个短期有效的令牌 URL,而不是在共享 URL 中暴露密码。
allowHostControl: false(默认)阻止沙箱隔离的会话以主机浏览器为目标。network默认为openclaw-sandbox-browser(专用网桥网络)。仅当明确需要全局网桥连接时,才将其设置为bridge。此处也会阻止"host"。cdpSourceRange可选择在容器边缘将 CDP 入口限制在某个 CIDR 范围内(例如172.21.0.1/32)。sandbox.browser.binds仅将额外的主机目录挂载到沙箱浏览器容器中。设置该值时(包括[]),它会替换浏览器容器的docker.binds。- 沙箱浏览器容器中的 Chromium 始终使用
--no-sandbox --disable-setuid-sandbox启动(容器不具备 Chrome 自身沙箱所需的内核原语);没有用于更改此行为的配置开关。 - 启动默认值定义在
scripts/sandbox-browser-entrypoint.sh中,并针对容器主机进行了调优: --remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--disable-3d-apis、--disable-gpu和--disable-software-rasterizer默认启用;如果 WebGL/3D 使用场景需要,可以通过OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0将其禁用。--disable-extensions(默认启用);如果工作流依赖扩展,OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0会重新启用扩展。- 默认为
--renderer-process-limit=2;可通过OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>更改,将0设置为使用 Chromium 的默认进程限制。 - 仅当启用
headless时才使用--headless=new。 - 这些默认值是容器镜像基线;如需更改容器默认值,请使用带有自定义 入口点的自定义浏览器镜像。
浏览器沙箱隔离和 sandbox.docker.binds 仅支持 Docker。
构建镜像(从源代码检出目录):
scripts/sandbox-setup.sh # main sandbox imagescripts/sandbox-browser-setup.sh # optional browser image对于没有源代码检出目录的 npm 安装,请参阅沙箱隔离 § 镜像和设置,了解内联 docker build 命令。
agents.list(按智能体覆盖)
使用 agents.list[].tts 为智能体指定自己的 TTS 提供商、语音、模型、
风格或自动 TTS 模式。智能体配置块会深度合并并覆盖全局
messages.tts,因此共享凭据可以保留在一个位置,而各个
智能体只需覆盖所需的语音或提供商字段。当前智能体的
覆盖设置会应用于自动语音回复、/tts audio、/tts status 和
tts 智能体工具。有关提供商示例和优先级,请参阅文本转语音。
{ agents: { list: [ { id: "main", default: true, name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", model: "anthropic/claude-opus-4-6", // 或 { primary, fallbacks } utilityModel: "openai/gpt-5.4-mini", thinkingDefault: "high", // 覆盖每个智能体的思考级别 reasoningDefault: "on", // 覆盖每个智能体的推理可见性 fastModeDefault: false, // 覆盖每个智能体的快速模式 params: { cacheRetention: "none" }, // 按键覆盖匹配的 defaults.models 参数 tts: { providers: { elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" }, }, }, skills: ["docs-search"], // 设置后替换 agents.defaults.skills identity: { name: "Samantha", theme: "乐于助人的树懒", emoji: "🦥", avatar: "avatars/samantha.png", }, groupChat: { mentionPatterns: ["@openclaw"] }, sandbox: { mode: "off" }, runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", // persistent | oneshot 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: []。utilityModel:可选的每智能体覆盖项,用于生成会话和话题标题等简短内部任务。依次回退到agents.defaults.utilityModel、主提供商声明的默认小模型,最后回退到此智能体的主模型。空字符串会为此智能体禁用实用模型路由。params:每智能体的流式参数,将合并并覆盖agents.defaults.models中选定的模型条目。可用它设置cacheRetention、temperature或maxTokens等智能体专属覆盖项,而无需复制整个模型目录。tts:可选的每智能体文本转语音覆盖项。此块会深度合并到messages.tts之上,因此应将共享的提供商凭据和回退策略保留在messages.tts中,并仅在此处设置提供商、语音、模型、风格或自动模式等角色专属值。skills:可选的每智能体 Skills 允许列表。如果省略,智能体会在已设置时继承agents.defaults.skills;显式列表会替换默认值而不是与其合并,[]表示不启用任何 Skills。thinkingDefault:可选的每智能体默认思考级别(off | minimal | low | medium | high | xhigh | adaptive | max)。当未设置每条消息或会话级覆盖项时,它会为此智能体覆盖agents.defaults.thinkingDefault。选定的提供商/模型配置决定哪些值有效;对于 Google Gemini,adaptive会保留由提供商控制的动态思考(Gemini 3/3.1 上省略thinkingLevel,Gemini 2.5 上使用thinkingBudget: -1)。reasoningDefault:可选的每智能体默认推理可见性(on | off | stream)。当未设置每条消息或会话级推理覆盖项时,它会为此智能体覆盖agents.defaults.reasoningDefault。fastModeDefault:可选的每智能体快速模式默认值("auto" | true | false)。在未设置每条消息或会话级快速模式覆盖项时生效。models:可选的每智能体模型目录/运行时覆盖项,以完整的provider/modelID 为键。使用models["provider/model"].agentRuntime设置每智能体的运行时例外。runtime:可选的每智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,使用type: "acp"以及runtime.acp默认值(agent、backend、mode、cwd)。identity.avatar:相对于工作区的路径、http(s)URL 或data:URI。- 本地工作区相对路径的
identity.avatar图像文件限制为 2 MB。http(s)URL 和data:URI 不受本地文件大小限制的检查。 identity会派生默认值:ackReaction派生自emoji,mentionPatterns派生自name/emoji。subagents.allowAgents:已配置智能体 ID 的允许列表,用于显式的sessions_spawn.agentId目标(["*"]= 任意已配置目标;默认:仅同一智能体)。如果应允许以自身为目标的agentId调用,请包含请求方 ID。智能体配置已删除的陈旧条目会被sessions_spawn拒绝,并从agents_list中省略;运行openclaw doctor --fix可清理这些条目,或者,如果该目标应在继承默认值的同时仍可被创建,可添加最小化的agents.list[]条目。- 沙箱继承保护:如果请求方会话处于沙箱隔离状态,
sessions_spawn会拒绝将在非沙箱环境中运行的目标。 subagents.requireAgentId:为 true 时,阻止省略agentId的sessions_spawn调用(强制显式选择配置;默认:false)。subagents.maxConcurrent:子智能体执行期间可并发运行的子智能体数量上限。默认值:8。subagents.maxChildrenPerAgent:单个智能体会话可创建的活跃子智能体数量上限。默认值:5。subagents.maxSpawnDepth:创建子智能体的最大嵌套深度(1-5)。默认值:1(不允许嵌套)。subagents.archiveAfterMinutes:已完成的子智能体状态在归档前的保留时长。默认值:60。
多智能体路由
在一个 Gateway 网关内运行多个相互隔离的智能体。请参阅多智能体。
{ 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用于常规路由(缺少类型时默认为路由),acp用于持久化 ACP 对话绑定。match.channel(必需)match.accountId(可选;*= 任意账户;省略 = 默认账户)match.peer(可选;{ kind: direct|group|channel, id })match.guildId/match.teamId(可选;特定于渠道)acp(可选;仅适用于type: "acp"):{ mode, label, cwd, backend }
确定性匹配顺序:
match.peermatch.guildIdmatch.teamIdmatch.accountId(精确匹配,不含对端/服务器/团队)match.accountId: "*"(整个渠道)- 默认智能体
在每个层级内,第一个匹配的 bindings 条目生效。
对于 type: "acp" 条目,OpenClaw 按精确的对话身份(match.channel + 账户 + 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 }, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 30 }, }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", maintenance: { mode: "enforce", // enforce(默认)| warn pruneAfter: "30d", maxEntries: 500, resetArchiveRetention: "30d", // 时长或 false maxDiskBytes: "500mb", // 可选的硬性预算 highWaterBytes: "400mb", // 可选的清理目标 }, writeLock: { acquireTimeoutMs: 60000, staleMs: 1800000, maxHoldMs: 300000, }, threadBindings: { enabled: true, idleHours: 24, // 默认非活动自动取消聚焦时长(小时)(`0` 表示禁用) maxAgeHours: 0, // 默认硬性最大时长(小时)(`0` 表示禁用) }, mainKey: "main", // 旧版(运行时始终使用 "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], default: "allow", }, },}会话字段详情
scope:群聊上下文的基础会话分组策略。per-sender(默认):每个发送者在渠道上下文中都有一个隔离的会话。global:渠道上下文中的所有参与者共享单个会话(仅在需要共享上下文时使用)。dmScope:私信的分组方式。main:所有私信共享主会话。per-peer:跨渠道按发送者 ID 隔离。per-channel-peer:按渠道 + 发送者隔离(建议用于多用户收件箱)。per-account-channel-peer:按账户 + 渠道 + 发送者隔离(建议用于多账户)。identityLinks:将规范 ID 映射到带提供商前缀的对等方,以便跨渠道共享会话。/dock_discord等停靠命令使用同一映射,将活动会话的回复路由切换到另一个已关联的渠道对等方;请参阅渠道停靠。reset:主要重置策略。daily在本地时间atHour重置;idle在idleMinutes后重置。两者均配置时,以先到期者为准。每日重置的新鲜度使用会话行的sessionStartedAt;空闲重置的新鲜度使用lastInteractionAt。Heartbeat、cron 唤醒、Exec 通知和 Gateway 网关记账等后台/系统事件写入可以更新updatedAt,但不会使每日/空闲会话保持新鲜。resetByType:按类型覆盖(direct、group、thread)。旧版dm可作为direct的别名。resetByChannel:以提供商/渠道 ID 为键的按渠道重置覆盖。当会话的渠道有匹配条目时,该条目将直接取代该会话的resetByType/reset。仅当某个渠道需要不同于类型级策略的重置行为时使用。mainKey:旧版字段。运行时始终将"main"用于主要的直接聊天分组。agentToAgent.maxPingPongTurns:智能体间交换期间,智能体之间回复往返的最大轮数(整数,范围:0-20,默认值:5)。0会禁用乒乓式链式回复。sendPolicy:按channel、chatType(direct|group|channel,旧版别名为dm)、keyPrefix或rawKeyPrefix匹配。首个拒绝规则优先。maintenance:会话存储清理和保留控制。mode:enforce执行清理并且是默认值;warn仅发出警告。pruneAfter:陈旧条目的时间截止值(默认30d)。maxEntries:SQLite 会话条目的最大数量(默认500)。对于生产规模的上限,运行时写入会使用较小的高水位缓冲区进行批量清理;openclaw sessions cleanup --enforce会立即应用此上限。- 短期 Gateway 网关模型运行探测会话使用固定的
24h保留期,但清理由压力触发:只有在达到会话条目维护/上限压力时,才会移除陈旧的严格模型运行探测行。仅明确匹配agent:*:explicit:model-run-<uuid>的严格探测键符合条件;普通的直接、群组、线程、cron、Hook、Heartbeat、ACP 和子智能体会话不会继承此 24h 保留期。模型运行清理执行时,会先于更广泛的pruneAfter陈旧条目清理和maxEntries上限处理执行。 - 当前架构会拒绝旧版
rotateBytes;openclaw doctor --fix会从旧配置中移除它。 resetArchiveRetention:重置/删除后的对话记录归档的按时间保留策略。默认情况下,归档会一直保留到因磁盘预算而被逐出;设置持续时间可选择按实际时间删除,或设置false以明确禁用。maxDiskBytes:可选的会话目录磁盘预算。在warn模式下记录警告;在enforce模式下优先移除最旧的工件/会话。highWaterBytes:预算清理后的可选目标。默认为maxDiskBytes的80%。writeLock:会话对话记录写入锁控制。仅当合法的对话记录准备、清理、压缩或镜像工作产生的争用超过默认策略允许的时长时进行调整。acquireTimeoutMs:获取锁时等待多少毫秒后将会话报告为繁忙。默认值:60000;环境变量覆盖项OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS。staleMs:现有锁经过多少毫秒后被视为陈旧并回收。默认值:1800000;环境变量覆盖项OPENCLAW_SESSION_WRITE_LOCK_STALE_MS。maxHoldMs:进程内持有的锁可持续持有多少毫秒,超过后看门狗将其释放。默认值:300000;环境变量覆盖项OPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS。threadBindings:线程绑定会话功能的全局默认值。enabled:主默认开关(提供商可以覆盖;Discord 使用channels.discord.threadBindings.enabled)idleHours:默认因不活动而自动取消聚焦的小时数(0禁用;提供商可以覆盖)maxAgeHours:默认硬性最大时长(小时)(0禁用;提供商可以覆盖)spawnSessions:通过sessions_spawn和 ACP 线程生成创建线程绑定工作会话的默认门控。启用线程绑定时默认为true;提供商/账户可以覆盖。defaultSpawnContext:线程绑定生成的默认原生子智能体上下文("fork"或"isolated")。默认为"fork"。
消息
{ messages: { responsePrefix: "🦞", // 或 "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all | off | none removeAckAfterReply: false, queue: { mode: "steer", // steer(默认)| followup | collect | interrupt debounceMs: 500, cap: 20, drop: "summarize", // old | new | summarize(默认) byChannel: { whatsapp: "followup", telegram: "followup", }, }, inbound: { debounceMs: 2000, // 0 表示禁用 byChannel: { whatsapp: 5000, slack: 1500, }, }, },}回复前缀
按渠道/账户覆盖:channels.<channel>.responsePrefix、channels.<channel>.accounts.<id>.responsePrefix。
解析顺序(最具体的优先):账户 → 渠道 → 全局。"" 会禁用并停止级联。"auto" 会派生 [{identity.name}]。
模板变量:
| 变量 | 描述 | 示例 |
|---|---|---|
{model} |
模型短名称 | claude-opus-4-6 |
{modelFull} |
完整模型标识符 | anthropic/claude-opus-4-6 |
{provider} |
提供商名称 | anthropic |
{thinkingLevel} |
当前思考级别 | high、low、off |
{identity.name} |
智能体身份名称 | (与 "auto" 相同) |
变量不区分大小写。{think} 是 {thinkingLevel} 的别名。
确认表情回应
- 默认为活动智能体的
identity.emoji,否则为"👀"。设置""可禁用。 - 按渠道覆盖:
channels.<channel>.ackReaction、channels.<channel>.accounts.<id>.ackReaction。 - 解析顺序:账户 → 渠道 →
messages.ackReaction→ 身份回退。 - 范围:
group-mentions(默认)、group-all、direct、all或off/none(完全禁用确认表情回应)。 removeAckAfterReply:在 Slack、Discord、Signal、Telegram、WhatsApp 和 iMessage 等支持表情回应的渠道上,于回复后移除确认表情回应。messages.statusReactions.enabled:在 Slack、Discord、Signal、Telegram 和 WhatsApp 上启用生命周期状态表情回应。 在 Discord 上,如果未设置此项,则在确认表情回应处于活动状态时保持启用状态表情回应。 在 Slack、Signal、Telegram 和 WhatsApp 上,需要将其明确设置为true才能启用生命周期状态表情回应。 默认情况下,Slack 使用其原生助手线程状态和轮换的加载消息来显示进度,同时保持配置的确认表情回应不变。messages.statusReactions.emojis:覆盖生命周期表情符号键:queued、thinking、compacting、tool、coding、web、deploy、build、concierge、done、error、stallSoft和stallHard。 Telegram 仅允许固定的表情回应集合,因此不受支持的已配置表情符号会回退 到该聊天最接近且受支持的状态变体。
队列
mode:会话运行处于活动状态时到达的入站消息所使用的队列策略。默认值:"steer"。steer:将新提示词注入活动运行。followup:在活动运行完成后运行新提示词。collect:批量处理兼容的消息,之后一起运行。interrupt:在启动最新提示词之前中止活动运行。
debounceMs:分派已排队/已引导消息之前的延迟。默认值:500。cap:应用丢弃策略前允许排队的最大消息数。默认值:20。drop:超过上限时的策略。"summarize"(默认)丢弃最旧的条目,但保留紧凑摘要;"old"丢弃最旧的条目且不保留摘要;"new"拒绝最新的项目。byChannel:以提供商 ID 为键的按渠道mode覆盖。debounceMsByChannel:以提供商 ID 为键的按渠道debounceMs覆盖。
入站防抖
将来自同一发送者的快速连续纯文本消息批量合并为单个智能体轮次。媒体/附件会立即触发处理。控制命令绕过防抖。默认 debounceMs:2000。
其他消息键
messages.messagePrefix:在入站用户消息到达智能体运行时之前添加的前缀文本。应仅少量用于渠道上下文标记。messages.visibleReplies:控制直接、群组和渠道对话中的可见源回复("message_tool"需要message(action=send)才能产生可见输出;"automatic"会像以前一样发布普通回复)。messages.usageTemplate/messages.responseUsage:自定义/usage页脚模板和默认的按回复使用模式(off | tokens | full,以及作为tokens旧版别名的on)。messages.groupChat.mentionPatterns/historyLimit:群组消息提及触发器和历史窗口大小。messages.suppressToolErrors:当设置为true时,抑制向用户显示的⚠️工具错误警告(智能体仍可在上下文中看到错误并重试)。默认值:false。
TTS(文本转语音)
{ messages: { tts: { auto: "off", // off (default) | always | inbound | tagged mode: "final", // final | all provider: "elevenlabs", summaryModel: "openai/gpt-5.4-mini", modelOverrides: { enabled: true }, maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.openclaw/settings/tts.json", providers: { elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", speakerVoiceId: "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: { speakerVoice: "en-US-MichelleNeural", 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", speakerVoice: "coral", }, }, }, },}auto控制默认的自动 TTS 模式:off、always、inbound或tagged。/tts on|off可以覆盖本地偏好设置,/tts status会显示实际生效的状态。summaryModel会覆盖用于自动摘要的agents.defaults.model.primary。modelOverrides默认启用(enabled !== false);modelOverrides.allowProvider需要选择启用。- API 密钥会回退到
ELEVENLABS_API_KEY/XI_API_KEY和OPENAI_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 服务器,并放宽模型和语音验证。
Talk
Talk 模式的默认设置(macOS/iOS/Android 和浏览器 Control UI)。
{ talk: { provider: "elevenlabs", providers: { elevenlabs: { speakerVoiceId: "elevenlabs_voice_id", voiceAliases: { Clawd: "EXAVITQu4vr4xnSDxMaL", Roger: "CwhRBWXzGAHq8TQ4Fs17", }, modelId: "eleven_multilingual_v2", 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.1", speakerVoice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", // realtime | stt-tts | transcription transport: "webrtc", // webrtc | provider-websocket | gateway-relay | managed-room vadThreshold: 0.5, silenceDurationMs: 500, prefixPaddingMs: 300, reasoningEffort: "medium", brain: "agent-consult", // agent-consult | direct-tools | none }, },}- 配置多个 Talk 提供商时,
talk.provider必须与talk.providers中的某个键匹配。 - 旧版扁平 Talk 键(
talk.voiceId、talk.voiceAliases、talk.modelId、talk.outputFormat、talk.apiKey)仅用于兼容。运行openclaw doctor --fix,将持久化配置改写为talk.providers.<provider>。 - 语音 ID 会回退到
ELEVENLABS_VOICE_ID或SAG_VOICE_ID(macOS Talk 客户端行为)。 providers.*.apiKey接受纯文本字符串或 SecretRef 对象。- 仅在未配置 Talk API 密钥时,才会应用
ELEVENLABS_API_KEY回退。 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指导的情况下配置语音风格。realtime.vadThreshold设置提供商的语音活动阈值,范围从0(最敏感)到1(最不敏感)。未设置时保留提供商默认值。realtime.silenceDurationMs设置提供商提交实时用户轮次前的正整数静音窗口。未设置时保留提供商默认值。realtime.prefixPaddingMs设置在检测到语音开始前保留的非负整数音频时长。未设置时保留提供商默认值。realtime.reasoningEffort设置实时会话中特定于提供商的推理级别。未设置时保留提供商默认值。realtime.consultRouting:当实时提供商生成不含openclaw_agent_consult的最终用户转录文本时,"provider-direct"(默认)会保留提供商的直接回复。"force-agent-consult"则会改为通过 OpenClaw 路由已最终确定的请求。