~/.openclaw/openclaw.json 的核心配置参考。若需面向任务的概览,请参见 Configuration。
本页涵盖主要的 OpenClaw 配置面,并在某个子系统拥有更深入的独立参考文档时提供外链。由渠道和插件负责的命令目录,以及更深层的 memory/QMD 调整项,分别位于它们自己的页面,而不是本页。
代码事实依据:
openclaw config schema会输出用于验证和 Control UI 的实时 JSON Schema,并在可用时合并内置/插件/渠道元数据config.schema.lookup会返回一个按路径范围限定的 schema 节点,供逐层深入工具使用pnpm config:docs:check/pnpm config:docs:gen会根据当前 schema 表面验证配置文档基线哈希
gateway 工具动作 config.schema.lookup
来获取精确到字段级别的文档和约束。面向任务的指导请使用
Configuration,而本页则用于查看更广泛的字段映射、默认值以及指向子系统参考文档的链接。
专门的深度参考文档:
- Memory configuration reference 用于
agents.defaults.memorySearch.*、memory.qmd.*、memory.citations,以及位于plugins.entries.memory-core.config.dreaming下的 dreaming 配置 - Slash commands 用于当前内置 + 打包提供的命令目录
- 对于渠道专有的命令面,请参见对应渠道/插件所属页面
渠道
每个渠道的配置键已移至专门页面 —— 请参见 Configuration — channels 了解channels.*,
包括 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage 及其他
内置渠道(认证、访问控制、多账号、提及门控)。
智能体默认值、多智能体、会话和消息
已移至专门页面 —— 请参见 Configuration — agents,内容包括:agents.defaults.*(工作区、模型、思考、心跳、内存、媒体、Skills、沙箱)multiAgent.*(多智能体路由与绑定)session.*(会话生命周期、压缩、裁剪)messages.*(消息投递、TTS、Markdown 渲染)talk.*(Talk 模式)talk.speechLocale:可选的 BCP 47 locale id,用于 iOS/macOS 上 Talk 语音识别talk.silenceTimeoutMs:未设置时,Talk 会保留平台默认的暂停窗口后再发送转录文本(macOS 和 Android 为 700 ms,iOS 为 900 ms)
工具和自定义提供商
工具策略、实验性开关、由提供商支持的工具配置,以及自定义 provider / base-URL 设置已移至专门页面 —— 请参见 Configuration — tools and custom providers。MCP
由 OpenClaw 管理的 MCP 服务器定义位于mcp.servers 下,并由内嵌 Pi 及其他运行时适配器使用。openclaw mcp list、
show、set 和 unset 命令可在编辑配置时管理该配置块,而无需连接到目标服务器。
mcp.servers:供运行时使用的具名 stdio 或远程 MCP 服务器定义,这些运行时会暴露已配置的 MCP 工具。mcp.sessionIdleTtlMs:面向会话范围内置 MCP 运行时的空闲 TTL。 一次性内嵌运行会请求在运行结束时清理;此 TTL 是为长生命周期会话和未来调用方提供的兜底机制。mcp.*下的变更会通过释放缓存的会话 MCP 运行时来热应用。 下一次工具发现/使用时,会基于新配置重新创建它们,因此被移除的mcp.servers条目会立即回收,而不是等到空闲 TTL 到期。
Skills
allowBundled:仅针对内置 Skills 的可选允许列表(托管/workspace Skills 不受影响)。load.extraDirs:额外的共享 Skills 根目录(优先级最低)。install.preferBrew:为 true 时,如果brew可用,则优先使用 Homebrew 安装器,然后才回退到其他安装器类型。install.nodeManager:metadata.openclaw.install规范所使用的 Node 安装器偏好(npm|pnpm|yarn|bun)。entries.<skillKey>.enabled: false:即使某个 Skill 已内置/已安装,也会将其禁用。entries.<skillKey>.apiKey:为声明主要环境变量的 Skills 提供的便捷字段(明文字符串或 SecretRef 对象)。
插件
- 从
~/.openclaw/extensions、<workspace>/.openclaw/extensions以及plugins.load.paths加载。 - 设备发现支持原生 OpenClaw 插件,以及兼容的 Codex bundles 和 Claude bundles,包括无 manifest 的 Claude 默认布局 bundle。
- 配置变更需要重启 Gateway 网关。
allow:可选允许列表(只有列出的插件会被加载)。deny优先生效。plugins.entries.<id>.apiKey:插件级 API key 便捷字段(插件支持时可用)。plugins.entries.<id>.env:插件作用域环境变量映射。plugins.entries.<id>.hooks.allowPromptInjection:当为false时,核心会阻止before_prompt_build,并忽略旧版before_agent_start中会修改提示词的字段,同时保留旧版modelOverride和providerOverride。适用于原生插件钩子以及受支持 bundle 提供的钩子目录。plugins.entries.<id>.hooks.allowConversationAccess:当为true时,受信任的非内置插件可以从llm_input、llm_output、before_agent_finalize和agent_end等类型化钩子中读取原始会话内容。plugins.entries.<id>.subagent.allowModelOverride:显式信任该插件可为后台子智能体运行请求按次运行的provider和model覆盖。plugins.entries.<id>.subagent.allowedModels:受信任子智能体覆盖可使用的规范provider/model目标可选允许列表。只有在你明确希望允许任意模型时,才使用"*"。plugins.entries.<id>.config:插件自定义配置对象(在可用时由原生 OpenClaw 插件 schema 验证)。- 渠道插件的账号/运行时设置位于
channels.<id>下,应由所属插件 manifest 中的channelConfigs元数据描述,而不是由集中式 OpenClaw 选项注册表描述。 plugins.entries.firecrawl.config.webFetch:Firecrawl 网页抓取提供商设置。apiKey:Firecrawl API key(接受 SecretRef)。回退顺序为plugins.entries.firecrawl.config.webSearch.apiKey、旧版tools.web.fetch.firecrawl.apiKey,或FIRECRAWL_API_KEY环境变量。baseUrl:Firecrawl API 基础 URL(默认:https://api.firecrawl.dev)。onlyMainContent:仅提取页面主体内容(默认:true)。maxAgeMs:缓存最大存活时间(毫秒)(默认:172800000/ 2 天)。timeoutSeconds:抓取请求超时时间(秒)(默认:60)。
plugins.entries.xai.config.xSearch:xAI X Search(Grok web search)设置。enabled:启用 X Search 提供商。model:搜索使用的 Grok 模型(例如"grok-4-1-fast")。
plugins.entries.memory-core.config.dreaming:memory dreaming 设置。阶段和阈值请参见 Dreaming。enabled:dreaming 总开关(默认false)。frequency:每次完整 dreaming 扫描的 cron 频率(默认值为"0 3 * * *")。- 阶段策略和阈值属于实现细节(不是面向用户的配置键)。
- 完整的 memory 配置位于 Memory configuration reference:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- 已启用的 Claude bundle 插件也可以通过
settings.json提供内嵌 Pi 默认值;OpenClaw 会将其作为已净化的智能体设置来应用,而不是作为原始 OpenClaw 配置补丁。 plugins.slots.memory:选择活动 memory 插件 id,或使用"none"禁用 memory 插件。plugins.slots.contextEngine:选择活动上下文引擎插件 id;默认值为"legacy",除非你安装并选择了其他引擎。
浏览器
evaluateEnabled: false会禁用act:evaluate和wait --fn。tabCleanup会在空闲超时后,或当某个 会话超过其上限时,回收已跟踪的主智能体标签页。将idleMinutes: 0或maxTabsPerSession: 0设为 0,可分别禁用这些单独的清理模式。ssrfPolicy.dangerouslyAllowPrivateNetwork在未设置时为禁用状态,因此浏览器导航默认保持严格模式。- 仅当你明确信任私有网络浏览器导航时,才设置
ssrfPolicy.dangerouslyAllowPrivateNetwork: true。 - 在严格模式下,远程 CDP 配置文件端点(
profiles.*.cdpUrl)在可达性/发现检查期间同样会受到私有网络拦截限制。 ssrfPolicy.allowPrivateNetwork仍作为旧版别名受支持。- 在严格模式下,使用
ssrfPolicy.hostnameAllowlist和ssrfPolicy.allowedHostnames来配置显式例外。 - 远程配置文件仅支持附加模式(禁用 start/stop/reset)。
profiles.*.cdpUrl接受http://、https://、ws://和wss://。 当你希望 OpenClaw 发现/json/version时,使用 HTTP(S);使用 WS(S) 则适用于你的提供商直接给出 DevTools WebSocket URL 的情况。remoteCdpTimeoutMs和remoteCdpHandshakeTimeoutMs适用于远程和attachOnlyCDP 的可达性检查,以及标签页打开请求。受管的 local loopback 配置文件则继续使用本地 CDP 默认值。- 如果某个外部管理的 CDP 服务可通过 loopback 访问,请将该
配置文件的
attachOnly: true打开;否则 OpenClaw 会将该 loopback 端口视为 本地受管浏览器配置文件,并可能报告本地端口所有权错误。 existing-session配置文件使用 Chrome MCP 而不是 CDP,并且可以附加到 所选主机上,或通过已连接的浏览器节点附加。existing-session配置文件可以设置userDataDir,以指向特定的 基于 Chromium 的浏览器配置文件,例如 Brave 或 Edge。existing-session配置文件保留当前 Chrome MCP 路由限制: 使用 snapshot/ref 驱动的操作,而不是 CSS 选择器定位;单文件上传 钩子;不支持对话框超时覆盖;不支持wait --load networkidle;也不支持responsebody、PDF 导出、下载拦截或批量操作。- 本地受管的
openclaw配置文件会自动分配cdpPort和cdpUrl;仅在远程 CDP 场景下 才需要显式设置cdpUrl。 - 本地受管配置文件可以设置
executablePath来覆盖该配置文件的全局browser.executablePath。可用它让一个配置文件运行在 Chrome 中,另一个运行在 Brave 中。 - 本地受管配置文件在进程启动后使用
browser.localLaunchTimeoutMs进行 Chrome CDP HTTP 发现,并使用browser.localCdpReadyTimeoutMs检查 启动后 CDP websocket 是否就绪。对于 Chrome 虽能成功启动但就绪检查与启动过程发生竞争的较慢主机,请调高这两个值。两个值都必须是 不超过120000ms 的正整数;无效配置值会被拒绝。 - 自动检测顺序:默认浏览器(如果基于 Chromium)→ Chrome → Brave → Edge → Chromium → Chrome Canary。
browser.executablePath和browser.profiles.<name>.executablePath都 支持在 Chromium 启动前将~和~/...解析为你的操作系统主目录。existing-session配置文件中的每个配置文件userDataDir也支持波浪线展开。- Control 服务:仅 loopback(端口派生自
gateway.port,默认18791)。 extraArgs会将额外启动标志追加到本地 Chromium 启动命令中(例如--disable-gpu、窗口大小设置或调试标志)。
UI
seamColor:原生应用 UI 外观的强调色(Talk 模式气泡着色等)。assistant:Control UI 身份覆盖。未设置时回退到当前活动智能体身份。
Gateway 网关
Gateway 网关字段详情
Gateway 网关字段详情
mode:local(运行 Gateway 网关)或remote(连接到远程 Gateway 网关)。只有在local模式下,Gateway 网关才允许启动。port:用于 WS + HTTP 的单一复用端口。优先级:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789。bind:auto、loopback(默认)、lan(0.0.0.0)、tailnet(仅 Tailscale IP)或custom。- 旧版 bind 别名:在
gateway.bind中使用 bind 模式值(auto、loopback、lan、tailnet、custom),不要使用主机别名(0.0.0.0、127.0.0.1、localhost、::、::1)。 - Docker 注意事项:默认的
loopbackbind 会在容器内监听127.0.0.1。使用 Docker bridge 网络(-p 18789:18789)时,流量会到达eth0,因此 Gateway 网关将无法访问。请使用--network host,或设置bind: "lan"(或设置bind: "custom"且customBindHost: "0.0.0.0")以监听所有网络接口。 - 认证:默认必须启用。非 loopback bind 要求启用 Gateway 网关认证。实际情况下,这意味着使用共享 token/password,或使用设置了
gateway.auth.mode: "trusted-proxy"的身份感知反向代理。新手引导向导默认会生成一个 token。 - 如果同时配置了
gateway.auth.token和gateway.auth.password(包括 SecretRef),请显式将gateway.auth.mode设为token或password。如果两者都已配置但 mode 未设置,启动以及服务安装/修复流程都会失败。 gateway.auth.mode: "none":显式无认证模式。仅用于受信任的本地 local loopback 设置;新手引导提示不会故意提供此选项。gateway.auth.mode: "trusted-proxy":将认证委托给身份感知反向代理,并信任来自gateway.trustedProxies的身份头(参见 Trusted Proxy Auth)。此模式要求代理来源是非 loopback;同机 loopback 反向代理不满足 trusted-proxy 认证条件。gateway.auth.allowTailscale:为true时,Tailscale Serve 身份头可用于满足 Control UI/WebSocket 认证(通过tailscale whois验证)。HTTP API 端点不会使用该 Tailscale 头认证;它们仍遵循 Gateway 网关的常规 HTTP 认证模式。这个无 token 流程假定 Gateway 网关主机是受信任的。当tailscale.mode = "serve"时,默认值为true。gateway.auth.rateLimit:可选的认证失败限流器。按客户端 IP 和认证作用域生效(共享密钥和设备 token 会分别跟踪)。被阻止的尝试会返回429+Retry-After。- 在异步 Tailscale Serve Control UI 路径中,同一
{scope, clientIp}的失败尝试会在写入失败记录前被串行化。因此,来自同一客户端的并发错误尝试可能会在第二个请求时触发限流,而不是两个请求都作为普通不匹配直接竞争通过。 gateway.auth.rateLimit.exemptLoopback默认为true;如果你有意希望 localhost 流量也被限流(用于测试环境或严格代理部署),请将其设为false。
- 在异步 Tailscale Serve Control UI 路径中,同一
- 来自浏览器源的 WS 认证尝试始终会启用限流,并禁用 loopback 豁免(作为防御纵深,用于防止基于浏览器的 localhost 暴力破解)。
- 在 loopback 上,这些来自浏览器源的锁定会按规范化后的
Origin值彼此隔离,因此某个 localhost 源的重复失败不会自动 锁定另一个不同的源。 tailscale.mode:serve(仅 tailnet,loopback bind)或funnel(公网,需要认证)。controlUi.allowedOrigins:用于 Gateway 网关 WebSocket 连接的显式浏览器源允许列表。当预期浏览器客户端来自非 loopback 源时,此项为必需。controlUi.dangerouslyAllowHostHeaderOriginFallback:危险模式,为有意依赖 Host 头源策略的部署启用 Host 头源回退。remote.transport:ssh(默认)或direct(ws/wss)。对于direct,remote.url必须是ws://或wss://。OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1:客户端进程环境变量级别的紧急放行开关,允许对受信任私有网络 IP 使用明文ws://;默认情况下,明文连接仍仅限于 loopback。openclaw.json中没有等效配置,而且像browser.ssrfPolicy.dangerouslyAllowPrivateNetwork这样的浏览器私有网络配置也不会影响 Gateway 网关 WebSocket 客户端。gateway.remote.token/.password是远程客户端凭据字段。它们本身不会配置 Gateway 网关认证。gateway.push.apns.relay.baseUrl:供官方/TestFlight iOS 构建在将基于 relay 的注册发布到 Gateway 网关后使用的外部 APNs relay 基础 HTTPS URL。该 URL 必须与编译进 iOS 构建中的 relay URL 一致。gateway.push.apns.relay.timeoutMs:Gateway 网关到 relay 的发送超时时间(毫秒)。默认值为10000。- 基于 relay 的注册会委托给特定的 Gateway 网关身份。已配对的 iOS 应用会获取
gateway.identity.get,在 relay 注册中包含该身份,并将一个作用域为该注册的发送授权转发给 Gateway 网关。其他 Gateway 网关无法复用这个已存储的注册。 OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS:针对上述 relay 配置的临时环境变量覆盖项。OPENCLAW_APNS_RELAY_ALLOW_HTTP=true:仅用于开发环境的逃生口,允许使用 loopback HTTP relay URL。生产环境的 relay URL 应保持使用 HTTPS。gateway.channelHealthCheckMinutes:渠道健康监控间隔(分钟)。设为0可全局禁用健康监控重启。默认值:5。gateway.channelStaleEventThresholdMinutes:陈旧 socket 阈值(分钟)。请保持其大于或等于gateway.channelHealthCheckMinutes。默认值:30。gateway.channelMaxRestartsPerHour:滚动一小时内每个渠道/账号允许的最大健康监控重启次数。默认值:10。channels.<provider>.healthMonitor.enabled:渠道级别的健康监控重启退出设置,同时保持全局监控启用。channels.<provider>.accounts.<accountId>.healthMonitor.enabled:多账号渠道的账号级覆盖设置。设置后,其优先级高于渠道级覆盖。- 本地 Gateway 网关调用路径仅会在
gateway.auth.*未设置时,才将gateway.remote.*用作回退。 - 如果通过 SecretRef 显式配置了
gateway.auth.token/gateway.auth.password但未能解析,则解析会以关闭方式失败(不会用远程回退来掩盖问题)。 trustedProxies:终止 TLS 或注入转发客户端头的反向代理 IP。只应列出你控制的代理。loopback 条目对于同机代理/本地检测设置仍然有效(例如 Tailscale Serve 或本地反向代理),但它们不会使 loopback 请求符合gateway.auth.mode: "trusted-proxy"的条件。allowRealIpFallback:为true时,如果缺少X-Forwarded-For,Gateway 网关会接受X-Real-IP。默认值为false,以保持关闭式失败行为。gateway.nodes.pairing.autoApproveCidrs:可选的 CIDR/IP 允许列表,用于在首次节点设备配对且未请求任何作用域时自动批准。未设置时即为禁用。它不会自动批准 operator/browser/Control UI/WebChat 配对,也不会自动批准角色、作用域、元数据或公钥升级。gateway.nodes.allowCommands/gateway.nodes.denyCommands:在完成配对和允许列表评估后,对已声明节点命令进行全局允许/拒绝约束。gateway.tools.deny:为 HTTPPOST /tools/invoke额外阻止的工具名(扩展默认拒绝列表)。gateway.tools.allow:从默认 HTTP 拒绝列表中移除工具名。
OpenAI 兼容端点
- Chat Completions:默认禁用。通过
gateway.http.endpoints.chatCompletions.enabled: true启用。 - Responses API:
gateway.http.endpoints.responses.enabled。 - Responses URL 输入加固:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlist空允许列表会被视为未设置;请使用gateway.http.endpoints.responses.files.allowUrl=false和/或gateway.http.endpoints.responses.images.allowUrl=false来禁用 URL 抓取。
- 可选响应加固头:
gateway.http.securityHeaders.strictTransportSecurity(仅对你控制的 HTTPS 源设置;参见 Trusted Proxy Auth)
多实例隔离
通过使用唯一端口和状态目录,可在一台主机上运行多个 Gateway 网关:--dev(使用 ~/.openclaw-dev + 端口 19001)、--profile <name>(使用 ~/.openclaw-<name>)。
请参见 Multiple Gateways。
gateway.tls
enabled:在 Gateway 网关监听器处启用 TLS 终止(HTTPS/WSS)(默认:false)。autoGenerate:当未配置显式文件时,自动生成本地自签名证书/密钥对;仅适用于本地/开发环境。certPath:TLS 证书文件的文件系统路径。keyPath:TLS 私钥文件的文件系统路径;应限制权限。caPath:可选的 CA bundle 路径,用于客户端验证或自定义信任链。
gateway.reload
mode:控制在运行时如何应用配置编辑。"off":忽略实时编辑;更改需要显式重启。"restart":配置变更时始终重启 Gateway 网关进程。"hot":在不重启的情况下于进程内应用更改。"hybrid"(默认):先尝试热重载;如有需要则回退为重启。
debounceMs:应用配置变更前的防抖窗口,单位为毫秒(非负整数)。deferralTimeoutMs:可选的最大等待时间,单位为毫秒,用于等待正在进行的操作完成后再强制重启。省略此项或设为0表示无限等待,并定期记录仍在等待中的警告。
Hooks
Authorization: Bearer <token> 或 x-openclaw-token: <token>。
拒绝使用查询字符串中的 hook token。
验证与安全说明:
hooks.enabled=true要求提供非空的hooks.token。hooks.token必须与gateway.auth.token不同;重复使用 Gateway 网关 token 会被拒绝。hooks.path不能为/;请使用专用子路径,例如/hooks。- 如果
hooks.allowRequestSessionKey=true,请限制hooks.allowedSessionKeyPrefixes(例如["hook:"])。 - 如果某个 mapping 或 preset 使用模板化的
sessionKey,请设置hooks.allowedSessionKeyPrefixes和hooks.allowRequestSessionKey=true。静态 mapping 键不需要这个显式启用。
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }- 仅当
hooks.allowRequestSessionKey=true时,才接受请求负载中的sessionKey(默认:false)。
- 仅当
POST /hooks/<name>→ 通过hooks.mappings解析- 模板渲染后的映射
sessionKey值会被视为外部提供,因此也要求hooks.allowRequestSessionKey=true。
- 模板渲染后的映射
映射详情
映射详情
match.path匹配/hooks之后的子路径(例如/hooks/gmail→gmail)。match.source匹配通用路径中的某个负载字段。- 像
{{messages[0].subject}}这样的模板会从负载中读取数据。 transform可指向一个返回 hook 动作的 JS/TS 模块。transform.module必须是相对路径,并且必须保持在hooks.transformsDir内(绝对路径和路径穿越都会被拒绝)。
agentId会路由到特定智能体;未知 ID 会回退到默认值。allowedAgentIds:限制显式路由(*或省略 = 允许全部,[]= 全部拒绝)。defaultSessionKey:可选的固定会话键,用于没有显式sessionKey的 hook 智能体运行。allowRequestSessionKey:允许/hooks/agent调用方以及模板驱动的映射会话键设置sessionKey(默认:false)。allowedSessionKeyPrefixes:显式sessionKey值(请求 + 映射)的可选前缀允许列表,例如["hook:"]。当任何映射或 preset 使用模板化sessionKey时,该项就变为必需。deliver: true会将最终回复发送到某个渠道;channel默认为last。model:为此次 hook 运行覆盖 LLM(如果设置了模型目录,则该模型必须被允许)。
Gmail 集成
- 内置 Gmail preset 使用
sessionKey: "hook:gmail:{{messages[0].id}}"。 - 如果你保留这种按消息路由的方式,请设置
hooks.allowRequestSessionKey: true,并限制hooks.allowedSessionKeyPrefixes以匹配 Gmail 命名空间,例如["hook:", "hook:gmail:"]。 - 如果你需要
hooks.allowRequestSessionKey: false,请用静态sessionKey覆盖该 preset,而不是使用模板化默认值。
- 配置后,Gateway 网关会在启动时自动启动
gog gmail watch serve。设置OPENCLAW_SKIP_GMAIL_WATCHER=1可禁用。 - 不要在 Gateway 网关旁边额外运行单独的
gog gmail watch serve。
Canvas 主机
- 在 Gateway 网关端口下通过 HTTP 提供可由智能体编辑的 HTML/CSS/JS 和 A2UI:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- 仅限本地:保持
gateway.bind: "loopback"(默认)。 - 非 loopback bind:canvas 路由与其他 Gateway 网关 HTTP 面一样,要求 Gateway 网关认证(token/password/trusted-proxy)。
- 节点 WebView 通常不会发送认证头;在节点完成配对并连接后,Gateway 网关会为 canvas/A2UI 访问广播节点作用域能力 URL。
- 能力 URL 会绑定到当前活动的节点 WS 会话,并且会很快过期。不使用基于 IP 的回退。
- 会向提供的 HTML 注入实时重载客户端。
- 为空时会自动创建起始
index.html。 - 也会在
/__openclaw__/a2ui/提供 A2UI。 - 更改需要重启 Gateway 网关。
- 对于大型目录或出现
EMFILE错误时,请禁用实时重载。
设备发现
mDNS(Bonjour)
minimal(默认):从 TXT 记录中省略cliPath+sshPort。full:包含cliPath+sshPort。- 主机名默认为
openclaw。可通过OPENCLAW_MDNS_HOSTNAME覆盖。
广域(DNS-SD)
~/.openclaw/dns/ 下写入一个单播 DNS-SD 区域。对于跨网络设备发现,请结合 DNS 服务器(推荐 CoreDNS)+ Tailscale split DNS 使用。
设置:openclaw dns setup --apply。
环境
env(内联环境变量)
- 只有在进程环境中缺少该键时,才会应用内联环境变量。
.env文件:当前工作目录.env+~/.openclaw/.env(二者都不会覆盖已有变量)。shellEnv:从你的登录 shell 配置文件中导入缺失的预期键名。- 完整优先级请参见 Environment。
环境变量替换
可在任意配置字符串中使用${VAR_NAME} 引用环境变量:
- 仅匹配大写名称:
[A-Z_][A-Z0-9_]*。 - 缺失/为空的变量会在配置加载时抛出错误。
- 使用
$${VAR}转义,以表示字面量${VAR}。 - 对
$include同样有效。
Secrets
SecretRef 是增量式的:明文值仍然可用。SecretRef
使用以下对象形态之一:
provider模式:^[a-z][a-z0-9_-]{0,63}$source: "env"的 id 模式:^[A-Z][A-Z0-9_]{0,127}$source: "file"的 id:绝对 JSON pointer(例如"/providers/openai/apiKey")source: "exec"的 id 模式:^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$source: "exec"的 id 不能包含.或..这样的斜杠分隔路径段(例如a/../b会被拒绝)
支持的凭据范围
- 规范矩阵:SecretRef Credential Surface
secrets apply会作用于受支持的openclaw.json凭据路径。auth-profiles.json中的 refs 也纳入运行时解析和审计覆盖范围。
Secret 提供商配置
file提供商支持mode: "json"和mode: "singleValue"(在 singleValue 模式下,id必须是"value")。- 当 Windows ACL 验证不可用时,文件和 exec 提供商路径会以关闭方式失败。仅对无法验证但受信任的路径设置
allowInsecurePath: true。 exec提供商要求command使用绝对路径,并通过 stdin/stdout 上传协议负载。- 默认情况下,符号链接命令路径会被拒绝。设置
allowSymlinkCommand: true可允许符号链接路径,同时仍验证解析后的目标路径。 - 如果配置了
trustedDirs,则受信任目录检查会应用于解析后的目标路径。 - 默认情况下,
exec子进程环境极简;请通过passEnv显式传入所需变量。 - Secret refs 会在激活时解析为内存中的快照,之后请求路径只读取该快照。
- 激活期间会应用活动表面过滤:已启用表面上的未解析 refs 会导致启动/重载失败,而非活动表面会被跳过并记录诊断信息。
认证存储
- 每个智能体的 profile 存储在
<agentDir>/auth-profiles.json。 auth-profiles.json支持值级 refs(api_key使用keyRef,token使用tokenRef)以支持静态凭据模式。- OAuth 模式 profile(
auth.profiles.<id>.mode = "oauth")不支持由 SecretRef 支持的 auth-profile 凭据。 - 静态运行时凭据来自内存中已解析的快照;发现旧版静态
auth.json条目时会清理。 - 旧版 OAuth 会从
~/.openclaw/credentials/oauth.json导入。 - 请参见 OAuth。
- Secrets 运行时行为及
audit/configure/apply工具:请参见 Secrets Management。
auth.cooldowns
billingBackoffHours:当某个 profile 因真实 计费/余额不足错误失败时,使用的基础退避时间(小时)(默认:5)。即使在401/403响应上, 明确的计费文本仍可能落入这里,但特定提供商的文本 匹配器仍只作用于拥有它们的提供商(例如 OpenRouterKey limit exceeded)。可重试的 HTTP402使用窗口或 organization/workspace 支出限制消息则仍归入rate_limit路径。billingBackoffHoursByProvider:按提供商覆盖计费退避小时数的可选配置。billingMaxHours:计费退避指数增长的上限小时数(默认:24)。authPermanentBackoffMinutes:高置信度auth_permanent失败的基础退避时间(分钟)(默认:10)。authPermanentMaxMinutes:auth_permanent退避增长的上限分钟数(默认:60)。failureWindowHours:用于退避计数器的滚动时间窗口(小时)(默认:24)。overloadedProfileRotations:对过载错误,在切换到模型回退之前,同一提供商 auth-profile 允许的最大轮换次数(默认:1)。像ModelNotReadyException这样的提供商繁忙形态也归入这里。overloadedBackoffMs:在重试过载的提供商/profile 轮换前的固定延迟(默认:0)。rateLimitedProfileRotations:对速率限制错误,在切换到模型回退之前,同一提供商 auth-profile 允许的最大轮换次数(默认:1)。该速率限制桶包括诸如Too many concurrent requests、ThrottlingException、concurrency limit reached、workers_ai ... quota limit exceeded和resource exhausted之类带有提供商特征的文本。
日志
- 默认日志文件:
/tmp/openclaw/openclaw-YYYY-MM-DD.log。 - 设置
logging.file可使用固定路径。 - 使用
--verbose时,consoleLevel会提升为debug。 maxFileBytes:轮转前活动日志文件的最大大小(字节)(正整数;默认:104857600= 100 MB)。OpenClaw 会在活动文件旁边保留最多五个带编号的归档文件。redactSensitive/redactPatterns:对控制台输出、文件日志、OTLP 日志记录以及持久化会话转录文本进行尽力脱敏。
诊断
enabled:仪表数据输出总开关(默认:true)。flags:用于启用定向日志输出的标志字符串数组(支持如"telegram.*"或"*"这样的通配符)。stuckSessionWarnMs:当会话仍处于处理中状态时,用于发出卡住会话警告的年龄阈值(毫秒)。otel.enabled:启用 OpenTelemetry 导出管线(默认:false)。完整配置、信号目录和隐私模型请参见 OpenTelemetry export。otel.endpoint:用于 OTel 导出的收集器 URL。otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint:可选的按信号划分的 OTLP 端点。设置后,它们只会对对应信号覆盖otel.endpoint。otel.protocol:"http/protobuf"(默认)或"grpc"。otel.headers:随 OTel 导出请求发送的额外 HTTP/gRPC 元数据头。otel.serviceName:资源属性中的服务名称。otel.traces/otel.metrics/otel.logs:启用 trace、metrics 或 log 导出。otel.sampleRate:trace 采样率0–1。otel.flushIntervalMs:周期性遥测刷新间隔(毫秒)。otel.captureContent:选择启用用于 OTEL span 属性的原始内容捕获。默认关闭。布尔值true会捕获非系统消息/工具内容;对象形式则可让你显式启用inputMessages、outputMessages、toolInputs、toolOutputs和systemPrompt。OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental:用于启用最新实验性 GenAI span 提供商属性的环境变量开关。默认情况下,span 会保留旧版gen_ai.system属性以保持兼容;GenAI metrics 使用有界语义属性。OPENCLAW_OTEL_PRELOADED=1:适用于已注册全局 OpenTelemetry SDK 的主机的环境变量开关。此时 OpenClaw 会跳过由插件负责的 SDK 启动/关闭,同时保持诊断监听器处于活动状态。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT、OTEL_EXPORTER_OTLP_METRICS_ENDPOINT和OTEL_EXPORTER_OTLP_LOGS_ENDPOINT:当对应配置键未设置时使用的按信号划分端点环境变量。cacheTrace.enabled:记录内嵌运行的缓存跟踪快照(默认:false)。cacheTrace.filePath:缓存跟踪 JSONL 的输出路径(默认:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl)。cacheTrace.includeMessages/includePrompt/includeSystem:控制缓存跟踪输出中包含的内容(默认全部为true)。
更新
channel:用于 npm/git 安装的发布渠道 ——"stable"、"beta"或"dev"。checkOnStart:Gateway 网关启动时检查 npm 更新(默认:true)。auto.enabled:为包安装启用后台自动更新(默认:false)。auto.stableDelayHours:稳定渠道自动应用前的最小时延(小时)(默认:6;最大:168)。auto.stableJitterHours:稳定渠道发布扩散窗口的额外小时数(默认:12;最大:168)。auto.betaCheckIntervalHours:beta 渠道检查运行频率(小时)(默认:1;最大:24)。
ACP
enabled:全局 ACP 功能门控(默认:true;设为false会隐藏 ACP 分发和 spawn 入口)。dispatch.enabled:ACP 会话轮次分发的独立门控(默认:true)。设为false可保留 ACP 命令可用,同时阻止执行。backend:默认 ACP 运行时后端 id(必须匹配已注册的 ACP 运行时插件)。 如果设置了plugins.allow,请包含后端插件 id(例如acpx),否则内置默认插件将不会加载。defaultAgent:当 spawn 未指定显式目标时使用的 ACP 回退目标智能体 id。allowedAgents:允许用于 ACP 运行时会话的智能体 id 允许列表;为空表示没有额外限制。maxConcurrentSessions:同时处于活动状态的 ACP 会话最大数量。stream.coalesceIdleMs:流式文本的空闲合并刷新窗口(毫秒)。stream.maxChunkChars:在拆分流式分块投影前的最大块大小。stream.repeatSuppression:每轮抑制重复的状态/工具行(默认:true)。stream.deliveryMode:"live"表示增量流式传输;"final_only"表示缓冲到轮次终止事件后再输出。stream.hiddenBoundarySeparator:隐藏工具事件后、可见文本前的分隔符(默认:"paragraph")。stream.maxOutputChars:每个 ACP 轮次投影的智能体输出最大字符数。stream.maxSessionUpdateChars:投影 ACP 状态/更新行的最大字符数。stream.tagVisibility:tag 名称到布尔可见性覆盖的记录,用于流式事件。runtime.ttlMinutes:ACP 会话工作进程在可被清理前的空闲 TTL(分钟)。runtime.installCommand:可选安装命令,用于引导 ACP 运行时环境。
CLI
cli.banner.taglineMode控制横幅标语样式:"random"(默认):轮换的有趣/季节性标语。"default":固定中性标语(All your chats, one OpenClaw.)。"off":不显示标语文本(仍显示横幅标题/版本)。
- 若要隐藏整个横幅(而不仅是标语),请设置环境变量
OPENCLAW_HIDE_BANNER=1。
向导
由 CLI 引导式设置流程(onboard、configure、doctor)写入的元数据:
身份
请参见 Agent defaults 下的agents.list 身份字段。
Bridge protocol(旧版节点,历史参考)(旧版,已移除)
当前构建不再包含 TCP bridge。节点通过 Gateway 网关 WebSocket 连接。bridge.* 键已不再属于配置 schema 的一部分(在移除前验证会失败;openclaw doctor --fix 可以移除未知键)。
旧版 bridge 配置(历史参考)
旧版 bridge 配置(历史参考)
Cron
sessionRetention:在从sessions.json中裁剪前,已完成隔离 cron 运行会话的保留时长。也控制已归档的已删除 cron 转录的清理。默认:24h;设为false可禁用。runLog.maxBytes:每个运行日志文件(cron/runs/<jobId>.jsonl)在裁剪前的最大大小。默认:2_000_000字节。runLog.keepLines:触发运行日志裁剪时保留的最新行数。默认:2000。webhookToken:用于 cron webhook POST 投递(delivery.mode = "webhook")的 bearer token;如果省略则不会发送认证头。webhook:已弃用的旧版回退 webhook URL(http/https),仅用于仍带有notify: true的已存储作业。
cron.retry
maxAttempts:一次性作业在瞬时错误下的最大重试次数(默认:3;范围:0–10)。backoffMs:每次重试尝试使用的退避延迟数组(毫秒)(默认:[30000, 60000, 300000];1–10 个条目)。retryOn:触发重试的错误类型 ——"rate_limit"、"overloaded"、"network"、"timeout"、"server_error"。省略则会对所有瞬时类型进行重试。
cron.failureAlert
enabled:为 cron 作业启用失败告警(默认:false)。after:触发告警前允许的连续失败次数(正整数,最小值:1)。cooldownMs:同一作业重复告警之间的最小间隔(毫秒)(非负整数)。includeSkipped:是否将连续跳过的运行计入告警阈值(默认:false)。跳过的运行会单独跟踪,不影响执行错误退避。mode:投递模式 ——"announce"通过渠道消息发送;"webhook"发送到已配置的 webhook。accountId:可选的账号或渠道 id,用于限定告警投递范围。
cron.failureDestination
- 所有作业共用的默认 cron 失败通知目标。
mode:"announce"或"webhook";当存在足够的目标数据时,默认值为"announce"。channel:announce 投递的渠道覆盖值。"last"会复用最后一次已知投递渠道。to:显式 announce 目标或 webhook URL。webhook 模式下为必填。accountId:可选的投递账号覆盖值。- 每个作业的
delivery.failureDestination会覆盖这个全局默认值。 - 当全局和每个作业的失败目标都未设置时,那些已经通过
announce投递的作业会在失败时回退到其主 announce 目标。 delivery.failureDestination仅支持sessionTarget="isolated"的作业,除非该作业的主delivery.mode为"webhook"。
媒体模型模板变量
在tools.media.models[].args 中展开的模板占位符:
| 变量 | 说明 |
|---|---|
{{Body}} | 完整的入站消息正文 |
{{RawBody}} | 原始正文(不含历史记录/发送者包装) |
{{BodyStripped}} | 去除群组提及后的正文 |
{{From}} | 发送者标识符 |
{{To}} | 目标标识符 |
{{MessageSid}} | 渠道消息 id |
{{SessionId}} | 当前会话 UUID |
{{IsNewSession}} | 新建会话时为 "true" |
{{MediaUrl}} | 入站媒体伪 URL |
{{MediaPath}} | 本地媒体路径 |
{{MediaType}} | 媒体类型(image/audio/document/…) |
{{Transcript}} | 音频转录文本 |
{{Prompt}} | CLI 条目的已解析媒体提示词 |
{{MaxChars}} | CLI 条目的已解析最大输出字符数 |
{{ChatType}} | "direct" 或 "group" |
{{GroupSubject}} | 群组主题(尽力而为) |
{{GroupMembers}} | 群组成员预览(尽力而为) |
{{SenderName}} | 发送者显示名称(尽力而为) |
{{SenderE164}} | 发送者电话号码(尽力而为) |
{{Provider}} | 提供商提示(whatsapp、telegram、discord 等) |
配置 include($include)
将配置拆分为多个文件:
- 单个文件:替换其所在的容器对象。
- 文件数组:按顺序深度合并(后者覆盖前者)。
- 同级键:在 includes 之后合并(覆盖 include 的值)。
- 嵌套 includes:最多支持 10 层深度。
- 路径:相对于发起 include 的文件解析,但必须保持在顶层配置目录(
openclaw.json的dirname)内。只有在最终仍解析到该边界内时,才允许使用绝对路径或../形式。 - 只变更某一个由单文件 include 支撑的顶层分区时,由 OpenClaw 负责的写入会直接写回该 include 文件。例如,
plugins install会把plugins: { $include: "./plugins.json5" }的更新写入plugins.json5,并保持openclaw.json不变。 - 根级 include、include 数组以及带同级覆盖的 include 对于由 OpenClaw 负责的写入都是只读的;这些写入会以关闭方式失败,而不会将配置拍平。
- 错误:对缺失文件、解析错误和循环 include 提供清晰的报错信息。
相关内容:Configuration · Configuration Examples · Doctor