agents.*、multiAgent.*、session.*、messages.* 和 talk.* 下的代理作用域配置键。关于通道、工具、网关运行时以及其他顶级键,请参见 配置参考。
创建多代理集群时,OpenClaw 会写入 agents.ownership: "explicit"。此类集群没有默认代理:通道和环境服务需要绑定,或需要使用特定界面的 agentId 目标。升级期间,Doctor 会具体化旧版所有者;单代理配置无需此标记。
代理默认值
agents.defaults.workspace
默认值:当设置了 OPENCLAW_WORKSPACE_DIR 时为该值,否则为 ~/.openclaw/workspace(如果 OPENCLAW_PROFILE 设置为非默认配置,则为 ~/.openclaw/workspace-<profile>)。
agents.defaults.workspace 值优先于 OPENCLAW_WORKSPACE_DIR。单代理会直接使用此路径。在多代理集群中,没有单独设置 workspace 的代理会使用代理 ID 子目录,因此不会有隐式所有者声明共享根目录的所有权。
agents.defaults.repoRoot
可选的仓库根目录,将显示在系统提示词的运行时行中。如果未设置,OpenClaw 将通过从工作区向上遍历自动检测它。
agents.defaults.skills
对于未设置
agents.entries.*.skills 的代理,可选的默认技能允许列表。
- 默认情况下,省略
agents.defaults.skills表示不限制技能。 - 省略
agents.entries.*.skills表示继承默认值。 - 将
agents.entries.*.skills设置为[]表示无技能。 - 非空的
agents.entries.*.skills列表是该代理的最终技能集合;它不会与默认值合并。
agents.defaults.skipBootstrap
禁用自动创建工作区引导文件(AGENTS.md、SOUL.md、IDENTITY.md、USER.md、BOOTSTRAP.md)。
agents.defaults.skipOptionalBootstrapFiles
跳过创建选定的可选工作区文件,同时仍写入必需的引导文件(AGENTS.md、BOOTSTRAP.md)。有效值:SOUL.md、USER.md 和 IDENTITY.md(接受 HEARTBEAT.md,但不执行任何操作,因为心跳上下文已移至 cron 监控临时文件)。
agents.defaults.contextInjection
控制工作区引导文件何时注入到系统提示词中。默认值:"always"。
"continuation-skip":安全的续接轮次(在完成一次助手回复之后)会跳过工作区引导的重新注入,从而减小提示词大小。心跳运行和压缩后重试仍会重建上下文。"never":在每一轮都禁用工作区引导和上下文文件注入。仅适用于完全自行管理提示词生命周期的代理(自定义上下文引擎、自己构建上下文的原生运行时,或专门的无引导工作流)。心跳和压缩恢复轮次也会跳过注入。
agents.entries.*.contextInjection。省略的值继承
agents.defaults.contextInjection。
agents.defaults.bootstrapMaxChars
每个工作区引导文件在截断前的最大字符数。默认值:20000。
agents.entries.*.bootstrapMaxChars。省略的值继承
agents.defaults.bootstrapMaxChars。
agents.defaults.bootstrapTotalMaxChars
跨所有工作区引导文件注入的最大总字符数。默认值:60000。
agents.entries.*.bootstrapTotalMaxChars。省略的值将继承agents.defaults.bootstrapTotalMaxChars。
逐代理引导配置文件覆盖
当某个代理需要与共享默认值不同的提示词注入行为时,可使用逐代理引导配置文件覆盖。省略的字段会继承自agents.defaults。
Bootstrap 截断通知
当 Bootstrap 上下文被截断时,OpenClaw 始终会在系统提示词中注入一条简洁的 代理可见通知,说明部分 Bootstrap 文件已被截断,并要求直接读取受影响的文件。此通知是内置的,无法配置,并且会刻意省略逐文件诊断信息:文件名、原始计数与注入计数,以及限制原因都会保留在上下文/状态报告和日志等诊断信息中。上下文预算所有权映射
OpenClaw 具有多个高容量的提示词/上下文预算,它们被有意按子系统拆分,而不是全部通过一个通用开关流转。
匹配的按代理覆盖:
agents.entries.*.skillsLimits.maxSkillsPromptCharsagents.entries.*.contextInjectionagents.entries.*.bootstrapMaxCharsagents.entries.*.bootstrapTotalMaxCharsagents.entries.*.contextLimits.*
agents.defaults.startupContext
控制在重置/启动模型运行时注入的首轮启动前奏。裸聊天 /new 和 /reset 命令会在不调用模型的情况下确认重置,因此不会加载这段前奏。
agents.defaults.contextLimits
有边界的运行时上下文表面的共享默认值。
memoryGetMaxChars:截断前的默认memory_get摘录上限。 添加元数据和续接提示后,内容可能会进一步增加。- 当
memory_get未指定lines时,OpenClaw 使用内置的 120 行窗口, 然后应用memoryGetMaxChars。 - 实时工具结果使用模型上下文自动上限:低于 100K 个 token 时为
16000个字符, 达到 100K+ 个 token 时为32000个字符,达到 200K+ 个 token 时为64000个字符。 postCompactionMaxChars:压缩后刷新注入期间所使用的 AGENTS.md 摘录上限。
agents.entries.*.contextLimits
针对共享 contextLimits 开关的逐代理覆盖。省略的字段会继承自 agents.defaults.contextLimits。
skills.limits.maxSkillsPromptChars
注入系统提示词中的紧凑技能列表的全局上限。这不会影响按需读取 SKILL.md 文件。
agents.entries.*.skillsLimits.maxSkillsPromptChars
针对技能提示词预算的逐代理覆盖。
agents.defaults.imageMaxDimensionPx
在传递给提供方调用之前,转录/工具图像块中最长边的最大像素尺寸。默认值:1200。
较低的值通常会减少视觉 token 的使用量以及截图较多的运行中的请求负载大小。较高的值会保留更多视觉细节。
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.userTimezone
消息信封、排队的系统事件以及系统提示词本地日期上下文所使用的时区。默认使用主机时区。
agents.defaults.model
model:接受字符串("provider/model")或对象({ primary, fallbacks })。- 字符串形式仅设置主模型。
- 对象形式设置主模型以及按顺序排列的故障转移模型。
utilityModel:可选的provider/model引用或别名,用于短时内部任务。目前用于生成 Control UI 会话标题、Telegram 私聊主题标题、Discord 自动线程标题,以及进度草稿旁白。未设置时,如果主提供商声明了小模型默认值,OpenClaw 会使用该默认值(OpenAI →gpt-5.6-luna,Anthropic →claude-haiku-4-5);否则标题任务使用代理的主模型,旁白保持关闭。如果独立的 utility 模型无法准备或完成生成的标题,OpenClaw 会使用主模型重试该标题一次。对于仪表板标题,自动 utility 推导和常规回退会使用有效会话提供商和身份验证配置文件;显式设置的 utility 模型则保留其配置的提供商/身份验证。设置utilityModel: ""可跳过备用 utility 路由;仪表板标题生成仍会直接使用常规会话模型继续进行。agents.entries.*.utilityModel会覆盖默认值,而特定操作的模型覆盖项优先级高于两者。Utility 任务会单独调用模型,并将特定于任务的内容发送给所选模型提供商。仪表板标题生成最多发送第一条非命令消息的前 1,000 个字符;旁白会发送入站请求以及经过精简和脱敏的工具摘要。请选择符合成本和数据处理要求的提供商。imageModel:接受字符串("provider/model")或对象({ primary, fallbacks })。- 当活动模型无法接受图像时,
image工具路径会将其视觉模型配置用于图像处理。原生视觉模型则会直接接收已加载的图像字节。 - 当所选/默认模型无法接受图像输入时,也会用作回退路由。
- 优先使用显式的
provider/model引用。为兼容性也接受不带提供商的 ID;如果某个不带提供商的 ID 在models.providers.*.models中唯一匹配已配置的图像能力条目,OpenClaw 会将其限定到对应提供商。对于多个已配置匹配项,必须显式添加提供商前缀。
- 当活动模型无法接受图像时,
mediaModels.image:接受字符串("provider/model")或对象({ primary, fallbacks })。- 由共享的图像生成能力以及未来任何生成图像的工具/插件界面使用。
- 典型值包括:用于原生 Gemini 图像生成的
google/gemini-3.1-flash-image,用于 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 顺序尝试其余已注册的图像生成提供商。
mediaModels.music:接受字符串("provider/model")或对象({ primary, fallbacks })。- 由共享的音乐生成能力和内置的
music_generate工具使用。 - 典型值包括:
google/lyria-3-clip-preview、google/lyria-3-pro-preview或minimax/music-2.6。 - 如果省略,
music_generate仍可推断出具有身份验证支持的提供商默认值。它会首先尝试当前默认提供商,然后按提供商 ID 顺序尝试其余已注册的音乐生成提供商。 - 如果直接选择提供商/模型,也请配置匹配的提供商身份验证/API 密钥。
- 由共享的音乐生成能力和内置的
mediaModels.video:接受字符串("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 密钥。
- 官方 Qwen 视频生成插件支持最多 1 个输出视频、1 张输入图像、4 个输入视频、10 秒时长,以及提供商级别的
size、aspectRatio、resolution、audio和watermark选项。
- 由共享的视频生成能力和内置的
pdfModel:接受字符串("provider/model")或对象({ primary, fallbacks })。- 由
pdf工具用于模型路由。 - 如果省略,PDF 工具会回退到
imageModel,然后回退到已解析的会话/默认模型。
- 由
pdfMaxMb:当调用时未传入maxBytesMb,pdf工具使用的默认 PDF 大小限制。pdfMaxPages:pdf工具在提取回退模式下考虑的默认最大页数。fastModeDefault:代理的默认快速模式。取值:"auto"、true、false。当未设置每条消息或会话级快速模式覆盖项时,每个代理的agents.entries.*.fastModeDefault会覆盖此设置。verboseDefault:代理的默认详细程度。取值:"off"、"on"、"full"。默认值:"off"。toolProgressDetail:/verbose工具摘要和进度草稿工具行的详细程度模式。取值:"explain"(默认,简洁的人类可读标签)或"raw"(如果可用,则附加原始命令/详细信息)。每个代理的agents.entries.*.toolProgressDetail会覆盖此默认值。reasoningDefault:代理的默认推理可见性。取值:"off"、"on"、"stream"。每个代理的agents.entries.*.reasoningDefault会覆盖此默认值。当未设置每条消息或会话级推理覆盖项时,配置的推理默认值仅会应用于所有者、已授权发送者或操作员管理员网关上下文。elevatedDefault:代理的默认提升输出级别。取值:"off"、"on"、"ask"、"full"。默认值:"on"。model.primary:格式为provider/model(例如,用于 Codex OAuth 访问的openai/gpt-5.6-sol)。如果省略提供商,OpenClaw 会依次尝试别名、与该确切模型 ID 匹配的唯一已配置提供商,最后才回退到已配置的默认提供商(这是已弃用的兼容行为,因此建议使用显式的provider/model)。如果该提供商不再提供已配置的默认模型,OpenClaw 会回退到第一个已配置的提供商/模型,而不是暴露一个已过时的已移除提供商默认值。contextTokens:可选的代理级上限。它可以降低更大模型的有效预算,但无法将模型上限提高到其已配置或发现的contextTokens以上。若要让某个直接使用的 OpenAI 模型采用其更大的原生窗口,请为该模型设置models.providers.openai.models[].contextWindow和contextTokens;请参阅 OpenAI 上下文窗口默认值。models:已配置的别名和每个模型的设置。每个条目可包含alias(快捷方式)和params(提供商特定参数,例如temperature、maxTokens、cacheRetention、context1m、responsesServerCompaction、responsesCompactThreshold、OpenRouterprovider路由、chat_template_kwargs、extra_body/extraBody)。添加条目不会限制模型覆盖。- 使用
"openai/*": {}或"vllm/*": {}等provider/*条目,可以显示所选提供商发现的所有模型,而无需手动列出每个模型 ID。 - 如果某提供商动态发现的每个模型都应使用相同的运行时,请将
agentRuntime添加到provider/*条目。确切的provider/model运行时策略仍优先于通配符。 - 安全的元数据编辑:使用
openclaw config set agents.defaults.models '<json>' --strict-json --merge添加条目。如果不传入--replace,config set会拒绝删除现有条目的替换操作。
- 使用
modelPolicy.allow:显式覆盖允许列表。接受别名、确切的provider/model引用,以及尾部前缀通配符,例如openai/*或clawrouter/anthropic/*。省略它或使用[]可允许任何模型。agents.entries.*.modelPolicy.allow会替换该代理的默认策略;显式的空列表会让该代理允许任何模型。- 按提供商限定的配置/引导流程会将所选提供商的模型合并到此映射中,并保留此前已配置的不相关提供商。
- 对于直接使用的 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.entries.*.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:vLLM/OpenAI 兼容聊天模板参数,会合并到顶层api: "openai-completions"请求体中。对于关闭思考的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";对于支持请求级聊天模板参数的 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.entries.*.models["provider/model"].agentRuntime。仅使用提供商/模型前缀不会选择运行框架。当运行时未设置或为auto时,只有在确切的官方 HTTPS Platform Responses 或 ChatGPT Responses 路由中,且没有编写请求覆盖项时,OpenAI 才可能隐式选择 Codex。请参阅 OpenAI 隐式代理运行时。 - 修改这些字段的配置写入器(例如
/models set、/models set-image以及添加/移除回退模型的命令)会保存规范对象形式,并在可能的情况下保留现有的回退列表。 maxConcurrent:跨会话的最大并行代理运行数(每个会话仍会串行执行)。默认情况下,OpenClaw 使用min(16, max(8, available CPU parallelism));该值基于os.availableParallelism(),并在不可用时回退到os.cpus().length。
运行时策略
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.entries.*.models["provider/model"]、agents.defaults.models["provider/model"]或models.providers.<provider>.models[]),然后是agents.entries.*/agents.defaults.models["provider/*"],最后是 provider 范围的策略models.providers.<provider>.agentRuntime。 - 整个 agent 级别的运行时键已弃用。运行时选择会忽略
agents.defaults.agentRuntime、agents.entries.*.agentRuntime、会话运行时固定值以及OPENCLAW_AGENT_RUNTIME。运行openclaw doctor --fix可移除过时值。 - 符合条件的精确官方 HTTPS OpenAI Responses/ChatGPT 路由,在没有人为设置请求覆盖的情况下,可以隐式使用 Codex harness。将
provider/model的agentRuntime.id设为"codex"会使 Codex 成为失败即终止的要求,但不会使不兼容的路由变得兼容。 - 对于 Claude CLI 部署,建议使用
model: "anthropic/claude-opus-5",并配合模型范围的agentRuntime.id: "claude-cli"。为兼容性起见,旧版的claude-cli/<model>引用仍可使用,但新配置应保持规范的 provider/model 选择,并将执行后端放入 provider/model 运行时策略中。 - 这只控制文本 agent 回合的执行。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用各自的 provider/model 设置。
agents.defaults.models 中时适用):
你配置的别名始终优先于默认值。
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 Opus 4.8 在 OpenClaw 中默认关闭思考;当显式启用自适应思考时,Anthropic 的 provider 自有 effort 默认值为 high。Claude 4.6 模型在未设置明确思考级别时默认使用 adaptive
CLI 后端选择
CLI 适配器机制由插件注册,而不是在代理默认设置下配置。使用模型范围的agentRuntime.id 选择已注册的 CLI 后端,如上所示。有关操作,请参阅 CLI 后端;有关命令、会话、图像和解析器注册,请参阅 构建 CLI 后端插件。
OpenAI GPT-5 个性
捆绑的 OpenAI 插件拥有 GPT-5 友好交互风格设置。匹配 GPT-5 系列提示词的请求会接收共享行为契约;personality 仅控制友好风格层。原生 Codex app-server 路由保留 Codex 所拥有的基础/模型指令,而不是此 OpenClaw GPT-5 贡献,并且 OpenClaw 会为原生线程禁用 Codex 内置的个性设置。
"friendly"(默认)和"on"启用友好交互风格层。"off"仅禁用友好层;带标签的 GPT-5 行为契约仍保持启用状态。
agents.defaults.heartbeat
定期运行心跳。
every:时长字符串(ms/s/m/h)。默认值:30m(API 密钥身份验证)或1h(OAuth 身份验证)。设置为0m可禁用。agentId:当不存在agents.entries.*.heartbeat块时,用于环境心跳运行的显式所有者。没有agentId的共享心跳块会保留现有的全代理注册行为。- 调度周期会写入系统拥有的 cron 监控行。运行
openclaw doctor --fix可具体化缺失或过时的行。如果 cron 被禁用,计划心跳不会运行,网关会记录启动警告。 - 心跳对象是严格的。其支持的字段包括
every、activeHours、model、session、target、directPolicy、to、accountId、prompt、timeoutSeconds、lightContext和isolatedSession。 timeoutSeconds:心跳代理回合在中止前允许的最长秒数。留空时,如果已设置,则使用agents.defaults.timeoutSeconds;否则使用上限为 600 秒的心跳周期。directPolicy:直接消息/私聊投递策略。allow(默认值)允许直接目标投递。block会抑制直接目标投递,并发出reason=dm-blocked。target:owner(默认值)仅发送到来自commands.ownerAllowFrom或通道allowFrom的直接消息身份。last显式跟随最新对话,包括群组。none保持结果为内部结果。to:仅与显式通道目标一起使用。owner和未设置的目标会忽略它。lightContext:为 true 时,心跳运行使用轻量级引导上下文并跳过工作区引导文件。无论如何,监控临时文件都会由心跳运行器注入。isolatedSession:为 true 时,每次心跳都会在没有此前对话历史的新会话中运行。其隔离模式与 cron 的sessionTarget: "isolated"相同。每次心跳的 token 成本会从约 100K 降低至约 2-5K。- 忙碌延迟会自动执行:计划心跳会等待主任务/cron 活动、同一代理的活动运行以及目标会话工作完成;即时和手动唤醒仅会绕过广义的同一代理活动运行预检查。
- 只要某个已注册代理的周期启用,该代理的 Heartbeats 系统提示词部分就会自动包含在内。确认抑制使用固定的 300 字符剩余预算,推理负载仍保持内部状态,工具错误警告仍保持启用。
- 按代理设置:设置
agents.entries.*.heartbeat。只要有任意代理定义了heartbeat,就只有这些代理运行心跳。 - 心跳会运行完整的代理回合——更短的间隔会消耗更多 token。
agents.defaults.systemAgent
选择其模型和凭据用于处理 OpenClaw 系统代理及 Custodian 咨询的代理:
agentId 时,单个已配置代理会被隐式解析;在多代理集群中,环境咨询会失败并返回可执行的错误。仅用于升级的所有权位于 agents.defaults.authInheritance.agentId(用于继承的凭据)以及 agents.defaults.sessionStore.agentId(用于固定的 session.store 中未限定范围的行)。
agents.defaults.compaction
enabled:当为false时,禁用嵌入式代理运行时中由阈值驱动的自动压缩。OpenClaw 的预检和溢出恢复压缩路径,以及手动执行的/compact仍然可用。默认值:true。mode:default或safeguard(针对长历史记录的分块摘要)。参见 压缩。provider:已注册的压缩提供程序插件的 ID。设置后,将调用该提供程序的summarize(),而不是使用内置的 LLM 摘要功能。失败时回退到内置实现。设置提供程序会强制使用mode: "safeguard"。参见 压缩。thinkingLevel:仅用于嵌入式 OpenClaw 压缩摘要的可选思考级别(off、minimal、low、medium、high、xhigh、adaptive、max或ultra)。它会覆盖会话当前的思考级别,并根据所选压缩模型/运行时进行限制。未设置时继承会话级别。原生 Codex app-server 压缩会忽略此设置,因为原生压缩请求不支持按操作设置思考级别;配置此项时,OpenClaw 会记录警告。timeoutSeconds:单次压缩操作允许的最大秒数,超过后 OpenClaw 将中止该操作。默认值:180。keepRecentTokens:代理截断点预算,用于逐字保留最近的 transcript 尾部。默认值:20000。recentTurnsPreserve:在 safeguard 摘要之外逐字保留的最近用户/助手轮数。默认值:3。identifierPolicy:strict(默认)或off。strict会在压缩摘要过程中加入内置的不透明标识符保留指导。qualityGuard:针对 safeguard 摘要的格式错误输出进行重试检查。默认在 safeguard 模式下启用;设置enabled: false可跳过审核。midTurnPrecheck:可选的工具循环压力检查。当enabled: true时,OpenClaw 会在追加工具结果后、下一次模型调用前检查上下文压力。如果上下文不再适配,它会在提交提示词前中止当前尝试,并复用现有的预检恢复路径来截断工具结果或执行压缩后重试。default和safeguard两种压缩模式均支持。默认:禁用。postIndexSync:压缩后的会话记忆重新索引模式。默认值:"async"。使用"await"可获得最强的新鲜度,使用"async"可降低压缩延迟;仅当会话记忆同步由其他方式处理时才使用"off"。postCompactionSections:可选的 AGENTS.md H2/H3 节名称,用于在压缩后重新注入。未设置或使用[]可禁用。model:可选的provider/model-id或来自agents.defaults.models的裸别名,仅用于压缩摘要。裸别名会在调度前解析;发生冲突时,已配置的字面模型 ID 优先。当主会话应继续使用一个模型、而压缩摘要应使用另一个模型时,可以使用此项;未设置时,压缩使用会话的主模型。maxActiveTranscriptBytes:字节阈值(可以是number,或类似"20mb"的字符串),用于选择在运行前执行常规本地压缩,当 transcript 历史记录达到该阈值时生效。对于 Codex app-server 会话,相同阈值会限制原生 rollout transcript,过大的原生线程将重新开始。未设置或为0时禁用。当上下文引擎返回明确的压缩后继身份时,OpenClaw 会采用该身份;内置 SQLite 压缩器则保留当前身份。notifyUser:当为true时,会向用户发送简短的上下文维护通知:压缩开始和完成时(例如“正在压缩上下文……”和“压缩完成”),以及压缩前的 memory flush 耗尽、回复将在降级状态下继续时(例如“内存维护暂时失败;继续回复。”)。默认禁用,以保持这些通知静默。memoryFlush:自动压缩前执行的静默代理操作轮次,用于存储持久记忆。当该维护轮次应保持使用本地模型时,将model设置为确切的提供程序/模型,例如ollama/qwen3:8b;该覆盖不会继承活动会话的回退链。即使 token 计数器已过时,当 transcript 大小达到阈值时,forceFlushTranscriptBytes也会强制执行 flush。工作区为只读时会跳过。
summarize() 的压缩提供程序
插件,以构建自定义摘要;当压缩后的上下文必须注入后续
模型提示词时,使用 before_prompt_build。Doctor 会移除已废弃的指令字段,并指向这些
扩展接口。
agents.defaults.contextPruning
在将内容发送给 LLM 之前,会从内存上下文中清理旧的工具结果。不会修改磁盘上的会话历史。默认禁用;设置 mode: "cache-ttl" 即可启用。
cache-ttl 模式行为
cache-ttl 模式行为
mode: "cache-ttl"会启用清理过程。- 清理会先对过大的工具结果进行软裁剪,然后在需要时硬清除较早的工具结果。
...。硬清除会用占位符替换整个工具结果。注意:- 图片块永远不会被裁剪或清除。
- 比例按字符数计算(近似值),并非精确的令牌数量。
- 最近的助手消息会被保留。
块流式输出
- 非 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-2500 毫秒。custom使用minMs/maxMs(任一边界未设置时,将回退到自然范围)。代理级别的覆盖项:agents.entries.*.humanDelay。
输入指示器
- 默认值:直接聊天/提及时为
instant,未提及的群聊中为message。 typingIntervalSeconds默认值:6。- 按代理覆盖:
agents.entries.*.typingMode。
agents.defaults.sandbox
嵌入式代理的可选沙箱。完整指南请参见 沙箱。
off/docker/agent/none/bookworm-slim 镜像/none 网络等)是实际的 OpenClaw 默认值,而不仅仅是示意值。
sandbox.docker.binds 同时适用于 Docker 和 Podman 后端。
构建镜像(从源码检出构建):
docker build 命令。
agents.entries(每个代理的覆盖设置)
使用 agents.entries.*.tts 为代理指定其自己的 TTS 提供商、语音、模型、
风格或自动 TTS 模式。代理配置块会与全局
tts 进行深度合并,因此共享凭据可以集中放置,而各个代理只需覆盖所需的语音或提供商字段。当前代理的覆盖设置会应用于自动语音回复、/tts audio、/tts status 以及 tts 代理工具。有关提供商示例和优先级,请参阅文本转语音。
agents.entries对象键是稳定的代理 ID。default已废弃。只有一个已配置的代理时,该代理会被隐式解析;多代理操作需要绑定、明确的agentId目标、作用域化的会话/存储所有者,或显式的--agent/请求字段。model:字符串形式会为代理设置严格的主模型,不使用模型回退;对象形式的{ primary }同样严格,除非添加fallbacks。使用{ primary, fallbacks: [...] }可让该代理启用回退,或使用{ primary, fallbacks: [] }明确指定严格行为。只覆盖primary的 Cron 作业仍会继承默认回退,除非设置fallbacks: []。utilityModel:可选的代理级覆盖项,用于生成会话标题和线程标题等简短内部任务。会回退到agents.defaults.utilityModel,然后回退到当前有效会话提供程序声明的小模型默认值。控制面板标题会使用当前有效的常规会话模型重试一次。空字符串会跳过该代理的备用实用模型路径,但不会禁用控制面板标题生成。params:合并到agents.defaults.models中所选模型条目之上的代理级流参数。可使用它设置代理专用的覆盖项,例如cacheRetention、temperature或maxTokens,而无需复制整个模型目录。tts:可选的代理级文本转语音覆盖项。该配置块会与tts深度合并,因此应将共享的提供程序凭据和回退策略保留在tts中,并仅在此处设置角色专用的值,例如提供程序、语音、模型、风格或自动模式。skills:可选的代理级技能允许列表。如果省略,代理会在设置时继承agents.defaults.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:可选的代理级默认 reasoning 可见性(on | off | stream)。当未设置每条消息或会话级 reasoning 覆盖时,会覆盖该代理的agents.defaults.reasoningDefault。fastModeDefault:可选的代理级快速模式默认值("auto" | true | false)。当未设置每条消息或会话级快速模式覆盖时,会覆盖该代理的agents.defaults.fastModeDefault。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会派生默认值:从emoji派生ackReaction,从name/emoji派生mentionPatterns。subagents.allowAgents:允许显式sessions_spawn.agentId目标使用的已配置代理 ID 列表(["*"]= 任意已配置目标;默认值:仅当前代理)。如果允许以自身为目标的agentId调用,请包含请求方 ID。配置已删除代理的过期条目会被sessions_spawn拒绝,并从agents_list中省略;运行openclaw doctor --fix清理这些条目,或者添加一个最小的agents.entries.*条目,使该目标在继承默认值的同时仍可生成。- 沙箱继承保护:如果请求方会话处于沙箱中,
sessions_spawn会拒绝将以未沙箱方式运行的目标。 subagents.requireAgentId:为true时,阻止省略agentId的sessions_spawn调用(强制显式选择配置;默认值:false)。subagents.maxConcurrent:子代理执行期间允许的最大并发子代理运行数。默认值:8。subagents.maxChildrenPerAgent:单个代理会话可以生成的最大活动子代理数。默认值:5。subagents.maxSpawnDepth:子代理生成的最大嵌套深度(1-5)。默认值:1(不嵌套)。subagents.archiveAfterMinutes:已完成子代理状态被归档前的存留时间。默认值:60。
多代理路由
在一个 Gateway 中运行多个彼此隔离的代理。参见 多代理。绑定匹配字段
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 }
match.peermatch.guildIdmatch.teamIdmatch.accountId(精确匹配,不含 peer/guild/team)match.accountId: "*"(频道范围)- 仅代理回退(仅当恰好配置了一个代理时;没有匹配绑定的显式多代理集群将拒绝访问)
bindings 条目获胜。
对于 type: "acp" 的条目,OpenClaw 会按精确会话身份(match.channel + account + match.peer.id)解析,不使用上面的路由绑定层级顺序。
每个代理的访问配置
完全访问(无沙箱)
完全访问(无沙箱)
只读工具 + 工作区
只读工具 + 工作区
无文件系统访问(仅消息功能)
无文件系统访问(仅消息功能)
会话
会话字段详情
会话字段详情
scope:群聊上下文的基础会话分组策略。per-sender(默认):在一个频道上下文中,每个发送者都获得一个隔离的会话。global:频道上下文中的所有参与者共享一个会话(仅在确实需要共享上下文时使用)。
dmScope:私信的分组方式。main:所有私信共享主会话。per-peer:跨频道按发送者 ID 隔离。per-channel-peer:按频道 + 发送者隔离(推荐用于多用户收件箱)。per-account-channel-peer:按账户 + 频道 + 发送者隔离(推荐用于多账户)。
identityLinks:将规范 ID 映射到带提供商前缀的对端,以实现跨频道会话共享。诸如/dock_discord的停靠命令使用同一映射,将当前会话的回复路由切换到另一个已关联的频道对端;请参阅频道停靠。reset:主要重置策略。none禁用自动重置,也是默认值;系统会改用压缩来限制活动上下文。daily在本地时间atHour时重置;idle在idleMinutes后重置。如果两者都已配置,则先到期者生效。/new和/reset在所有模式下都可用。每日重置的新鲜度使用会话行的sessionStartedAt;空闲重置的新鲜度使用lastInteractionAt。心跳、cron 唤醒、执行通知和网关记录等后台/系统事件写入可以更新updatedAt,但不会让每日/空闲会话保持新鲜。resetByType:按类型覆盖(direct、group、thread)。Doctor 会将旧版dm条目迁移为direct;架构会拒绝dm。
resetByChannel:按提供商/频道 ID 设置的频道级重置覆盖。当会话所在频道存在匹配条目时,该条目将完全优先于该会话的resetByType/reset。仅当某个频道需要不同于类型级策略的重置行为时使用。mainKey:旧版字段。运行时始终对主私聊桶使用"main"。sendPolicy:按channel、chatType(direct|group|channel,兼容旧版dm别名)、keyPrefix或rawKeyPrefix进行匹配。先匹配到的拒绝规则优先。maintenance:会话存储清理和保留控制。mode:enforce执行清理,也是默认值;warn仅发出警告。pruneAfter:过期条目的时间阈值(默认30d)。maxEntries:SQLite 会话条目的最大数量(默认500)。运行时写入会针对生产规模的上限批量执行清理,并保留少量高水位缓冲;openclaw sessions cleanup --enforce会立即应用该上限。- 网关短生命周期模型运行探测会话固定保留
24h,但清理受压力条件控制:只有达到会话条目维护/容量上限压力时,才会删除过期的严格模型运行探测行。只有匹配agent:*:explicit:model-run-<uuid>的严格显式探测键符合条件;普通私聊、群聊、线程、cron、hook、心跳、ACP 和子代理会话不会继承此 24 小时保留策略。模型运行清理执行时,会先于更广泛的pruneAfter过期条目清理和maxEntries上限处理。 - 当前架构会拒绝旧版
rotateBytes;openclaw doctor --fix会从旧配置中删除该字段。 resetArchiveRetention:重置/删除的转录档案的基于时间的保留策略。默认情况下,档案会一直保留,直到因磁盘预算而被驱逐;设置持续时间可选择按实际时间删除,设置为false可显式禁用该功能。maxDiskBytes:可选的会话目录磁盘预算。在warn模式下记录警告;在enforce模式下优先删除最早的构件/会话。设置为false、0或"0"可完全禁用该预算。highWaterBytes:预算清理后的可选目标值。默认为maxDiskBytes的80%。
threadBindings:线程绑定会话功能的全局默认值。enabled:受支持的频道线程绑定功能的总开关。idleHours:默认的非活动自动取消聚焦时间(小时)(0禁用;提供商可以覆盖)。maxAgeHours:默认的硬性最大存续时间(小时)(0禁用;提供商可以覆盖)。spawnSessions:通过sessions_spawn和 ACP 线程生成创建线程绑定工作会话的默认开关。启用线程绑定时默认为true;提供商/账户可以覆盖。defaultSpawnContext:线程绑定生成任务的默认原生子代理上下文("fork"或"isolated")。默认为"fork"。
sharing:控制所有者和operator.admin连接可以选择的每会话协作模式。每个标志默认为true;将某项设置为false会从控制界面中移除相应选项,并使创建时的可见性设置或session.visibility.set拒绝该选项。除非控制界面以草稿形式启动新会话,否则新会话将以shared模式开始。readOnly:允许使用read-only,非成员可以观看,但不能发送消息、调整方向、中止、批准或修改会话状态。suggest:允许使用suggest。在此阶段,它执行与read-only相同的准入行为;建议队列将在后续功能中提供。drafts:允许使用draft,这会将会话从非管理员、非所有者的会话列表和事件广播中隐藏。
消息
回复前缀
按频道/账户覆盖:channels.<channel>.responsePrefix、channels.<channel>.accounts.<id>.responsePrefix。
解析顺序(越具体优先级越高):账户 → 频道 → 全局。"" 表示禁用并停止级联。"auto" 会派生为 [{identity.name}]。
模板变量:
变量不区分大小写。
{think} 是 {thinkingLevel} 的别名。
确认反应
- 默认使用活动代理的
identity.emoji,否则使用"👀"。设置为""可禁用。 - 按频道覆盖:
channels.<channel>.ackReaction、channels.<channel>.accounts.<id>.ackReaction。 - 解析顺序:账户 → 频道 →
messages.ackReaction→ 身份回退值。 - 范围:
group-mentions(默认)、group-all、direct、all,或off/none(完全禁用确认反应)。 group-mentions会确认提及代理的群组消息,包括设置了requireMention: false的群组。使用group-all可确认每条群组消息。messages.statusReactions.enabled:启用 Slack、Discord、Signal、Telegram 和 WhatsApp 上的生命周期状态反应。 在 Discord 上,未设置时,只要确认反应处于启用状态,状态反应就会保持启用。 在 Slack、Signal、Telegram 和 WhatsApp 上,必须明确设置为true才能启用生命周期状态反应。 默认情况下,Slack 使用其原生助手线程状态和轮换显示的加载消息来报告进度,同时保持配置的确认反应不变。
队列
mode:在会话运行处于活动状态时到达的传入消息所使用的队列策略。默认值:"steer"。steer:将新提示注入活动运行中。followup:在活动运行完成后运行新提示。collect:批量收集兼容的消息,稍后一起运行。interrupt:在启动最新提示前中止活动运行。
- 队列对 steer、followup 和 collect 批处理使用内置的 500 毫秒去抖。
cap:在应用丢弃策略前排队消息的最大数量。默认值:20。drop:超过上限时使用的策略。"summarize"(默认)会丢弃最旧的条目,但保留简要摘要;"old"会丢弃最旧的条目且不保留摘要;"new"会拒绝最新的条目。byChannel:按提供方 ID 设置的各频道mode覆盖值。debounceMsByChannel:按提供方 ID 设置的各频道去抖覆盖值,单位为毫秒。
messages.inbound.debounceMs 设置全局队列前去抖时间窗口。
传入去抖
将来自同一发送者的快速纯文本消息批量合并为一次代理轮次。媒体/附件会立即刷新发送。控制命令不受去抖影响。默认debounceMs:2000。
其他消息键
channels.whatsapp.responsePrefix:出站 WhatsApp 回复前缀。仅当规范值未设置时,Doctor 才会将已弃用的入站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(文本转语音)
~/.openclaw/settings/tts.json;可使用 OPENCLAW_TTS_PREFS 覆盖)。高级的多代理设置可以通过 agents.entries.<id>.tts.prefsPath 为每个代理设置不同的偏好存储。
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 服务器,并放宽模型/语音验证。
语音对话
语音对话模式的默认值(macOS/iOS/Android 和浏览器控制界面)。- 当配置了多个语音对话提供商时,
talk.provider必须与talk.providers中的某个键匹配。 - 对于未指定代理作用域会话密钥而创建的语音对话会话,
talk.agentId负责管理这些会话。会话作用域的语音对话调用仍会使用该密钥中编码的代理。对于现有的多代理配置,Doctor 可能会创建一个仅包含此所有者的最小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 语音对话客户端行为)。 providers.*.apiKey接受纯文本字符串或 SecretRef 对象。- 仅当未配置语音对话 API 密钥时,才会应用
ELEVENLABS_API_KEY回退值。 providers.*.voiceAliases允许语音对话指令使用易记名称。providers.mlx.modelId选择 macOS 本地 MLX 辅助程序所使用的 Hugging Face 仓库。如果省略,macOS 将使用mlx-community/Soprano-80M-bf16。- macOS MLX 播放会在可用时通过捆绑的
openclaw-mlx-tts辅助程序运行,否则使用PATH上的可执行文件;OPENCLAW_MLX_TTS_BIN可在开发过程中覆盖辅助程序路径。 consultThinkingLevel控制控制界面语音对话实时openclaw_agent_consult调用背后完整 OpenClaw 代理运行时的思考级别。不设置则保持正常的会话/模型行为。consultFastMode为控制界面语音对话实时咨询设置一次性的快速模式覆盖,不会更改会话的正常快速模式设置。speechLocale设置由 Android、iOS 和 macOS 语音对话语音识别以及 iOS 系统语音回退所使用的 BCP 47 区域设置 ID。Android 还会使用其中的语言组件来辅助实时输入转录。不设置则使用设备默认值。silenceTimeoutMs控制语音对话模式在用户静音后等待多长时间再发送转录文本。不设置则保留平台默认的暂停时间窗口(macOS 和 Android 为 700 ms,iOS 为 900 ms)。realtime.instructions会将面向提供商的系统指令附加到 OpenClaw 的内置实时提示词中,因此无需丢失默认的openclaw_agent_consult指导即可配置语音风格。realtime.vadThreshold将提供商的语音活动阈值设置为从0(最敏感)到1(最不敏感)。不设置则保留提供商默认值。realtime.silenceDurationMs设置提供商提交实时用户回合之前的正整数静音时间窗口。不设置则保留提供商默认值。realtime.prefixPaddingMs设置检测到语音开始之前所保留的非负整数音频时长。不设置则保留提供商默认值。realtime.reasoningEffort设置实时会话所使用的提供商特定推理级别。不设置则保留提供商默认值。realtime.consultRouting:"provider-direct"(默认值)在实时提供商生成最终用户转录文本但未调用openclaw_agent_consult时,保留提供商的直接回复;"force-agent-consult"则会将最终请求改由 OpenClaw 处理。