chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 07:54:30 +00:00
parent 882933eec0
commit d856fbf3d8
6 changed files with 1078 additions and 962 deletions

View File

@ -1,22 +1,22 @@
---
read_when:
- 调整智能体默认设置模型、思考、工作区、心跳、媒体、Skills
- 调整智能体默认模型、思考、工作区、心跳、媒体、Skills
- 配置多智能体路由和绑定
- 调整会话、消息递和 talk 模式行为
summary: 智能体默认设置、多智能体路由、会话、消息和 talk 配置
- 调整会话、消息递和 talk 模式行为
summary: 智能体默认、多智能体路由、会话、消息和 talk 配置
title: 配置 — 智能体
x-i18n:
generated_at: "2026-04-25T06:22:40Z"
generated_at: "2026-04-25T07:51:42Z"
model: gpt-5.4
provider: openai
source_hash: a3a67914120f567c1d0e4740a320cd285c21ddeb05cbffbec1b9c6ea1e950a6e
source_hash: ec43da7bb26dc2b0e99e972d0373b9b3f4dd443cc4ed95fc9807bc4d04483e45
source_path: gateway/config-agents.md
workflow: 15
---
`agents.*`、`multiAgent.*`、`session.*`、`messages.*` 和 `talk.*`的智能体作用域配置键。关于渠道、工具、Gateway 网关运行时以及其他顶层键,请参见 [配置参考](/zh-CN/gateway/configuration-reference)。
`agents.*`、`multiAgent.*`、`session.*`、`messages.*` 和 `talk.*`按智能体作用域划分的配置键。对于渠道、工具、Gateway 网关运行时以及其他顶层键,请参阅 [配置参考](/zh-CN/gateway/configuration-reference)。
## 智能体默认设置
## 智能体默认
### `agents.defaults.workspace`
@ -30,7 +30,7 @@ x-i18n:
### `agents.defaults.repoRoot`
可选的仓库根目录,会显示在系统提示词的 Runtime 行中。如果未设置OpenClaw 会从工作区向上遍历并自动检测。
可选的仓库根目录,会显示在系统提示中的 Runtime 行。如果未设置OpenClaw 会从工作区开始向上遍历并自动检测。
```json5
{
@ -40,25 +40,25 @@ x-i18n:
### `agents.defaults.skills`
对于未设置 `agents.list[].skills` 的智能体,可选的默认 Skills 允许列表。
为未设置 `agents.list[].skills` 的智能体提供可选的默认 Skills 允许列表。
```json5
{
agents: {
defaults: { skills: ["github", "weather"] },
list: [
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no skills
{ id: "writer" }, // 继承 github、weather
{ id: "docs", skills: ["docs-search"] }, // 替换默认值
{ id: "locked-down", skills: [] }, // 没有 Skills
],
},
}
```
- 默认情况下,如需不限制 Skills省略 `agents.defaults.skills`
- 省略 `agents.list[].skills` 继承默认值。
- `agents.list[].skills: []` 设为空 Skills。
- 非空的 `agents.list[].skills` 列表是该智能体的最终集合;它不会与默认值合并。
- 省略 `agents.defaults.skills` 表示默认不限制 Skills
- 省略 `agents.list[].skills` 表示继承默认值。
- 设置 `agents.list[].skills: []` 表示不使用任何 Skills。
- 非空的 `agents.list[].skills` 列表是该智能体的最终集合;它不会与默认值合并。
### `agents.defaults.skipBootstrap`
@ -72,10 +72,10 @@ x-i18n:
### `agents.defaults.contextInjection`
控制何时将工作区引导文件注入到系统提示中。默认值:`"always"`。
控制何时将工作区引导文件注入到系统提示中。默认值:`"always"`。
- `"continuation-skip"`:安全的延续轮次(在助手完成响应之后)会跳过再次注入工作区引导内容,以减少提示词大小。Heartbeat 运行和压缩后的重试仍会重建上下文。
- `"never"`:在每一轮都禁用工作区引导和上下文文件注入。仅对完全自行管理提示生命周期的智能体使用此选项自定义上下文引擎、自行构建上下文的原生运行时或专门的不使用引导文件的工作流。Heartbeat 和压缩恢复轮次也会跳过注入。
- `"continuation-skip"`:安全的续接轮次(在一次已完成的助手响应之后)会跳过工作区引导内容的重新注入,从而减小提示大小。Heartbeat 运行和压缩后的重试仍会重建上下文。
- `"never"`在每一轮都禁用工作区引导和上下文文件注入。仅对完全自行管理提示生命周期的智能体使用此选项自定义上下文引擎、自行构建上下文的原生运行时或专门的不使用引导文件的工作流。Heartbeat 和压缩恢复轮次也会跳过注入。
```json5
{
@ -85,7 +85,7 @@ x-i18n:
### `agents.defaults.bootstrapMaxChars`
每个工作区引导文件在截断前允许的最大字符数。默认值:`12000`。
每个工作区引导文件在截断前允许的最大字符数。默认值:`12000`。
```json5
{
@ -95,7 +95,7 @@ x-i18n:
### `agents.defaults.bootstrapTotalMaxChars`
跨所有工作区引导文件注入的最大总字符数。默认值:`60000`。
在所有工作区引导文件中注入的总最大字符数。默认值:`60000`。
```json5
{
@ -105,12 +105,11 @@ x-i18n:
### `agents.defaults.bootstrapPromptTruncationWarning`
控制当引导上下文被截断时,向智能体显示的警告文本。
默认值:`"once"`。
控制在引导上下文被截断时,智能体可见的警告文本。默认值:`"once"`。
- `"off"`:绝不向系统提示词中注入警告文本
- `"once"`:对每个唯一的截断签名注入一次警告(推荐)。
- `"always"`:只要存在截断,每次运行都注入警告。
- `"off"`:绝不将警告文本注入系统提示
- `"once"`:对每个唯一的截断签名注入一次警告(推荐)。
- `"always"`:只要存在截断,就在每次运行时注入警告。
```json5
{
@ -120,20 +119,20 @@ x-i18n:
### 上下文预算归属映射
OpenClaw 有多个高容量的提示词 / 上下文预算,它们会有意按子系统拆分,而不是全部通过一个通用开关统一控制
OpenClaw 有多个高容量的提示 / 上下文预算,它们被有意按子系统拆分,而不是全部流经一个通用开关
- `agents.defaults.bootstrapMaxChars` /
`agents.defaults.bootstrapTotalMaxChars`
常规工作区引导内容注入。
常规工作区引导注入。
- `agents.defaults.startupContext.*`
一次性的 `/new``/reset` 启动前导内容,包括最近的每日
`memory/*.md` 文件。
- `skills.limits.*`
注入到系统提示中的精简 Skills 列表。
注入到系统提示中的精简 Skills 列表。
- `agents.defaults.contextLimits.*`
有界运行时摘录和注入的由运行时拥有的块。
有界运行时摘录和由运行时拥有的注入块。
- `memory.qmd.limits.*`
已索引的记忆搜索片段和注入大小控制。
已索引的内存搜索片段与注入大小限制。
仅当某个智能体需要不同预算时,才使用对应的按智能体覆盖项:
@ -163,7 +162,7 @@ OpenClaw 有多个高容量的提示词 / 上下文预算,它们会有意按
#### `agents.defaults.contextLimits`
用于有界运行时上下文表面的共享默认值。
有界运行时上下文表面的共享默认值。
```json5
{
@ -180,14 +179,14 @@ OpenClaw 有多个高容量的提示词 / 上下文预算,它们会有意按
}
```
- `memoryGetMaxChars``memory_get` 摘录的默认上限;在添加截断元数据和继续提示之前生效
- `memoryGetMaxChars``memory_get` 摘录在添加截断元数据和续接提示前的默认上限
- `memoryGetDefaultLines`:当省略 `lines` 时,`memory_get` 的默认行窗口。
- `toolResultMaxChars`:用于持久化结果和溢出恢复的实时工具结果上限。
- `postCompactionMaxChars`:在压缩后刷新注入期间使用的 `AGENTS.md` 摘录上限。
#### `agents.list[].contextLimits`
共享 `contextLimits` 开关的按智能体覆盖项。省略的字段会继承自 `agents.defaults.contextLimits`
用于共享 `contextLimits` 开关的按智能体覆盖项。省略的字段会继承自 `agents.defaults.contextLimits`
```json5
{
@ -213,7 +212,7 @@ OpenClaw 有多个高容量的提示词 / 上下文预算,它们会有意按
#### `skills.limits.maxSkillsPromptChars`
注入到系统提示中的精简 Skills 列表的全局上限。这不会影响按需读取 `SKILL.md` 文件。
注入到系统提示中的精简 Skills 列表的全局上限。这不会影响按需读取 `SKILL.md` 文件。
```json5
{
@ -227,7 +226,7 @@ OpenClaw 有多个高容量的提示词 / 上下文预算,它们会有意按
#### `agents.list[].skillsLimits.maxSkillsPromptChars`
Skills 提示预算的按智能体覆盖项。
Skills 提示预算的按智能体覆盖项。
```json5
{
@ -246,10 +245,10 @@ Skills 提示词预算的按智能体覆盖项。
### `agents.defaults.imageMaxDimensionPx`
在调用提供商之前,transcript / 工具图片块中图片最长边的最大像素尺寸。
在调用提供商之前,转录 / 工具图像块中图像最长边的最大像素尺寸。
默认值:`1200`。
较低的值通常会减少视觉 token 使用量以及请求负载大小,适合包含大量截图的运行
较低的值通常会减少视觉 token 使用量和以截图为主的运行中的请求负载大小
较高的值会保留更多视觉细节。
```json5
@ -260,7 +259,7 @@ Skills 提示词预算的按智能体覆盖项。
### `agents.defaults.userTimezone`
系统提示词上下文所用的时区(不影响消息时间戳)。默认回退到主机时区。
系统提示上下文使用的时区(不影响消息时间戳)。会回退到主机时区。
```json5
{
@ -270,7 +269,7 @@ Skills 提示词预算的按智能体覆盖项。
### `agents.defaults.timeFormat`
系统提示中的时间格式。默认值:`auto`(操作系统偏好)。
系统提示中的时间格式。默认值:`auto`(操作系统偏好)。
```json5
{
@ -308,9 +307,9 @@ Skills 提示词预算的按智能体覆盖项。
primary: "anthropic/claude-opus-4-6",
fallbacks: ["openai/gpt-5.4-mini"],
},
params: { cacheRetention: "long" }, // global default provider params
params: { cacheRetention: "long" }, // 全局默认提供商参数
embeddedHarness: {
runtime: "pi", // pi | auto | registered harness id, e.g. codex
runtime: "pi", // pi | auto | 已注册的 harness id例如 codex
fallback: "pi", // pi | none
},
pdfMaxBytesMb: 10,
@ -327,53 +326,53 @@ Skills 提示词预算的按智能体覆盖项。
}
```
- `model`既可以接受字符串(`"provider/model"`),也可以接受对象(`{ primary, fallbacks }`
- 字符串形式设置主模型。
- 对象形式设置主模型以及按顺序排列的故障切换模型。
- `imageModel`既可以接受字符串(`"provider/model"`),也可以接受对象(`{ primary, fallbacks }`
- `model`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 字符串形式设置主模型。
- 对象形式设置主模型以及按顺序排列的故障转移模型。
- `imageModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 作为 `image` 工具路径的视觉模型配置使用。
- 当选定 / 默认模型不能接受图片输入时,也会用作回退路由。
- `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`
- 如果你直接选择某个 provider / model也要配置匹配的 provider 凭证(例如 `google/*` 使用 `GEMINI_API_KEY``GOOGLE_API_KEY``openai/gpt-image-2` 使用 `OPENAI_API_KEY` 或 OpenAI Codex OAuth`fal/*` 使用 `FAL_KEY`)。
- 如果省略,`image_generate` 仍然可以推断一个由认证支持的 provider 默认值。它会先尝试当前默认 provider然后按 provider id 顺序尝试其余已注册的图片生成 provider
- `musicGenerationModel`既可以接受字符串(`"provider/model"`),也可以接受对象(`{ primary, fallbacks }`
- 用于共享的音乐生成能和内置的 `music_generate` 工具。
- 当选中的 / 默认模型无法接受图像输入时,也用作回退路由。
- `imageGenerationModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于共享的图像生成能力,以及未来任何生成图像的工具 / 插件表面。
- 典型值:`google/gemini-3.1-flash-image-preview` 用于原生 Gemini 图像生成,`fal/fal-ai/flux/dev` 用于 fal`openai/gpt-image-2` 用于 OpenAI Images
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证(例如,`google/*` 需要 `GEMINI_API_KEY``GOOGLE_API_KEY``openai/gpt-image-2` 需要 `OPENAI_API_KEY` 或 OpenAI Codex OAuth`fal/*` 需要 `FAL_KEY`)。
- 如果省略,`image_generate` 仍可推断一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的图像生成提供商
- `musicGenerationModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于共享的音乐生成能和内置的 `music_generate` 工具。
- 典型值:`google/lyria-3-clip-preview`、`google/lyria-3-pro-preview` 或 `minimax/music-2.5+`
- 如果省略,`music_generate` 仍然可以推断一个由认证支持的 provider 默认值。它会先尝试当前默认 provider然后按 provider id 顺序尝试其余已注册的音乐生成 provider
- 如果你直接选择某个 provider / model也要配置匹配的 provider 认证 / API key。
- `videoGenerationModel`既可以接受字符串(`"provider/model"`),也可以接受对象(`{ primary, fallbacks }`
- 用于共享的视频生成能和内置的 `video_generate` 工具。
- 如果省略,`music_generate` 仍可推断一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的音乐生成提供商
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证 / 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` 仍然可以推断一个由认证支持的 provider 默认值。它会先尝试当前默认 provider然后按 provider id 顺序尝试其余已注册的视频生成 provider
- 如果你直接选择某个 provider / model也要配置匹配的 provider 认证 / API key。
- 内置的 Qwen 视频生成 provider 最多支持 1 个输出视频、1 张输入图片、4 个输入视频、10 秒时长,以及 provider 级别的 `size`、`aspectRatio`、`resolution`、`audio` 和 `watermark` 选项。
- `pdfModel`既可以接受字符串(`"provider/model"`),也可以接受对象(`{ primary, fallbacks }`
- 如果省略,`video_generate` 仍可推断一个有凭证支持的默认提供商。它会先尝试当前默认提供商,然后按 provider id 顺序尝试其余已注册的视频生成提供商
- 如果你直接选择某个 provider / model也要配置匹配的提供商凭证 / API key。
- 内置的 Qwen 视频生成提供商最多支持 1 个输出视频、1 张输入图像、4 个输入视频、10 秒时长,以及提供商级别的 `size`、`aspectRatio`、`resolution`、`audio` 和 `watermark` 选项。
- `pdfModel`接受字符串(`"provider/model"`)或对象(`{ primary, fallbacks }`)两种形式
- 用于 `pdf` 工具的模型路由。
- 如果省略PDF 工具会回退到 `imageModel`,然后回退到解析的会话 / 默认模型。
- `pdfMaxBytesMb`:当调用时未传入 `maxBytesMb``pdf` 工具的默认 PDF 大小限
- 如果省略PDF 工具会回退到 `imageModel`,然后回退到解析的会话 / 默认模型。
- `pdfMaxBytesMb`:当调用时未传入 `maxBytesMb``pdf` 工具使用的默认 PDF 大小限。
- `pdfMaxPages``pdf` 工具在提取回退模式下考虑的默认最大页数。
- `verboseDefault`:智能体的默认详细级别。值:`"off"`、`"on"`、`"full"`。默认值:`"off"`。
- `elevatedDefault`:智能体的默认增强输出级别。值:`"off"`、`"on"`、`"ask"`、`"full"`。默认值:`"on"`。
- `model.primary`:格式为 `provider/model`(例如,使用 API key 访问时为 `openai/gpt-5.4`,或使用 Codex OAuth 时为 `openai-codex/gpt-5.5`)。如果你省略 providerOpenClaw 会先尝试别名,然后尝试对该精确模型 id 的唯一已配置 provider 匹配,最后才回退到已配置的默认 provider这是已弃用的兼容行为因此建议优先使用明确的 `provider/model`)。如果该 provider 不再公开已配置的默认模型OpenClaw 会回退到第一个已配置的 provider / model而不是暴露一个过且已移除 provider 的默认值。
- `models``/model` 使用的已配置模型目录和允许列表。每个条目都可以包含 `alias`(快捷方式)和 `params`provider 特定参数,例如 `temperature`、`maxTokens`、`cacheRetention`、`context1m`、`responsesServerCompaction`、`responsesCompactThreshold`、`extra_body` / `extraBody`)。
- 安全编辑:使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加条目。除非你传入 `--replace`,否则 `config set` 会拒绝执行会删除现有允许列表条目的替换操作。
- 按 provider 作用域的 configure / onboarding 流程会把选中的 provider 模型合并到此映射中,并保留已经配置的无关 provider。
- 对于直接使用的 OpenAI Responses 模型,会自动启用服务端压缩。使用 `params.responsesServerCompaction: false` 可停止注入 `context_management`,或使用 `params.responsesCompactThreshold` 覆盖阈值。参见 [OpenAI 服务端压缩](/zh-CN/providers/openai#server-side-compaction-responses-api)。
- `verboseDefault`:智能体的默认详细输出级别。可选值:`"off"`、`"on"`、`"full"`。默认值:`"off"`。
- `elevatedDefault`:智能体的默认增强输出级别。可选值:`"off"`、`"on"`、`"ask"`、`"full"`。默认值:`"on"`。
- `model.primary`:格式为 `provider/model`(例如,使用 API key 访问时为 `openai/gpt-5.4`,或使用 Codex OAuth 时为 `openai-codex/gpt-5.5`)。如果你省略 providerOpenClaw 会先尝试别名,然后尝试与该精确模型 id 唯一匹配的已配置 provider最后才回退到已配置的默认 provider这是已弃用的兼容行为因此更推荐显式使用 `provider/model`)。如果该 provider 不再提供已配置的默认模型OpenClaw 会回退到第一个已配置的 provider / model而不是暴露一个过且已移除 provider 的默认值。
- `models``/model` 配置模型目录和允许列表。每个条目都可以包含 `alias`(快捷名称)和 `params`(提供商特定参数,例如 `temperature`、`maxTokens`、`cacheRetention`、`context1m`、`responsesServerCompaction`、`responsesCompactThreshold`、`extra_body` / `extraBody`)。
- 安全编辑:使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加条目。除非你传入 `--replace`,否则 `config set` 会拒绝可能删除现有允许列表条目的替换操作。
- 按 provider 作用域的配置 / 新手引导流程会把所选 provider 模型合并到该映射中,并保留已配置的其他无关 provider。
- 对于直接使用的 OpenAI Responses 模型,服务端压缩会自动启用。使用 `params.responsesServerCompaction: false` 可停止注入 `context_management`,或使用 `params.responsesCompactThreshold` 覆盖阈值。参见 [OpenAI 服务端压缩](/zh-CN/providers/openai#server-side-compaction-responses-api)。
- `params`:应用到所有模型的全局默认 provider 参数。设置在 `agents.defaults.params`(例如 `{ cacheRetention: "long" }`)。
- `params` 合并优先级(配置):`agents.defaults.params`(全局基础)会被 `agents.defaults.models["provider/model"].params`(按模型)覆盖,然后 `agents.list[].params`(匹配智能体 id再按键覆盖。详见 [提示缓存](/zh-CN/reference/prompt-caching)。
- `params.extra_body` / `params.extraBody`:高级透传 JSON会合并进用于 OpenAI 兼容代理的 `api: "openai-completions"` 请求体中。如果它与生成的请求键冲突,则以额外请求体为准;非原生 completions 路由之后仍会剥离 OpenAI 专用的 `store`
- `embeddedHarness`:默认的底层嵌入式智能体运行时策略。未指定运行时时,默认为 OpenClaw Pi。使用 `runtime: "pi"` 可强制使用内置 PI harness使用 `runtime: "auto"` 可让已注册插件 harness 认领受支持的模型,或使用某个已注册 harness id例如 `runtime: "codex"`。设置 `fallback: "none"` 可禁用自动 PI 回退。显式插件运行时(如 `codex`)默认会以失败关闭,除非你在同一覆盖作用域中设置 `fallback: "pi"`。请将模型引用保持为标准的 `provider/model`;通过运行时配置来选择 Codex、Claude CLI、Gemini CLI 和其他执行后端,而不是使用旧式的运行时 provider 前缀关于它与 provider / model 选择有何不同,请参见 [Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
- 会修改这些字段的配置写入器(例如 `/models set`、`/models set-image` 以及回退 add / remove 命令)会保存为标准对象形式,并尽可能保留现有回退列表。
- `maxConcurrent`:跨会话的最大并行智能体运行数(每个会话本身仍然串行。默认值4。
- `params` 合并优先级(配置):`agents.defaults.params`(全局基础)会被 `agents.defaults.models["provider/model"].params`(按模型)覆盖,然后 `agents.list[].params`(匹配智能体 id再按键覆盖。详情参见 [提示缓存](/zh-CN/reference/prompt-caching)。
- `params.extra_body` / `params.extraBody`:高级透传 JSON会合并进 OpenAI 兼容代理的 `api: "openai-completions"` 请求体中。如果它与生成的请求键冲突,额外请求体优先;非原生 completions 路由之后仍会剥离 OpenAI 专用的 `store`
- `embeddedHarness`:默认的底层嵌入式智能体运行时策略。未指定 runtime 时,默认使用 OpenClaw Pi。使用 `runtime: "pi"` 可强制使用内置 PI harness使用 `runtime: "auto"` 可让已注册的插件 harness 认领其支持的模型,或使用已注册的 harness id例如 `runtime: "codex"`。设置 `fallback: "none"` 可禁用自动回退到 PI。显式插件运行时例如 `codex`)默认是失败即关闭,除非你在相同覆盖作用域中设置 `fallback: "pi"`。保持模型引用使用标准形式 `provider/model`;通过运行时配置而不是旧版运行时 provider 前缀来选择 Codex、Claude CLI、Gemini CLI 和其他执行后端。参见 [Agent Runtimes](/zh-CN/concepts/agent-runtimes) 了解它与 provider / model 选择的区别
- 会修改这些字段的配置写入器(例如 `/models set`、`/models set-image` 回退 add / remove 命令)会保存为标准对象形式,并尽可能保留现有回退列表。
- `maxConcurrent`:跨会话并行运行的最大智能体数量(每个会话内部仍然串行。默认值4。
### `agents.defaults.embeddedHarness`
`embeddedHarness` 控制哪个底层执行器运行嵌入式智能体轮次。
大多数部署应保持默认的 OpenClaw Pi 运行时。
某个受信任的插件提供原生 harness 时使用它,例如内置的
Codex 应用服务器 harness。关于其心智模型,请参见
`embeddedHarness` 用于控制哪个底层执行器运行嵌入式智能体轮次。
大多数部署应保持默认的 OpenClaw Pi 运行时。
当受信任的插件提供原生 harness 时使用它,例如内置的
Codex 应用服务器 harness。关于其概念模型,参见
[Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
```json5
@ -390,35 +389,35 @@ Codex 应用服务器 harness。关于其心智模型请参见
}
```
- `runtime``"auto"`、`"pi"` 或某个已注册的插件 harness id。内置的 Codex 插件注册的是 `codex`
- `fallback``"pi"` 或 `"none"`。在 `runtime: "auto"` 下,若省略则默认回退为 `"pi"`,这样旧配置在没有插件 harness 认领运行时仍可继续使用 PI。在显式插件运行时模式下例如 `runtime: "codex"`,若省略则默认回退为 `"none"`,这样缺少 harness 时会失败,而不是静默使用 PI。运行时覆盖不会从更广泛的作用域继承 fallback如果你确实想要这种兼容性回退请在显式运行时旁边一起设置 `fallback: "pi"`。已选中的插件 harness 失败总是会直接显示出来
- `runtime``"auto"`、`"pi"` 或已注册的插件 harness id。内置的 Codex 插件注册 `codex`
- `fallback``"pi"` 或 `"none"`。在 `runtime: "auto"` 中,若省略 `fallback`,默认是 `"pi"`,这样旧配置在没有插件 harness 认领运行时仍可继续使用 PI。在显式插件运行时模式下例如 `runtime: "codex"`,若省略 `fallback`,默认是 `"none"`,这样缺少 harness 时会失败,而不是静默使用 PI。运行时覆盖不会从更宽泛的作用域继承 fallback当你明确需要该兼容回退时请与显式 runtime 一起设置 `fallback: "pi"`。选中的插件 harness 一旦失败,总是会直接暴露错误
- 环境变量覆盖:`OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` 会覆盖 `runtime``OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` 会覆盖该进程的 fallback。
- 对于仅使用 Codex 的部署,设置 `model: "openai/gpt-5.5"``embeddedHarness.runtime: "codex"`。你也可以显式设置 `embeddedHarness.fallback: "none"` 以提升可读性;对于显式插件运行时,这本就是默认值。
- 在第一次嵌入式运行harness 选择会按 session id 固定。配置 / 环境变量的更改会影响新的或已重置的会话,不会影响现有 transcript。具有 transcript 历史但没有记录固定值的旧会话会被视为固定到 PI。`/status` 会报告实际运行时,例如 `Runtime: OpenClaw Pi Default``Runtime: OpenAI Codex`
- 这只控制嵌入式聊天 harness。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用各自的 provider / model 设置。
- 对于仅使用 Codex 的部署,设置 `model: "openai/gpt-5.5"``embeddedHarness.runtime: "codex"`为了提升可读性,你也可以显式设置 `embeddedHarness.fallback: "none"`;这本就是显式插件运行时的默认值。
- 在第一次嵌入式运行后harness 选择会按 session id 固定。配置 / 环境变量更改只影响新的或已重置的会话,不影响现有转录。具有转录历史但没有记录固定信息的旧会话,会被视为固定到 PI。`/status` 会报告实际运行时,例如 `Runtime: OpenClaw Pi Default``Runtime: OpenAI Codex`
- 这只控制嵌入式聊天 harness。媒体生成、视觉、PDF、音乐、视频和 TTS 仍使用它们各自的 provider / model 设置。
**内置别名简写**(仅当模型位于 `agents.defaults.models` 中时适用
**内置别名简写**(仅当模型位于 `agents.defaults.models` 中时生效
| 别名 | 模型 |
| 别名 | 模型 |
| ------------------- | -------------------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
| `gpt` | `openai/gpt-5.4` 或已配置的 Codex OAuth GPT-5.5 |
| `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-preview` |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
| `gpt` | `openai/gpt-5.4` 或已配置的 Codex OAuth GPT-5.5 |
| `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-preview` |
你配置的别名始终优先于默认值。
Z.AI GLM-4.x 模型会自动启用思考模式,除非你设置 `--thinking off`,或自行定义 `agents.defaults.models["zai/<model>"].params.thinking`
Z.AI 模型默认启用 `tool_stream` 以进行工具调用流式传输。将 `agents.defaults.models["zai/<model>"].params.tool_stream` 设置为 `false` 可禁用它。
Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `adaptive` 思考。
Anthropic Claude 4.6 模型在未显式设置思考级别时,默认使用 `adaptive` 思考模式
### `agents.defaults.cliBackends`
用于纯文本回退运行(无工具调用)的可选 CLI 后端。当 API provider 失败时,可作为备份方案
用于纯文本回退运行(无工具调用)的可选 CLI 后端。在 API 提供商失败时,可作为备份
```json5
{
@ -446,13 +445,13 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
}
```
- CLI 后端以文本为主;工具始终禁用。
- 设置了 `sessionArg` 时支持会话。
- 当 `imageArg` 接受文件路径时,支持图透传。
- CLI 后端以文本为主;工具始终禁用。
- 设置了 `sessionArg` 时支持会话。
- 当 `imageArg` 接受文件路径时,支持图透传。
### `agents.defaults.systemPromptOverride`
用固定字符串替换整个由 OpenClaw 组装的系统提示词。可在默认级别设置(`agents.defaults.systemPromptOverride`),也可按智能体设置(`agents.list[].systemPromptOverride`)。按智能体设置的值优先;空值或仅空白的值会被忽略。适用于受控的提示实验。
用固定字符串替换整个由 OpenClaw 组装的系统提示。可在默认级别(`agents.defaults.systemPromptOverride`)或按智能体设置(`agents.list[].systemPromptOverride`)。按智能体的值优先;空值或仅包含空白的值会被忽略。适用于受控的提示实验。
```json5
{
@ -466,7 +465,7 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
### `agents.defaults.promptOverlays`
按模型家族应用的、与 provider 无关的提示词叠加层。GPT-5 家族模型 id 会在各 provider 间接收共享的行为契约;`personality` 仅控制友好的交互风格层。
按模型家族应用的、与 provider 无关的提示叠加层。GPT-5 家族模型 id 会跨 provider 接收共享的行为契约;`personality` 只控制友好的交互风格层。
```json5
{
@ -483,7 +482,7 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
```
- `"friendly"`(默认)和 `"on"` 会启用友好的交互风格层。
- `"off"` 仅禁用友好层;带标签的 GPT-5 行为契约仍然启用。
- `"off"` 只禁用友好层;带标签的 GPT-5 行为契约仍保持启用。
- 当这个共享设置未设置时,仍会读取旧版 `plugins.entries.openai.config.personality`
### `agents.defaults.heartbeat`
@ -515,14 +514,14 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
}
```
- `every`时长字符串ms / s / m / h。默认值`30m`API key 认证)或 `1h`OAuth 认证)。设置为 `0m` 可禁用。
- `includeSystemPromptSection`:设为 false 时,会从系统提示中省略 Heartbeat 部分,并跳过将 `HEARTBEAT.md` 注入引导上下文。默认值:`true`。
- `every`时长字符串ms/s/m/h。默认值`30m`API key 凭证)或 `1h`OAuth 凭证)。设置为 `0m` 可禁用。
- `includeSystemPromptSection`:设为 false 时,会从系统提示中省略 Heartbeat 部分,并跳过将 `HEARTBEAT.md` 注入引导上下文。默认值:`true`。
- `suppressToolErrorWarnings`:设为 true 时,会在 Heartbeat 运行期间抑制工具错误警告负载。
- `timeoutSeconds`Heartbeat 智能体轮次在被中止前允许的最长时间(秒)。留空则使用 `agents.defaults.timeoutSeconds`
- `directPolicy`direct / 私信投递策略。`allow`(默认)允许投递到直接目标。`block` 会阻止投递到直接目标,并发出 `reason=dm-blocked`
- `lightContext`:设为 true 时Heartbeat 运行使用轻量引导上下文,并且只保留工作区引导文件中的 `HEARTBEAT.md`
- `isolatedSession`:设为 true 时,每次 Heartbeat 都在一个全新会话中运行,不带任何先前的对话历史。与 cron `sessionTarget: "isolated"` 使用相同的隔离模式。可将每次 Heartbeat 的 token 成本从约 100K 降低到约 25K token
- 按智能体设置:使用 `agents.list[].heartbeat`当任何智能体定义了 `heartbeat` 时,**只有这些智能体**会运行 Heartbeat。
- `timeoutSeconds`Heartbeat 智能体轮次在被中止前允许的最大秒数。若不设置,则使用 `agents.defaults.timeoutSeconds`
- `directPolicy`直接 / 私信投递策略。`allow`(默认)允许直接目标投递。`block` 会阻止直接目标投递,并发出 `reason=dm-blocked`
- `lightContext`:设为 true 时Heartbeat 运行使用轻量引导上下文,并且只保留工作区引导文件中的 `HEARTBEAT.md`
- `isolatedSession`:设为 true 时,每次 Heartbeat 都在一个全新会话中运行,不带任何先前的对话历史。与 cron `sessionTarget: "isolated"` 使用相同的隔离模式。每次 Heartbeat 的 token 成本可从约 100K 降至约 25K
- 按智能体设置:使用 `agents.list[].heartbeat`如果任意智能体定义了 `heartbeat`**则只有这些智能体** 会运行 Heartbeat。
- Heartbeat 会运行完整的智能体轮次——间隔越短,消耗的 token 越多。
### `agents.defaults.compaction`
@ -555,21 +554,21 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
}
```
- `mode``default` 或 `safeguard`(针对长历史记录的分块摘要)。参见 [Compaction](/zh-CN/concepts/compaction)。
- `provider`:已注册 compaction provider 插件的 id。设置后调用该 provider 的 `summarize()`,而不是使用内置 LLM 摘要。失败时会回退到内置实现。设置 provider 会强制使用 `mode: "safeguard"`参见 [Compaction](/zh-CN/concepts/compaction)。
- `timeoutSeconds`OpenClaw 中止单次 compaction 操作前允许的最大秒数。默认值:`900`。
- `keepRecentTokens`Pi 切分点预算,用于将最近的 transcript 尾部原样保留。手动 `/compact` 会在显式设置时遵守此值;否则手动 compaction 是一个硬检查点。
- `identifierPolicy``strict`(默认)、`off` 或 `custom`。`strict` 会在 compaction 摘要时预置内置的不透明标识符保留指导。
- `identifierInstructions`:当 `identifierPolicy=custom` 时使用的可选自定义标识符保留文本。
- `qualityGuard`针对 safeguard 摘要的输出格式错误重试检查。在 safeguard 模式下默认启用;设为 `enabled: false` 可跳过审计。
- `postCompactionSections`:可选 `AGENTS.md` H2 / H3 章节名称,在 compaction 后重新注入。默认值为 `["Session Startup", "Red Lines"]`;设为 `[]` 可禁用重新注入。当未设置,或显式设置为该默认对时,也会接受旧版 `Every Session` / `Safety` 标题作为兼容回退。
- `model`:仅用于 compaction 摘要的可选 `provider/model-id` 覆盖。当主会话应保持使用某个模型,而 compaction 摘要应使用另一个模型时请使用此项未设置时compaction 使用会话的主模型。
- `notifyUser`:设为 `true` 时,会在 compaction 开始和完成时向用户发送简短通知(例如 “Compacting context...” 和 “Compaction complete”。默认禁用以保持 compaction 静默
- `memoryFlush`:在自动 compaction 前执行的静默智能体轮次,用于存储持久记忆。当工作区为只读时会跳过。
- `mode``default` 或 `safeguard`(针对长历史记录的分块摘要)。参见 [Compaction](/zh-CN/concepts/compaction)。
- `provider`:已注册压缩 provider 插件的 id。设置后调用该 provider 的 `summarize()`,而不是使用内置 LLM 摘要。失败时会回退到内置实现。设置 provider 会强制使用 `mode: "safeguard"`。参见 [Compaction](/zh-CN/concepts/compaction)。
- `timeoutSeconds`OpenClaw 中止一次压缩操作前允许的最大秒数。默认值:`900`。
- `keepRecentTokens`Pi 切分点预算,用于把最近的转录尾部按原文保留。手动 `/compact` 在显式设置时会遵循此值;否则手动压缩就是一个硬检查点。
- `identifierPolicy``strict`(默认)、`off` 或 `custom`。`strict` 会在压缩摘要时预先添加内置的不透明标识符保留指导。
- `identifierInstructions`:当 `identifierPolicy=custom` 时使用的自定义标识符保留文本。
- `qualityGuard`对 safeguard 摘要执行输出格式错误后的重试检查。在 safeguard 模式下默认启用;设置 `enabled: false` 可跳过审计。
- `postCompactionSections`压缩后要重新注入的可选 `AGENTS.md` H2/H3 章节名。默认值为 `["Session Startup", "Red Lines"]`;设`[]` 可禁用重新注入。当未设置,或显式设置为该默认对时,也会接受旧版 `Every Session` / `Safety` 标题作为兼容回退。
- `model`:仅用于压缩摘要的可选 `provider/model-id` 覆盖。若你希望主会话保持使用某个模型,而压缩摘要使用另一个模型,就用它;若未设置,压缩会使用会话的主模型。
- `notifyUser`:设为 `true` 时,会在压缩开始和完成时向用户发送简短通知(例如,“正在压缩上下文...” 和 “上下文压缩完成”)。默认关闭,以保持压缩静默进行
- `memoryFlush`:在自动压缩前执行一次静默的智能体轮次,以存储持久记忆。当工作区为只读时会跳过。
### `agents.defaults.contextPruning`
发送给 LLM 之前,从内存中的上下文里裁剪**旧的工具结果**。**不会**修改磁盘上的会话历史。
把内容发送给 LLM 之前,从内存上下文中修剪 **旧的工具结果**。**不会** 修改磁盘上的会话历史。
```json5
{
@ -591,25 +590,25 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
}
```
<Accordion title="cache-ttl 模式行为">
<Accordion title="`cache-ttl` 模式行为">
- `mode: "cache-ttl"` 会启用剪流程。
- `ttl` 控制距离上次缓存触碰后,多久才允许再次运行裁剪
- 裁剪会先对过大的工具结果执行软裁剪,如仍有需要,再对更旧的工具结果执行硬清除。
- `mode: "cache-ttl"` 会启用剪流程。
- `ttl` 控制何时可以再次运行修剪(在上次缓存触碰之后)
- 修剪会先对过大的工具结果执行软修剪;如仍有需要,再对更旧的工具结果执行硬清除。
**软裁剪**会保留开头 + 结尾,并在中间插入 `...`
**软修剪** 会保留开头和结尾,并在中间插入 `...`
**硬清除**会用占位符替换整个工具结果。
**硬清除** 会用占位符替换整个工具结果。
说明:
- 图片块永远不会被裁剪 / 清除。
- 比例按字符计算(近似值),不是精确的 token 数。
- 如果 assistant 消息少于 `keepLastAssistants` 条,则跳过裁剪。
- 图像块永远不会被修剪 / 清除。
- 比例基于字符数(近似值),而不是精确 token 数。
- 如果助手消息少于 `keepLastAssistants` 条,则会跳过修剪。
</Accordion>
行为细节请参见 [会话裁剪](/zh-CN/concepts/session-pruning)。
行为详情参见 [会话修剪](/zh-CN/concepts/session-pruning)。
### 分块流式传输
@ -628,12 +627,12 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
```
- 非 Telegram 渠道需要显式设置 `*.blockStreaming: true` 才会启用分块回复。
- 渠道覆盖:`channels.<channel>.blockStreamingCoalesce`(以及按账的变体。Signal / Slack / Discord / Google Chat 默认使用 `minChars: 1500`
- `humanDelay`:分块回复之间的随机停顿。`natural` = 8002500ms。按智能体覆盖`agents.list[].humanDelay`。
- 渠道覆盖:`channels.<channel>.blockStreamingCoalesce`(以及按账的变体。Signal / Slack / Discord / Google Chat 默认使用 `minChars: 1500`
- `humanDelay`:分块回复之间的随机停顿。`natural` = 8002500 ms。按智能体覆盖`agents.list[].humanDelay`。
行为和分块细节参见 [流式传输](/zh-CN/concepts/streaming)。
行为和分块细节参见 [流式传输](/zh-CN/concepts/streaming)。
### 输入指示器
### 正在输入指示器
```json5
{
@ -646,16 +645,16 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
}
```
- 默认值:对于直接聊天 / 提及使用 `instant`对于未被提及的群聊使用 `message`
- 默认值:直接聊天 / 提及使用 `instant`,未被提及的群聊使用 `message`
- 按会话覆盖:`session.typingMode`、`session.typingIntervalSeconds`。
参见 [输入指示器](/zh-CN/concepts/typing-indicators)。
参见 [正在输入指示器](/zh-CN/concepts/typing-indicators)。
<a id="agentsdefaultssandbox"></a>
### `agents.defaults.sandbox`
嵌入式智能体的可选沙箱隔离。完整指南参见 [沙箱隔离](/zh-CN/gateway/sandboxing)。
嵌入式智能体的可选沙箱隔离。完整指南参见 [沙箱隔离](/zh-CN/gateway/sandboxing)。
```json5
{
@ -755,39 +754,39 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
**后端:**
- `docker`:本地 Docker 运行时(默认)
- `ssh`:通用 SSH 支持的远程运行时
- `ssh`:通用的基于 SSH 的远程运行时
- `openshell`OpenShell 运行时
当选择 `backend: "openshell"` 时,运行时特定设置会移动到
当选择 `backend: "openshell"` 时,运行时专用设置会移至
`plugins.entries.openshell.config`
**SSH 后端配置:**
- `target``user@host[:port]` 形式的 SSH 目标
- `command`SSH 客户端命令(默认:`ssh`
- `workspaceRoot`:用于按作用域工作区的远程绝对根目录
- `command`SSH 客户端命令(默认`ssh`
- `workspaceRoot`:用于按作用域划分工作区的远程绝对根目录
- `identityFile` / `certificateFile` / `knownHostsFile`:传递给 OpenSSH 的现有本地文件
- `identityData` / `certificateData` / `knownHostsData`:内联内容或 SecretRefOpenClaw 会在运行时将其实体化为临时文件
- `identityData` / `certificateData` / `knownHostsData`:内联内容或 SecretRefsOpenClaw 会在运行时将其物化为临时文件
- `strictHostKeyChecking` / `updateHostKeys`OpenSSH 主机密钥策略开关
**SSH 证优先级:**
**SSH 证优先级:**
- `identityData` 优先于 `identityFile`
- `certificateData` 优先于 `certificateFile`
- `knownHostsData` 优先于 `knownHostsFile`
- 由 SecretRef 支持的 `*Data` 值会在沙箱会话启动前,从当前活的 secrets 运行时快照中解析
- 由 SecretRef 支持的 `*Data` 值会在沙箱会话启动前,从当前活的 secrets 运行时快照中解析
**SSH 后端行为:**
- 在创建或重建后,会先为远程工作区执行一次初始化
- 随后保持远程 SSH 工作区为标准副本
- 在创建或重建后,远程工作区执行一次初始化
- 然后保持远程 SSH 工作区为标准状态
- 通过 SSH 路由 `exec`、文件工具和媒体路径
- 不会自动远程更改同步回主机
- 不会自动远程更改同步回主机
- 不支持沙箱浏览器容器
**工作区访问:**
- `none`:位于 `~/.openclaw/sandboxes`的按作用域沙箱工作区
- `none`每个作用域的沙箱工作区位于 `~/.openclaw/sandboxes`
- `ro`:沙箱工作区位于 `/workspace`,智能体工作区以只读方式挂载到 `/agent`
- `rw`:智能体工作区以读写方式挂载到 `/workspace`
@ -825,29 +824,29 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
**OpenShell 模式:**
- `mirror`:在执行前将本地内容初始化到远程,执行后再同步回本地;本地工作区保持为标准副本
- `remote`:在创建沙箱时仅初始化一次远程内容,随后保持远程工作区为标准副本
- `mirror`:在执行前把本地内容初始化到远程,执行后再同步回本地;本地工作区保持为标准状态
- `remote`:在创建沙箱时只对远程执行一次初始化,之后保持远程工作区为标准状态
`remote` 模式下,初始化之后,在 OpenClaw 外部于主机本地进行的编辑不会自动同步进沙箱
传输通过 SSH 进入 OpenShell 沙箱,但插件负责沙箱生命周期和可选的镜像同步。
`remote` 模式下,于 OpenClaw 之外在主机本地进行的编辑,在初始化步骤之后不会自动同步到沙箱中
传输方式是通过 SSH 连接到 OpenShell 沙箱,但插件负责沙箱生命周期以及可选的镜像同步。
**`setupCommand`** 会在容器创建后运行一次(通过 `sh -lc`)。需要网络出口、可写根文件系统和 root 用户。
**容器默认使用 `network: "none"`**——如果智能体需要出站访问,请设为 `"bridge"`(或自定义 bridge 网络)。
`"host"` 被阻止。默认也会阻止 `"container:<id>"`,除非你显式设置
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(紧急破窗选项)。
**容器默认使用 `network: "none"`** —— 如果智能体需要出站访问,请设`"bridge"`(或自定义 bridge 网络)。
`"host"` 会被阻止。`"container:<id>"` 默认也会被阻止,除非你显式设置
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`(紧急放行)。
**入站附件** 会暂存到当前工作区中的 `media/inbound/*`
**入站附件** 会被暂存到活动工作区中的 `media/inbound/*`
**`docker.binds`** 会挂载额外的主机目录;全局和按智能体的 binds 会合并。
**`docker.binds`** 会挂载额外的主机目录;全局和按智能体的绑定会合并。
**沙箱浏览器**`sandbox.browser.enabled`):容器中的 Chromium + CDP。noVNC URL 会注入到系统提示中。不需要在 `openclaw.json` 中启用 `browser.enabled`
默认情况下noVNC 观察者访问使用 VNC 认证OpenClaw 会发出一个短时有效的 token URL而不是在共享 URL 中暴露密码)。
**沙箱隔离浏览器**`sandbox.browser.enabled`):在容器中运行 Chromium + CDP。noVNC URL 会注入到系统提示中。不需要在 `openclaw.json` 中启用 `browser.enabled`
noVNC 观察者访问默认使用 VNC 认证OpenClaw 会发出一个短期有效的 token URL而不是在共享 URL 中暴露密码)。
- `allowHostControl: false`(默认)会阻止沙箱会话以主机浏览器为目标。
- `network` 默认为 `openclaw-sandbox-browser`(专用 bridge 网络)。只有在你明确需要全局 bridge 连通性时才设置为 `bridge`
- `cdpSourceRange` 可选地在容器边界将 CDP 入站限制到某个 CIDR 范围(例如 `172.21.0.1/32`)。
- `sandbox.browser.binds`额外的主机目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`
- `allowHostControl: false`(默认)会阻止沙箱隔离会话以主机浏览器为目标。
- `network` 默认为 `openclaw-sandbox-browser`(专用 bridge 网络)。只有在你明确需要全局 bridge 连通性时才设置为 `bridge`
- `cdpSourceRange` 可选地将容器边缘的 CDP 入站限制到某个 CIDR 范围(例如 `172.21.0.1/32`)。
- `sandbox.browser.binds`会把额外的主机目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`
- 启动默认值定义在 `scripts/sandbox-browser-entrypoint.sh` 中,并针对容器主机进行了调优:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>`
@ -865,14 +864,17 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
- `--renderer-process-limit=2`
- `--no-zygote`
- `--metrics-recording-only`
- `--disable-extensions`(默认启用)
- `--disable-3d-apis`、`--disable-software-rasterizer` 和 `--disable-gpu` 默认启用;如果 WebGL / 3D 使用场景需要,可通过
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` 禁用这些标志。
- 如果你的工作流依赖扩展,可通过 `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` 重新启用扩展。
- 默认启用 `--disable-extensions`
- `--disable-3d-apis`、`--disable-software-rasterizer` 和 `--disable-gpu`
默认启用;如果 WebGL / 3D 使用场景需要,可通过
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` 禁用它们。
- 如果你的工作流依赖扩展,`OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` 会重新启用扩展。
- `--renderer-process-limit=2` 可通过
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>` 修改;设为 `0` 可使用 Chromium 的默认进程限制。
- 当启用 `noSandbox` 时,还会加上 `--no-sandbox``--disable-setuid-sandbox`
- 这些默认值是容器镜像的基线;如果你想更改容器默认值,请使用带有自定义入口点的自定义浏览器镜像。
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>` 更改;设置为 `0` 会使用 Chromium 的
默认进程限制。
- 另外,当启用 `noSandbox` 时,还会加上 `--no-sandbox``--disable-setuid-sandbox`
- 这些默认值是容器镜像基线;如需更改容器默认行为,请使用自定义浏览器镜像和自定义
入口点。
</Accordion>
@ -881,8 +883,8 @@ Anthropic Claude 4.6 模型在未设置显式思考级别时,默认使用 `ada
构建镜像:
```bash
scripts/sandbox-setup.sh # main sandbox image
scripts/sandbox-browser-setup.sh # optional browser image
scripts/sandbox-setup.sh # 主沙箱镜像
scripts/sandbox-browser-setup.sh # 可选的浏览器镜像
```
### `agents.list`(按智能体覆盖)
@ -934,27 +936,27 @@ scripts/sandbox-browser-setup.sh # optional browser image
}
```
- `id`:稳定的智能体 id)。
- `default`如果设置了多个,则第一个生效(会记录警告)。如果一个都未设置,则列表中的第一个条目为默认值。
- `model`:字符串形式覆盖 `primary`;对象形式 `{ primary, fallbacks }` 会同时覆盖两者(`[]` 禁用全局回退)。仅覆盖 `primary` 的 cron 作业仍会继承默认回退,除非你设置 `fallbacks: []`
- `params`:按智能体的流参数,会合并到 `agents.defaults.models` 中选定模型条目之上。用于智能体特定覆盖,例如 `cacheRetention`、`temperature` 或 `maxTokens`,而无需复制整个模型目录。
- `skills`:可选的按智能体 Skills 允许列表。如果省略,则在 `agents.defaults.skills` 已设置时继承它;显式列表会替换默认值而不是合并,`[]` 表示无 Skills。
- `thinkingDefault`:可选的按智能体默认思考级别(`off | minimal | low | medium | high | xhigh | adaptive | max`)。当未设置按消息或按会话覆盖时,会覆盖该智能体的 `agents.defaults.thinkingDefault`。所选的 provider / 模型配置文件控制哪些值有效;对于 Google Gemini`adaptive` 会保留 provider 自有的动态思考(在 Gemini 3 / 3.1 上省略 `thinkingLevel`,在 Gemini 2.5 上使用 `thinkingBudget: -1`)。
- `reasoningDefault`:可选的按智能体默认推理可见性(`on | off | stream`)。当未设置按消息或按会话的 reasoning 覆盖时生效。
- `fastModeDefault`:可选的按智能体 fast mode 默认值(`true | false`)。当未设置按消息或按会话的 fast-mode 覆盖时生效。
- `embeddedHarness`:可选的按智能体底层 harness 策略覆盖。使用 `{ runtime: "codex" }` 可让某个智能体仅使用 Codex而其他智能体`auto` 模式下继续使用默认的 PI 回退。
- `runtime`:可选的按智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,使用 `type: "acp"` 并设置 `runtime.acp` 默认值(`agent`、`backend`、`mode`、`cwd`)。
- `id`:稳定的智能体 id)。
- `default`若设置了多个,首个生效(会记录警告)。如果都未设置,则列表中的第一个条目为默认值。
- `model`:字符串形式覆盖 `primary`;对象形式 `{ primary, fallbacks }` 会同时覆盖两者(`[]` 禁用全局回退)。仅覆盖 `primary` 的 cron 作业仍会继承默认回退,除非你设置 `fallbacks: []`
- `params`:按智能体的流参数,会合并到 `agents.defaults.models` 中选定模型条目之上。可用于像 `cacheRetention`、`temperature` 或 `maxTokens` 这样的智能体特定覆盖,而不必复制整个模型目录。
- `skills`:可选的按智能体 Skills 允许列表。如果省略,智能体会在设置了 `agents.defaults.skills` 时继承它;显式列表会替换默认值而不是合并,`[]` 表示无 Skills。
- `thinkingDefault`:可选的按智能体默认思考级别(`off | minimal | low | medium | high | xhigh | adaptive | max`)。当未设置按消息或按会话覆盖时,会覆盖该智能体的 `agents.defaults.thinkingDefault`。所选 provider / model 配置决定哪些值有效;对于 Google Gemini`adaptive` 会保持 provider 自有的动态思考(在 Gemini 3 / 3.1 上省略 `thinkingLevel`,在 Gemini 2.5 上使用 `thinkingBudget: -1`)。
- `reasoningDefault`:可选的按智能体默认推理可见性(`on | off | stream`)。当未设置按消息或按会话推理覆盖时生效。
- `fastModeDefault`:可选的按智能体快速模式默认值(`true | false`)。当未设置按消息或按会话快速模式覆盖时生效。
- `embeddedHarness`:可选的按智能体底层 harness 策略覆盖。使用 `{ runtime: "codex" }` 可让某个智能体仅使用 Codex而其他智能体继续使用默认的 `auto` 模式 PI 回退。
- `runtime`:可选的按智能体运行时描述符。当智能体应默认使用 ACP harness 会话时,使用 `type: "acp"` 以及 `runtime.acp` 默认值(`agent`、`backend`、`mode`、`cwd`)。
- `identity.avatar`:工作区相对路径、`http(s)` URL 或 `data:` URI。
- `identity` 会派生默认值:`ackReaction` 来自 `emoji``mentionPatterns` 来自 `name` / `emoji`
- `subagents.allowAgents``sessions_spawn` 可用的智能体 id 允许列表(`["*"]` = 任意;默认:仅限相同智能体)。
- 沙箱继承保护:如果请求者会话处于沙箱中,`sessions_spawn` 会拒绝那些将以非沙箱方式运行的目标。
- `subagents.requireAgentId`:设为 true 时,会阻止省略 `agentId``sessions_spawn` 调用强制显式选择配置默认false
- `subagents.allowAgents``sessions_spawn` 允许的智能体 id 列表(`["*"]` = 任意;默认:仅同一智能体)。
- 沙箱继承保护:如果请求方会话处于沙箱隔离中,`sessions_spawn` 会拒绝那些将以非沙箱方式运行的目标。
- `subagents.requireAgentId`:设为 true 时,会阻止省略 `agentId``sessions_spawn` 调用(强制显式选择配置;默认false
---
## 多智能体路由
在一个 Gateway 网关中运行多个隔离的智能体。请参见 [多智能体](/zh-CN/concepts/multi-agent)。
在一个 Gateway 网关中运行多个彼此隔离的智能体。参见 [Multi-Agent](/zh-CN/concepts/multi-agent)。
```json5
{
@ -973,11 +975,11 @@ scripts/sandbox-browser-setup.sh # optional browser image
### 绑定匹配字段
- `type`(可选):正常路由使用 `route`(缺失时默认为 route持久 ACP 对话绑定使用 `acp`
- `match.channel`(必
- `match.accountId`(可选;`*` = 任意账户;省略 = 默认账户
- `type`(可选):普通路由使用 `route`(未指定时默认即为 route持久 ACP 对话绑定使用 `acp`
- `match.channel`(必
- `match.accountId`(可选;`*` = 任意账号;省略 = 默认账号
- `match.peer`(可选;`{ kind: direct|group|channel, id }`
- `match.guildId` / `match.teamId`(可选;渠道特定
- `match.guildId` / `match.teamId`(可选;特定渠道)
- `acp`(可选;仅适用于 `type: "acp"``{ mode, label, cwd, backend }`
**确定性的匹配顺序:**
@ -986,14 +988,14 @@ scripts/sandbox-browser-setup.sh # optional browser image
2. `match.guildId`
3. `match.teamId`
4. `match.accountId`(精确匹配,无 peer / guild / team
5. `match.accountId: "*"`(渠道范围
5. `match.accountId: "*"`整个渠道)
6. 默认智能体
在每一层内,首个匹配的 `bindings` 条目胜。
在每一层内,首个匹配的 `bindings` 条目胜
对于 `type: "acp"` 条目OpenClaw 会按精确对话身份`match.channel` + account + `match.peer.id`)解析,不使用上面的 route 绑定层级顺序。
对于 `type: "acp"` 条目OpenClaw 会按精确会话标识`match.channel` + account + `match.peer.id`)解析,不使用上面的 route 绑定层级顺序。
### 按智能体访问配置
### 按智能体划分的访问配置
<Accordion title="完全访问(无沙箱)">
@ -1042,7 +1044,7 @@ scripts/sandbox-browser-setup.sh # optional browser image
</Accordion>
<Accordion title="无文件系统访问(仅消息传递">
<Accordion title="无文件系统访问(仅消息">
```json5
{
@ -1088,7 +1090,7 @@ scripts/sandbox-browser-setup.sh # optional browser image
</Accordion>
优先级细节请参见 [多智能体沙箱隔离与工具](/zh-CN/tools/multi-agent-sandbox-tools)。
有关优先级细节,参见 [多智能体沙箱隔离与工具](/zh-CN/tools/multi-agent-sandbox-tools)。
---
@ -1142,34 +1144,34 @@ scripts/sandbox-browser-setup.sh # optional browser image
<Accordion title="会话字段详情">
- **`scope`**:群聊上下文的基础会话分组策略。
- `per-sender`(默认):在一个渠道上下文内,每个发送者都有独立的会话。
- `global`个渠道上下文中的所有参与者共享一个会话(仅在确实需要共享上下文时使用)。
- `per-sender`(默认):在某个渠道上下文中,每个发送者都有独立的隔离会话。
- `global`个渠道上下文中的所有参与者共享一个会话(仅在确实需要共享上下文时使用)。
- **`dmScope`**:私信的分组方式。
- `main`:所有私信共享主会话。
- `per-peer`:按跨渠道的发送者 id 隔离。
- `per-peer`:按发送者 id 跨渠道隔离。
- `per-channel-peer`:按渠道 + 发送者隔离(推荐用于多用户收件箱)。
- `per-account-channel-peer`:按账户 + 渠道 + 发送者隔离(推荐用于多账户)。
- **`identityLinks`**:将标准 id 映射到带 provider 前缀的 peer用于跨渠道共享会话。
- **`reset`**:主重置策略。`daily` 会在本地时间 `atHour` 重置;`idle` 会在 `idleMinutes` 后重置。如果两者都已配置,则以先到期者为准
- **`resetByType`**:按类型覆盖(`direct`、`group`、`thread`)。旧版 `dm` 可作为 `direct` 的别名。
- **`parentForkMaxTokens`**:创建分叉线程会话时,父会话允许的最大 `totalTokens`(默认 `100000`)。
- 如果父会话的 `totalTokens` 高于此值OpenClaw 会启动一个全新的线程会话,而不是继承父 transcript 历史。
- 设为 `0` 可禁用此保护,并始终允许从父会话分叉。
- **`mainKey`**:旧版字段。运行时始终对主直接聊天桶使用 `"main"`
- **`agentToAgent.maxPingPongTurns`**智能体到智能体交换期间,代理之间最大来回回复轮数(整数,范围:`0``5`)。`0` 会禁用这种来回链式交互。
- **`sendPolicy`**:按 `channel`、`chatType``direct|group|channel`,旧版 `dm` 为别名)、`keyPrefix` 或 `rawKeyPrefix` 匹配。第一条 deny 优先生效
- `per-account-channel-peer`:按账号 + 渠道 + 发送者隔离(推荐用于多账号场景)。
- **`identityLinks`**:将规范 id 映射到带 provider 前缀的 peer用于跨渠道共享会话。
- **`reset`**:主重置策略。`daily` 会在本地时间 `atHour` 重置;`idle` 会在空闲 `idleMinutes` 后重置。如果两者都配置,先到期者生效
- **`resetByType`**:按类型覆盖(`direct`、`group`、`thread`)。旧版 `dm` 可作为 `direct` 的别名。
- **`parentForkMaxTokens`**:创建分叉线程会话时允许的父会话最大 `totalTokens`(默认 `100000`)。
- 如果父会话的 `totalTokens` 超过该值OpenClaw 会启动一个新的线程会话,而不是继承父级转录历史。
- 设`0` 可禁用此保护,并始终允许父级分叉。
- **`mainKey`**:旧版字段。运行时始终对主私聊桶使用 `"main"`
- **`agentToAgent.maxPingPongTurns`**在智能体到智能体交互期间,智能体之间允许的最大往返回复轮数(整数,范围:`0``5`)。`0` 会禁用 ping-pong 链式交互。
- **`sendPolicy`**:按 `channel`、`chatType``direct|group|channel`,旧版 `dm` 为别名)、`keyPrefix` 或 `rawKeyPrefix` 匹配。首个 deny 规则胜出
- **`maintenance`**:会话存储清理 + 保留控制。
- `mode``warn` 仅发出警告;`enforce` 会执行清理。
- `pruneAfter`陈旧条目的时间截止值(默认 `30d`)。
- `maxEntries``sessions.json` 中允许的最大条目数(默认 `500`)。
- `rotateBytes`:当 `sessions.json` 超过该大小时进行轮转(默认 `10mb`)。
- `resetArchiveRetention``*.reset.<timestamp>` transcript 归档的保留期。默认与 `pruneAfter` 相同;设`false` 可禁用。
- `maxDiskBytes`:可选的 sessions 目录磁盘预算。在 `warn` 模式下会记录警告;在 `enforce` 模式下会优先移除最旧的工件 / 会话。
- `mode``warn` 仅发出警告;`enforce` 会实际执行清理。
- `pruneAfter`过期条目的时间阈值(默认 `30d`)。
- `maxEntries``sessions.json` 中的最大条目数(默认 `500`)。
- `rotateBytes`:当 `sessions.json` 超过此大小时轮转(默认 `10mb`)。
- `resetArchiveRetention``*.reset.<timestamp>` 转录归档的保留时长。默认与 `pruneAfter` 相同;设置`false` 可禁用。
- `maxDiskBytes`:可选的会话目录磁盘预算。在 `warn` 模式下记录警告;在 `enforce` 模式下会优先删除最旧的产物 / 会话。
- `highWaterBytes`:预算清理后的可选目标值。默认是 `maxDiskBytes``80%`
- **`threadBindings`**:线程绑定会话功能的全局默认值。
- `enabled`主默认开关provider 可覆盖Discord 使用 `channels.discord.threadBindings.enabled`
- `idleHours`:默认的无活动自动取消聚焦时长(小时)(`0` 禁用provider 可覆盖)
- `maxAgeHours`:默认的硬性最大存活时长(小时)(`0` 禁用provider 可覆盖)
- `idleHours`:默认的按空闲时间自动取消聚焦小时数(`0` 为禁用provider 可覆盖)
- `maxAgeHours`:默认的硬最大存在时长小时数(`0` 为禁用provider 可覆盖)
</Accordion>
@ -1207,36 +1209,36 @@ scripts/sandbox-browser-setup.sh # optional browser image
### 响应前缀
按渠道 / 账覆盖:`channels.<channel>.responsePrefix`、`channels.<channel>.accounts.<id>.responsePrefix`。
按渠道 / 账覆盖:`channels.<channel>.responsePrefix`、`channels.<channel>.accounts.<id>.responsePrefix`。
解析顺序(最具体者优先):账户 → 渠道 → 全局。`""` 会禁用并停止级联。`"auto"` 会派生为 `[{identity.name}]`
解析顺序(越具体越优先):账号 → 渠道 → 全局。`""` 会禁用并停止级联。`"auto"` 会派生为 `[{identity.name}]`
**模板变量:**
| 变量 | 描述 | 示例 |
| 变量 | 说明 | 示例 |
| ----------------- | ---------------------- | --------------------------- |
| `{model}` | 模型名 | `claude-opus-4-6` |
| `{model}` | 模型 | `claude-opus-4-6` |
| `{modelFull}` | 完整模型标识符 | `anthropic/claude-opus-4-6` |
| `{provider}` | provider 名称 | `anthropic` |
| `{thinkingLevel}` | 当前思考级别 | `high`, `low`, `off` |
| `{provider}` | 提供商名称 | `anthropic` |
| `{thinkingLevel}` | 当前思考级别 | `high`、`low`、`off` |
| `{identity.name}` | 智能体身份名称 | (与 `"auto"` 相同) |
变量不区分大小写。`{think}` 是 `{thinkingLevel}` 的别名。
### 确认反应
- 默认使用当前智能体的 `identity.emoji`,否则为 `"👀"`。设为 `""` 可禁用。
- 默认为活动智能体的 `identity.emoji`,否则为 `"👀"`。设`""` 可禁用。
- 按渠道覆盖:`channels.<channel>.ackReaction`、`channels.<channel>.accounts.<id>.ackReaction`。
- 解析顺序:账 → 渠道 → `messages.ackReaction` → identity 回退
- 作用`group-mentions`(默认)、`group-all`、`direct`、`all`。
- `removeAckAfterReply`:在 Slack、Discord 和 Telegram 上回复后移除确认反应。
- 解析顺序:账 → 渠道 → `messages.ackReaction` → identity 回退。
- 作用范围`group-mentions`(默认)、`group-all`、`direct`、`all`。
- `removeAckAfterReply`:在 Slack、Discord 和 Telegram 上回复后移除确认反应。
- `messages.statusReactions.enabled`:在 Slack、Discord 和 Telegram 上启用生命周期 Status 反应。
在 Slack 和 Discord 上,未设置时,如果确认反应处于启用状态,则保持 Status 反应启用。
在 Telegram 上,需要显式设`true` 才会启用生命周期 Status 反应。
在 Slack 和 Discord 上,未设置时,如果确认反应处于活动状态,则保持 Status 反应启用。
在 Telegram 上,必须显式设置`true` 才会启用生命周期 Status 反应。
### 入站
### 入站
将来自同一发送者的快速纯文本消息批处理为一个智能体轮次。媒体 / 附件会立即刷新。控制命令会绕过防抖。
将来自同一发送者的快速连续纯文本消息批处理为一次智能体轮次。媒体 / 附件会立即刷新。控制命令会绕过去抖。
### TTS文本转语音
@ -1286,19 +1288,19 @@ scripts/sandbox-browser-setup.sh # optional browser image
}
```
- `auto` 控制默认的自动 TTS 模式:`off`、`always`、`inbound` 或 `tagged`。`/tts on|off` 可以覆盖本地偏好设置`/tts status` 会显示实际状态。
- `summaryModel`覆盖自动摘要所使用的 `agents.defaults.model.primary`
- `auto` 控制默认的自动 TTS 模式:`off`、`always`、`inbound` 或 `tagged`。`/tts on|off` 可以覆盖本地偏好,`/tts status` 会显示实际状态。
- `summaryModel`为自动摘要覆盖 `agents.defaults.model.primary`
- `modelOverrides` 默认启用;`modelOverrides.allowProvider` 默认为 `false`(需主动启用)。
- API key 会回退到 `ELEVENLABS_API_KEY` / `XI_API_KEY``OPENAI_API_KEY`
- 内置语音 provider 由插件拥有。如果设置了 `plugins.allow`,请包含你想使用的每个 TTS provider 插件,例如用于 Edge TTS 的 `microsoft`。旧版 provider id `edge` 可作为 `microsoft` 的别名使用。
- `providers.openai.baseUrl` 会覆盖 OpenAI TTS 端点。解析顺序配置,然后 `OPENAI_TTS_BASE_URL`,最后是 `https://api.openai.com/v1`
- 当 `providers.openai.baseUrl` 指向非 OpenAI 端点时OpenClaw 会将其视为兼容 OpenAI 的 TTS 服务器,并放宽模型 / 音校验。
- 内置语音提供商由插件负责。如果设置了 `plugins.allow`,请包含你要使用的每个 TTS 提供商插件,例如用于 Edge TTS 的 `microsoft`。旧版 provider id `edge` 可作为 `microsoft` 的别名使用。
- `providers.openai.baseUrl` 会覆盖 OpenAI TTS 端点。解析顺序为:配置,然后 `OPENAI_TTS_BASE_URL`,最后是 `https://api.openai.com/v1`
- 当 `providers.openai.baseUrl` 指向非 OpenAI 端点时OpenClaw 会将其视为兼容 OpenAI 的 TTS 服务器,并放宽模型 / 音校验。
---
## talk
## Talk
Talk 模式的默认设置macOS / iOS / Android
Talk 模式的默认macOS / iOS / Android
```json5
{
@ -1315,6 +1317,10 @@ Talk 模式的默认设置macOS / iOS / Android
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
},
mlx: {
modelId: "mlx-community/Soprano-80M-bf16",
},
system: {},
},
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
@ -1322,13 +1328,15 @@ Talk 模式的默认设置macOS / iOS / Android
}
```
- `talk.provider` 在配置了多个 Talk provider 时,必须与 `talk.providers` 中的某个键匹配
- 旧版扁平 Talk 键(`talk.voiceId`、`talk.voiceAliases`、`talk.modelId`、`talk.outputFormat`、`talk.apiKey`)仅为兼容用途,并会自动迁移到 `talk.providers.<provider>`
- Voice ID 会回退到 `ELEVENLABS_VOICE_ID``SAG_VOICE_ID`
- `talk.provider` 在配置了多个 Talk 提供商时,必须匹配 `talk.providers` 中的某个键
- 旧版扁平 Talk 键(`talk.voiceId`、`talk.voiceAliases`、`talk.modelId`、`talk.outputFormat`、`talk.apiKey`)仅用于兼容,并会自动迁移到 `talk.providers.<provider>`
- 语音 id 会回退到 `ELEVENLABS_VOICE_ID``SAG_VOICE_ID`
- `providers.*.apiKey` 接受明文字符串或 SecretRef 对象。
- 仅在未配置 Talk API key 时,才会应`ELEVENLABS_API_KEY` 回退。
- 只有在未配置 Talk API key 时,才会使`ELEVENLABS_API_KEY` 回退。
- `providers.*.voiceAliases` 允许 Talk 指令使用友好名称。
- `silenceTimeoutMs` 控制 Talk 模式在用户静音后等待多久才发送 transcript。未设置时会保留平台默认的停顿窗口`macOS 和 Android 为 700 msiOS 为 900 ms`)。
- `providers.mlx.modelId` 用于选择 macOS 本地 MLX helper 所使用的 Hugging Face 仓库。如果省略macOS 会使用 `mlx-community/Soprano-80M-bf16`
- macOS MLX 播放会在存在时通过内置的 `openclaw-mlx-tts` helper 运行,否则使用 `PATH` 上的可执行文件;开发时可通过 `OPENCLAW_MLX_TTS_BIN` 覆盖 helper 路径。
- `silenceTimeoutMs` 控制 Talk 模式在用户静音后等待多长时间再发送转录。未设置时会保持平台默认暂停窗口(`macOS 和 Android 为 700 msiOS 为 900 ms`)。
---

View File

@ -2,52 +2,52 @@
read_when:
- 你需要精确到字段级别的配置语义或默认值
- 你正在验证渠道、模型、Gateway 网关或工具配置块
summary: Gateway 网关配置参考,涵盖核心 OpenClaw 键名、默认值以及指向专用子系统参考文档的链接
summary: Gateway 网关 配置参考,涵盖核心 OpenClaw 键名、默认值以及指向专用子系统参考文档的链接
title: 配置参考
x-i18n:
generated_at: "2026-04-25T07:01:14Z"
generated_at: "2026-04-25T07:51:42Z"
model: gpt-5.4
provider: openai
source_hash: a0f69861c754e0f6d3e41ac357fa56612b90da69249c6f24ec9f6ade21acc1d3
source_hash: fd4ebfce263df22d2daa8e0a01e8ab7f590f86b424c534a85d39a25cee98e053
source_path: gateway/configuration-reference.md
workflow: 15
---
`~/.openclaw/openclaw.json` 的核心配置参考。若需面向任务的概览,请参阅 [配置](/zh-CN/gateway/configuration)。
本页涵盖 OpenClaw 的主要配置面,并在某个子系统拥有更深入的独立参考时提供跳转链接。由渠道和插件自行维护的命令目录,以及更底层的 memory / QMD 调节项,位于各自的页面,而不在本页中说明
本页涵盖 OpenClaw 的主要配置面,并在某个子系统有自己更深入的参考文档时提供外链。由渠道和插件自行维护的命令目录,以及深入的内存/QMD 调节项,分别位于各自页面,而不是集中放在本页
代码实来源:
代码层面的真实来源:
- `openclaw config schema`输出用于验证和 Control UI 的实时 JSON Schema并在可用时合并内置 / 插件 / 渠道元数据
- `config.schema.lookup` 会返回一个按路径限定范围的 schema 节点,供下钻工具使用
- `pnpm config:docs:check` / `pnpm config:docs:gen` 会根据当前 schema 面校验配置文档基线哈希
- `openclaw config schema`打印用于验证和 Control UI 的实时 JSON Schema并在可用时合并内置/插件/渠道元数据
- `config.schema.lookup` 会返回一个按路径划分的 schema 节点,供下钻工具使用
- `pnpm config:docs:check` / `pnpm config:docs:gen` 会根据当前 schema 面校验配置文档基线哈希
专门的深度参考
专门的深入参考文档
- [内存配置参考](/zh-CN/reference/memory-config),适用于 `agents.defaults.memorySearch.*`、`memory.qmd.*`、`memory.citations`,以及位于 `plugins.entries.memory-core.config.dreaming` 下的 dreaming 配置
- [斜杠命令](/zh-CN/tools/slash-commands)用于查看当前内置 + 随附的命令目录
- 各自所属的渠道 / 插件页面,用于查看特定渠道的命令面
- [斜杠命令](/zh-CN/tools/slash-commands)适用于当前内置 + 内置打包的命令目录
- 各自所属的渠道/插件页面,适用于渠道特定的命令面
配置格式为 **JSON5**(允许注释和尾随逗号)。所有字段都是可选的——省略时OpenClaw 会使用安全的默认值。
配置格式为 **JSON5**(允许注释和尾随逗号)。所有字段均为可选——省略时OpenClaw 会使用安全的默认值。
---
## 渠道
每个渠道的配置键已移至专门页面——请参阅
[配置渠道](/zh-CN/gateway/config-channels),了解 `channels.*`
其中包括 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage,以及其他
各渠道配置键已迁移到专门页面——请参阅
[配置——渠道](/zh-CN/gateway/config-channels),了解 `channels.*`
包括 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage 及其他
内置渠道(认证、访问控制、多账号、提及门控)。
## 智能体默认值、多智能体、会话和消息
移至专门页面——请参阅
[配置 — 智能体](/zh-CN/gateway/config-agents),了解
迁移到专门页面——请参阅
[配置——智能体](/zh-CN/gateway/config-agents),内容包括
- `agents.defaults.*`工作区、模型、思考、心跳、内存、媒体、Skills、沙箱
- `multiAgent.*`(多智能体路由和绑定)
- `session.*`(会话生命周期、压缩、清理
- `session.*`(会话生命周期、压缩、修剪
- `messages.*`消息投递、TTS、Markdown 渲染)
- `talk.*`Talk 模式)
- `talk.silenceTimeoutMs`未设置时Talk 会在发送转录内容前保留平台默认的停顿窗口(`macOS 和 Android 为 700 msiOS 为 900 ms`
@ -55,15 +55,15 @@ x-i18n:
## 工具和自定义提供商
工具策略、实验性开关、由提供商支持的工具配置,以及自定义
提供商 / base-URL 设置已移至专门页面——请参阅
[配置工具和自定义提供商](/zh-CN/gateway/config-tools)。
提供商 / base-URL 设置,已迁移到专门页面——请参阅
[配置——工具和自定义提供商](/zh-CN/gateway/config-tools)。
## MCP
由 OpenClaw 管理的 MCP 服务器定义位于 `mcp.servers` 下,
嵌入式 Pi 和其他运行时适配器使用。`openclaw mcp list`、
`show`、`set` 和 `unset` 命令可管理该配置块,且在编辑配置时不会连接到
目标服务器。
嵌入式 Pi 和其他运行时适配器使用。`openclaw mcp list`、
`show`、`set` 和 `unset` 命令可在编辑配置时管理该配置块,
且不会连接目标服务器。
```json5
{
@ -87,12 +87,15 @@ x-i18n:
}
```
- `mcp.servers`:为暴露已配置 MCP 工具的运行时定义具名 stdio 或远程 MCP 服务器
- `mcp.sessionIdleTtlMs`用于会话作用域内置 MCP 运行时的空闲 TTL。
一次性嵌入式运行会请求在运行结束时清理;该 TTL 是面向
- `mcp.servers`:为暴露已配置 MCP 工具的运行时提供命名的 stdio 或远程 MCP 服务器定义
- `mcp.sessionIdleTtlMs`面向会话作用域的内置 MCP 运行时的空闲 TTL。
一次性嵌入式运行会请求在运行结束时清理;该 TTL 是
长生命周期会话和未来调用方的兜底机制。
- `mcp.*` 下的变更会通过释放缓存的会话 MCP 运行时来热应用。
下一次工具发现/使用时会根据新配置重新创建它们,因此已移除的
`mcp.servers` 条目会立即被回收,而不是等到空闲 TTL 到期。
运行时行为请参阅 [MCP](/zh-CN/cli/mcp#openclaw-as-an-mcp-client-registry) 和
有关运行时行为请参阅 [MCP](/zh-CN/cli/mcp#openclaw-as-an-mcp-client-registry) 和
[CLI 后端](/zh-CN/gateway/cli-backends#bundle-mcp-overlays)。
## Skills
@ -120,13 +123,14 @@ x-i18n:
}
```
- `allowBundled`:仅适用于内置 Skills 的可选允许列表(不影响托管 / 工作区 Skills
- `load.extraDirs`:额外的共享 Skills 根目录(优先级最低)。
- `install.preferBrew`:为 `true` 时,若 `brew` 可用,则优先使用 Homebrew 安装器,然后再回退到其他安装器类型。
- `allowBundled`:仅适用于内置 Skills 的可选允许列表(托管/工作区 Skills 不受影响)。
- `load.extraDirs`:额外的共享 Skill 根目录(优先级最低)。
- `install.preferBrew`:当为 true 且存在 `brew` 时,优先使用 Homebrew 安装器,
然后才回退到其他安装器类型。
- `install.nodeManager`:用于 `metadata.openclaw.install`
规范的 Node 安装器偏好(`npm` | `pnpm` | `yarn` | `bun`)。
- `entries.<skillKey>.enabled: false`:即使某个 skill 已内置 / 已安装,也会将其禁用
- `entries.<skillKey>.apiKey`:为声明了主环境变量的 skill 提供的便捷配置(明文字符串或 SecretRef 对象)。
- `entries.<skillKey>.enabled: false`:即使 Skill 已内置/安装,也会禁用该 Skill
- `entries.<skillKey>.apiKey`:为声明主环境变量的 Skill 提供的便捷字段(明文字符串或 SecretRef 对象)。
---
@ -156,40 +160,40 @@ x-i18n:
- 从 `~/.openclaw/extensions`、`<workspace>/.openclaw/extensions` 以及 `plugins.load.paths` 加载。
- 设备发现支持原生 OpenClaw 插件,以及兼容的 Codex bundle 和 Claude bundle包括无 manifest 的 Claude 默认布局 bundle。
- **配置更需要重启 Gateway 网关。**
- `allow`:可选允许列表(仅加载列出的插件)。`deny` 优先生效
- `plugins.entries.<id>.apiKey`:插件级 API 密钥便捷字段(当插件支持时)。
- **配置更需要重启 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` 和 `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 密钥(接受 SecretRef。会回退到 `plugins.entries.firecrawl.config.webSearch.apiKey`、旧版 `tools.web.fetch.firecrawl.apiKey``FIRECRAWL_API_KEY` 环境变量。
- `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` 和 `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 web-fetch 提供商设置。
- `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 SearchGrok 网页搜索)设置。
- `maxAgeMs`:最大缓存时长(毫秒)(默认值:`172800000` / 2 天)。
- `timeoutSeconds`:抓取请求超时时间(秒)(默认值:`60`)。
- `plugins.entries.xai.config.xSearch`xAI X SearchGrok web 搜索)设置。
- `enabled`:启用 X Search 提供商。
- `model`:搜索所使用的 Grok 模型(例如 `"grok-4-1-fast"`)。
- `plugins.entries.memory-core.config.dreaming`memory dreaming 设置。阶段和阈值请参阅 [Dreaming](/zh-CN/concepts/dreaming)。
- `enabled`dreaming 总开关(默认值 `false`)。
- `model`用于搜索的 Grok 模型(例如 `"grok-4-1-fast"`)。
- `plugins.entries.memory-core.config.dreaming`内存 dreaming 设置。有关阶段和阈值,请参阅 [Dreaming](/zh-CN/concepts/dreaming)。
- `enabled`dreaming 总开关(默认值 `false`)。
- `frequency`:每次完整 dreaming 扫描的 cron 频率(默认值为 `"0 3 * * *"`)。
- 阶段策略和阈值属于实现细节(不是面向用户的配置键)。
- 完整的 memory 配置位于 [内存配置参考](/zh-CN/reference/memory-config)
- 完整的内存配置位于 [内存配置参考](/zh-CN/reference/memory-config)
- `agents.defaults.memorySearch.*`
- `memory.backend`
- `memory.citations`
- `memory.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"`,除非你安装并选择了其他引擎。
- 已启用的 Claude bundle 插件也可以通过 `settings.json` 提供嵌入式 Pi 默认值OpenClaw 会将其作为经过清理的智能体设置应用,而不是作为原始 OpenClaw 配置补丁应用。
- `plugins.slots.memory`:选择当前活动的内存插件 id或使用 `"none"` 禁用内存插件。
- `plugins.slots.contextEngine`:选择当前活动的上下文引擎插件 id默认值为 `"legacy"`,除非你安装并选择了其他引擎。
- `plugins.installs`:由 CLI 管理的安装元数据,供 `openclaw plugins update` 使用。
- 包 `source`、`spec`、`sourcePath`、`installPath`、`version`、`resolvedName`、`resolvedVersion`、`resolvedSpec`、`integrity`、`shasum`、`resolvedAt`、`installedAt`。
- 包 `source`、`spec`、`sourcePath`、`installPath`、`version`、`resolvedName`、`resolvedVersion`、`resolvedSpec`、`integrity`、`shasum`、`resolvedAt`、`installedAt`。
- 将 `plugins.installs.*` 视为托管状态;优先使用 CLI 命令,而不是手动编辑。
请参阅 [插件](/zh-CN/tools/plugin)。
@ -205,8 +209,8 @@ x-i18n:
evaluateEnabled: true,
defaultProfile: "user",
ssrfPolicy: {
// dangerouslyAllowPrivateNetwork: true, // only for trusted private-network access
// allowPrivateNetwork: true, // legacy alias
// dangerouslyAllowPrivateNetwork: true, // 仅在受信任的私有网络访问场景下选择启用
// allowPrivateNetwork: true, // 旧版别名
// hostnameAllowlist: ["*.example.com", "example.com"],
// allowedHostnames: ["localhost"],
},
@ -243,35 +247,35 @@ x-i18n:
```
- `evaluateEnabled: false` 会禁用 `act:evaluate``wait --fn`
- `tabCleanup` 会在空闲一段时间后,或当某个
会话超过其上限时,回收跟踪的主智能体标签页。将 `idleMinutes: 0``maxTabsPerSession: 0` 设为
- `tabCleanup` 会在空闲超时后,或当某个
会话超过其上限时,回收跟踪的主智能体标签页。将 `idleMinutes: 0``maxTabsPerSession: 0` 设为
0可分别禁用这些单独的清理模式。
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` 在未设置时为禁用状态,因此浏览器导航默认保持严格限制。
- 仅当你明确信任私有网络浏览器导航时,才设置 `ssrfPolicy.dangerouslyAllowPrivateNetwork: true`
- 在严格模式下,远程 CDP 配置文件端点(`profiles.*.cdpUrl`)在可达性 / 发现检查期间同样受私有网络阻止规则约束
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` 在未设置时为禁用状态,因此默认情况下浏览器导航保持严格限制。
- 仅当你明确愿意信任私有网络浏览器导航时,才设置 `ssrfPolicy.dangerouslyAllowPrivateNetwork: true`
- 在严格模式下,远程 CDP 配置文件端点(`profiles.*.cdpUrl`)在可达性/设备发现检查期间,也会受到相同的私有网络阻止限制
- `ssrfPolicy.allowPrivateNetwork` 仍作为旧版别名受支持。
- 在严格模式下,使用 `ssrfPolicy.hostnameAllowlist``ssrfPolicy.allowedHostnames` 进行显式例外配置。
- 远程配置文件仅支持附加模式(禁用 start / stop / reset
- 远程配置文件仅附加模式(禁用 start/stop/reset
- `profiles.*.cdpUrl` 接受 `http://`、`https://`、`ws://` 和 `wss://`
当你希望 OpenClaw 发现 `/json/version` 时,请使用 HTTP(S);使用 WS(S)
则适用于你的提供商直接提供 DevTools WebSocket URL 的情况
- `existing-session` 配置文件使用 Chrome MCP 而 CDP并且可以附加到
当你希望 OpenClaw 发现 `/json/version` 时,使用 HTTP(S);当你的提供商直接提供 DevTools WebSocket URL 时,
使用 WS(S)
- `existing-session` 配置文件使用 Chrome MCP 而不是 CDP并且可以附加到
所选主机上,或通过已连接的浏览器节点附加。
- `existing-session` 配置文件可设置 `userDataDir`,以定位特定的
Chromium 系浏览器配置文件,例如 Brave 或 Edge。
- `existing-session` 配置文件可设置 `userDataDir`,以定位特定的
基于 Chromium 的浏览器配置文件,例如 Brave 或 Edge。
- `existing-session` 配置文件保留当前 Chrome MCP 路由限制:
使用基于快照 / ref 的操作,而不是基于 CSS 选择器定位;仅支持单文件上传
使用 snapshot/ref 驱动的操作,而不是 CSS 选择器定位;单文件上传
钩子;不支持对话框超时覆盖;不支持 `wait --load networkidle`;也不支持
`responsebody`、PDF 导出、下载拦截或批量操作。
- 本地管的 `openclaw` 配置文件会自动分配 `cdpPort``cdpUrl`;仅在远程 CDP 场景下
需要显式设置 `cdpUrl`
- 本地托管配置文件可设置 `executablePath`,以覆盖该配置文件的全局
- 本地管的 `openclaw` 配置文件会自动分配 `cdpPort``cdpUrl`;仅在远程 CDP 场景下
才显式设置 `cdpUrl`
- 本地受管配置文件可以设置 `executablePath`,以覆盖该配置文件的全局
`browser.executablePath`。可借此让一个配置文件运行在 Chrome 中,另一个运行在 Brave 中。
- 自动检测顺序:默认浏览器(如果是 Chromium 系)→ Chrome → Brave → Edge → Chromium → Chrome Canary。
- `browser.executablePath` 接受 `~` 作为你的操作系统主目录。
- 控制服务:仅 loopback端口由 `gateway.port` 派生,默认值为 `18791`)。
- `extraArgs`将额外的启动标志附加到本地 Chromium 启动参数中(例如
`--disable-gpu`、窗口大小设置或调试标志)。
- 自动检测顺序:默认浏览器(若为基于 Chromium)→ Chrome → Brave → Edge → Chromium → Chrome Canary。
- `browser.executablePath` 接受 `~`,表示你操作系统的 home 目录。
- 控制服务:仅 loopback端口由 `gateway.port` 派生,默认值为 `18791`)。
- `extraArgs`为本地 Chromium 启动追加额外的启动标志(例如
`--disable-gpu`、窗口尺寸设置或调试标志)。
---
@ -289,7 +293,7 @@ x-i18n:
}
```
- `seamColor`:原生应用 UI 外观的强调色Talk 模式气泡着色等)。
- `seamColor`:原生应用 UI 外框的强调色Talk Mode 气泡着色等)。
- `assistant`Control UI 身份覆盖。回退到当前活动智能体身份。
---
@ -341,14 +345,14 @@ x-i18n:
allowRealIpFallback: false,
nodes: {
pairing: {
// 可选。默认未设置 / 已禁用。
// 可选。默认未设置/已禁用。
autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"],
},
allowCommands: ["canvas.navigate"],
denyCommands: ["system.run"],
},
tools: {
// 额外的 /tools/invoke HTTP 拒绝列表
// 附加的 /tools/invoke HTTP 拒绝项
deny: ["browser"],
// 从默认 HTTP 拒绝列表中移除工具
allow: ["gateway"],
@ -367,70 +371,71 @@ x-i18n:
<Accordion title="Gateway 网关字段详情">
- `mode``local`(运行 Gateway 网关)或 `remote`(连接到远程 Gateway 网关)。除非为 `local`,否则 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`),不要使用 host 别名(`0.0.0.0`、`127.0.0.1`、`localhost`、`::`、`::1`)。
- **Docker 注意事项**:默认的 `loopback` bind 会在容器内监听 `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` 的身份头(参见 [受信任代理认证](/zh-CN/gateway/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`
- **旧版 bind 别名**:在 `gateway.bind` 中使用 bind 模式值(`auto`、`loopback`、`lan`、`tailnet`、`custom`),不要使用 host 别名(`0.0.0.0`、`127.0.0.1`、`localhost`、`::`、`::1`)。
- **Docker 注意事项**:默认的 `loopback` bind 会在容器内监听 `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](/zh-CN/gateway/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`
- 来自浏览器源的 WS 认证尝试始终会在禁用 loopback 豁免的情况下受到节流限制(作为针对基于浏览器的 localhost 暴力破解的纵深防御)。
- 在 loopback 上,这些浏览器源锁定会按规范化后的 `Origin`
值分别隔离,因此来自某个 localhost origin 的重复失败不会自动
锁定另一个 origin。
- `tailscale.mode``serve`(仅 tailnetloopback bind`funnel`(公开访问,需要认证)。
- `controlUi.allowedOrigins`:用于 Gateway 网关 WebSocket 连接的显式浏览器源允许列表。当预期浏览器客户端来自非 loopback 源时,这是必需的。
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`:危险模式,为那些有意依赖 Host 头 origin 策略的部署启用基于 Host 头的 origin 回退。
- `remote.transport``ssh`(默认)或 `direct`ws / wss。对于 `direct``remote.url` 必须为 `ws://``wss://`
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`:客户端进程环境变量中的紧急放行覆盖项,允许通过明文 `ws://` 连接到受信任的私有网络
IP默认情况下明文连接仍仅限 loopback。没有对应的 `openclaw.json`
配置项,且诸如
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` 之类的浏览器私有网络配置也不会影响 Gateway 网关
- 在异步 Tailscale Serve Control UI 路径中,同一 `{scope, clientIp}` 的失败尝试会在写入失败记录前被串行化。因此,同一客户端的并发错误尝试可能会在第二个请求时触发限流,而不是两个请求都像普通不匹配那样竞态通过。
- `gateway.auth.rateLimit.exemptLoopback` 默认为 `true`;若你明确希望连 localhost 流量也被限流(例如测试环境或严格代理部署),请设置为 `false`
- 来自浏览器源的 WS 认证尝试始终会被限流,且禁用 loopback 豁免(作为防御纵深,防止基于浏览器的 localhost 暴力破解)。
- 在 loopback 上,这些来自浏览器源的锁定会按归一化后的 `Origin`
值彼此隔离,因此来自某个 localhost 源的重复失败不会自动
锁定另一个源。
- `tailscale.mode``serve`(仅 tailnetloopback 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`:客户端进程环境变量中的紧急放行开关,
允许使用明文 `ws://` 连接受信任的私有网络
IP默认仍仅允许 loopback 使用明文。`openclaw.json`
中没有对应项,且浏览器私有网络配置,例如
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`,不会影响 Gateway 网关
WebSocket 客户端。
- `gateway.remote.token` / `.password`远程客户端凭证字段。它们本身不会配置 Gateway 网关认证。
- `gateway.push.apns.relay.baseUrl`:外部 APNs relay 的基础 HTTPS URL官方 / TestFlight iOS 构建在将基于 relay 的注册发布到 Gateway 网关后会使用它。此 URL 必须与编译进 iOS 构建中的 relay URL 一致。
- `gateway.push.apns.relay.timeoutMs`Gateway 网关到 relay 的发送超时时间,单位为毫秒。默认值为 `10000`
- 基于 relay 的注册会委托给特定的 Gateway 网关身份。已配对的 iOS 应用会获取 `gateway.identity.get`,在 relay 注册中包含该身份,并将一个以注册为作用域的发送授权转发给 Gateway 网关。另一台 Gateway 网关无法复用该已存储的注册。
- `gateway.remote.token` / `.password`远程客户端凭证字段。它们本身不会配置 Gateway 网关认证。
- `gateway.push.apns.relay.baseUrl`:外部 APNs relay 的基础 HTTPS URL供官方/TestFlight iOS 构建在向 Gateway 网关发布基于 relay 的注册后使用。该 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`:渠道级退出配置,用于在保持全局监控启用时禁用该渠道的健康监控重启。
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`:仅供开发使用的逃生开关,用于允许使用 loopback HTTP relay URL。生产环境 relay URL 应保持使用 HTTPS。
- `gateway.channelHealthCheckMinutes`:渠道健康监控间隔(分钟)。设为 `0` 可全局禁用健康监控重启。默认值:`5`。
- `gateway.channelStaleEventThresholdMinutes`陈旧套接字阈值(分钟)。请保持其大于或等于 `gateway.channelHealthCheckMinutes`。默认值:`30`。
- `gateway.channelMaxRestartsPerHour`:每个渠道/账号在滚动一小时内允许的最大健康监控重启次数。默认值:`10`。
- `channels.<provider>.healthMonitor.enabled`:渠道级退出设置,可在保留全局监控启用的同时禁用健康监控重启。
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`:多账号渠道的账号级覆盖。设置后,其优先级高于渠道级覆盖。
- 仅当 `gateway.auth.*` 未设置时,本地 Gateway 网关调用路径才可以将 `gateway.remote.*` 用作回退
- 如果 `gateway.auth.token` / `gateway.auth.password` 通过 SecretRef 显式配置但未能解析,则解析将以关闭方式失败(不会被远程回退掩盖)。
- `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`:对 HTTP `POST /tools/invoke` 额外阻止的工具名(扩展默认拒绝列表)。
- `gateway.tools.allow`将工具名从默认 HTTP 拒绝列表中移除。
- 本地 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`:对 HTTP `POST /tools/invoke` 额外阻止的工具名(扩展默认拒绝列表)。
- `gateway.tools.allow`:从默认 HTTP 拒绝列表中移除工具名称
</Accordion>
### OpenAI 兼容端点
- Chat Completions默认禁用。使用 `gateway.http.endpoints.chatCompletions.enabled: true` 启用。
- Chat Completions默认禁用。通过 `gateway.http.endpoints.chatCompletions.enabled: true` 启用。
- Responses API`gateway.http.endpoints.responses.enabled`。
- Responses URL 输入加固:
- `gateway.http.endpoints.responses.maxUrlParts`
- `gateway.http.endpoints.responses.files.urlAllowlist`
- `gateway.http.endpoints.responses.images.urlAllowlist`
允许列表会被视为未设置;如需禁用 URL 抓取,请使用 `gateway.http.endpoints.responses.files.allowUrl=false`
/ `gateway.http.endpoints.responses.images.allowUrl=false`
空允许列表会被视为未设置;请使用 `gateway.http.endpoints.responses.files.allowUrl=false`
和/或 `gateway.http.endpoints.responses.images.allowUrl=false` 来禁用 URL 抓取
- 可选的响应加固头:
- `gateway.http.securityHeaders.strictTransportSecurity`(仅对你控制的 HTTPS 源设置;参见 [受信任代理认证](/zh-CN/gateway/trusted-proxy-auth#tls-termination-and-hsts)
- `gateway.http.securityHeaders.strictTransportSecurity`(仅对你控制的 HTTPS 源设置;参见 [Trusted Proxy Auth](/zh-CN/gateway/trusted-proxy-auth#tls-termination-and-hsts)
### 多实例隔离
在同一主机上运行多个 Gateway 网关时,请使用唯一端口和状态目录:
在同一主机上运行多个 Gateway 网关时,请使用唯一端口和状态目录:
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
@ -440,7 +445,7 @@ openclaw gateway --port 19001
便捷标志:`--dev`(使用 `~/.openclaw-dev` + 端口 `19001`)、`--profile <name>`(使用 `~/.openclaw-<name>`)。
请参阅 [多个 Gateway 网关](/zh-CN/gateway/multiple-gateways)。
参见 [多个 Gateway 网关](/zh-CN/gateway/multiple-gateways)。
### `gateway.tls`
@ -458,11 +463,11 @@ openclaw gateway --port 19001
}
```
- `enabled`:在 Gateway 网关监听器处启用 TLS 终止HTTPS / WSS默认值`false`)。
- `autoGenerate`在未配置显式文件时自动生成本地自签名证书 / 密钥对;仅供本地 / 开发使用
- `enabled`:在 Gateway 网关监听器上启用 TLS 终止HTTPS/WSS默认值`false`)。
- `autoGenerate`当未配置显式文件时,自动生成本地自签名 cert/key 对;仅用于本地/开发环境
- `certPath`TLS 证书文件的文件系统路径。
- `keyPath`TLS 私钥文件的文件系统路径;请限制其访问权限。
- `caPath`用于客户端验证或自定义信任链的可选 CA bundle 路径。
- `keyPath`TLS 私钥文件的文件系统路径;请保持权限受限。
- `caPath`:可选 CA bundle 路径,用于客户端验证或自定义信任链
### `gateway.reload`
@ -479,16 +484,16 @@ openclaw gateway --port 19001
```
- `mode`:控制在运行时如何应用配置编辑。
- `"off"`:忽略实时编辑;更需要显式重启。
- `"restart"`:配置更时始终重启 Gateway 网关进程。
- `"hot"`:在不重启的情况下于进程内应用更
- `"off"`:忽略实时编辑;更需要显式重启。
- `"restart"`:配置更时始终重启 Gateway 网关进程。
- `"hot"`:在不重启的情况下于进程内应用更。
- `"hybrid"`(默认):先尝试热重载;若有需要则回退为重启。
- `debounceMs`:应用配置更改前的防抖窗口,单位为毫秒(非负整数)。
- `deferralTimeoutMs`:在强制重启前等待正在进行中的操作完成的最长时间,单位为毫秒(默认值:`300000` = 5 分钟)。
- `debounceMs`:应用配置变更前的防抖窗口(毫秒)(非负整数)。
- `deferralTimeoutMs`:在强制重启前等待进行中操作完成的最长时间(毫秒)(默认值:`300000` = 5 分钟)。
---
## Hooks
## 钩子
```json5
{
@ -522,21 +527,21 @@ openclaw gateway --port 19001
```
认证:`Authorization: Bearer <token>` 或 `x-openclaw-token: <token>`
拒绝使用查询字符串 hook token。
拒绝使用查询字符串中的 hook token。
验证安全说明:
验证安全说明:
- `hooks.enabled=true` 要求提供非空的 `hooks.token`
- `hooks.enabled=true` 要求 `hooks.token` 为非空
- `hooks.token` 必须与 `gateway.auth.token` **不同**;复用 Gateway 网关 token 会被拒绝。
- `hooks.path` 不能为 `/`;请使用专用子路径,例如 `/hooks`
- 如果 `hooks.allowRequestSessionKey=true`,请约束 `hooks.allowedSessionKeyPrefixes`(例如 `["hook:"]`)。
- 如果某个映射或 preset 使用模板化的 `sessionKey`,请设置 `hooks.allowedSessionKeyPrefixes``hooks.allowRequestSessionKey=true`。静态映射键不需要该显式启用。
- 如果某个映射或预设使用模板化的 `sessionKey`,请设置 `hooks.allowedSessionKeyPrefixes``hooks.allowRequestSessionKey=true`。静态映射键不需要该显式启用。
**端点:**
- `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`(默认值:`false`时,才接受请求负载中的 `sessionKey`
- 仅当 `hooks.allowRequestSessionKey=true` 时,才接受请求负载中的 `sessionKey`(默认值:`false`
- `POST /hooks/<name>` → 通过 `hooks.mappings` 解析
- 通过模板渲染得到的映射 `sessionKey` 值会被视为外部提供,因此同样要求 `hooks.allowRequestSessionKey=true`
@ -544,24 +549,24 @@ openclaw gateway --port 19001
- `match.path` 匹配 `/hooks` 之后的子路径(例如 `/hooks/gmail``gmail`)。
- `match.source` 匹配通用路径中的某个负载字段。
- 类似 `{{messages[0].subject}}` 这样的模板会从负载中读取
- `transform` 可以指向一个返回 hook 动作的 JS / TS 模块。
- `transform.module` 必须是相对路径,并且必须保持在 `hooks.transformsDir` 内(绝对路径和路径遍历会被拒绝)。
- `agentId` 会路由到定智能体;未知 ID 会回退到默认值。
- `allowedAgentIds`:限制显式路由(`*` 或省略 = 允许全部`[]` = 全部拒绝)。
- `{{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如果设置了模型目录则该模型必须被允许)。
- `allowRequestSessionKey`:允许 `/hooks/agent` 调用方以及模板驱动的映射会话键设置 `sessionKey`(默认值:`false`)。
- `allowedSessionKeyPrefixes`用于显式 `sessionKey` 值(请求 + 映射)的可选前缀允许列表,例如 `["hook:"]`。当任意映射或预设使用模板化 `sessionKey` 时,它就成为必填项。
- `deliver: true` 会将最终回复发送到某个渠道;`channel` 默认为 `last`
- `model` 会覆盖此次 hook 运行使用的 LLM如果设置了模型目录则必须在允许范围内)。
</Accordion>
### Gmail 集成
- 内置 Gmail preset 使用 `sessionKey: "hook:gmail:{{messages[0].id}}"`
- 内置 Gmail 预设使用 `sessionKey: "hook:gmail:{{messages[0].id}}"`
- 如果你保留这种按消息路由的方式,请设置 `hooks.allowRequestSessionKey: true`,并约束 `hooks.allowedSessionKeyPrefixes` 以匹配 Gmail 命名空间,例如 `["hook:", "hook:gmail:"]`
- 如果你需要 `hooks.allowRequestSessionKey: false`,请用静态 `sessionKey` 覆盖该 preset,而不是使用模板化默认值。
- 如果你需要 `hooks.allowRequestSessionKey: false`,请用静态 `sessionKey` 覆盖该预设,而不是使用模板化默认值。
```json5
{
@ -585,7 +590,7 @@ openclaw gateway --port 19001
```
- 配置后Gateway 网关会在启动时自动启动 `gog gmail watch serve`。设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 可禁用。
- 不要在 Gateway 网关运行的同时单独再运行一个 `gog gmail watch serve`
- 不要与 Gateway 网关同时单独运行另一个 `gog gmail watch serve`
---
@ -601,17 +606,17 @@ openclaw gateway --port 19001
}
```
- 通过 Gateway 网关端口下的 HTTP 提供可由智能体编辑的 HTML / CSS / JS 和 A2UI
- 在 Gateway 网关端口下通过 HTTP 提供可由智能体编辑的 HTML/CSS/JS 和 A2UI
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
- 仅限本地:请保持 `gateway.bind: "loopback"`(默认)。
- 非 loopback bindcanvas 路由与其他 Gateway 网关 HTTP 面一样,需要 Gateway 网关认证token / password / trusted-proxy
- 节点 WebView 通常不会发送认证头;节点完成配对并连接后Gateway 网关会为 canvas / A2UI 访问公布节点作用域的 capability URL。
- Capability URL 绑定到当前活动的节点 WS 会话,并会很快过期。不使用基于 IP 的回退。
- 会向所提供的 HTML 中注入 live-reload 客户端
- 为空时会自动创建`index.html`
- 非 loopback bindcanvas 路由与其他 Gateway 网关 HTTP 面一样,需要 Gateway 网关认证token/password/trusted-proxy
- 节点 WebView 通常不会发送认证头节点完成配对并连接后Gateway 网关会为 canvas/A2UI 访问公布节点作用域能力 URL。
- 能力 URL 绑定到当前活动的节点 WS 会话,并且很快过期。不使用基于 IP 的回退。
- 会将 live-reload 客户端注入到所提供的 HTML 中
- 为空时会自动创建`index.html`
- 也会在 `/__openclaw__/a2ui/` 提供 A2UI。
- 更需要重启 Gateway 网关。
- 更需要重启 Gateway 网关。
- 对于大型目录或出现 `EMFILE` 错误时,请禁用 live reload。
---
@ -630,11 +635,11 @@ openclaw gateway --port 19001
}
```
- `minimal`(默认):在 TXT 记录中省略 `cliPath` + `sshPort`
- `full`:包含 `cliPath` + `sshPort`
- `minimal`(默认):在 TXT 记录中省略 `cliPath` `sshPort`
- `full`:包含 `cliPath` `sshPort`
- 主机名默认为 `openclaw`。可通过 `OPENCLAW_MDNS_HOSTNAME` 覆盖。
### 广域DNS-SD
### 广域DNS-SD
```json5
{
@ -644,7 +649,7 @@ openclaw gateway --port 19001
}
```
会在 `~/.openclaw/dns/` 下写入一个单播 DNS-SD 区域。若需跨网络设备发现,请与 DNS 服务器(推荐 CoreDNS+ Tailscale 分离 DNS 配合使用。
会在 `~/.openclaw/dns/` 下写入一个单播 DNS-SD 区域。若需跨网络设备发现,请配合 DNS 服务器(推荐 CoreDNS和 Tailscale split DNS 一起使用。
设置:`openclaw dns setup --apply`。
@ -669,7 +674,7 @@ openclaw gateway --port 19001
}
```
- 仅当进程环境中缺少某个键时,才会应用内联环境变量。
- 仅当进程环境中缺少键时,才会应用内联环境变量。
- `.env` 文件:当前工作目录下的 `.env` + `~/.openclaw/.env`(两者都不会覆盖现有变量)。
- `shellEnv`:从你的登录 shell 配置文件中导入缺失的预期键名。
- 完整优先级请参阅 [环境](/zh-CN/help/environment)。
@ -686,38 +691,38 @@ openclaw gateway --port 19001
}
```
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`。
- 缺失 / 为空的变量会在加载配置时抛出错误。
- 使用 `$${VAR}` 可转义为字面量 `${VAR}`
- `$include` 同样有效
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`。
- 缺失/为空的变量会在加载配置时抛出错误。
- 使用 `$${VAR}` 来转义,得到字面量 `${VAR}`
- 适用于 `$include`
---
## 密钥
SecretRef 是增量式支持的:明文值仍然可用。
SecretRef 采用增量方式:明文值仍然可用。
### `SecretRef`
使用一种对象结构:
使用以下对象结构:
```json5
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
```
验规则:
规则:
- `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: "file"` 的 id绝对 JSON 指针(例如 `"/providers/openai/apiKey"`
- `source: "exec"` 的 id 模式:`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
- `source: "exec"` 的 id 不能包含以 `/` 分隔的 `.``..` 路径段(例如 `a/../b` 会被拒绝)
- `source: "exec"` 的 id 不得包含以斜杠分隔的 `.``..` 路径段(例如 `a/../b` 会被拒绝)
### 支持的凭证
### 支持的凭证面
- 规范矩阵:[SecretRef 凭证面](/zh-CN/reference/secretref-credential-surface)
- 规范矩阵:[SecretRef 凭证面](/zh-CN/reference/secretref-credential-surface)
- `secrets apply` 以受支持的 `openclaw.json` 凭证路径为目标。
- `auth-profiles.json` 中的 ref 也包含在运行时解析和审计覆盖范围内
- `auth-profiles.json` 中的引用会被纳入运行时解析和审计覆盖范围
### 密钥提供商配置
@ -750,13 +755,13 @@ SecretRef 是增量式支持的:明文值仍然可用。
说明:
- `file` 提供商支持 `mode: "json"``mode: "singleValue"`(在 singleValue 模式下,`id` 必须为 `"value"`)。
- 当无法验证 Windows ACL 时file 和 exec 提供商路径会以关闭方式失败。仅对无法验证但信任的路径设置 `allowInsecurePath: true`
- `exec` 提供商要求 `command` 为绝对路径,并通过 stdin / stdout 上的协议负载工作
- 默认情况下,符号链接命令路径会被拒绝。设置 `allowSymlinkCommand: true` 可允许符号链接路径,同时仍校验其解析后的目标路径。
- 如果配置了 `trustedDirs`,则受信任目录检查会应用解析后的目标路径。
- `exec` 子进程环境默认最小化;请通过 `passEnv` 显式传所需变量。
- SecretRef 会在激活时解析为内存中的快照,之后请求路径只读取该快照。
- 激活期间会应用活跃表面过滤:启用表面上的未解析 ref 会导致启动 / 重载失败,而未激活的表面则会被跳过并附带诊断信息。
- 当 Windows ACL 验证不可用file 和 exec 提供商路径会以关闭方式失败。仅对无法验证但信任的路径设置 `allowInsecurePath: true`
- `exec` 提供商要求使用绝对 `command` 路径,并通过 stdin/stdout 使用协议负载
- 默认情况下,符号链接命令路径会被拒绝。设置 `allowSymlinkCommand: true` 可允许符号链接路径,同时验证解析后的目标路径。
- 如果配置了 `trustedDirs`,则受信任目录检查会应用解析后的目标路径。
- `exec` 子进程环境默认最小化;请通过 `passEnv` 显式传所需变量。
- SecretRef 会在激活时解析到内存快照中,之后请求路径只读取该快照。
- 激活期间会应用活动面过滤:已启用面的未解析引用会导致启动/重载失败,而非活动面会被跳过并输出诊断信息。
---
@ -778,13 +783,13 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- 每个智能体的 profile 存储在 `<agentDir>/auth-profiles.json`
- `auth-profiles.json` 支持静态凭证模式下的值级 ref`api_key` 使用 `keyRef``token` 使用 `tokenRef`)。
- OAuth 模式 profile`auth.profiles.<id>.mode = "oauth"`)不支持由 SecretRef 支持的 auth-profile 凭证。
- 静态运行时凭证来自内存中的已解析快照;发现旧版静态 `auth.json` 条目时会进行清理
- 旧版 OAuth 导入来自 `~/.openclaw/credentials/oauth.json`
- 请参阅 [OAuth](/zh-CN/concepts/oauth)。
- Secrets 运行时行为以及 `audit/configure/apply` 工具:请参阅 [Secrets 管理](/zh-CN/gateway/secrets)。
- 按智能体划分的配置文件存储在 `<agentDir>/auth-profiles.json`
- `auth-profiles.json` 支持值级引用(静态凭证模式下,`api_key` 使用 `keyRef``token` 使用 `tokenRef`)。
- OAuth 模式配置文件`auth.profiles.<id>.mode = "oauth"`)不支持由 SecretRef 支持的 auth-profile 凭证。
- 静态运行时凭证来自已解析的内存快照;发现旧版静态 `auth.json` 条目时会将其清除
- 旧版 OAuth 会从 `~/.openclaw/credentials/oauth.json` 导入
- 参见 [OAuth](/zh-CN/concepts/oauth)。
- 密钥运行时行为及 `audit/configure/apply` 工具:参见 [密钥管理](/zh-CN/gateway/secrets)。
### `auth.cooldowns`
@ -806,20 +811,20 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `billingBackoffHours`:当某个 profile 因真正
计费 / 余额不足错误而失败时的基础退避时间(单位:小时,默认值:`5`)。即使在 `401` / `403` 响应中,明确的计费文本
仍可能归入这里,但提供商特定的文本
匹配器仍只作用于拥有它们的提供商(例如 OpenRouter
`Key limit exceeded`)。可重试的 HTTP `402`窗口或
组织 / 工作区支出上限消息则仍归入 `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`
- `billingBackoffHours`:当某个配置文件因真实
账单/额度不足错误而失败时,基础回退时间(小时)(默认值:`5`)。明确的账单文本
即使出现在 `401`/`403` 响应中,仍可能归入这里,但提供商特定的文本
匹配器仍限定在其所属提供商范围内(例如 OpenRouter
`Key limit exceeded`)。可重试的 HTTP `402` 使用窗口或
组织/工作区支出上限消息则仍归入 `rate_limit` 路径。
- `billingBackoffHoursByProvider`:按提供商覆盖账单回退小时数的可选配置。
- `billingMaxHours`账单回退指数增长的小时上限(默认值:`24`)。
- `authPermanentBackoffMinutes`:高置信度 `auth_permanent` 失败的基础回退时间(分钟)(默认值:`10`)。
- `authPermanentMaxMinutes``auth_permanent` 退增长的分钟上限(默认值:`60`)。
- `failureWindowHours`:用于回退计数器的滚动窗口(小时)(默认值:`24`)。
- `overloadedProfileRotations`在切换到模型回退前,针对过载错误允许的同一提供商 auth-profile 轮换最大次数(默认值:`1`)。例如 `ModelNotReadyException` 这类提供商繁忙形态就归入这里
- `overloadedBackoffMs`:在重试过载提供商/配置文件轮换前的固定延迟(毫秒)(默认值:`0`)。
- `rateLimitedProfileRotations`在切换到模型回退前,针对限流错误允许的同一提供商 auth-profile 轮换最大次数(默认值:`1`)。该限流桶包括提供商形态文本,例如 `Too many concurrent requests`、`ThrottlingException`、`concurrency limit reached`、`workers_ai ... quota limit exceeded` 和 `resource exhausted`
---
@ -840,8 +845,8 @@ SecretRef 是增量式支持的:明文值仍然可用。
- 默认日志文件:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`。
- 设置 `logging.file` 可使用稳定路径。
- 使用 `--verbose` 时,`consoleLevel` 会提升 `debug`
- `maxFileBytes`:在抑制写入前日志文件允许的最大大小,单位为字节(正整数;默认值:`524288000` = 500 MB。生产部署请使用外部日志轮转。
- 使用 `--verbose` 时,`consoleLevel` 会提升 `debug`
- `maxFileBytes`:在抑制写入前允许的最大日志文件大小(字节)(正整数;默认值:`524288000` = 500 MB。生产部署请使用外部日志轮转。
---
@ -886,22 +891,22 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `enabled`instrumentation 输出的总开关(默认值:`true`)。
- `flags`:启用定向日志输出的标志字符串数组(支持 `"telegram.*"``"*"` 这样的通配符)。
- `stuckSessionWarnMs`:当某个会话仍处于 processing 状态时,发出会话卡住警告的年龄阈值,单位为毫秒
- `otel.enabled`:启用 OpenTelemetry 导出流水线(默认值:`false`)。
- `enabled`仪表输出的总开关(默认值:`true`)。
- `flags`用于启用定向日志输出的标志字符串数组(支持 `"telegram.*"``"*"` 之类的通配符)。
- `stuckSessionWarnMs`:当会话持续处于处理中状态时,发出卡住会话警告的时间阈值(毫秒)
- `otel.enabled`:启用 OpenTelemetry 导出线(默认值:`false`)。
- `otel.endpoint`:用于 OTel 导出的 collector URL。
- `otel.protocol``"http/protobuf"`(默认)或 `"grpc"`
- `otel.headers`:随 OTel 导出请求发送的额外 HTTP / gRPC 元数据头。
- `otel.headers`:随 OTel 导出请求发送的额外 HTTP/gRPC 元数据头。
- `otel.serviceName`:资源属性的服务名称。
- `otel.traces` / `otel.metrics` / `otel.logs`:启用 trace、metrics 或 log 导出。
- `otel.traces` / `otel.metrics` / `otel.logs`:启用 trace、metrics 或日志导出。
- `otel.sampleRate`trace 采样率,范围 `0``1`。
- `otel.flushIntervalMs`:定期刷新 telemetry 的间隔,单位为毫秒
- `otel.captureContent`显式启用将原始内容捕获为 OTEL span 属性。默认关闭。布尔值 `true` 会捕获非 system 的消息 / 工具内容;对象形式可让你显式启用 `inputMessages`、`outputMessages`、`toolInputs`、`toolOutputs` 和 `systemPrompt`
- `OPENCLAW_OTEL_PRELOADED=1`:用于那些已注册全局 OpenTelemetry SDK 的主机的环境开关。此时 OpenClaw 会跳过插件自有的 SDK 启动 / 关闭流程,同时保持诊断监听器处于活动状态。
- `cacheTrace.enabled`:为嵌入式运行记录缓存 trace 快照(默认值:`false`)。
- `cacheTrace.filePath`:缓存 trace JSONL 的输出路径(默认值:`$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`)。
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`:控制缓存 trace 输出中包含哪些内容(默认全部`true`)。
- `otel.flushIntervalMs`:定期刷新遥测数据的时间间隔(毫秒)
- `otel.captureContent`用于 OTel span 属性的原始内容捕获选择性启用项。默认关闭。布尔值 `true` 会捕获非 system 的消息/工具内容;对象形式可让你显式启用 `inputMessages`、`outputMessages`、`toolInputs`、`toolOutputs` 和 `systemPrompt`
- `OPENCLAW_OTEL_PRELOADED=1`用于已注册全局 OpenTelemetry SDK 的主机的环境开关。OpenClaw 随后会跳过插件自有的 SDK 启动/关闭,同时保持诊断监听器处于活动状态。
- `cacheTrace.enabled`:为嵌入式运行记录缓存跟踪快照(默认值:`false`)。
- `cacheTrace.filePath`:缓存跟踪 JSONL 的输出路径(默认值:`$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`)。
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`:控制缓存跟踪输出中包含哪些内容(默认均`true`)。
---
@ -923,12 +928,12 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `channel`:用于 npm / git 安装的发布渠道——`"stable"`、`"beta"` 或 `"dev"`
- `checkOnStart`Gateway 网关启动时检查 npm 更新(默认值:`true`)。
- `channel`用于 npm/git 安装的发布渠道——`"stable"`、`"beta"` 或 `"dev"`
- `checkOnStart`Gateway 网关启动时检查 npm 更新(默认值:`true`)。
- `auto.enabled`:为包安装启用后台自动更新(默认值:`false`)。
- `auto.stableDelayHours`stable 渠道自动应用前的最小延迟小时数(默认值:`6`;最大值:`168`)。
- `auto.stableJitterHours`stable 渠道额外的发布扩散时间窗口,单位为小时(默认值:`12`;最大值:`168`)。
- `auto.betaCheckIntervalHours`beta 渠道检查运行频率,单位为小时(默认值:`1`;最大值:`24`)。
- `auto.stableDelayHours`stable 渠道自动应用前的最小延迟(小时)(默认值:`6`;最大值:`168`)。
- `auto.stableJitterHours`stable 渠道额外发布扩散窗口(小时)(默认值:`12`;最大值:`168`)。
- `auto.betaCheckIntervalHours`beta 渠道检查运行频率(小时)(默认值:`1`;最大值:`24`)。
---
@ -961,21 +966,21 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `enabled`:全局 ACP 功能开关(默认值:`false`)。
- `dispatch.enabled`ACP 会话轮次分发的独立开关(默认值:`true`)。设为 `false` 可保留 ACP 命令可用,同时阻止执行。
- `backend`:默认 ACP 运行时 backend id必须与已注册的 ACP 运行时插件匹配)。
- `enabled`:全局 ACP 功能门控(默认值:`false`)。
- `dispatch.enabled`ACP 会话轮次分发的独立门控(默认值:`true`)。设为 `false` 可在保留 ACP 命令可用的同时阻止执行。
- `backend`:默认 ACP 运行时后端 id必须与已注册的 ACP 运行时插件匹配)。
- `defaultAgent`:当 spawn 未指定显式目标时ACP 目标智能体 id 的回退值。
- `allowedAgents`:允许用于 ACP 运行时会话的智能体 id 允许列表;空列表表示没有额外限制。
- `allowedAgents`:允许用于 ACP 运行时会话的智能体 id 列表;空值表示无额外限制。
- `maxConcurrentSessions`:同时处于活动状态的 ACP 会话最大数量。
- `stream.coalesceIdleMs`:流式文本的空闲合并刷新窗口,单位为毫秒
- `stream.maxChunkChars`:流式块投影在拆分允许的最大块大小。
- `stream.repeatSuppression`每轮抑制重复的状态 / 工具行(默认值:`true`)。
- `stream.deliveryMode``"live"` 表示增量流式传输;`"final_only"` 表示缓冲到轮次终事件后再输出。
- `stream.hiddenBoundarySeparator`在隐藏工具事件后的可见文本之前使用的分隔符(默认值:`"paragraph"`)。
- `stream.coalesceIdleMs`:流式文本的空闲合并刷新窗口(毫秒)
- `stream.maxChunkChars`拆分流式块投影前的最大块大小。
- `stream.repeatSuppression`按轮次抑制重复的状态/工具行(默认值:`true`)。
- `stream.deliveryMode``"live"` 表示增量流式传输;`"final_only"` 表示缓冲到轮次终事件后再输出。
- `stream.hiddenBoundarySeparator`隐藏工具事件后、可见文本前的分隔符(默认值:`"paragraph"`)。
- `stream.maxOutputChars`:每个 ACP 轮次投影的智能体输出最大字符数。
- `stream.maxSessionUpdateChars`:投影的 ACP 状态 / 更新行最大字符数。
- `stream.tagVisibility`标签名称到布尔可见性覆盖的记录,用于流式事件。
- `runtime.ttlMinutes`ACP 会话工作进程在可被清理前的空闲 TTL单位为分钟
- `stream.maxSessionUpdateChars`:投影的 ACP 状态/更新行最大字符数。
- `stream.tagVisibility`记录 tag 名称到布尔可见性覆盖值的映射,用于流式事件。
- `runtime.ttlMinutes`ACP 会话工作进程在可清理前的空闲 TTL分钟
- `runtime.installCommand`:在引导 ACP 运行时环境时执行的可选安装命令。
---
@ -992,11 +997,11 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `cli.banner.taglineMode` 控制横幅标语样式:
- `"random"`(默认):轮换的有趣 / 季节性标语。
- `"default"`:固定中性标语(`All your chats, one OpenClaw.`)。
- `"off"`:不显示标语文本(仍会显示横幅标题 / 版本)。
- 若要隐藏整个横幅(而不只是标语),请设置环境变量 `OPENCLAW_HIDE_BANNER=1`
- `cli.banner.taglineMode` 控制 banner 标语样式:
- `"random"`(默认):轮换显示有趣/季节性标语。
- `"default"`:固定中性标语(`All your chats, one OpenClaw.`)。
- `"off"`:不显示标语文本(仍显示 banner 标题/版本)。
- 若要隐藏整个 banner(而不只是标语),请设置环境变量 `OPENCLAW_HIDE_BANNER=1`
---
@ -1026,7 +1031,7 @@ SecretRef 是增量式支持的:明文值仍然可用。
## Bridge protocol旧版节点历史参考旧版已移除
当前构建不再包含 TCP bridge。节点通过 Gateway 网关 WebSocket 连接。`bridge.*` 键已不再属于配置 schema 的一部分(在移除前验会失败;`openclaw doctor --fix` 可清除未知键)。
当前构建不再包含 TCP bridge。节点通过 Gateway 网关 WebSocket 连接。`bridge.*` 键已不再属于配置 schema 的一部分(在移除前验会失败;`openclaw doctor --fix` 可清除未知键)。
<Accordion title="旧版 bridge 配置(历史参考)">
@ -1066,11 +1071,11 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `sessionRetention`完成的独立 cron 运行会话在从 `sessions.json` 清理前保留多久。也控制已归档且已删除的 cron transcript 的清理。默认值:`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 URLhttp / https仅用于仍保留 `notify: true` 的已存储作业
- `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 URLhttp/https仅用于仍保留 `notify: true` 的已存储任务
### `cron.retry`
@ -1086,11 +1091,11 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `maxAttempts`:一次性作业在暂时性错误下的最大重试次数(默认值:`3`;范围:`0``10`)。
- `backoffMs`:每次重试尝试使用的退避延迟数组,单位为毫秒(默认值:`[30000, 60000, 300000]`110 个条目)。
- `retryOn`:触发重试的错误类型——`"rate_limit"`、`"overloaded"`、`"network"`、`"timeout"`、`"server_error"`。省略则会重试所有暂时性类型。
- `maxAttempts`:一次性任务在瞬时错误下的最大重试次数(默认值:`3`;范围:`0``10`)。
- `backoffMs`:每次重试尝试对应的回退延迟数组(毫秒)(默认值:`[30000, 60000, 300000]`110 个条目)。
- `retryOn`:触发重试的错误类型——`"rate_limit"`、`"overloaded"`、`"network"`、`"timeout"`、`"server_error"`。省略则重试所有瞬时类型。
仅适用于一次性 cron 作业。周期性作业使用单独的失败处理方式
仅适用于一次性 cron 任务。周期性任务使用单独的失败处理机制
### `cron.failureAlert`
@ -1108,11 +1113,11 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- `enabled`启用 cron 作业失败告警(默认值:`false`)。
- `after`连续失败多少次后触发告警(正整数,最小值:`1`)。
- `cooldownMs`:同一作业重复告警之间的最小毫秒间隔(非负整数)。
- `enabled`为 cron 任务启用失败告警(默认值:`false`)。
- `after`在触发告警前的连续失败次数(正整数,最小值:`1`)。
- `cooldownMs`:同一任务重复告警之间的最小间隔(毫秒)(非负整数)。
- `mode`:投递模式——`"announce"` 通过渠道消息发送;`"webhook"` 向已配置的 webhook 发送 POST。
- `accountId`:用于限定告警投递范围的可选账号或渠道 id
- `accountId`可选的账号或渠道 id用于限定告警投递范围。
### `cron.failureDestination`
@ -1129,16 +1134,16 @@ SecretRef 是增量式支持的:明文值仍然可用。
}
```
- 所有作业共享的 cron 失败通知默认目标。
- `mode``"announce"` 或 `"webhook"`;当存在足够的目标数据时,默认值为 `"announce"`
- `channel`announce 投递的渠道覆盖值。`"last"` 会复用最后一次已知投递渠道。
- 所有任务共用的 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"`
- 单个任务的 `delivery.failureDestination` 会覆盖该全局默认值。
- 当全局和单任务失败目标都未设置时,已经通过 `announce` 投递的任务在失败时会回退到其主 announce 目标。
- `delivery.failureDestination` 仅支持 `sessionTarget="isolated"`任务,除非该任务的主 `delivery.mode``"webhook"`
请参阅 [Cron 作业](/zh-CN/automation/cron-jobs)。独立的 cron 执行会作为[后台任务](/zh-CN/automation/tasks)进行跟踪。
请参阅 [Cron Jobs](/zh-CN/automation/cron-jobs)。隔离的 cron 执行会作为 [后台任务](/zh-CN/automation/tasks) 跟踪。
---
@ -1146,34 +1151,34 @@ SecretRef 是增量式支持的:明文值仍然可用。
`tools.media.models[].args` 中展开的模板占位符:
| Variable | 说明 |
| ------------------ | ---- |
| `{{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}}` | 发送者电话号码(尽力而为) |
| Variable | 描述 |
| ------------------ | ------------------------------------------------- |
| `{{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`
## 配置包含`$include`
将配置拆分到多个文件中
将配置拆分为多个文件
```json5
// ~/.openclaw/openclaw.json
@ -1188,14 +1193,14 @@ SecretRef 是增量式支持的:明文值仍然可用。
**合并行为:**
- 单个文件:替换其所在的包含对象。
- 文件数组:按顺序进行深度合并(后者覆盖前者)。
- 同级键:在 include 之后合并(覆盖 include 中的值)。
- 嵌套 include:最多 10 层。
- 路径:相对于包含它的文件解析,但必须保持在顶层配置目录(`openclaw.json` 的 `dirname`)内。仅当绝对路径 / `../` 形式最终解析后仍位于该边界内时,才允许使用
- 由 OpenClaw 发起、且只更改由单文件 include 支持的某一个顶层 section 的写入,会直接写回该 include 文件。例如,`plugins install` 会将 `plugins: { $include: "./plugins.json5" }`更新写入 `plugins.json5`,并保持 `openclaw.json` 不变。
- 根级 include、include 数组,以及带有同级覆盖的 include,对于由 OpenClaw 发起的写入来说是只读的;这些写入会以关闭方式失败,而不会将配置展平。
- 错误:对于缺失文件、解析错误和循环 include都有清晰的报错信息。
- 单个文件:替换其所在的对象。
- 文件数组:按顺序深度合并(后者覆盖前者)。
- 同级键:在包含项之后合并(覆盖已包含的值)。
- 嵌套包含:最多 10 层。
- 路径:相对于包含它的文件解析,但必须保持在顶层配置目录(`openclaw.json` 的 `dirname`)内。仅当绝对路径/`../` 形式最终仍解析到该边界内时才允许
- 当 OpenClaw 自有写入仅变更一个由单文件 include 支持的顶层 section 时,会直接写回该包含文件。例如,`plugins install` 会更新 `plugins: { $include: "./plugins.json5" }` `plugins.json5`,并保持 `openclaw.json` 不变。
- 根级 includes、include 数组,以及带有同级覆盖的 includes 对 OpenClaw 自有写入来说是只读的;这些写入会以关闭方式失败,而不是将配置拍平。
- 错误:对缺失文件、解析错误和循环包含提供清晰的错误消息。
---

View File

@ -2,32 +2,34 @@
read_when:
- 首次设置 OpenClaw
- 查找常见配置模式
- 导航到特定配置章节
summary: 配置概览:常见任务、快速设置,以及完整参考的链接
- 前往特定配置章节
summary: 配置概览:常见任务、快速设置,以及指向完整参考的链接
title: 配置
x-i18n:
generated_at: "2026-04-25T03:24:36Z"
generated_at: "2026-04-25T07:51:43Z"
model: gpt-5.4
provider: openai
source_hash: 2749fca881115d1d1915271af2d06037cfe87d6c4caf96dc46d8bf893a0669c6
source_hash: a8ffe1972fc7680d4cfc55a24fd6fc3869af593faf8c1137369dad0dbefde43a
source_path: gateway/configuration.md
workflow: 15
---
OpenClaw 会从 `~/.openclaw/openclaw.json` 读取可选的 <Tooltip tip="JSON5 支持注释和尾随逗号">**JSON5**</Tooltip> 配置。
生效的配置路径必须是常规文件。对于由 OpenClaw 管理的写入操作,不支持使用符号链接的 `openclaw.json`
布局;原子写入可能会替换该路径,而不是保留符号链接。如果你将配置保存在默认状态目录之外,请将 `OPENCLAW_CONFIG_PATH` 直接指向真实文件。
OpenClaw 会从 `~/.openclaw/openclaw.json` 读取一个可选的 <Tooltip tip="JSON5 支持注释和尾随逗号">**JSON5**</Tooltip> 配置文件。
当前生效的配置路径必须是普通文件。对于由 OpenClaw 管理的写入操作,不支持将 `openclaw.json`
设为符号链接;原子写入可能会替换该路径,
而不是保留符号链接。如果你将配置保存在默认状态目录之外,
请将 `OPENCLAW_CONFIG_PATH` 直接指向真实文件。
如果文件缺失OpenClaw 会使用安全默认值。添加配置的常见原因包括:
如果该文件不存在OpenClaw 会使用安全默认值。常见的添加配置原因包括:
- 连接渠道并控制谁可以向机器人发送消息
- 连接渠道并控制谁可以向机器人发送消息
- 设置模型、工具、沙箱隔离或自动化cron、hooks
- 调整会话、媒体、网络或 UI
请参阅[完整参考](/zh-CN/gateway/configuration-reference)了解所有可用字段。
<Tip>
**刚接触配置?** 可先使用 `openclaw onboard` 进行交互式设置,或查看[配置示例](/zh-CN/gateway/configuration-examples)指南,获取可直接复制粘贴的完整配置。
**刚开始接触配置?** 从 `openclaw onboard` 开始进行交互式设置,或查看 [Configuration Examples](/zh-CN/gateway/configuration-examples) 指南,获取可直接复制粘贴的完整配置。
</Tip>
## 最小配置
@ -57,53 +59,54 @@ OpenClaw 会从 `~/.openclaw/openclaw.json` 读取可选的 <Tooltip tip="JSON5
```
</Tab>
<Tab title="Control UI">
打开 [http://127.0.0.1:18789](http://127.0.0.1:18789) 并使用 **配置** 标签页
Control UI 会根据实时配置 schema 渲染表单,其中包字段
`title` / `description` 文档元数据,以及可用时的插件和渠道 schema
同时提供 **Raw JSON** 编辑器作为兜底方案。对于下钻式
UI 和其他工具,Gateway 网关 还提供 `config.schema.lookup`
用于获取单个路径范围的 schema 节点及其直接子节点摘要。
打开 [http://127.0.0.1:18789](http://127.0.0.1:18789) 并使用 **配置** 选项卡
Control UI 会根据实时配置 schema 渲染表单,其中包字段
`title` / `description` 文档元数据,以及在可用时包含插件和渠道 schema
并提供 **Raw JSON** 编辑器作为兜底方式。对于下钻式
UI 和其他工具,网关还提供 `config.schema.lookup`
用于获取单个路径范围的 schema 节点及其直接子节点摘要。
</Tab>
<Tab title="直接编辑">
直接编辑 `~/.openclaw/openclaw.json`。Gateway 网关 会监视该文件并自动应用更改(参见[热重载](#config-hot-reload))。
直接编辑 `~/.openclaw/openclaw.json`。Gateway 网关会监视该文件并自动应用更改(参见[热重载](#config-hot-reload))。
</Tab>
</Tabs>
## 严格校验
<Warning>
OpenClaw 仅接受完全匹配 schema 的配置。未知键名、格式错误的类型或无效值都会导致 Gateway 网关 **拒绝启动**。唯一的根级例外是 `$schema`(字符串),这样编辑器就可以附加 JSON Schema 元数据。
OpenClaw 只接受完全匹配 schema 的配置。未知键、错误类型或无效值都会导致 Gateway 网关**拒绝启动**。根级别唯一的例外是 `$schema`(字符串),这样编辑器就可以附加 JSON Schema 元数据。
</Warning>
`openclaw config schema` 会打印 Control UI
和校验使用的规范 JSON Schema。`config.schema.lookup` 会获取单个路径范围节点及其
子节点摘要,用于下钻式工具。字段 `title`/`description` 的文档元数据
贯穿嵌套对象、通配符(`*`)、数组项(`[]`)以及 `anyOf`/
`oneOf`/`allOf` 分支。运行时插件和渠道 schema 会在
manifest 注册表加载后合并进来。
`openclaw config schema` 会打印 Control UI
和校验使用的规范 JSON Schema。`config.schema.lookup` 会获取单个路径范围内的节点及其
子节点摘要,供下钻式工具使用。字段 `title`/`description` 文档元数据
延续到嵌套对象、通配符(`*`)、数组项(`[]`)以及 `anyOf`/
`oneOf`/`allOf` 分支中。加载 manifest 注册表后,
运行时插件和渠道 schema 也会合并进来。
当校验失败时:
- Gateway 网关 不会启动
- Gateway 网关不会启动
- 只有诊断命令可用(`openclaw doctor`、`openclaw logs`、`openclaw health`、`openclaw status`
- 运行 `openclaw doctor` 查看具体问题
- 运行 `openclaw doctor --fix`(或 `--yes`)应用修复
- 运行 `openclaw doctor --fix`(或 `--yes`应用修复
Gateway 网关 在每次成功启动后都会保留一份可信的最近一次正常配置副本。
如果之后 `openclaw.json` 校验失败(或丢失 `gateway.mode`、明显缩小、
或前面意外插入了一行日志OpenClaw 会将损坏的文件保留为
`.clobbered.*`,恢复最近一次正常配置副本,并记录恢复原因。
下一次智能体回合还会收到系统事件警告,这样主智能体就不会盲目重写已恢复的配置。
如果候选配置包含诸如 `***` 之类的已脱敏密钥占位符,则不会将其提升为最近一次正常配置。
每次成功启动后Gateway 网关都会保留一份可信的最近一次正确副本。
如果之后 `openclaw.json` 校验失败(或缺少 `gateway.mode`、内容
明显缩小或文件开头意外插入了一行日志OpenClaw 会将损坏文件
保存为 `.clobbered.*`,恢复最近一次正确副本,并记录恢复原因。
下一次智能体轮次还会收到系统事件警告,这样主智能体
就不会盲目重写已恢复的配置。当候选配置包含已脱敏的密钥占位符(例如 `***`)时,
不会将其提升为最近一次正确副本。
当所有校验问题都限定在 `plugins.entries.<id>...` 范围内时OpenClaw
不会执行整文件恢复。它会保持当前配置继续生效,并显示插件局部失败,
这样插件 schema 或宿主版本不匹配就不会回滚无关的用户设置。
不会执行整文件恢复。它会保留当前配置继续生效,并暴露插件局部失败,
这样插件 schema 或主版本不匹配就不会回滚其他无关的用户设置。
## 常见任务
<AccordionGroup>
<Accordion title="设置一个渠道WhatsApp、Telegram、Discord 等)">
每个渠道在 `channels.<provider>` 下都有自己的配置章节。设置步骤请参阅对应渠道页面:
每个渠道在 `channels.<provider>` 下都有自己的配置区段。设置步骤请参阅对应的专用渠道页面:
- [WhatsApp](/zh-CN/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/zh-CN/channels/telegram) — `channels.telegram`
@ -116,7 +119,7 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
- [iMessage](/zh-CN/channels/imessage) — `channels.imessage`
- [Mattermost](/zh-CN/channels/mattermost) — `channels.mattermost`
所有渠道共享相同的私信策略模式:
所有渠道共享相同的私信策略模式:
```json5
{
@ -134,7 +137,7 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
</Accordion>
<Accordion title="选择并配置模型">
设置主模型以及可选的回退模型:
设置主模型和可选回退模型:
```json5
{
@ -153,31 +156,31 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- `agents.defaults.models` 定义模型目录,并充当 `/model` 的 allowlist。
- 使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 添加 allowlist 条目,而不会移除现有模型普通替换会移除条目,则会被拒绝,除非你传入 `--replace`
- `agents.defaults.models` 定义模型目录,并作为 `/model` 的 allowlist。
- 使用 `openclaw config set agents.defaults.models '<json>' --strict-json --merge` 可在不移除现有模型的情况下添加 allowlist 条目。普通替换如果会移除条目,则会被拒绝,除非你传入 `--replace`
- 模型引用使用 `provider/model` 格式(例如 `anthropic/claude-opus-4-6`)。
- `agents.defaults.imageMaxDimensionPx` 控制转录/工具图像的缩放下限(默认 `1200`);较低的值通常会在大量截图的运行中减少视觉 token 使用量。
- 请参阅[Models CLI](/zh-CN/concepts/models)了解如何在聊天中切换模型,并参阅[模型故障切换](/zh-CN/concepts/model-failover)了解凭证轮换和回退行为
- 对于自定义/自托管提供商,请参阅参考中的[自定义提供商](/zh-CN/gateway/config-tools#custom-providers-and-base-urls)。
- `agents.defaults.imageMaxDimensionPx` 控制转录记录/工具图像的缩放上限(默认 `1200`);较低的值通常会减少截图较多运行中的视觉 token 使用量。
- 关于在聊天中切换模型,请参阅 [Models CLI](/zh-CN/concepts/models);关于凭证轮换和回退行为,请参阅 [Model Failover](/zh-CN/concepts/model-failover)
- 对于自定义/自托管提供商,请参阅参考中的 [Custom providers](/zh-CN/gateway/config-tools#custom-providers-and-base-urls)。
</Accordion>
<Accordion title="控制谁可以向机器人发送消息">
私信访问权限通过每个渠道的 `dmPolicy` 控制:
私信访问通过每个渠道的 `dmPolicy` 控制:
- `"pairing"`(默认):未知发送者会收到一个一次性配对码以供批准
- `"pairing"`(默认):未知发送者会收到一次性配对码以供批准
- `"allowlist"`:仅允许 `allowFrom` 中的发送者(或已配对的允许存储)
- `"open"`:允许所有传入私信(要求 `allowFrom: ["*"]`
- `"disabled"`:忽略所有私信
对于群组,请使用 `groupPolicy` + `groupAllowFrom` 或渠道特定的 allowlist。
请参阅[完整参考](/zh-CN/gateway/config-channels#dm-and-group-access)了解各渠道的详细信息
每个渠道的详细信息请参阅[完整参考](/zh-CN/gateway/config-channels#dm-and-group-access)。
</Accordion>
<Accordion title="设置群聊提及门控">
消息默认**要求提及**。可按智能体配置模式:
群消息默认**要求提及**。可按智能体配置模式:
```json5
{
@ -201,12 +204,12 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
- **元数据提及**:原生 @ 提及WhatsApp 点按提及、Telegram @bot 等)
- **文本模式**`mentionPatterns` 中的安全正则模式
- 请参阅[完整参考](/zh-CN/gateway/config-channels#group-chat-mention-gating)了解各渠道覆盖项和自聊模式
- 每个渠道的覆盖项和自聊模式请参阅[完整参考](/zh-CN/gateway/config-channels#group-chat-mention-gating)。
</Accordion>
<Accordion title="按智能体限制 Skills">
对共享基线使用 `agents.defaults.skills`,然后通过 `agents.list[].skills` 覆盖特定
使用 `agents.defaults.skills` 作为共享基线,然后通过 `agents.list[].skills` 覆盖特定
智能体:
```json5
@ -224,16 +227,16 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- 省略 `agents.defaults.skills` 则默认 Skills 不受限制
- 省略 `agents.list[].skills` 则继承默认值
- 设置 `agents.list[].skills: []` 表示不启用任何 Skills。
- 若默认不限制 Skills省略 `agents.defaults.skills`
- 若要继承默认值,请省略 `agents.list[].skills`
- `agents.list[].skills: []` 设为空即可禁用所有 Skills。
- 请参阅 [Skills](/zh-CN/tools/skills)、[Skills 配置](/zh-CN/tools/skills-config),以及
[配置参考](/zh-CN/gateway/config-agents#agents-defaults-skills)。
[Configuration Reference](/zh-CN/gateway/config-agents#agents-defaults-skills)。
</Accordion>
<Accordion title="调整网关渠道健康监控">
控制网关对看起来已停滞渠道的重启激进程度:
控制网关对看起来陈旧的渠道执行重启的积极程度:
```json5
{
@ -255,14 +258,14 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- 设置 `gateway.channelHealthCheckMinutes: 0` 可全局禁用健康监控重启。
- `gateway.channelHealthCheckMinutes: 0` 设为 0可全局禁用健康监控重启。
- `channelStaleEventThresholdMinutes` 应大于或等于检查间隔。
- 使用 `channels.<provider>.healthMonitor.enabled``channels.<provider>.accounts.<id>.healthMonitor.enabled`,可只为某一个渠道或账户禁用自动重启,而无需关闭全局监控。
- 请参阅[健康检查](/zh-CN/gateway/health)了解运维调试,并参阅[完整参考](/zh-CN/gateway/configuration-reference#gateway)了解所有字段
- 使用 `channels.<provider>.healthMonitor.enabled``channels.<provider>.accounts.<id>.healthMonitor.enabled`,可仅为某个渠道或账户禁用自动重启,而不禁用全局监控。
- 关于运维调试,请参阅 [Health Checks](/zh-CN/gateway/health);关于所有字段,请参阅[完整参考](/zh-CN/gateway/configuration-reference#gateway)。
</Accordion>
<Accordion title="配置会话重置">
<Accordion title="配置会话重置">
会话控制对话连续性和隔离性:
```json5
@ -283,10 +286,10 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- `dmScope`: `main`(共享) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `dmScope``main`(共享)| `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `threadBindings`线程绑定会话路由的全局默认值Discord 支持 `/focus`、`/unfocus`、`/agents`、`/session idle` 和 `/session max-age`)。
- 请参阅[会话管理](/zh-CN/concepts/session)了解作用域、身份关联和发送策略
- 请参阅[完整参考](/zh-CN/gateway/config-agents#session)了解所有字段
- 关于作用域、身份链接和发送策略,请参阅 [Session Management](/zh-CN/concepts/session)
- 关于所有字段,请参阅[完整参考](/zh-CN/gateway/config-agents#session)。
</Accordion>
@ -308,14 +311,14 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
请先构建镜像:`scripts/sandbox-setup.sh`
请参阅[沙箱隔离](/zh-CN/gateway/sandboxing)了解完整指南,并参阅[完整参考](/zh-CN/gateway/config-agents#agentsdefaultssandbox)了解所有选项
完整指南请参阅 [沙箱隔离](/zh-CN/gateway/sandboxing),所有选项请参阅[完整参考](/zh-CN/gateway/config-agents#agentsdefaultssandbox)。
</Accordion>
<Accordion title="为官方 iOS 构建启用基于 relay 的推送">
基于 relay 的推送在 `openclaw.json` 中配置。
Gateway 网关 配置中设置以下内容:
在网关配置中设置以下内容:
```json5
{
@ -324,7 +327,7 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
apns: {
relay: {
baseUrl: "https://relay.example.com",
// 可选。默认值:10000
// Optional. Default: 10000
timeoutMs: 10000,
},
},
@ -333,43 +336,43 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
对应的 CLI 写法
等效 CLI
```bash
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
```
作用如下:
作用如下:
- 让网关可以通过外部 relay 发送 `push.test`、唤醒提示以及重连唤醒。
- 使用由已配对 iOS 应用转发的、按注册范围限定的发送授权。Gateway 网关 不需要部署范围的 relay token。
- 将每个基于 relay 的注册绑定到 iOS 应用配对的 Gateway 网关 身份,因此其他网关无法复用已存储的注册。
- 本地/手动构建的 iOS 版本仍然直接使用 APNs。基于 relay 的发送仅适用于通过 relay 注册的官方分发版本。
- 让网关能够通过外部 relay 发送 `push.test`、唤醒提示和重连唤醒。
- 使用由已配对 iOS 应用转发的注册级发送授权。网关不需要部署范围的 relay token。
- 将每个基于 relay 的注册绑定到 iOS 应用配对时所对应的网关身份,因此其他网关无法复用已存储的注册信息
- 本地/手动构建的 iOS 版本仍然使用直接 APNs。基于 relay 的发送仅适用于通过 relay 注册的官方分发版本。
- 必须与官方/TestFlight iOS 构建中内置的 relay 基础 URL 一致,这样注册和发送流量才能到达同一个 relay 部署。
端到端流程:
1. 安装一个使用相同 relay 基础 URL 编译的官方/TestFlight iOS 构建。
2. 在网关上配置 `gateway.push.apns.relay.baseUrl`
3. 将 iOS 应用与网关配对,并让节点会话和操作员会话都连接成功
4. iOS 应用会获取网关身份,使用 App Attest 和应用回执向 relay 注册,然后将基于 relay 的 `push.apns.register` 负载发布到已配对的网关。
5. Gateway 网关 会存储 relay 句柄和发送授权,然后将它们用于 `push.test`、唤醒提示和重连唤醒。
3. 将 iOS 应用与网关配对,并让节点会话和操作员会话都建立连接。
4. iOS 应用获取网关身份,使用 App Attest 和应用收据向 relay 注册,然后将基于 relay 的 `push.apns.register` 负载发布到已配对的网关。
5. 网关存储 relay 句柄和发送授权,然后将其用于 `push.test`、唤醒提示和重连唤醒。
运维说明:
- 如果你将 iOS 应用切换到另一个网关,请重新连接该应用,以便它发布一个绑定到该网关的新 relay 注册。
- 如果你将 iOS 应用切换到另一个网关,请重新连接该应用,以便它能够发布绑定到该网关的新 relay 注册。
- 如果你发布了一个指向不同 relay 部署的新 iOS 构建,应用会刷新其缓存的 relay 注册,而不是复用旧的 relay 来源。
兼容性说明:
- `OPENCLAW_APNS_RELAY_BASE_URL``OPENCLAW_APNS_RELAY_TIMEOUT_MS` 仍可作为临时环境变量覆盖项使用。
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` 仍然只是一个仅限 local loopback 的开发兜底方案;不要在配置中持久化 HTTP relay URL。
- `OPENCLAW_APNS_RELAY_BASE_URL``OPENCLAW_APNS_RELAY_TIMEOUT_MS`可作为临时环境变量覆盖项使用。
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` 仍然是仅限 loopback 的开发逃生开关;不要在配置中持久保存 HTTP relay URL。
请参阅[iOS App](/zh-CN/platforms/ios#relay-backed-push-for-official-builds)了解端到端流程,并参阅[认证与信任流程](/zh-CN/platforms/ios#authentication-and-trust-flow)了解 relay 安全模型
关于端到端流程,请参阅 [iOS App](/zh-CN/platforms/ios#relay-backed-push-for-official-builds);关于 relay 安全模型,请参阅 [Authentication and trust flow](/zh-CN/platforms/ios#authentication-and-trust-flow)。
</Accordion>
<Accordion title="设置 heartbeat定期 check-in">
<Accordion title="设置心跳(定期检查">
```json5
{
agents: {
@ -383,9 +386,9 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- `every`:时长字符串(`30m`、`2h`)。设`0m` 可禁用。
- `every`:时长字符串(`30m`、`2h`)。设为 `0m` 可禁用。
- `target``last` | `none` | `<channel-id>`(例如 `discord`、`matrix`、`telegram` 或 `whatsapp`
- `directPolicy`用于私信风格 heartbeat 目标的 `allow`(默认)或 `block`
- `directPolicy`对于私信风格的心跳目标,可设为 `allow`(默认)或 `block`
- 完整指南请参阅 [Heartbeat](/zh-CN/gateway/heartbeat)。
</Accordion>
@ -405,14 +408,14 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- `sessionRetention`:从 `sessions.json` 中清理已完成的隔离运行会话(默认 `24h`;设`false` 可禁用)。
- `sessionRetention`:从 `sessions.json` 中清理已完成的隔离运行会话(默认 `24h`;设为 `false` 可禁用)。
- `runLog`:按大小和保留行数清理 `cron/runs/<jobId>.jsonl`
- 功能概览和 CLI 示例请参阅[cron 作业](/zh-CN/automation/cron-jobs)。
- 功能概览和 CLI 示例请参阅 [Cron jobs](/zh-CN/automation/cron-jobs)。
</Accordion>
<Accordion title="设置 webhookhooks">
在 Gateway 网关 上启用 HTTP webhook 端点:
在 Gateway 网关上启用 HTTP webhook 端点:
```json5
{
@ -436,20 +439,20 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
```
安全说明:
- 将所有 hook/webhook 负载内容都视为不受信任输入。
- 将所有 hook/webhook 负载内容视为不可信输入。
- 使用专用的 `hooks.token`;不要复用共享的 Gateway 网关 token。
- Hook 认证仅支持请求头(`Authorization: Bearer ...` 或 `x-openclaw-token`);查询字符串 token 会被拒绝。
- `hooks.path` 不能是 `/`;请将 webhook 入口保在专用子路径下,例如 `/hooks`
- 保持不安全内容绕过标志关闭`hooks.gmail.allowUnsafeExternalContent`、`hooks.mappings[].allowUnsafeExternalContent`),除非你是在进行严格限定范围的调试。
- 如果你启用了 `hooks.allowRequestSessionKey`,也请设置 `hooks.allowedSessionKeyPrefixes` 来限制调用方可选的会话键
- 对于由 hook 驱动的智能体,优先选择更强的现代模型层级和严格的工具策略(例如仅消息传递,并尽可能启用沙箱隔离)。
- `hooks.path` 不能是 `/`;请将 webhook 入口保在专用子路径下,例如 `/hooks`
- 保持不安全内容绕过标志处于禁用状态`hooks.gmail.allowUnsafeExternalContent`、`hooks.mappings[].allowUnsafeExternalContent`),除非你是在进行严格限定范围的调试。
- 如果你启用了 `hooks.allowRequestSessionKey`,也请设置 `hooks.allowedSessionKeyPrefixes`,以限制调用方可选的 session key
- 对于由 hook 驱动的智能体,优先使用强大的现代模型层级和严格工具策略(例如仅消息传递,并尽可能启用沙箱隔离)。
所有映射选项和 Gmail 集成请参阅[完整参考](/zh-CN/gateway/configuration-reference#hooks)。
</Accordion>
<Accordion title="配置多智能体路由">
运行多个彼此隔离、拥有独立工作区和会话的智能体
运行多个相互隔离的智能体,并为它们设置独立工作区和会话
```json5
{
@ -466,11 +469,11 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
绑定规则和每个智能体的访问配置请参阅[多智能体](/zh-CN/concepts/multi-agent)和[完整参考](/zh-CN/gateway/config-agents#multi-agent-routing)。
绑定规则和每个智能体的访问配置请参阅 [Multi-Agent](/zh-CN/concepts/multi-agent) 和[完整参考](/zh-CN/gateway/config-agents#multi-agent-routing)。
</Accordion>
<Accordion title="将配置拆分为多个文件$include">
<Accordion title="将配置拆分到多个文件中$include">
使用 `$include` 组织大型配置:
```json5
@ -484,48 +487,48 @@ Gateway 网关 在每次成功启动后都会保留一份可信的最近一次
}
```
- **单文件**:替换所在的整个对象
- **文件数组**:按顺序深度合并(后者优先
- **同级键**:在 include 之后合并(覆盖包含的值)
- **嵌套 include**:支持,最多 10 层
- **单个文件**:替换包含它的对象
- **文件数组**:按顺序深度合并(后者覆盖前者
- **同级键**:在 include 之后合并(覆盖包含的值)
- **嵌套 include**最多支持 10 层嵌套
- **相对路径**:相对于包含它的文件解析
- **由 OpenClaw 管理的写入**:当某次写入仅更改单个顶层部分,
且该部分由单文件 include 支持,例如 `plugins: { $include: "./plugins.json5" }`
- **由 OpenClaw 管理的写入**:当一次写入只修改一个由单文件 include
支持的顶层区段时,例如 `plugins: { $include: "./plugins.json5" }`
OpenClaw 会更新该被包含文件,并保持 `openclaw.json` 不变
- **不支持的透传写入**:根级 include、include 数组,以及带有
同级覆盖的 include在由 OpenClaw 管理的写入中会以失败关闭,而不是
将配置拍平成单个文件
- **错误处理**:对缺失文件、解析错误和循环 include 提供明确错误信息
同级覆盖的 include在由 OpenClaw 管理的写入中会以封闭失败方式处理,
而不是将配置拍平
- **错误处理**:对于缺失文件、解析错误和循环 include会提供清晰错误
</Accordion>
</AccordionGroup>
## 配置热重载
Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改——大多数设置都不需要手动重启。
Gateway 网关会监视 `~/.openclaw/openclaw.json` 并自动应用更改——大多数设置都不需要手动重启。
直接编辑文件会被视为不受信任,直到通过校验为止。监视器会等待
编辑器临时写入/重命名抖动稳定下来,读取最终文件,并通过恢复
最近一次正常配置来拒绝无效的外部编辑。由 OpenClaw 管理的
配置写入在写入前也会通过相同的 schema 闸门;像删除 `gateway.mode`
或将文件缩小到原来一半以下这类破坏性覆盖会被拒绝,
直接编辑文件会在通过校验前被视为不可信。监视器会等待
编辑器临时写入/重命名抖动稳定下来,读取最终文件,并通过恢复最近一次正确配置
来拒绝无效的外部编辑。由 OpenClaw 管理的
配置写入在写入前也会经过相同的 schema 校验;像删除 `gateway.mode` 或将文件缩小超过一半
这样的破坏性覆盖会被拒绝,
并保存为 `.rejected.*` 以供检查。
插件局部校验失败是例外:如果所有问题都位于
`plugins.entries.<id>...` 之下,重载会保持当前配置并报告该插件问题,
`plugins.entries.<id>...` 下,重载会保留当前配置并报告插件问题,
而不是恢复 `.last-good`
如果你在日志中看到 `Config auto-restored from last-known-good`
`config reload restored last-known-good config`,请检查 `openclaw.json`
旁边对应`.clobbered.*` 文件,修复被拒绝的负载,然后运行
`openclaw config validate`。恢复检查清单请参阅[Gateway 网关 故障排除](/zh-CN/gateway/troubleshooting#gateway-restored-last-known-good-config)。
`config reload restored last-known-good config`,请检查与之对应的
位于 `openclaw.json` 旁边的 `.clobbered.*` 文件,修复被拒绝的负载,然后运行
`openclaw config validate`。恢复检查清单请参阅 [Gateway 故障排除](/zh-CN/gateway/troubleshooting#gateway-restored-last-known-good-config)。
### 重载模式
| 模式 | 行为 |
| ---------------------- | --------------------------------------------------------------------------------------- |
| **`hybrid`**(默认) | 立即热应用安全更改。对于关键更改会自动重启。 |
| **`hot`** | 仅热应用安全更改。需要重启时会记录警告——由你来处理。 |
| **`hot`** | 只热应用安全更改。当需要重启时记录警告——由你自行处理。 |
| **`restart`** | 任何配置更改都会重启 Gateway 网关,无论是否安全。 |
| **`off`** | 禁用文件监视。更改会在下次手动重启时生效。 |
@ -539,17 +542,17 @@ Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改——
### 哪些可以热应用,哪些需要重启
大多数字段都可以无停机热应用。在 `hybrid` 模式下,需要重启的更改会自动处理。
大多数字段都可以在不停机的情况下热应用。在 `hybrid` 模式下,需要重启的更改会自动处理。
| 类别 | 字段 | 需要重启? |
| ------------------- | ----------------------------------------------------------------- | --------------- |
| 渠道 | `channels.*`、`web`WhatsApp——所有内置渠道渠道插件 | 否 |
| 智能体模型 | `agent`、`agents`、`models`、`routing` | 否 |
| 渠道 | `channels.*`、`web`WhatsApp——所有内置和插件渠道 | 否 |
| 智能体模型 | `agent`、`agents`、`models`、`routing` | 否 |
| 自动化 | `hooks`、`cron`、`agent.heartbeat` | 否 |
| 会话消息 | `session`、`messages` | 否 |
| 工具与媒体 | `tools`、`browser`、`skills`、`audio`、`talk` | 否 |
| UI 与杂项 | `ui`、`logging`、`identity`、`bindings` | 否 |
| Gateway 网关 服务器 | `gateway.*`port、bind、auth、tailscale、TLS、HTTP | **是** |
| 会话消息 | `session`、`messages` | 否 |
| 工具和媒体 | `tools`、`browser`、`skills`、`mcp`、`audio`、`talk` | 否 |
| UI 和其他 | `ui`、`logging`、`identity`、`bindings` | 否 |
| Gateway 网关服务器 | `gateway.*`port、bind、auth、tailscale、TLS、HTTP | **是** |
| 基础设施 | `discovery`、`canvasHost`、`plugins` | **是** |
<Note>
@ -558,32 +561,32 @@ Gateway 网关 会监视 `~/.openclaw/openclaw.json` 并自动应用更改——
### 重载规划
当你编辑一个通过 `$include` 引用的源文件时OpenClaw 会根据源文件作者编写的布局
当你编辑通过 `$include` 引用的源文件时OpenClaw 会根据源文件编写的布局
来规划重载,而不是根据已拍平的内存视图。
这样即使某个
单独的顶层部分位于其自己的包含文件中,例如
`plugins: { $include: "./plugins.json5" }`,热重载决策(热应用还是重启)也仍然可预测。
如果源布局存在歧义,重载规划会以失败关闭
单独的顶层区段位于自己的被包含文件中,例如
`plugins: { $include: "./plugins.json5" }`,热重载决策(热应用还是重启)也能保持可预测。
如果源布局存在歧义,重载规划会以封闭失败方式处理
## Config RPC程序化更新
## 配置 RPC程序化更新
对于通过 Gateway 网关 API 写入配置的工具,建议优先使用以下流程:
对于通过网关 API 写入配置的工具,建议使用以下流程:
- 使用 `config.schema.lookup` 检查一个子树(浅层 schema 节点 + 子节点
摘要)
- 使用 `config.get` 获取当前快照以及 `hash`
- 使用 `config.get` 获取当前快照 `hash`
- 使用 `config.patch` 进行部分更新JSON merge patch对象合并`null`
删除,数组整体替换)
删除,数组替换)
- 仅当你确实打算替换整个配置时才使用 `config.apply`
- 使用 `update.run` 执行显式自更新并重启
<Note>
控制平面写入(`config.apply`、`config.patch`、`update.run`)会
每个 `deviceId+clientIp` 在 60 秒内限制为 3 次请求。
重启请求会合并,然后在两次重启周期之间强制 30 秒冷却时间。
控制平面写入(`config.apply`、`config.patch`、`update.run`)会
每个 `deviceId+clientIp` 在 60 秒内限制为 3 次请求。
重启请求会合并处理,然后在两次重启周期之间强制执行 30 秒冷却时间。
</Note>
部分 patch 示例:
部分补丁示例:
```bash
openclaw gateway call config.get --params '{}' # capture payload.hash
@ -599,7 +602,7 @@ openclaw gateway call config.patch --params '{
## 环境变量
OpenClaw 会从父进程读取环境变量,外还会读取:
OpenClaw 会从父进程读取环境变量,外还会读取:
- 当前工作目录中的 `.env`(如果存在)
- `~/.openclaw/.env`(全局回退)
@ -615,8 +618,8 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
}
```
<Accordion title="导入 shell 环境变量(可选)">
如果启用且预期键名尚未设置OpenClaw 会运行你的登录 shell并且只导入缺失的键
<Accordion title="导入 Shell 环境变量(可选)">
如果启用,并且预期键名尚未设置OpenClaw 会运行你的登录 shell并且只导入缺失的键
```json5
{
@ -626,7 +629,7 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
}
```
对应的环境变量:`OPENCLAW_LOAD_SHELL_ENV=1`
环境变量等价形式`OPENCLAW_LOAD_SHELL_ENV=1`
</Accordion>
<Accordion title="在配置值中替换环境变量">
@ -642,14 +645,14 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
规则:
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`
- 缺失或为空的环境变量会在加载时报错
- 使用 `$${VAR}` 转义以输出字面量
- 在 `$include` 文件中也可用
- 缺失或为空的变量会在加载时报错
- 使用 `$${VAR}` 输出字面量
- 在 `$include` 文件中同样有效
- 内联替换:`"${BASE}/v1"` → `"https://api.example.com/v1"`
</Accordion>
<Accordion title="SecretRefenv、file、exec">
<Accordion title="密钥引用env、file、exec">
对于支持 SecretRef 对象的字段,你可以使用:
```json5
@ -682,22 +685,22 @@ OpenClaw 会从父进程读取环境变量,另外还会读取:
}
```
SecretRef 详情(包括适用于 `env`/`file`/`exec` 的 `secrets.providers`)见[密钥管理](/zh-CN/gateway/secrets)。
支持的凭证路径列 [SecretRef Credential Surface](/zh-CN/reference/secretref-credential-surface)。
有关 SecretRef 的详细信息(包括用于 `env`/`file`/`exec` 的 `secrets.providers`),请参阅 [Secrets Management](/zh-CN/gateway/secrets)。
支持的凭证路径列 [SecretRef Credential Surface](/zh-CN/reference/secretref-credential-surface)
</Accordion>
完整的优先级和来源请参阅[环境](/zh-CN/help/environment)。
完整的优先级和来源请参阅 [Environment](/zh-CN/help/environment)。
## 完整参考
如需完整的逐字段参考,请参阅 **[配置参考](/zh-CN/gateway/configuration-reference)**。
如需完整的逐字段参考,请参阅 **[Configuration Reference](/zh-CN/gateway/configuration-reference)**。
---
_相关内容[配置示例](/zh-CN/gateway/configuration-examples) · [配置参考](/zh-CN/gateway/configuration-reference) · [Doctor](/zh-CN/gateway/doctor)_
_相关内容[Configuration Examples](/zh-CN/gateway/configuration-examples) · [Configuration Reference](/zh-CN/gateway/configuration-reference) · [Doctor](/zh-CN/gateway/doctor)_
## 相关
## 相关内容
- [配置参考](/zh-CN/gateway/configuration-reference)
- [配置示例](/zh-CN/gateway/configuration-examples)
- [Gateway 网关 运行手册](/zh-CN/gateway)
- [Configuration reference](/zh-CN/gateway/configuration-reference)
- [Configuration examples](/zh-CN/gateway/configuration-examples)
- [Gateway 网关运行手册](/zh-CN/gateway)

View File

@ -1,36 +1,36 @@
---
read_when:
- 在 macOS/iOS/Android 上实现通话模式
- 更改语音/TTS/打断行为
summary: 通话模式:使用 ElevenLabs TTS 的连续语音对话
- 更改语音 / TTS / 打断行为
summary: 通话模式:与已配置的 TTS 提供商进行连续语音对话
title: 通话模式
x-i18n:
generated_at: "2026-04-23T22:59:08Z"
generated_at: "2026-04-25T07:51:42Z"
model: gpt-5.4
provider: openai
source_hash: 49286cd39a104d4514eb1df75627a2f64182313b11792bb246f471178a702198
source_hash: 84c99149c43bfe9fa4866b20271089d88d7e3d2f5abe6d16477a26915dad7829
source_path: nodes/talk.md
workflow: 15
---
通话模式是一个连续语音对话循环:
通话模式是一个连续语音对话循环:
1. 监听语音
2. 将转写结果发送给模型(主会话,`chat.send`
3. 等待回复
4. 通过已配置的 Talk 提供商朗读回复`talk.speak`
2. 将转录文本发送给模型(主会话,`chat.send`
3. 等待响应
4. 通过已配置的通话提供商播报响应`talk.speak`
## 行为macOS
- 启用通话模式时,显示**常驻悬浮层**。
- **Listening → Thinking → Speaking** 阶段切换。
- 在**短暂停顿**(静音窗口)时,会发送当前转写内容
- 回复会**写入 WebChat**(与键入时相同)。
- **语音打断**(默认开启):如果助手正在说话时用户开始说话,我们会停止播放,并为下一次提示记录打断时间戳。
- 启用通话模式后,会显示**常驻覆盖层**。
- 在**监听 → 思考 → 播报**阶段之间切换。
- 当出现**短暂停顿**(静音窗口)时,会发送当前转录文本
- 回复会被**写入 WebChat**(与手动输入相同)。
- **语音打断**(默认开启):如果助手正在播报时用户开始说话,我们会停止播放,并为下一个提示记录打断时间戳。
## 回复中的语音指令
助手可以在回复开头添加**单行 JSON** 来控制语音:
助手可以在回复前添加**单独的一行 JSON** 来控制语音:
```json
{ "voice": "<voice-id>", "once": true }
@ -38,18 +38,18 @@ x-i18n:
规则:
- 仅首个非空行有效。
- 仅第一行非空行有效。
- 未知键会被忽略。
- `once: true` 仅应用于当前这条回复。
- 如果没有 `once`,该语音会成为通话模式的新默认语音。
- 在 TTS 播放前,这一行 JSON 会被移除。
- 该 JSON 行会在 TTS 播放前被移除。
支持的键:
- `voice` / `voice_id` / `voiceId`
- `model` / `model_id` / `modelId`
- `speed`、`rate`WPM、`stability`、`similarity`、`style`、`speakerBoost`
- `seed`、`normalize`、`lang`、`output_format`、`latency_tier`
- `speed`, `rate`WPM, `stability`, `similarity`, `style`, `speakerBoost`
- `seed`, `normalize`, `lang`, `output_format`, `latency_tier`
- `once`
## 配置(`~/.openclaw/openclaw.json`
@ -57,10 +57,19 @@ x-i18n:
```json5
{
talk: {
voiceId: "elevenlabs_voice_id",
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
provider: "elevenlabs",
providers: {
elevenlabs: {
voiceId: "elevenlabs_voice_id",
modelId: "eleven_v3",
outputFormat: "mp3_44100_128",
apiKey: "elevenlabs_api_key",
},
mlx: {
modelId: "mlx-community/Soprano-80M-bf16",
},
system: {},
},
silenceTimeoutMs: 1500,
interruptOnSpeech: true,
},
@ -70,34 +79,37 @@ x-i18n:
默认值:
- `interruptOnSpeech`true
- `silenceTimeoutMs`未设置时通话模式会在发送转写前使用平台默认暂停窗口macOS 和 Android 为 `700 ms`iOS 为 `900 ms`
- `voiceId`:回退到 `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID`(或者在 API 密钥可用时使用第一个 ElevenLabs 语音)
- `modelId`:未设置时默认使用 `eleven_v3`
- `apiKey`:回退到 `ELEVENLABS_API_KEY`(或者在可用时使用 Gateway 网关 shell profile
- `outputFormat`macOS/iOS 默认 `pcm_44100`Android 默认 `pcm_24000`(设置 `mp3_*` 可强制使用 MP3 流式传输)
- `silenceTimeoutMs`:未设置时,通话模式会在发送转录文本前使用平台默认的停顿窗口(`macOS` 和 Android 上为 `700 ms`iOS 上为 `900 ms`
- `provider`:选择当前启用的通话提供商。对于 macOS 本地播放路径,使用 `elevenlabs`、`mlx` 或 `system`
- `providers.<provider>.voiceId`:对于 ElevenLabs会回退到 `ELEVENLABS_VOICE_ID` / `SAG_VOICE_ID`(如果提供了 API key也可回退到第一个 ElevenLabs 语音)。
- `providers.elevenlabs.modelId`:未设置时默认为 `eleven_v3`
- `providers.mlx.modelId`:未设置时默认为 `mlx-community/Soprano-80M-bf16`
- `providers.elevenlabs.apiKey`:会回退到 `ELEVENLABS_API_KEY`(如果可用,也可回退到 Gateway 网关 shell 配置文件)。
- `outputFormat`:在 macOS/iOS 上默认为 `pcm_44100`,在 Android 上默认为 `pcm_24000`(设置为 `mp3_*` 可强制使用 MP3 流式传输)
## macOS UI
- 菜单栏切换项:**Talk**
- 配置标签页:**Talk Mode** 分组voice id + 打断开关)
- 悬浮层:
- **Listening**:云朵随麦克风电平脉动
- **Thinking**:下沉动画
- **Speaking**:向外扩散的圆环
- 点击云朵:停止朗读
- 菜单栏开关:**通话**
- 配置标签页:**通话模式**分组(语音 id + 打断开关)
- 覆盖层:
- **监听中**:云朵会随麦克风电平脉动
- **思考中**:下沉动画
- **播报中**:向外辐射的圆环
- 点击云朵:停止播报
- 点击 X退出通话模式
## 说明
- 需要 Speech 和 Microphone 权限。
- 对会话键 `main` 使用 `chat.send`
- Gateway 网关会通过活动的 Talk 提供商使用 `talk.speak` 解析通话播放。仅当该 RPC 不可用时Android 才会回退到本地系统 TTS。
- `eleven_v3``stability` 仅验证为 `0.0`、`0.5` 或 `1.0`;其他模型接受 `0..1`
- 设置 `latency_tier` 时,仅验证 `0..4`
- Android 支持 `pcm_16000`、`pcm_22050`、`pcm_24000` 和 `pcm_44100` 输出格式,以支持低延迟 `AudioTrack` 流式传输。
- 需要语音识别和麦克风权限。
- 使用针对会话键 `main``chat.send`
- Gateway 网关通过当前启用的通话提供商,使用 `talk.speak` 来解析通话播放。Android 仅在该 RPC 不可用时回退到本地系统 TTS。
- macOS 本地 MLX 播放会在存在时使用内置的 `openclaw-mlx-tts` 辅助程序,或者使用 `PATH` 上的可执行文件。开发期间可设置 `OPENCLAW_MLX_TTS_BIN` 指向自定义辅助二进制文件。
- `eleven_v3``stability` 会校验为 `0.0`、`0.5` 或 `1.0`;其他模型接受 `0..1`
- 设置了 `latency_tier` 时,会校验为 `0..4`
- Android 支持 `pcm_16000`、`pcm_22050`、`pcm_24000` 和 `pcm_44100` 输出格式,以实现低延迟 `AudioTrack` 流式传输。
## 相关内容
- [语音唤醒](/zh-CN/nodes/voicewake)
- [音频和语音便笺](/zh-CN/nodes/audio)
- [音频和语音笔记](/zh-CN/nodes/audio)
- [媒体理解](/zh-CN/nodes/media-understanding)

View File

@ -1,36 +1,37 @@
---
read_when:
- 你希望一个 OpenClaw 智能体加入 Google Meet 通话
- 你希望一个 OpenClaw 智能体创建新的 Google Meet 通话
- 你希望一个 OpenClaw 智能体加入一个 Google Meet 通话
- 你希望一个 OpenClaw 智能体创建一个新的 Google Meet 通话
- 你正在将 Chrome、Chrome 节点或 Twilio 配置为 Google Meet 传输方式
summary: Google Meet 插件:通过 Chrome 或 Twilio 加入明确指定的 Meet URL并使用实时语音默认设置
title: Google Meet 插件
x-i18n:
generated_at: "2026-04-25T07:33:11Z"
generated_at: "2026-04-25T07:51:46Z"
model: gpt-5.4
provider: openai
source_hash: b1188bafd278197a094d37a4fe3310971a03852560a293edafe987b8618e1a09
source_hash: 3329ea25e94eb20403464d041cd34de731b7620deeac6b32248655e885cd3729
source_path: plugins/google-meet.md
workflow: 15
---
OpenClaw 的 Google Meet 参会支持——该插件在设计上是显式的:
- 它只加入明确指定的 `https://meet.google.com/...` URL。
- 它只加入一个明确指定的 `https://meet.google.com/...` URL。
- 它可以通过 Google Meet API 创建一个新的 Meet 空间,然后加入返回的 URL。
- `realtime` 语音是默认模式。
- 当需要更深入的推理或工具时,实时语音可以回调到完整的 OpenClaw 智能体。
- 智能体通过 `mode` 选择加入行为:实时收听/回话使用 `realtime`,如果要加入/控制浏览器但不使用实时语音桥接,则使用 `transcribe`
- 认证起始方式可以是个人 Google OAuth或一个已经登录的 Chrome 配置文件
- 智能体使用 `mode` 选择加入行为:使用 `realtime` 进行实时收听/回话,或使用 `transcribe` 在没有实时语音桥接的情况下加入/控制浏览器
- 认证从个人 Google OAuth 或已登录的 Chrome 配置文件开始
- 没有自动的同意提示播报。
- 默认的 Chrome 音频后端是 `BlackHole 2ch`
- Chrome 可以在本地运行,也可以在配对的节点主机上运行。
- Twilio 接受拨入号码,以及可选的 PIN 或 DTMF 序列。
- CLI 命令是 `googlemeet``meet` 保留用于更广泛的智能体电话会议工作流。
- Chrome 可以在本地运行,也可以在配对的节点主机上运行。
- Twilio 接受一个拨入号码,以及可选的 PIN 或 DTMF 序列。
- CLI 命令是 `googlemeet``meet` 保留更广泛的智能体电话会议工作流。
## 快速开始
安装本地音频依赖并配置一个后端实时语音提供商。OpenAI 是默认选项Google Gemini Live 也可用,配置为 `realtime.provider: "google"`
安装本地音频依赖并配置一个后端实时语音提供商。OpenAI 是默认项Google Gemini Live 也可用,配合
`realtime.provider: "google"`
```bash
brew install blackhole-2ch sox
@ -39,20 +40,20 @@ export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...
```
`blackhole-2ch` 会安装 `BlackHole 2ch` 虚拟音频设备。Homebrew 的安装程序要求重启后 macOS 才会暴露该设备:
`blackhole-2ch` 会安装 `BlackHole 2ch` 虚拟音频设备。Homebrew 的安装程序要求重启,之后 macOS 才会暴露该设备:
```bash
sudo reboot
```
重启后,验证这两部分:
重启后,验证这两部分:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
command -v rec play
```
启用插件:
启用插件:
```json5
{
@ -73,7 +74,9 @@ command -v rec play
openclaw googlemeet setup
```
设置输出旨在让智能体可读。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟实时介绍,以及在配置了 Twilio 委派时,`voice-call` 插件和 Twilio 凭证是否已就绪。把任何 `ok: false` 检查项都视为在让智能体加入前的阻塞项。脚本或机器可读输出请使用 `openclaw googlemeet setup --json`
设置输出旨在让智能体可读。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟的实时介绍,以及在配置了 Twilio 委派时,`voice-call` 插件和 Twilio 凭证是否已准备就绪。
在请求智能体加入之前,将任何 `ok: false` 检查视为阻塞项。
对于脚本或机器可读输出,请使用 `openclaw googlemeet setup --json`
加入会议:
@ -107,13 +110,16 @@ openclaw googlemeet create --no-join
`googlemeet create` 有两条路径:
- API 创建:当配置了 Google Meet OAuth 凭证时使用。这是最具确定性的路径,不依赖浏览器 UI 状态。
- 浏览器回退:当缺少 OAuth 凭证时使用。OpenClaw 会使用固定的 Chrome 节点,打开 `https://meet.google.com/new`,等待 Google 重定向到真实的会议代码 URL然后返回该 URL。这一路径要求节点上的 OpenClaw Chrome 配置文件已登录 Google。
浏览器自动化会处理 Meet 自的首次运行麦克风提示;该提示不会被视为 Google 登录失败。
加入和创建流程也会尽量复用已有的 Meet 标签页,而不是打开新的标签页。匹配时会忽略无害的 URL 查询字符串,例如 `authuser`,因此智能体重试时应聚焦到已打开的会议,而不是创建第二个 Chrome 标签页。
- 浏览器回退:当 OAuth 凭证缺失时使用。OpenClaw 会使用固定的 Chrome 节点,打开 `https://meet.google.com/new`,等待 Google 重定向到真实的会议代码 URL然后返回该 URL。路径要求节点上的 OpenClaw Chrome 配置文件已登录 Google。
浏览器自动化会处理 Meet 自的首次运行麦克风提示;该提示不会被视为 Google 登录失败。
加入和创建流程也会尝试复用已有的 Meet 标签页,而不是打开新标签页。匹配时会忽略诸如 `authuser` 之类无害的 URL 查询字符串,因此智能体重试应聚焦到已打开的会议,而不是创建第二个 Chrome 标签页。
命令/工具输出包含一个 `source` 字段(`api` 或 `browser`),这样智能体可以说明使用了哪条路径。默认情况下,`create` 会加入新会议,并返回 `joined: true` 以及加入会话。若只想生成 URL可在 CLI 上使用 `create --no-join`,或向工具传入 `"join": false`
命令/工具输出包含一个 `source` 字段(`api` 或 `browser`),这样智能体就可以说明使用了哪条路径。
`create` 默认会加入新会议,并返回 `joined: true` 以及加入会话。若只想生成 URL请在 CLI 上使用
`create --no-join`,或向工具传入 `"join": false`
或者告诉智能体:“创建一个 Google Meet用实时语音加入它然后把链接发给我。” 智能体应调用 `google_meet`,并使用 `action: "create"`,然后分享返回的 `meetingUri`
或者告诉智能体:“创建一个 Google Meet使用实时语音加入然后把链接发给我。”
智能体应调用 `google_meet` 并使用 `action: "create"`,然后分享返回的 `meetingUri`
```json
{
@ -123,20 +129,21 @@ openclaw googlemeet create --no-join
}
```
如果只需观察/浏览器控制式加入,请设置 `"mode": "transcribe"`。这不会启动双工实时模型桥接,因此它不会在会议中回话。
若要进行仅观察/浏览器控制的加入,请设置 `"mode": "transcribe"`。这不会启动双工实时模型桥接,因此它不会在会议中回话。
在实时会话期间,`google_meet` 的状态会包含浏览器和音频桥接健康信息,例如 `inCall`、`manualActionRequired`、`providerConnected`、`realtimeReady`、`audioInputActive`、`audioOutputActive`、最近输入/输出时间戳、字节计数以及桥接关闭状态。如果出现安全的 Meet 页面提示,浏览器自动化会在可行时进行处理。登录、主持人准入以及浏览器/操作系统权限提示会作为手动操作上报,并附带原因和消息,供智能体转达。
在实时会话期间,`google_meet` 状态会包含浏览器和音频桥接健康信息,例如 `inCall`、`manualActionRequired`、`providerConnected`、
`realtimeReady`、`audioInputActive`、`audioOutputActive`、最近输入/输出时间戳、字节计数器以及桥接关闭状态。如果出现安全的 Meet 页面提示,浏览器自动化会在能够处理时进行处理。登录、主持人准入,以及浏览器/操作系统权限提示都会作为手动操作上报,并带有原因和消息,供智能体转达。
Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 OpenClaw 所用的麦克风/扬声器路径选择 `BlackHole 2ch`。若要获得干净的双工音频,请使用独立的虚拟设备或类似 Loopback 的音频图;单个 BlackHole 设备足以完成首次冒烟测试,但可能产生回声。
Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 OpenClaw 使用的麦克风/扬声器路径选择 `BlackHole 2ch`。为了获得干净的双工音频,请使用单独的虚拟设备或类似 Loopback 的音频图;单个 BlackHole 设备足以完成首次冒烟测试,但可能产生回声。
### 本地 Gateway 网关 + Parallels Chrome
你**不**需要在 macOS VM 中部署完整的 OpenClaw Gateway 网关或模型 API 密钥,只是为了让 VM 承载 Chrome。你可以在本地运行 Gateway 网关和智能体,然后在 VM 中运行一个节点主机。只需在 VM 中启用一次内置插件,这样节点就会声明 Chrome 命令:
你**不**需要在 macOS VM 中运行完整的 OpenClaw Gateway 网关或模型 API 密钥,只是为了让 VM 托管 Chrome。请在本地运行 Gateway 网关和智能体,然后在 VM 中运行一个节点主机。只需在 VM 中启用一次内置插件,这样节点就会通告 Chrome 命令:
各部分运行位置:
- Gateway 网关主机OpenClaw Gateway 网关、智能体工作区、模型/API 密钥、实时提供商,以及 Google Meet 插件配置。
- Parallels macOS VMOpenClaw CLI/节点主机、Google Chrome、SoX、BlackHole 2ch以及一个已登录 Google 的 Chrome 配置文件。
- Parallels macOS VMOpenClaw CLI/节点主机、Google Chrome、SoX、BlackHole 2ch以及已登录 Google 的 Chrome 配置文件。
- VM 中不需要Gateway 网关服务、智能体配置、OpenAI/GPT 密钥或模型提供商设置。
安装 VM 依赖:
@ -145,13 +152,13 @@ Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 O
brew install blackhole-2ch sox
```
安装 BlackHole 后重启 VM以便 macOS 暴露 `BlackHole 2ch`
安装 BlackHole 后重启 VM这样 macOS 才会暴露 `BlackHole 2ch`
```bash
sudo reboot
```
重启后,验证 VM 可以看到音频设备和 SoX 命令:
重启后,验证 VM 可以看到音频设备和 SoX 命令:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
@ -170,14 +177,14 @@ openclaw plugins enable google-meet
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
如果 `<gateway-host>` LAN IP 且你没有使用 TLS那么除非你为这个受信任的私有网络显式启用纯文本 WebSocket否则节点会拒绝连接
如果 `<gateway-host>`局域网 IP 且你未使用 TLS那么除非你为该可信私有网络显式启用否则节点会拒绝明文 WebSocket
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
将节点安装为 LaunchAgent 时,也要使用同一个环境变量:
将节点安装为 LaunchAgent 时,使用相同的环境变量:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -185,16 +192,18 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node restart
```
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` 是进程环境变量,不是 `openclaw.json` 设置。`openclaw node install` 会在安装命令中存在该变量时,将它存储到 LaunchAgent 环境中。
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` 是进程环境变量,不是
`openclaw.json` 设置。`openclaw node install` 会在安装命令中检测到该变量存在时,将其存储到 LaunchAgent 环境中。
从 Gateway 网关主机批准该节点:
在 Gateway 网关主机上批准该节点:
```bash
openclaw devices list
openclaw devices approve <requestId>
```
确认 Gateway 网关能看到该节点,并且它同时声明了 `googlemeet.chrome` 和浏览器能力/`browser.proxy`
确认 Gateway 网关能看到该节点,并且它同时通告了 `googlemeet.chrome`
和浏览器能力/`browser.proxy`
```bash
openclaw nodes status
@ -230,7 +239,7 @@ openclaw nodes status
}
```
现在可以从 Gateway 网关主机像平常一样加入:
现在从 Gateway 网关主机正常加入:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
@ -238,54 +247,67 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
或者让智能体使用 `google_meet` 工具,并设置 `transport: "chrome-node"`
如果要进行一条命令的冒烟测试,创建或复用会话、说出已知短语,并打印会话健康状态:
若要执行一个单命令冒烟测试,用于创建或复用会话、说出已知短语并打印会话健康状态:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij
```
在加入过程中OpenClaw 浏览器自动化会填写访客名称,点击“加入”/“请求加入”,并在出现该提示时接受 Meet 首次运行的“使用麦克风”选择。在仅浏览器的会议创建过程中,如果 Meet 没有暴露使用麦克风按钮,它也可以在不使用麦克风的情况下继续通过同一个提示。
如果浏览器配置文件未登录、Meet 正在等待主持人准入、Chrome 需要麦克风/摄像头权限,或 Meet 卡在自动化无法解决的提示上,`join`/`test-speech` 结果会报告 `manualActionRequired: true`,并附带 `manualActionReason``manualActionMessage`。智能体应停止重试加入,转达那条确切消息以及当前的 `browserUrl`/`browserTitle`,并且只在手动浏览器操作完成后再重试。
在加入期间OpenClaw 浏览器自动化会填写访客名称,点击 Join/Ask to join并在该提示出现时接受 Meet 首次运行的“Use microphone”选择。在仅浏览器的会议创建期间如果 Meet 没有显示使用麦克风按钮,它也可以在没有麦克风的情况下继续通过相同提示。
如果浏览器配置文件未登录、Meet 正在等待主持人准入、Chrome 需要麦克风/摄像头权限,或者 Meet 卡在自动化无法解决的提示上,加入/`test-speech` 结果会报告
`manualActionRequired: true`,并附带 `manualActionReason`
`manualActionMessage`。智能体应停止重试加入,报告该确切消息以及当前的 `browserUrl`/`browserTitle`,并且只在手动浏览器操作完成后再重试。
如果省略 `chromeNode.node`,只有在恰好存在一个已连接节点同时声明 `googlemeet.chrome` 和浏览器控制时OpenClaw 才会自动选择它。如果连接了多个具备能力的节点,请将 `chromeNode.node` 设置为节点 id、显示名称或远程 IP。
如果省略了 `chromeNode.node`,只有在恰好有一个已连接节点同时通告 `googlemeet.chrome` 和浏览器控制能力时OpenClaw 才会自动选择。
如果连接了多个具备能力的节点,请将 `chromeNode.node` 设置为节点 id、显示名称或远程 IP。
常见故障检查:
- `No connected Google Meet-capable node`:在 VM 中启动 `openclaw node run`,批准配对,并确保已在 VM 中运行 `openclaw plugins enable google-meet``openclaw plugins enable browser`。还要确认 Gateway 网关主机允许这两个节点命令:`gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`。
- `BlackHole 2ch audio device not found on the node`:在 VM 中安装 `blackhole-2ch` 并重启 VM。
- Chrome 打开了但无法加入:在 VM 中登录浏览器配置文件,或者保持设置 `chrome.guestName` 以便访客加入。访客自动加入使用 OpenClaw 通过节点浏览器代理执行的浏览器自动化;请确保节点浏览器配置指向你想使用的配置文件,例如 `browser.defaultProfile: "user"`,或一个已命名的现有会话配置文件。
- 重复的 Meet 标签页:保持启用 `chrome.reuseExistingTab: true`。OpenClaw 会先为相同的 Meet URL 激活现有标签页,再打开新标签页;浏览器会议创建也会复用正在进行中的 `https://meet.google.com/new` 或 Google 账户提示标签页,而不是再打开一个。
- 没有音频:在 Meet 中,将麦克风/扬声器路由到 OpenClaw 使用的虚拟音频设备路径;要获得干净的双工音频,请使用独立的虚拟设备或类似 Loopback 的路由。
- `No connected Google Meet-capable node`:在 VM 中启动 `openclaw node run`
批准配对,并确保已在 VM 中运行 `openclaw plugins enable google-meet`
`openclaw plugins enable browser`。还要确认 Gateway 网关主机允许这两个节点命令,即
`gateway.nodes.allowCommands: ["googlemeet.chrome", "browser.proxy"]`
- `BlackHole 2ch audio device not found on the node`:在 VM 中安装 `blackhole-2ch`
并重启 VM。
- Chrome 已打开但无法加入:在 VM 中登录浏览器配置文件,或保持设置
`chrome.guestName` 用于访客加入。访客自动加入使用 OpenClaw 浏览器自动化并通过节点浏览器代理运行;请确保节点浏览器配置指向你想要的配置文件,例如
`browser.defaultProfile: "user"` 或某个命名的 existing-session 配置文件。
- 重复的 Meet 标签页:保持启用 `chrome.reuseExistingTab: true`。OpenClaw 会先为相同的 Meet URL 激活现有标签页,再打开新标签页,而浏览器会议创建也会在打开另一个标签页之前复用正在进行中的 `https://meet.google.com/new` 或 Google 账号提示标签页。
- 没有音频:在 Meet 中,将麦克风/扬声器路由到 OpenClaw 使用的虚拟音频设备路径;使用单独的虚拟设备或类似 Loopback 的路由,以获得干净的双工音频。
## 安装说明
Chrome 实时默认模式使用两个外部工具:
Chrome 实时默认配置使用两个外部工具:
- `sox`:命令行音频工具。插件使用它的 `rec``play` 命令来实现默认的 8 kHz G.711 mu-law 音频桥接。
- `blackhole-2ch`macOS 虚拟音频驱动。它会创建 `BlackHole 2ch` 音频设备,供 Chrome/Meet 路由使用。
- `sox`:命令行音频工具。该插件使用它的 `rec``play`
命令来实现默认的 8 kHz G.711 mu-law 音频桥接。
- `blackhole-2ch`macOS 虚拟音频驱动。它会创建 `BlackHole 2ch`
音频设备,供 Chrome/Meet 路由使用。
OpenClaw 不捆绑或重新分发这两个软件包。文档要求用户通过 Homebrew 将它们作为主机依赖安装。SoX 的许可证为 `LGPL-2.0-only AND GPL-2.0-only`BlackHole 为 GPL-3.0。如果你要构建一个将 BlackHole 与 OpenClaw 一起捆绑的安装器或设备,请查阅 BlackHole 上游许可条款,或从 Existential Audio 获取单独许可。
OpenClaw 不会捆绑或重新分发这两个软件包。文档要求用户通过 Homebrew 将它们作为主机依赖进行安装。SoX 的许可为
`LGPL-2.0-only AND GPL-2.0-only`BlackHole 为 GPL-3.0。如果你构建了一个将 BlackHole 与 OpenClaw 一起捆绑的安装程序或设备,请查看 BlackHole 上游许可条款,或从 Existential Audio 获取单独许可。
## 传输方式
### Chrome
Chrome 传输方式会在 Google Chrome 中打开 Meet URL并以已登录的 Chrome 配置文件身份加入。在 macOS 上,插件会在启动前检查 `BlackHole 2ch`。如果已配置,它还会在打开 Chrome 之前运行音频桥接健康检查命令和启动命令。当 Chrome/音频位于 Gateway 网关主机上时使用 `chrome`;当 Chrome/音频位于已配对节点上(例如 Parallels macOS VM时使用 `chrome-node`
Chrome 传输会在 Google Chrome 中打开 Meet URL并以已登录的 Chrome 配置文件身份加入。在 macOS 上,插件会在启动前检查是否存在 `BlackHole 2ch`
如果已配置,它还会在打开 Chrome 之前运行一个音频桥接健康检查命令和启动命令。当 Chrome/音频位于 Gateway 网关主机上时,请使用 `chrome`;当 Chrome/音频位于配对节点(例如 Parallels macOS VM上时请使用 `chrome-node`
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome
openclaw googlemeet join https://meet.google.com/abc-defg-hij --transport chrome-node
```
将 Chrome 的麦克风和扬声器音频通过本地 OpenClaw 音频桥接进行路由。如果未安装 `BlackHole 2ch`,加入会因设置错误而失败,而不是在没有音频路径的情况下静默加入。
通过本地 OpenClaw 音频桥接来路由 Chrome 麦克风和扬声器音频。如果未安装 `BlackHole 2ch`,加入将因设置错误而失败,而不是在没有音频路径的情况下静默加入。
### Twilio
Twilio 传输方式是一种严格的拨号计划,并委派给 Voice Call 插件。它不会解析 Meet 页面来查找电话号码。
Twilio 传输是一种严格的拨号方案,委派给 Voice Call 插件。它不会解析 Meet 页面来提取电话号码。
当无法使用 Chrome 参会或你希望使用电话拨入作为回退方案时请使用此方式。Google Meet 必须为该会议公开电话拨入号码和 PINOpenClaw 不会从 Meet 页面中发现这些信息。
当无法使用 Chrome 参会,或你希望使用电话拨入作为回退方案时请使用此方式。Google Meet 必须为该会议提供电话拨入号码和 PINOpenClaw 不会从 Meet 页面中发现这些信息。
在 Gateway 网关主机上启用 Voice Call 插件,而不是在 Chrome 节点上:
在 Gateway 网关主机上启用 Voice Call 插件,而不是在 Chrome 节点上启用
```json5
{
@ -310,7 +332,7 @@ Twilio 传输方式是一种严格的拨号计划,并委派给 Voice Call 插
}
```
通过环境变量或配置提供 Twilio 凭证。环境变量可以让密钥不出现在 `openclaw.json`
通过环境变量或配置提供 Twilio 凭证。使用环境变量可以将密钥保留在 `openclaw.json` 之外
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -318,7 +340,7 @@ export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
启用 `voice-call` 后,重启或重新加载 Gateway 网关;在已运行的 Gateway 网关进程重新加载,插件配置变更不会生效。
启用 `voice-call` 后,重启或重新加载 Gateway 网关;插件配置变更在已运行的 Gateway 网关进程重新加载前不会生效。
然后验证:
@ -328,7 +350,8 @@ openclaw plugins list | grep -E 'google-meet|voice-call'
openclaw googlemeet setup
```
当 Twilio 委派连接完成后,`googlemeet setup` 会包含成功的 `twilio-voice-call-plugin``twilio-voice-call-credentials` 检查项。
当 Twilio 委派配置正确时,`googlemeet setup` 会包含成功的
`twilio-voice-call-plugin``twilio-voice-call-credentials` 检查。
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -350,9 +373,10 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
OAuth 对于创建 Meet 链接来说是可选的,因为 `googlemeet create` 可以回退到浏览器自动化。当你需要官方 API 创建、空间解析或 Meet Media API 预检时,请配置 OAuth。
Google Meet API 访问使用用户 OAuth创建一个 Google Cloud OAuth 客户端,请求所需作用域,授权一个 Google 账户,然后将得到的刷新令牌存储在 Google Meet 插件配置中,或提供 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
Google Meet API 访问使用用户 OAuth创建一个 Google Cloud OAuth 客户端,请求所需作用域,授权一个 Google 账号,然后将生成的刷新令牌存储在 Google Meet 插件配置中,或提供
`OPENCLAW_GOOGLE_MEET_*` 环境变量。
OAuth 不会替代 Chrome 加入路径。使用浏览器参会时,`chrome` 和 `chrome-node` 传输方式仍然通过已登录的 Chrome 配置文件、BlackHole/SoX,以及一个已连接节点来加入。OAuth 仅用于官方 Google Meet API 路径:创建会议空间、解析空间,以及运行 Meet Media API 预检。
OAuth 不会替代 Chrome 加入路径。使用浏览器参会时,`chrome` 和 `chrome-node` 传输仍然通过已登录的 Chrome 配置文件、BlackHole/SoX 以及已连接节点来加入。OAuth 仅用于官方 Google Meet API 路径:创建会议空间、解析空间,以及运行 Meet Media API 预检。
### 创建 Google 凭证
@ -361,13 +385,13 @@ OAuth 不会替代 Chrome 加入路径。使用浏览器参会时,`chrome` 和
1. 创建或选择一个 Google Cloud 项目。
2. 为该项目启用 **Google Meet REST API**
3. 配置 OAuth 同意屏幕。
- 对 Google Workspace 组织来说**Internal** 最简单。
- **External** 适用于个人/测试设置;当应用处于 Testing 状态时,把每个将授权该应用的 Google 账户添加为测试用户。
- 对 Google Workspace 组织,**Internal** 最简单。
- **External** 适用于个人/测试设置;当应用处于 Testing 状态时,将每个会授权该应用的 Google 账号添加为测试用户。
4. 添加 OpenClaw 请求的作用域:
- `https://www.googleapis.com/auth/meetings.space.created`
- `https://www.googleapis.com/auth/meetings.space.readonly`
- `https://www.googleapis.com/auth/meetings.conference.media.readonly`
5. 创建一个 OAuth 客户端 ID。
5. 创建一个 OAuth client ID。
- 应用类型:**Web application**。
- 已获授权的重定向 URI
@ -375,22 +399,22 @@ OAuth 不会替代 Chrome 加入路径。使用浏览器参会时,`chrome` 和
http://localhost:8085/oauth2callback
```
6. 复制客户端 ID 和客户端密钥
6. 复制 client ID 和 client secret
`meetings.space.created` 是 Google Meet `spaces.create` 所必需的
`meetings.space.readonly` 允许 OpenClaw 将 Meet URL/代码解析为空间。
`meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体相关工作;Google 可能要求加入 Developer Preview 才能实际使用 Media API。
如果你只需要基于浏览器的 Chrome 加入方式,可以完全跳过 OAuth。
Google Meet `spaces.create` 需要 `meetings.space.created`
`meetings.space.readonly` 允许 OpenClaw 将 Meet URL/代码解析为会议空间。
`meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体相关工作;实际使用 Media APIGoogle 可能要求加入开发者预览
如果你只需要基于浏览器的 Chrome 加入,请完全跳过 OAuth。
### 生成刷新令牌
配置 `oauth.clientId`,可选配置 `oauth.clientSecret`,或将它们作为环境变量传入,然后运行:
配置 `oauth.clientId`可选配置 `oauth.clientSecret`,或将它们作为环境变量传入,然后运行:
```bash
openclaw googlemeet auth login --json
```
该命令会输出一个带有刷新令牌的 `oauth` 配置块。它使用 PKCE、位于 `http://localhost:8085/oauth2callback` 的 localhost 回调,以及通过 `--manual` 启用的手动复制/粘贴流程。
该命令会打印一个包含刷新令牌的 `oauth` 配置块。它使用 PKCE、本地回调 `http://localhost:8085/oauth2callback`,以及配合 `--manual` 的手动复制/粘贴流程。
示例:
@ -400,7 +424,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json
```
当浏览器无法访问本地回调时,使用手动模式:
当浏览器无法访问本地回调时,使用手动模式:
```bash
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
@ -408,7 +432,7 @@ OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
```
JSON 输出包
JSON 输出包
```json
{
@ -423,7 +447,7 @@ JSON 输出包含:
}
```
`oauth` 对象存储到 Google Meet 插件配置中
`oauth` 对象存储在 Google Meet 插件配置下
```json5
{
@ -444,50 +468,51 @@ JSON 输出包含:
}
```
如果你不希望刷新令牌出现在配置中,优先使用环境变量。如果配置和环境值同时存在,插件会优先解析配置,然后再回退到环境变量。
如果你不希望将刷新令牌放入配置中,优先使用环境变量。
如果配置值和环境变量值同时存在,插件会优先解析配置,然后再回退到环境变量。
OAuth 同意内容包括 Meet 空间创建、Meet 空间读取权限,以及 Meet conference media 读取权限。如果你是在支持会议创建之前完成认证的,请重新运行 `openclaw googlemeet auth login --json`,以便刷新令牌包含 `meetings.space.created` 作用域。
OAuth 同意内容包括 Meet 空间创建、Meet 空间读取访问以及 Meet 会议媒体读取访问。如果你在会议创建支持存在之前就完成了认证,请重新运行 `openclaw googlemeet auth login --json`,以便刷新令牌具备 `meetings.space.created` 作用域。
### 使用 Doctor 验证 OAuth
### 用 Doctor 验证 OAuth
当你需要快速、无密钥暴露的健康检查时,请运行 OAuth Doctor
当你想要进行快速、无密钥暴露的健康检查时,请运行 OAuth Doctor
```bash
openclaw googlemeet doctor --oauth --json
```
这不会加载 Chrome 运行时,也不需要已连接的 Chrome 节点。它会检查 OAuth 配置是否存在,以及刷新令牌是否可以生成访问令牌。JSON 报告仅包含状态字段,例如 `ok`、`configured`、`tokenSource`、`expiresAt` 和检查消息;它不会打印访问令牌、刷新令牌或客户端密钥
这不会加载 Chrome 运行时,也不需要已连接的 Chrome 节点。它会检查 OAuth 配置是否存在,以及刷新令牌是否能够生成访问令牌。JSON 报告只包含诸如 `ok`、`configured`、`tokenSource`、`expiresAt` 和检查消息等状态字段;不会打印访问令牌、刷新令牌或 client secret
常见结果:
| 检查项 | 含义 |
| -------------------- | --------------------------------------------------------------------------------------- |
| `oauth-config` | 存在 `oauth.clientId``oauth.refreshToken`,或存在缓存的访问令牌。 |
| `oauth-token` | 缓存的访问令牌仍然有效,或刷新令牌已生成新的访问令牌。 |
| `meet-spaces-get` | 可选的 `--meeting` 检查解析一个现有 Meet 空间。 |
| `meet-spaces-create` | 可选的 `--create-space` 检查创建一个新的 Meet 空间。 |
| `oauth-config` | 存在 `oauth.clientId``oauth.refreshToken`,或存在缓存的访问令牌。 |
| `oauth-token` | 缓存的访问令牌仍然有效,或刷新令牌已生成新的访问令牌。 |
| `meet-spaces-get` | 可选的 `--meeting` 检查解析一个现有 Meet 空间。 |
| `meet-spaces-create` | 可选的 `--create-space` 检查创建一个新的 Meet 空间。 |
若还要验证 Google Meet API 已启用,以及存在 `spaces.create` 作用域,请运行带副作用的创建检查:
若还要证明 Google Meet API 已启用以及具备 `spaces.create` 作用域,请运行带副作用的创建检查:
```bash
openclaw googlemeet doctor --oauth --create-space --json
openclaw googlemeet create --no-join --json
```
`--create-space` 会创建一个一次性的 Meet URL。当你需要确认 Google Cloud 项目已启用 Meet API已授权账户具备 `meetings.space.created` 作用域时,请使用它。
`--create-space` 会创建一个一次性的 Meet URL。当你需要确认 Google Cloud 项目已启用 Meet API授权账号具备 `meetings.space.created` 作用域时,请使用它。
若要证对现有会议空间的读取权限:
若要证对现有会议空间的读取访问权限:
```bash
openclaw googlemeet doctor --oauth --meeting https://meet.google.com/abc-defg-hij --json
openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
```
`doctor --oauth --meeting``resolve-space`证明对已授权 Google 账户可访问的现有空间具备读取权限。这些检查返回 `403` 通常意味着 Google Meet REST API 未启用、已同意的刷新令牌缺少所需作用域,或该 Google 账户无法访问该 Meet 空间。刷新令牌错误意味着需要重新运行 `openclaw googlemeet auth login --json`,并存储新的 `oauth` 配置块。
`doctor --oauth --meeting``resolve-space`以证明对授权 Google 账号有权访问的现有空间具有读取权限。这些检查返回 `403` 通常意味着 Google Meet REST API 未启用、已同意的刷新令牌缺少所需作用域,或该 Google 账号无权访问该 Meet 空间。刷新令牌错误则意味着需要重新运行 `openclaw googlemeet auth login --json` 并存储新的 `oauth` 块。
浏览器回退模式不需要 OAuth 凭证。在该模式下Google 认证来自所选节点上已登录的 Chrome 配置文件,而不是 OpenClaw 配置。
浏览器回退不需要任何 OAuth 凭证。在该模式下Google 认证来自所选节点上已登录的 Chrome 配置文件,而不是 OpenClaw 配置。
以下环境变量可作为回退值使用
以下环境变量可作为回退值:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID``GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET``GOOGLE_MEET_CLIENT_SECRET`
@ -510,7 +535,7 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
在 Meet 创建 conference record 之后,列出会议工件和出勤情况:
在 Meet 创建了会议记录后,列出会议产物和出席情况:
```bash
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
@ -518,9 +543,9 @@ openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet export --meeting https://meet.google.com/abc-defg-hij --output ./meet-export
```
使用 `--meeting` 时,`artifacts` 和 `attendance` 默认使用最新的 conference record。如果你想获取该会议的所有保留记录,请传入 `--all-conference-records`
使用 `--meeting` 时,`artifacts` 和 `attendance` 默认使用最新的会议记录。如果你希望获取该会议的所有保留记录,请传入 `--all-conference-records`
Calendar 查找可以在读取 Meet 工件之前,先从 Google Calendar 解析会议 URL
在读取 Meet 产物之前,日历查找可以先从 Google Calendar 解析会议 URL
```bash
openclaw googlemeet latest --today
@ -529,10 +554,10 @@ openclaw googlemeet artifacts --event "Weekly sync"
openclaw googlemeet attendance --today --format csv --output attendance.csv
```
`--today` 会在今天的 `primary` 日历中搜索带有 Google Meet 链接的 Calendar 事件。使用 `--event <query>` 搜索匹配的事件文本,使用 `--calendar <id>` 指定非主日历。Calendar 查找需要一次新的 OAuth 登录,并包含 Calendar events readonly 作用域。
`--today` 会在今天的 `primary` 日历中搜索带有 Google Meet 链接的 Calendar 事件。使用 `--event <query>` 搜索匹配的事件文本,使用 `--calendar <id>` 指定非主日历。日历查找需要一次新的 OAuth 登录,并包含 Calendar events readonly 作用域。
`calendar-events` 会预览匹配的 Meet 事件,并标记 `latest`、`artifacts`、`attendance` 或 `export` 将选择的事件。
如果你已经知道 conference record id可以直接指定
如果你已经知道 conference record id可以直接指定
```bash
openclaw googlemeet latest --meeting https://meet.google.com/abc-defg-hij
@ -540,7 +565,7 @@ openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --jso
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
```
出可读报告:
出可读报告:
```bash
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 \
@ -551,13 +576,32 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 \
--format csv --output meet-attendance.csv
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --zip --output meet-export
openclaw googlemeet export --conference-record conferenceRecords/abc123 \
--include-doc-bodies --dry-run
```
`artifacts` 会返回 conference record 元数据,以及当 Google 为该会议公开这些内容时的参会者、录制、转录、结构化 transcript-entry 和 smart-note 资源元数据。对大型会议,使用 `--no-transcript-entries` 跳过条目查询。`attendance` 会将参会者展开为 participant-session 行,包含首次/最后出现时间、总会话时长、迟到/提前离标记,以及按已登录用户或显示名称合并的重复参会者资源。传入 `--no-merge-duplicates` 可保持原始参会者资源分离,传入 `--late-after-minutes` 可调整迟到判定,传入 `--early-before-minutes` 可调整提前离判定。
`artifacts` 会返回会议记录元数据,以及当 Google 为该会议提供时的参会者、录制、转录、结构化 transcript-entry 和 smart-note 资源元数据。对大型会议,使用 `--no-transcript-entries` 跳过条目查询。`attendance` 会将参会者展开为 participant-session 行,包含首次/最后出现时间、总会话时长、迟到/提前离标记,以及按已登录用户或显示名称合并的重复参会者资源。传入 `--no-merge-duplicates` 可保持原始参会者资源彼此分离,传入 `--late-after-minutes` 可调整迟到判定,传入 `--early-before-minutes` 可调整提前离判定。
`export` 会写出一个文件夹,其中包含 `summary.md`、`attendance.csv`、`transcript.md`、`artifacts.json` 和 `attendance.json`。传入 `--zip` 还会在该文件夹旁边写出一个可移植归档。传入 `--include-doc-bodies` 可通过 Google Drive `files.export` 导出链接的 transcript 和 smart-note Google Docs 文本;这需要一次新的 OAuth 登录,并包含 Drive Meet readonly 作用域。不使用 `--include-doc-bodies` 时,导出内容仅包含 Meet 元数据和结构化 transcript 条目。
`export` 会写出一个文件夹,包含 `summary.md`、`attendance.csv`、
`transcript.md`、`artifacts.json`、`attendance.json` 和 `manifest.json`
`manifest.json` 会记录所选输入、导出选项、会议记录、输出文件、计数、令牌来源、使用的 Calendar 事件(若有),以及任何部分检索警告。传入 `--zip` 还会在文件夹旁边额外写出一个便携归档。传入 `--include-doc-bodies` 可通过 Google Drive `files.export` 导出关联的转录和 smart-note Google Docs 文本;这需要一次新的 OAuth 登录,并包含 Drive Meet readonly 作用域。若不使用 `--include-doc-bodies`,导出内容仅包含 Meet 元数据和结构化转录条目。如果 Google 返回部分产物失败,例如 smart-note 列表、transcript-entry 或 Drive 文档正文错误,摘要和清单会保留该警告,而不是让整个导出失败。
使用 `--dry-run` 可获取相同的产物/出席数据,并打印 manifest JSON而不会创建文件夹或 ZIP。这在写出大型导出之前或者当智能体只需要计数、所选记录和警告时非常有用。
针对真实保留会议运行受保护的 live 冒烟测试:
智能体也可以通过 `google_meet` 工具创建相同的打包结果:
```json
{
"action": "export",
"conferenceRecord": "conferenceRecords/abc123",
"includeDocumentBodies": true,
"outputDir": "meet-export",
"zip": true
}
```
设置 `"dryRun": true` 可只返回导出清单并跳过文件写入。
针对真实的保留会议运行受保护的实时冒烟测试:
```bash
OPENCLAW_LIVE_TEST=1 \
@ -565,15 +609,33 @@ OPENCLAW_GOOGLE_MEET_LIVE_MEETING=https://meet.google.com/abc-defg-hij \
pnpm test:live -- extensions/google-meet/google-meet.live.test.ts
```
实时冒烟测试环境:
- `OPENCLAW_LIVE_TEST=1` 启用受保护的实时测试。
- `OPENCLAW_GOOGLE_MEET_LIVE_MEETING` 指向一个保留的 Meet URL、代码或
`spaces/{id}`
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID``GOOGLE_MEET_CLIENT_ID` 提供 OAuth
client id。
- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN``GOOGLE_MEET_REFRESH_TOKEN` 提供
refresh token。
- 可选:`OPENCLAW_GOOGLE_MEET_CLIENT_SECRET`、
`OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN`
`OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT` 使用相同的回退名称,只是不带 `OPENCLAW_` 前缀。
基础的产物/出席实时冒烟测试需要
`https://www.googleapis.com/auth/meetings.space.readonly`
`https://www.googleapis.com/auth/meetings.conference.media.readonly`。Calendar 查找需要 `https://www.googleapis.com/auth/calendar.events.readonly`。Drive 文档正文导出需要
`https://www.googleapis.com/auth/drive.meet.readonly`
创建一个新的 Meet 空间:
```bash
openclaw googlemeet create
```
该命令会打印新的 `meeting uri`、来源以及加入会话。有 OAuth 凭证时,它会使用官方 Google Meet API。没有 OAuth 凭证时,它会回退为使用固定的 Chrome 节点上已登录的浏览器配置文件。智能体可以使用带 `action: "create"``google_meet` 工具,一步完成创建和加入。若只创建 URL请传入 `"join": false`
该命令会打印新的 `meeting uri`、来源和加入会话。有 OAuth 凭证时,它使用官方 Google Meet API。没有 OAuth 凭证时,它会回退为使用固定的 Chrome 节点上已登录的浏览器配置文件。智能体可以通过 `google_meet` 工具并使用 `action: "create"`一步完成创建和加入。若只创建 URL请传入 `"join": false`
来自浏览器回退路径的 JSON 输出示例:
浏览器回退的 JSON 输出示例:
```json
{
@ -593,7 +655,7 @@ openclaw googlemeet create
}
```
如果浏览器回退路径在创建 URL 前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法会返回失败响应,而 `google_meet` 工具会返回结构化细节,而不是普通字符串:
如果浏览器回退在创建 URL 前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法会返回失败响应,而 `google_meet` 工具会返回结构化细节,而不是字符串:
```json
{
@ -611,9 +673,10 @@ openclaw googlemeet create
}
```
当智能体看到 `manualActionRequired: true` 时,它应报告 `manualActionMessage` 以及浏览器节点/标签页上下文,并停止打开新的 Meet 标签页,直到操作员完成浏览器步骤。
当智能体看到 `manualActionRequired: true` 时,它应报告
`manualActionMessage` 以及浏览器节点/标签页上下文,并停止继续打开新的 Meet 标签页,直到操作人员完成浏览器步骤。
来自 API 创建的 JSON 输出示例:
API 创建的 JSON 输出示例:
```json
{
@ -634,13 +697,14 @@ openclaw googlemeet create
}
```
默认情况下,创建 Meet 后会立即加入。`chrome` 或 `chrome-node` 传输方式仍然需要一个已登录 Google 的 Chrome 配置文件才能通过浏览器加入。如果该配置文件已登出OpenClaw 会报告 `manualActionRequired: true` 或浏览器回退错误,并要求操作员先完成 Google 登录再重试。
默认情况下,创建 Meet 后会立即加入。`chrome` 或 `chrome-node` 传输仍然需要一个已登录 Google 的 Chrome 配置文件才能通过浏览器加入。如果该配置文件已登出OpenClaw 会报告 `manualActionRequired: true` 或浏览器回退错误,并要求操作员先完成 Google 登录再重试。
只有在确认你的 Cloud 项目、OAuth 主体和会议参与者都已加入 Google Workspace Developer Preview Program for Meet media APIs 后,才设置 `preview.enrollmentAcknowledged: true`
只有在确认你的 Cloud 项目、OAuth 主体和会议参与者均已加入用于 Meet 媒体 API 的 Google Workspace Developer Preview Program 后,才将 `preview.enrollmentAcknowledged: true` 设为 true
## 配置
常见的 Chrome 实时路径只需要启用该插件、BlackHole、SoX 和一个后端实时语音提供商密钥。OpenAI 是默认值;设置 `realtime.provider: "google"` 可使用 Google Gemini Live
常见的 Chrome 实时路径只需要启用插件、BlackHole、SoX以及一个后端实时语音提供商密钥。OpenAI 是默认项;设置
`realtime.provider: "google"` 可使用 Google Gemini Live
```bash
brew install blackhole-2ch sox
@ -671,15 +735,18 @@ export GEMINI_API_KEY=...
- `chromeNode.node``chrome-node` 的可选节点 id/名称/IP
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.guestName: "OpenClaw Agent"`:在已登出的 Meet 访客界面中使用的名称
- `chrome.autoJoin: true`:在 `chrome-node` 上通过 OpenClaw 浏览器自动化尽力填写访客名称并点击立即加入
- `chrome.autoJoin: true`:在 `chrome-node` 上通过 OpenClaw 浏览器自动化尽力填写访客名称并点击 Join Now
- `chrome.reuseExistingTab: true`:激活现有 Meet 标签页,而不是打开重复标签页
- `chrome.waitForInCallMs: 20000`:等待 Meet 标签页报告已在通话中,然后再触发实时介绍
- `chrome.audioInputCommand`:将 8 kHz G.711 mu-law 音频写到 stdout 的 SoX `rec` 命令
- `chrome.audioOutputCommand`:从 stdin 读取 8 kHz G.711 mu-law 音频的 SoX `play` 命令
- `chrome.audioInputCommand`SoX `rec` 命令,将 8 kHz G.711 mu-law
音频写到 stdout
- `chrome.audioOutputCommand`SoX `play` 命令,从 stdin 读取 8 kHz G.711 mu-law
音频
- `realtime.provider: "openai"`
- `realtime.toolPolicy: "safe-read-only"`
- `realtime.instructions`:简短口语回复,较深入回答使用 `openclaw_agent_consult`
- `realtime.introMessage`:当实时桥接连接时的简短口头就绪检查;将其设为 `""` 可静默加入
- `realtime.instructions`:简短的口头回复,较深入的回答使用
`openclaw_agent_consult`
- `realtime.introMessage`:当实时桥接连接时,进行简短的口头就绪检查;将其设为 `""` 可静默加入
可选覆盖项:
@ -725,7 +792,7 @@ export GEMINI_API_KEY=...
}
```
`voiceCall.enabled` 默认为 `true`;使用 Twilio 传输方式时,它会将实际 PSTN 呼叫和 DTMF 委派给 Voice Call 插件。如果未启用 `voice-call`Google Meet 仍然可以验证并记录拨号计划,但无法发起 Twilio 呼叫。
`voiceCall.enabled` 默认为 `true`;使用 Twilio 传输时,它会将实际 PSTN 呼叫和 DTMF 委派给 Voice Call 插件。如果未启用 `voice-call`Google Meet 仍然可以验证和记录拨号方案,但无法发起 Twilio 呼叫。
## 工具
@ -740,15 +807,17 @@ export GEMINI_API_KEY=...
}
```
当 Chrome 运行在 Gateway 网关主机上时,使用 `transport: "chrome"`。当 Chrome 运行在已配对节点(例如 Parallels VM上时使用 `transport: "chrome-node"`。这两种情况下,实时模型和 `openclaw_agent_consult` 都运行在 Gateway 网关主机上,因此模型凭证保留在那里。
当 Chrome 运行在 Gateway 网关主机上时,使用 `transport: "chrome"`。当 Chrome 运行在配对节点(例如 Parallels VM上时使用
`transport: "chrome-node"`。在这两种情况下,实时模型和 `openclaw_agent_consult` 都运行在 Gateway 网关主机上,因此模型凭证会保留在那里。
使用 `action: "status"` 可列出活动会话或检查某个会话 ID。使用带 `sessionId``message``action: "speak"` 可让实时智能体立即发言。使用 `action: "test_speech"` 可创建或复用会话,触发一个已知短语,并在 Chrome 主机可报告时返回 `inCall` 健康状态。使用 `action: "leave"` 可将某个会话标记为结束。
使用 `action: "status"` 可列出活动会话或检查某个会话 ID。使用
`action: "speak"` 并传入 `sessionId``message`,可让实时智能体立即发言。使用 `action: "test_speech"` 可创建或复用会话、触发一段已知短语,并在 Chrome 主机能够报告时返回 `inCall` 健康状态。使用 `action: "leave"` 可将会话标记为已结束。
可用时,`status` 包含 Chrome 健康信息
`status` 在可用时包含 Chrome 健康状态
- `inCall`Chrome 看起来已进入 Meet 通话
- `micMuted`:尽力检测的 Meet 麦克风状态
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`浏览器配置文件需要手动登录、Meet 主持人准入、权限授予或浏览器控制修复,之后语音才能工作
- `inCall`Chrome 似乎已进入 Meet 通话
- `micMuted`:尽力获取的 Meet 麦克风状态
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`浏览器配置文件需要手动登录、Meet 主持人准入、权限授予或浏览器控制修复,否则语音无法工作
- `providerConnected` / `realtimeReady`:实时语音桥接状态
- `lastInputAt` / `lastOutputAt`:最近一次从桥接接收或发送音频的时间
@ -762,25 +831,27 @@ export GEMINI_API_KEY=...
## 实时智能体咨询
Chrome 实时模式针对实时语音循环进行了优化。实时语音提供商会听取会议音频,并通过配置的音频桥接进行发言。当实时模型需要更深入的推理、最新信息或普通 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
Chrome 实时模式针对实时语音回路进行了优化。实时语音提供商会听取会议音频,并通过配置的音频桥接发声。当实时模型需要更深入的推理、当前信息或常规 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
咨询工具会在后台运行常规 OpenClaw 智能体,带最近会议转录上下文,并向实时语音会话返回简洁的口回答。随后语音模型可以将该回答说回会议中。它与 Voice Call 共用同一个实时咨询工具。
咨询工具会在后台运行常规 OpenClaw 智能体,带最近会议转录上下文,并向实时语音会话返回简洁的口回答。随后语音模型可以将该回答说回会议中。它与 Voice Call 共用同一个实时咨询工具。
`realtime.toolPolicy` 控制咨询运行方式
`realtime.toolPolicy` 控制咨询运行:
- `safe-read-only`:暴露咨询工具,并将常规智能体限制为使用 `read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和 `memory_get`
- `owner`:暴露咨询工具,并允许常规智能体使用普通智能体工具策略。
- `none`:不向实时语音模型暴露咨询工具。
- `safe-read-only`:暴露咨询工具,并将常规智能体限制为
`read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和
`memory_get`
- `owner`:暴露咨询工具,并让常规智能体使用正常的智能体工具策略。
- `none`:不要将咨询工具暴露给实时语音模型。
咨询会话键按每个 Meet 会话划分作用域,因此在同一次会议期间,后续咨询调用可以复用之前的咨询上下文。
咨询会话键会按每个 Meet 会话进行作用域隔离,因此后续咨询调用可以在同一场会议期间复用先前的咨询上下文。
如果要在 Chrome 完全加入通话后强制执行一次口头就绪检查:
要在 Chrome 完全加入通话后强制执行一次口头就绪检查:
```bash
openclaw googlemeet speak meet_... "Say exactly: I'm here and listening."
```
若要执行完整的加入并发言冒烟测试:
完整的加入并发言冒烟测试:
```bash
openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
@ -788,9 +859,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: I'm here and listening."
```
## Live 测试检查清单
## 实时测试检查清单
在将会议交给无人值守智能体之前,使用以下顺序:
在将会议交给无人值守智能体之前,使用以下顺序:
```bash
openclaw googlemeet setup
@ -800,15 +871,15 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: Google Meet speech test complete."
```
预期的 `chrome-node` 状态:
预期的 Chrome-node 状态:
- `googlemeet setup` 全部为绿色。
- 当 `chrome-node` 是默认传输方式或某个节点已固定时,`googlemeet setup` 包含 `chrome-node-connected`
- 当 `chrome-node` 是默认传输方式或已固定某个节点时,`googlemeet setup` 包含 `chrome-node-connected`
- `nodes status` 显示所选节点已连接。
- 所选节点同时声明 `googlemeet.chrome``browser.proxy`
- Meet 标签页加入通话,并且 `test-speech` 返回包含 `inCall: true` 的 Chrome 健康状态
- 所选节点同时通告 `googlemeet.chrome``browser.proxy`
- Meet 标签页加入通话,并且 `test-speech` 返回的 Chrome 健康状态中包含 `inCall: true`
对于远程 Chrome 主机(例如 Parallels macOS VM这是在 Gateway 网关或 VM 更新后最短的安全检查
对于远程 Chrome 主机,例如 Parallels macOS VM在更新 Gateway 网关或 VM 后,这是最短且安全的检查方式
```bash
openclaw googlemeet setup
@ -819,9 +890,9 @@ openclaw nodes invoke \
--params '{"action":"setup"}'
```
这可以证明 Gateway 网关插件已加载VM 节点已使用当前令牌连接,并且 Meet 音频桥接可用,然后智能体才会打开真实会议标签页
这可以证明 Gateway 网关插件已加载、VM 节点已使用当前令牌连接,并且 Meet 音频桥接在智能体打开真实会议标签页之前已可用
对于 Twilio 冒烟测试,请使用一个公开电话拨入详情的会议:
对于 Twilio 冒烟测试,请使用一个公开电话拨入详情的会议:
```bash
openclaw googlemeet setup
@ -833,27 +904,29 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
预期的 Twilio 状态:
- `googlemeet setup` 包含绿色的 `twilio-voice-call-plugin``twilio-voice-call-credentials` 检查项。
- Gateway 网关重新加载后CLI 中可用 `voicecall`
- 返回的会话具有 `transport: "twilio"``twilio.voiceCallId`
- `googlemeet leave <sessionId>` 会挂断已委派的语音通话。
- `googlemeet setup` 包含绿色的 `twilio-voice-call-plugin`
`twilio-voice-call-credentials` 检查。
- Gateway 网关重新加载后CLI 中可以使用 `voicecall`
- 返回的会话具有 `transport: "twilio"` 和一个 `twilio.voiceCallId`
- `googlemeet leave <sessionId>` 会挂断委派的语音呼叫。
## 故障排除
### 智能体看不到 Google Meet 工具
确认插件已在 Gateway 网关配置中启用,并重新加载 Gateway 网关:
确认插件已在 Gateway 网关配置中启用,并重新加载 Gateway 网关:
```bash
openclaw plugins list | grep google-meet
openclaw googlemeet setup
```
如果你刚刚修改了 `plugins.entries.google-meet`,请重启或重新加载 Gateway 网关。正在运行的智能体只能看到当前 Gateway 网关进程注册的插件工具。
如果你刚刚编辑了 `plugins.entries.google-meet`,请重启或重新加载 Gateway 网关。
正在运行的智能体只能看到由当前 Gateway 网关进程注册的插件工具。
### 没有已连接的 Google Meet 可用节点
在节点主机上运行:
在节点主机上运行:
```bash
openclaw plugins enable google-meet
@ -870,7 +943,7 @@ openclaw devices approve <requestId>
openclaw nodes status
```
该节点必须已连接,并列出 `googlemeet.chrome` `browser.proxy`
该节点必须已连接,并列出 `googlemeet.chrome` 以及 `browser.proxy`
Gateway 网关配置必须允许这些节点命令:
```json5
@ -884,7 +957,7 @@ Gateway 网关配置必须允许这些节点命令:
```
如果 `googlemeet setup``chrome-node-connected` 检查失败,或者 Gateway 网关日志报告
`gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启该节点。对于 LAN Gateway 网关,通常意味着:
`gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启节点。对于局域网 Gateway 网关,通常意味着:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -895,7 +968,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
--force
```
然后重新加载节点服务,并再次运行:
然后重新加载节点服务,并重新运行:
```bash
openclaw googlemeet setup
@ -904,30 +977,38 @@ openclaw nodes status --connected
### 浏览器已打开,但智能体无法加入
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康状态。如果它报告 `manualActionRequired: true`,请向操作员显示 `manualActionMessage`,并在浏览器操作完成前停止重试。
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康状态。如果它报告
`manualActionRequired: true`,请将 `manualActionMessage` 展示给操作人员,并在浏览器操作完成前停止重试。
常见的手动操作:
- 登录 Chrome 配置文件。
- 从 Meet 主持人账户批准该访客加入。
- 从 Meet 主持账号准许访客加入。
- 当 Chrome 原生权限提示出现时,授予 Chrome 麦克风/摄像头权限。
- 关闭或修复卡住的 Meet 权限对话框。
不要仅因为 Meet 显示 “Do you want people to hear you in the meeting?” 就报告“未登录”。这是 Meet 的音频选择过渡页OpenClaw 会在可用时通过浏览器自动化点击 **Use microphone**然后继续等待真正的会议状态。对于仅创建的浏览器回退路径OpenClaw 可能会点击 **Continue without microphone**,因为创建 URL 不需要实时音频路径
不要仅因为 Meet 显示“Do you want people to hear you in the meeting?” 就报告“未登录”。这是 Meet 的音频选择过渡页OpenClaw 会在可用时通过浏览器自动化点击 **Use microphone**继续等待真正的会议状态。对于仅创建的浏览器回退,因为创建 URL 不需要实时音频路径OpenClaw 可能会点击 **Continue without microphone**
### 会议创建失败
配置了 OAuth 凭证时,`googlemeet create` 会优先使用 Google Meet API `spaces.create` 端点。没有 OAuth 凭证时,它会回退到固定的 Chrome 节点浏览器。请确认:
配置了 OAuth 凭证时,`googlemeet create` 会优先使用 Google Meet API `spaces.create` 端点。没有 OAuth 凭证时,它会回退到固定的 Chrome 节点浏览器。请确认:
- 对于 API 创建:已配置 `oauth.clientId``oauth.refreshToken`,或存在对应的 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
- 对于 API 创建:刷新令牌是在支持创建功能后生成的。较旧的令牌可能缺少 `meetings.space.created` 作用域;请重新运行 `openclaw googlemeet auth login --json` 并更新插件配置。
- 对于浏览器回退:`defaultTransport: "chrome-node"` 和 `chromeNode.node` 指向一个已连接节点,并且该节点具有 `browser.proxy``googlemeet.chrome`
- 对于 API 创建:已配置 `oauth.clientId``oauth.refreshToken`,或存在匹配的 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
- 对于 API 创建:刷新令牌是在加入创建支持后生成的。较旧的令牌可能缺少 `meetings.space.created` 作用域;请重新运行
`openclaw googlemeet auth login --json` 并更新插件配置。
- 对于浏览器回退:`defaultTransport: "chrome-node"` 和
`chromeNode.node` 指向一个已连接节点,并且该节点具有 `browser.proxy`
`googlemeet.chrome`
- 对于浏览器回退:该节点上的 OpenClaw Chrome 配置文件已登录 Google并且可以打开 `https://meet.google.com/new`
- 对于浏览器回退:重试会复用现有的 `https://meet.google.com/new` 或 Google 账户提示标签页,而不是打开新标签页。如果智能体超时,请重试工具调用,而不是手动再打开另一个 Meet 标签页。
- 对于浏览器回退:如果工具返回 `manualActionRequired: true`,请使用返回的 `browser.nodeId`、`browser.targetId`、`browserUrl` 和 `manualActionMessage` 来指导操作员。在该操作完成前,不要循环重试。
- 对于浏览器回退:如果 Meet 显示 “Do you want people to hear you in the meeting?”请保持该标签页打开。OpenClaw 应通过浏览器自动化点击 **Use microphone**,或者在仅创建回退路径中点击 **Continue without microphone**,然后继续等待生成的 Meet URL。如果无法做到错误中应提到 `meet-audio-choice-required`,而不是 `google-login-required`
- 对于浏览器回退:重试会复用已有的 `https://meet.google.com/new`
或 Google 账号提示标签页,而不是打开新标签页。如果智能体超时,请重试工具调用,而不是手动再打开一个 Meet 标签页。
- 对于浏览器回退:如果工具返回 `manualActionRequired: true`,请使用返回的
`browser.nodeId`、`browser.targetId`、`browserUrl` 和
`manualActionMessage` 来引导操作人员。在该操作完成前,不要循环重试。
- 对于浏览器回退:如果 Meet 显示“Do you want people to hear you in the
meeting?”请保持标签页打开。OpenClaw 应通过浏览器自动化点击 **Use microphone**,或者在仅创建回退场景下点击 **Continue without microphone**,并继续等待生成的 Meet URL。如果无法完成错误应提及 `meet-audio-choice-required`,而不是 `google-login-required`
### 智能体已加入但没有说话
### 智能体已加入但说话
检查实时路径:
@ -936,32 +1017,35 @@ openclaw googlemeet setup
openclaw googlemeet doctor
```
使用 `mode: "realtime"` 进行收听/回话。`mode: "transcribe"` 有意不启动双工实时语音桥接。
使用 `mode: "realtime"` 进行收听/回话。`mode: "transcribe"` 则是有意不启动双工实时语音桥接。
还要验证:
- Gateway 网关主机上有可用的实时提供商密钥,例如 `OPENAI_API_KEY``GEMINI_API_KEY`
- `BlackHole 2ch` 在 Chrome 主机上可见。
- Chrome 主机上存在 `rec``play`
- Gateway 网关主机上有可用的实时提供商密钥,例如
`OPENAI_API_KEY``GEMINI_API_KEY`
- 在 Chrome 主机上可以看到 `BlackHole 2ch`
- 在 Chrome 主机上存在 `rec``play`
- Meet 的麦克风和扬声器已通过 OpenClaw 使用的虚拟音频路径进行路由。
`googlemeet doctor [session-id]` 会打印会话、节点、通话中状态、手动操作原因、实时提供商连接、`realtimeReady`、音频输入/输出活动、最近音频时间戳、字节计数以及浏览器 URL。当你需要原始 JSON 时,请使用 `googlemeet status [session-id]`。当你需要在不暴露令牌的情况下验证 Google Meet OAuth 刷新时,请使用 `googlemeet doctor --oauth`;如果你还需要 Google Meet API 证明,可再加上 `--meeting``--create-space`
`googlemeet doctor [session-id]` 会打印会话、节点、in-call 状态、手动操作原因、实时提供商连接状态、`realtimeReady`、音频输入/输出活动、最近音频时间戳、字节计数器以及浏览器 URL。
当你需要原始 JSON 时,请使用 `googlemeet status [session-id]`。当你需要验证 Google Meet OAuth 刷新且不暴露令牌时,请使用
`googlemeet doctor --oauth`;当你还需要 Google Meet API 证明时,可额外使用 `--meeting``--create-space`
如果某个智能体已超时,而你能看到一个已打开的 Meet 标签页,请在不打开新标签页的情况下检查该标签页:
如果某个智能体超时,而你已经看到一个 Meet 标签页处于打开状态,请在不打开新标签页的情况下检查该标签页:
```bash
openclaw googlemeet recover-tab
openclaw googlemeet recover-tab https://meet.google.com/abc-defg-hij
```
等效的工具动作是 `recover_current_tab`。它会聚焦并检查配置 Chrome 节点上现有 Meet 标签页。它不会打开新标签页,也不会创建新会话;它会报告当前阻塞因素例如登录、准入、权限或音频选择状态。CLI 命令会连接到已配置的 Gateway 网关,因此 Gateway 网关必须正在运行,且 Chrome 节点必须已连接。
对应的工具操作是 `recover_current_tab`。它会聚焦并检查配置 Chrome 节点上现有 Meet 标签页。它不会打开新标签页,也不会创建新会话;它会报告当前阻塞项,例如登录、准入、权限或音频选择状态。该 CLI 命令会与已配置的 Gateway 网关通信,因此 Gateway 网关必须正在运行,并且 Chrome 节点必须已连接。
### Twilio 设置检查失败
`voice-call` 未被允许或未启用时,`twilio-voice-call-plugin` 会失败。
将其添加到 `plugins.allow`,启用 `plugins.entries.voice-call`然后重新加载 Gateway 网关。
将其添加到 `plugins.allow`,启用 `plugins.entries.voice-call`重新加载 Gateway 网关。
当 Twilio 后端缺少 account SID、auth token 或主叫号码时,`twilio-voice-call-credentials` 会失败。在 Gateway 网关主机上设置以下内容
当 Twilio 后端缺少 account SID、auth token 或主叫号码时,`twilio-voice-call-credentials` 会失败。在 Gateway 网关主机上设置这些值
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -977,13 +1061,13 @@ openclaw voicecall setup
openclaw voicecall smoke
```
默认情况下,`voicecall smoke` 仅执行就绪性检查。若要对特定号码执行 dry-run
默认情况下,`voicecall smoke` 仅用于就绪性检查。若要对某个特定号码执行 dry-run
```bash
openclaw voicecall smoke --to "+15555550123"
```
只有在你明确要发起真实的外呼通知电话时,才添加 `--yes`
只有当你明确希望发起真实的外呼通知电话时,才添加 `--yes`
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -991,7 +1075,7 @@ openclaw voicecall smoke --to "+15555550123" --yes
### Twilio 呼叫已开始,但始终未进入会议
确认 Meet 事件公开了电话拨入详情。传入准确的拨入号码和 PIN或自定义 DTMF 序列:
确认 Meet 事件公开了电话拨入详情。传入准确的拨入号码和 PIN者一个自定义 DTMF 序列:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij \
@ -1004,20 +1088,21 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## 说明
Google Meet 的官方媒体 API 偏向接收,因此向 Meet 通话中发言仍然需要一个参会者路径。这个插件让这条边界保持可见:
Google Meet 的官方媒体 API 偏向接收,因此要在 Meet 通话中发言,仍然需要一个参会者路径。该插件让这一边界保持可见:
Chrome 负责浏览器参会和本地音频路由Twilio 负责电话拨入参会。
Chrome 实时模式需要以下之一:
- `chrome.audioInputCommand``chrome.audioOutputCommand`OpenClaw 拥有实时模型桥接,并在这些命令与所选实时语音提供商之间传输 8 kHz G.711 mu-law 音频。
- `chrome.audioBridgeCommand`:一个外部桥接命令拥有整个本地音频路径,并且必须在启动或验证其守护进程后退出。
- `chrome.audioBridgeCommand`:一个外部桥接命令拥有完整的本地音频路径,并且必须在启动或验证其守护进程后退出。
若要获得干净的双工音频,请将 Meet 输出和 Meet 麦克风通过独立的虚拟设备或类似 Loopback 的虚拟设备图进行路由。单个共享的 BlackHole 设备可能会把其他参会者的声音回传到通话中。
为了获得干净的双工音频,请将 Meet 输出和 Meet 麦克风路由到不同的虚拟设备,或使用类似 Loopback 的虚拟设备图。单个共享的 BlackHole 设备可能会将其他参会者的声音回送到通话中。
`googlemeet speak` 会触发 Chrome 会话的活动实时音频桥接。`googlemeet leave` 会停止该桥接。对于通过 Voice Call 插件委派的 Twilio 会话,`leave` 还会挂断底层语音通话。
`googlemeet speak` 会触发 Chrome 会话的活动实时音频桥接。
`googlemeet leave` 会停止该桥接。对于通过 Voice Call 插件委派的 Twilio 会话,`leave` 还会挂断底层语音呼叫。
## 相关
## 相关内容
- [Voice call plugin](/zh-CN/plugins/voice-call)
- [Talk mode](/zh-CN/nodes/talk)
- [Voice call 插件](/zh-CN/plugins/voice-call)
- [Talk 模式](/zh-CN/nodes/talk)
- [构建插件](/zh-CN/plugins/building-plugins)

View File

@ -6,23 +6,23 @@ read_when:
summary: 使用已配置的提供商OpenAI、OpenAI Codex OAuth、Google Gemini、OpenRouter、fal、MiniMax、ComfyUI、Vydra、xAI生成和编辑图像
title: 图像生成
x-i18n:
generated_at: "2026-04-24T23:42:15Z"
generated_at: "2026-04-25T07:51:43Z"
model: gpt-5.4
provider: openai
source_hash: 8cfa462ba943e816d26215898bcf201fe118c96a618f2d340b0db22cc1409f56
source_hash: 02369928fecac147729ca586cd39e1a88791219ffe26d8e94429d0ea4b1af411
source_path: tools/image-generation.md
workflow: 15
---
`image_generate` 工具让智能体使用你已配置的提供商创建和编辑图像。生成的图像会作为媒体附件自动随智能体的回复一并发送。
`image_generate` 工具让智能体可以使用你已配置的提供商创建和编辑图像。生成的图像会作为媒体附件自动随智能体的回复一并发送。
<Note>
只有在至少有一个图像生成提供商可用时,此工具才会出现。如果你在智能体工具中看不到 `image_generate`,请配置 `agents.defaults.imageGenerationModel`、设置提供商 API 密钥,或使用 OpenAI Codex OAuth 登录。
只有在至少有一个图像生成提供商可用时,这个工具才会出现。如果你在智能体的工具中看不到 `image_generate`,请配置 `agents.defaults.imageGenerationModel`、设置提供商 API 密钥,或使用 OpenAI Codex OAuth 登录。
</Note>
## 快速开始
1. 为至少一个提供商设置 API 密钥(例如 `OPENAI_API_KEY`、`GEMINI_API_KEY` 或 `OPENROUTER_API_KEY`),或使用 OpenAI Codex OAuth 登录。
1. 为至少一个提供商设置 API 密钥(例如 `OPENAI_API_KEY`、`GEMINI_API_KEY` 或 `OPENROUTER_API_KEY`),或使用 OpenAI Codex OAuth 登录。
2. 可选:设置你偏好的模型:
```json5
@ -38,16 +38,17 @@ x-i18n:
```
Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
`openai-codex` OAuth 配置文件时OpenClaw 会通过该 OAuth 配置文件路由图像请求,而不是先尝试 `OPENAI_API_KEY`
显式自定义 `models.providers.openai` 图像配置例如 API 密钥或
自定义 / Azure base URL会切回直接使用 OpenAI Images API 路由。
对于 LocalAI 这类兼容 OpenAI 的局域网端点,请保留自定义
`openai-codex` OAuth 配置文件时OpenClaw 会通过同一个 OAuth 配置文件来路由图像请求,而不是先尝试 `OPENAI_API_KEY`
显式自定义 `models.providers.openai` 图像配置例如 API 密钥或
自定义 / Azure 基础 URL则会重新切换回直接 OpenAI Images API 路由。
对于像 LocalAI 这样的 OpenAI 兼容局域网端点,请保留自定义
`models.providers.openai.baseUrl`,并显式启用
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`;默认情况下,私有 / 内部图像端点仍会被阻止。
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true`;私有 / 内部
图像端点默认仍会被阻止。
3. 向智能体提问_“生成一张友好机器人吉祥物的图片。”_
3. 向智能体提问_“生成一个友好的机器人吉祥物图像。”_
智能体会自动调用 `image_generate`无需配置工具允许列表——只要有可用提供商,它默认就会启用。
智能体会自动调用 `image_generate`不需要工具允许列表——只要有可用提供商,它就会默认启用。
## 常见路由
@ -58,24 +59,24 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
| OpenRouter 图像生成 | `openrouter/google/gemini-3.1-flash-image-preview` | `OPENROUTER_API_KEY` |
| Google Gemini 图像生成 | `google/gemini-3.1-flash-image-preview` | `GEMINI_API_KEY``GOOGLE_API_KEY` |
同一个 `image_generate` 工具同时处理文生图和参考图编辑。
个参考图使用 `image`,多个参考图使用 `images`
当提供商支持时,诸如 `quality`、`outputFormat` 以及 OpenAI 专用的 `background` 等输出提示参数会被转发;当提供商不支持时,工具结果中会报告这些参数已被忽略。
同一个 `image_generate` 工具既可处理文生图,也可处理参考图编辑。
张参考图请使用 `image`,多张参考图请使用 `images`
如果提供商支持,诸如 `quality`、`outputFormat` 以及 OpenAI 专用的 `background` 等输出提示会被转发;如果提供商不支持,这些参数会在结果中报告为已忽略。
## 支持的提供商
| 提供商 | 默认模型 | 编辑支持 | 认证 |
| ---------- | --------------------------------------- | ---------------------------------- | ----------------------------------------------------- |
| OpenAI | `gpt-image-2` | 是(最多 4 张图 | `OPENAI_API_KEY` 或 OpenAI Codex OAuth |
| OpenRouter | `google/gemini-3.1-flash-image-preview` | 是(最多 5 张输入图 | `OPENROUTER_API_KEY` |
| OpenAI | `gpt-image-2` | 是(最多 4 张图 | `OPENAI_API_KEY` 或 OpenAI Codex OAuth |
| OpenRouter | `google/gemini-3.1-flash-image-preview` | 是(最多 5 张输入图 | `OPENROUTER_API_KEY` |
| Google | `gemini-3.1-flash-image-preview` | 是 | `GEMINI_API_KEY``GOOGLE_API_KEY` |
| fal | `fal-ai/flux/dev` | 是 | `FAL_KEY` |
| MiniMax | `image-01` | 是(主体参考) | `MINIMAX_API_KEY` 或 MiniMax OAuth`minimax-portal` |
| ComfyUI | `workflow` | 是1 张图片,由工作流配置) | 云端使用 `COMFY_API_KEY``COMFY_CLOUD_API_KEY` |
| ComfyUI | `workflow` | 是1 张图像,由工作流配置) | 云端需 `COMFY_API_KEY``COMFY_CLOUD_API_KEY` |
| Vydra | `grok-imagine` | 否 | `VYDRA_API_KEY` |
| xAI | `grok-imagine-image` | 是(最多 5 张图 | `XAI_API_KEY` |
| xAI | `grok-imagine-image` | 是(最多 5 张图 | `XAI_API_KEY` |
使用 `action: "list"` 可在运行时查看可用的提供商和模型:
使用 `action: "list"`在运行时查看可用的提供商和模型:
```
/tool image_generate action=list
@ -84,11 +85,11 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
## 工具参数
<ParamField path="prompt" type="string" required>
图像生成提示词。`action: "generate"` 时必填。
图像生成提示词。对于 `action: "generate"`必填。
</ParamField>
<ParamField path="action" type="'generate' | 'list'" default="generate">
使用 `"list"` 在运行时查看可用的提供商和模型。
使用 `"list"` 在运行时查看可用的提供商和模型。
</ParamField>
<ParamField path="model" type="string">
@ -96,11 +97,11 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
</ParamField>
<ParamField path="image" type="string">
用于编辑模式的单个参考图路径或 URL。
编辑模式下的单张参考图路径或 URL。
</ParamField>
<ParamField path="images" type="string[]">
用于编辑模式的多个参考图(最多 5 张)。
编辑模式下的多张参考图(最多 5 张)。
</ParamField>
<ParamField path="size" type="string">
@ -128,7 +129,7 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
</ParamField>
<ParamField path="timeoutMs" type="number">
可选的提供商请求超时时间(毫秒)
可选的提供商请求超时时间,单位为毫秒
</ParamField>
<ParamField path="filename" type="string">
@ -136,12 +137,12 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
</ParamField>
<ParamField path="openai" type="object">
仅 OpenAI 提示参数`background`、`moderation`、`outputCompression` 和 `user`
仅 OpenAI 提示:`background`、`moderation`、`outputCompression` 和 `user`
</ParamField>
并非所有提供商都支持所有参数。当某个后备提供商支持接近的几何选项而不是精确请求值时OpenClaw 会在提交前重映射到最接近的受支持尺寸、宽高比或分辨率。像 `quality``outputFormat` 这类不受支持的输出提示,会对未声明支持的提供商直接丢弃,并在工具结果中报告。
并非所有提供商都支持所有参数。当回退提供商支持的是相近的几何选项而不是你精确请求的选项时OpenClaw 会在提交前重新映射为最接近的受支持尺寸、宽高比或分辨率。不受支持的输出提示,例如 `quality``outputFormat`,会在未声明支持的提供商上被丢弃,并在工具结果中报告。
工具结果会报告实际应用的设置。当 OpenClaw 在提供商后备切换期间重映射几何参数时,返回的 `size`、`aspectRatio` 和 `resolution` 值反映的是实际发送的内容,而 `details.normalization` 会记录从请求值到实际应用值的转换。
工具结果会报告实际应用的设置。当 OpenClaw 在提供商回退期间重新映射几何参数时,返回的 `size`、`aspectRatio` 和 `resolution` 值反映的是实际发送的内容,而 `details.normalization` 则记录请求值到应用值的转换。
## 配置
@ -171,39 +172,39 @@ Codex OAuth 使用同一个 `openai/gpt-image-2` 模型引用。当配置了
1. 工具调用中的 **`model` 参数**(如果智能体指定了)
2. 配置中的 **`imageGenerationModel.primary`**
3. 按顺序使用 **`imageGenerationModel.fallbacks`**
4. **自动检测** —— 仅使用具备认证支持的提供商默认值:
4. **自动检测** —— 仅使用基于认证可用的提供商默认值:
- 先使用当前默认提供商
- 再按 provider-id 顺序使用其余已注册的图像生成提供商
- 再按提供商 ID 顺序使用其余已注册的图像生成提供商
如果某个提供商失败(认证错误、速率限制等),系统会自动尝试下一个已配置候选项。如果全部失败,错误信息会包含每次尝试的详细信息。
如果某个提供商失败(认证错误、速率限制等),系统会自动尝试下一个已配置候选项。如果全部失败,错误会包含每次尝试的详细信息。
注意
说明
- 每次调用的 `model` 覆盖是精确的OpenClaw 只会尝试该提供商 / 模型,
不会继续尝试配置的主模型 / 后备模型或自动检测到的
不会继续尝试已配置的主模型 / 回退模型或自动检测到的
提供商。
- 自动检测具备认证感知能力。只有当 OpenClaw 实际能够认证某个提供商时,
- 自动检测会感知认证状态。只有当 OpenClaw 实际能够对某个提供商进行认证时,
该提供商默认值才会进入候选列表。
- 自动检测默认启用。若你希望图像
生成使用显式的 `model`、`primary` 和 `fallbacks`
生成使用显式的 `model`、`primary` 和 `fallbacks`
条目,请设置
`agents.defaults.mediaGenerationAutoProviderFallback: false`
- 使用 `action: "list"` 可查看当前已注册的提供商、它们的
默认模型以及认证环境变量提示。
- 使用 `action: "list"` 可查看当前已注册的提供商、
默认模型以及认证环境变量提示。
### 图像编辑
OpenAI、OpenRouter、Google、fal、MiniMax、ComfyUI 和 xAI 支持编辑参考图像。传入参考图路径或 URL
OpenAI、OpenRouter、Google、fal、MiniMax、ComfyUI 和 xAI 支持编辑参考图像。传入参考图路径或 URL
```
"将这张照片生成水彩风格版本" + image: "/path/to/photo.jpg"
"把这张照片生成成水彩画风格" + image: "/path/to/photo.jpg"
```
OpenAI、OpenRouter、Google 和 xAI 通过 `images` 参数最多支持 5 张参考图。fal、MiniMax 和 ComfyUI 支持 1 张。
### OpenRouter 图像模型
OpenRouter 图像生成使用同一个 `OPENROUTER_API_KEY`,并通过 OpenRouter 的 chat completions 图像 API 路由。使用 `openrouter/` 前缀选择 OpenRouter 图像模型:
OpenRouter 图像生成使用相同的 `OPENROUTER_API_KEY`,并通过 OpenRouter 的 chat completions 图像 API 路由。使用 `openrouter/` 前缀选择 OpenRouter 图像模型:
```json5
{
@ -217,26 +218,28 @@ OpenRouter 图像生成使用同一个 `OPENROUTER_API_KEY`,并通过 OpenRout
}
```
OpenClaw 会将 `prompt`、`count`、参考图像以及兼容 Gemini 的 `aspectRatio` / `resolution` 提示转发给 OpenRouter。当前内置的 OpenRouter 图像模型快捷方式包括 `google/gemini-3.1-flash-image-preview`、`google/gemini-3-pro-image-preview` 和 `openai/gpt-5.4-image-2`请使用 `action: "list"` 查看你所配置插件公开的内容
OpenClaw 会将 `prompt`、`count`、参考图像以及兼容 Gemini 的 `aspectRatio` / `resolution` 提示转发给 OpenRouter。当前内置的 OpenRouter 图像模型快捷包括 `google/gemini-3.1-flash-image-preview`、`google/gemini-3-pro-image-preview` 和 `openai/gpt-5.4-image-2`使用 `action: "list"` 可查看你配置的插件公开了哪些模型
### OpenAI `gpt-image-2`
OpenAI 图像生成默认使用 `openai/gpt-image-2`。如果配置了
`openai-codex` OAuth 配置文件OpenClaw 会复用同一个用于 Codex
订阅聊天模型的 OAuth 配置文件,并通过 Codex Responses 后端发送图像请求;
它不会在该请求中静默回退到
`OPENAI_API_KEY`。若要强制直接路由到 OpenAI Images API
请显式配置 `models.providers.openai`,提供 API 密钥、自定义 base URL
或 Azure 端点。较旧的
`openai-codex` OAuth 配置文件OpenClaw 会复用同一个 OAuth
配置文件——也就是 Codex 订阅聊天模型使用的那个——并通过
Codex Responses 后端发送图像请求。旧版 Codex 基础 URL例如
`https://chatgpt.com/backend-api`,会在图像请求中规范化为
`https://chatgpt.com/backend-api/codex`。它不会
静默回退到该请求的 `OPENAI_API_KEY`。如需强制使用直接 OpenAI
Images API 路由,请显式配置 `models.providers.openai`,例如 API
密钥、自定义基础 URL 或 Azure 端点。较旧的
`openai/gpt-image-1` 模型仍可显式选择,但新的 OpenAI
图像生成和图像编辑请求应使用 `gpt-image-2`
`gpt-image-2` 同时支持文生图和参考图
编辑,均通过同一个 `image_generate` 工具完成。OpenClaw 会向 OpenAI 转发 `prompt`
`count`、`size`、`quality`、`outputFormat` 和参考图像
OpenAI 不会直接接收 `aspectRatio``resolution`;在可能的情况下
OpenClaw 会将它们映射为受支持的 `size`,否则工具会报告它们
作为被忽略的覆盖参数
`gpt-image-2` 通过同一个 `image_generate` 工具同时支持文生图
和参考图编辑。OpenClaw 会将 `prompt`
`count`、`size`、`quality`、`outputFormat` 以及参考图像转发给 OpenAI
OpenAI 不会直接接收 `aspectRatio``resolution`;在可能的情况下
OpenClaw 会将它们映射为受支持的 `size`,否则工具会将其报告为
已忽略的覆盖项
OpenAI 专用选项位于 `openai` 对象下:
@ -257,7 +260,7 @@ OpenAI 专用选项位于 `openai` 对象下:
输出要求 `outputFormat``png``webp`。`openai.outputCompression`
适用于 JPEG/WebP 输出。
生成一张 4K 横图像:
生成一张 4K 横图像:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="A clean editorial poster for OpenClaw image generation" size=3840x2160 count=1
@ -269,7 +272,7 @@ OpenAI 专用选项位于 `openai` 对象下:
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Two visual directions for a calm productivity app icon" size=1024x1024 count=2
```
编辑一张本地参考图
编辑一张本地参考图:
```
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Keep the subject, replace the background with a bright studio setup" image=/path/to/reference.png size=1024x1536
@ -281,43 +284,43 @@ OpenAI 专用选项位于 `openai` 对象下:
/tool image_generate action=generate model=openai/gpt-image-2 prompt="Combine the character identity from the first image with the color palette from the second" images='["/path/to/character.png","/path/to/palette.jpg"]' size=1536x1024
```
若要将 OpenAI 图像生成通过 Azure OpenAI 部署路由,而不是
`api.openai.com`,请参阅 OpenAI 提供商文档中的 [Azure OpenAI endpoints](/zh-CN/providers/openai#azure-openai-endpoints)。
如需将 OpenAI 图像生成路由到 Azure OpenAI 部署,而不是
`api.openai.com`,请参阅 OpenAI provider 文档中的 [Azure OpenAI endpoints](/zh-CN/providers/openai#azure-openai-endpoints)。
MiniMax 图像生成可通过两种内置的 MiniMax 认证路径使用:
- API 密钥配置使用 `minimax/image-01`
- OAuth 配置使用 `minimax-portal/image-01`
- `minimax/image-01` 用于 API 密钥配置
- `minimax-portal/image-01` 用于 OAuth 配置
## 提供商能力
| 能力 | OpenAI | Google | fal | MiniMax | ComfyUI | Vydra | xAI |
| --------------------- | -------------------- | -------------------- | ------------------- | -------------------------- | ---------------------------------- | ------- | -------------------- |
| 生成 | 是(最多 4 张) | 是(最多 4 张) | 是(最多 4 张) | 是(最多 9 张) | 是(输出由工作流定义) | 是1 张) | 是(最多 4 张) |
| 编辑 / 参考图 | 是(最多 5 张图片) | 是(最多 5 张图片) | 是1 张图片) | 是1 张图片,主体参考) | 是1 张图片,由工作流配置) | 否 | 是(最多 5 张图片 |
| 编辑 / 参考图 | 是(最多 5 张图像) | 是(最多 5 张图像) | 是1 张图像) | 是1 张图像,主体参考) | 是1 张图像,由工作流配置) | 否 | 是(最多 5 张图像 |
| 尺寸控制 | 是(最高 4K | 是 | 是 | 否 | 否 | 否 | 否 |
| 宽高比 | 否 | 是 | 是(仅生成) | 是 | 否 | 否 | 是 |
| 分辨率1K/2K/4K | 否 | 是 | 是 | 否 | 否 | 否 | 是1K/2K |
### xAI `grok-imagine-image`
内置 xAI 提供商在仅提示词请求时使用 `/v1/images/generations`
当存在 `image``images` 时使用 `/v1/images/edits`
内置 xAI 提供商在仅提示词请求时使用 `/v1/images/generations`
当存在 `image``images` 时使用 `/v1/images/edits`
- 模型:`xai/grok-imagine-image`、`xai/grok-imagine-image-pro`
- 数量:最多 4 张
- 参考图:一`image` 或最多五个 `images`
- 参考图:一`image` 或最多五张 `images`
- 宽高比:`1:1`、`16:9`、`9:16`、`4:3`、`3:4`、`2:3`、`3:2`
- 分辨率:`1K`、`2K`
- 输出:作为由 OpenClaw 管理的图像附件返回
在这些控制项被纳入共享的跨提供商 `image_generate` 合同之前,
OpenClaw 有意不公开 xAI 原生的 `quality`、`mask`、`user`
其他仅原生支持的额外宽高比。
在这些控制项进入共享的跨提供商 `image_generate` 契约之前,
OpenClaw 有意不公开 xAI 原生的 `quality`、`mask`、`user`
额外的仅原生支持的宽高比。
## 相关内容
- [Tools Overview](/zh-CN/tools) — 所有可用的智能体工具
- [工具概览](/zh-CN/tools) — 所有可用的智能体工具
- [fal](/zh-CN/providers/fal) — fal 图像和视频提供商设置
- [ComfyUI](/zh-CN/providers/comfy) — 本地 ComfyUI 和 Comfy Cloud 工作流设置
- [Google (Gemini)](/zh-CN/providers/google) — Gemini 图像提供商设置
@ -325,5 +328,5 @@ OpenClaw 有意不公开 xAI 原生的 `quality`、`mask`、`user` 或
- [OpenAI](/zh-CN/providers/openai) — OpenAI Images 提供商设置
- [Vydra](/zh-CN/providers/vydra) — Vydra 图像、视频和语音设置
- [xAI](/zh-CN/providers/xai) — Grok 图像、视频、搜索、代码执行和 TTS 设置
- [Configuration Reference](/zh-CN/gateway/config-agents#agent-defaults) — `imageGenerationModel` 配置
- [配置参考](/zh-CN/gateway/config-agents#agent-defaults) — `imageGenerationModel` 配置
- [Models](/zh-CN/concepts/models) — 模型配置和故障切换