chore(i18n): refresh zh-CN translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 06:55:27 +00:00
parent e91eff8ae7
commit a02caac2d2
7 changed files with 1104 additions and 865 deletions

View File

@ -2,90 +2,90 @@
read_when:
- 将 Codex、Claude Code 或其他 MCP 客户端连接到由 OpenClaw 支持的渠道
- 运行 `openclaw mcp serve`
- 管理 OpenClaw 保存的 MCP 服务器定义
- 管理 OpenClaw 保存的 MCP 服务器定义
summary: 通过 MCP 暴露 OpenClaw 渠道会话,并管理已保存的 MCP 服务器定义
title: MCP
x-i18n:
generated_at: "2026-04-24T03:14:51Z"
generated_at: "2026-04-25T06:52:27Z"
model: gpt-5.4
provider: openai
source_hash: b9df42ebc547f07698f84888d8cd6125340d0f0e02974a965670844589e1fbf8
source_hash: 43505ab290d01a2c3f7dd9ff39b8a074360ba4365b628da71459c6f9a9659dc5
source_path: cli/mcp.md
workflow: 15
---
`openclaw mcp` 有两个职责
`openclaw mcp` 有两个用途
- 使用 `openclaw mcp serve` 将 OpenClaw 作为 MCP 服务器运行
- 使用 `list`、`show`、`set` 和 `unset` 管理由 OpenClaw 拥有的出站 MCP 服务器定义
换句话说:
- `serve` 是 OpenClaw 作为 MCP 服务器运行
- `list` / `show` / `set` / `unset` 是 OpenClaw 作为面向其他 MCP 服务器的 MCP 客户端侧注册表运行,供其运行时稍后使用
- `serve` 是 OpenClaw 充当 MCP 服务器
- `list` / `show` / `set` / `unset` 是 OpenClaw 充当其他 MCP 服务器的客户端侧注册表,其运行时稍后可能会使用这些服务器
当 OpenClaw 应该自行托管一个 coding harness 会话并通过 ACP 路由该运行时时,请使用 [`openclaw acp`](/zh-CN/cli/acp)。
当 OpenClaw 应该自行托管一个编码 harness 会话并通过 ACP 路由该运行时时,请使用 [`openclaw acp`](/zh-CN/cli/acp)。
## OpenClaw 作为 MCP 服务器
## 作为 MCP 服务器的 OpenClaw
就是 `openclaw mcp serve` 这一路径。
对应 `openclaw mcp serve` 路径。
## 何时使用 `serve`
在以下情况下使用 `openclaw mcp serve`
- Codex、Claude Code 或其他 MCP 客户端应直接与由 OpenClaw 支持的渠道会话通信
- 你已经有一个本地或远程的 OpenClaw Gateway 网关,并且其中已路由的会话
- 你希望使用一个可跨 OpenClaw 渠道后端工作的 MCP 服务器,而不是为每个渠道分别运行桥接
- 你已经有一个本地或远程的 OpenClaw Gateway 网关,并且其中已路由的会话
- 你希望使用一个可跨 OpenClaw 渠道后端工作的 MCP 服务器,而不是为每个渠道分别运行独立桥接
当 OpenClaw 应该自行托管 coding 运行时并将智能体会话保留在 OpenClaw 内部时,请改用 [`openclaw acp`](/zh-CN/cli/acp)。
当 OpenClaw 应该自行托管编码运行时并将智能体会话保留在 OpenClaw 内部时,请改用 [`openclaw acp`](/zh-CN/cli/acp)。
## 工作原理
`openclaw mcp serve` 会启动一个 stdio MCP 服务器。该进程由 MCP 客户端拥有。只要客户端保持 stdio 会话打开,桥接器就会通过 WebSocket 连接到本地或远程的 OpenClaw Gateway 网关,并通过 MCP 暴露已路由的渠道会话。
`openclaw mcp serve` 会启动一个 stdio MCP 服务器。该进程由 MCP 客户端拥有。只要客户端保持 stdio 会话处于打开状态这个桥接器就会通过 WebSocket 连接到本地或远程的 OpenClaw Gateway 网关,并通过 MCP 暴露已路由的渠道会话。
生命周期:
1. MCP 客户端启动 `openclaw mcp serve`
2. 桥接器连接到 Gateway 网关
3. 已路由的会话变为 MCP 会话与 transcript/history 工具
4. 当桥接器保持连接时,实时事件会在内存中排队
5. 如果启用了 Claude 渠道模式,同一会话还可以接收 Claude 专用推送通知
3. 已路由会话变为 MCP 会话以及 transcript/history 工具
4. 只要桥接器保持连接,实时事件就会在内存中排队
5. 如果启用了 Claude 渠道模式,同一会话还可以接收 Claude 专用推送通知
重要行为:
- 实时队列状态从桥接器连接时开始
- 早的 transcript 历史通过 `messages_read` 读取
- Claude 推送通知仅在 MCP 会话存活期间存在
- 当客户端断开连接时,桥接器退出,实时队列也随之消失
- 由 OpenClaw 启动的 stdio MCP 服务器(内置或用户配置)会在关闭时按进程树终止,因此服务器启动的子进程不会在父 stdio 客户端退出后继续存活
- 早的 transcript 历史通过 `messages_read` 读取
- Claude 推送通知仅在 MCP 会话存活存在
- 当客户端断开连接时,桥接器会退出,实时队列也会消失
- 由 OpenClaw 启动的 stdio MCP 服务器(内置或用户配置)会在关闭时作为进程树被终止,因此该服务器启动的子进程不会在父级 stdio 客户端退出后继续存活
- 删除或重置会话时,会通过共享运行时清理路径释放该会话的 MCP 客户端,因此不会留下与已移除会话绑定的残留 stdio 连接
## 选择客户端模式
同一个桥接器可以通过两种不同方式使用:
同一个桥接器可以两种不同方式使用:
- 通用 MCP 客户端:仅使用标准 MCP 工具。使用 `conversations_list`、`messages_read`、`events_poll`、`events_wait`、`messages_send` 以及审批工具。
- Claude Code使用标准 MCP 工具加 Claude 专用渠道适配器。启用 `--claude-channel-mode on`,或保留默认值 `auto`
- 通用 MCP 客户端:仅标准 MCP 工具。使用 `conversations_list`、`messages_read`、`events_poll`、`events_wait`、`messages_send` 审批工具。
- Claude Code标准 MCP 工具加 Claude 专用渠道适配器。启用 `--claude-channel-mode on`,或保留默认值 `auto`
目前,`auto` 的行为与 `on` 相同。当前还没有客户端能力检测。
当前,`auto` 的行为与 `on` 相同。还没有客户端能力检测。
## `serve` 暴露了什么
桥接器使用现有的 Gateway 网关会话路由元数据来暴露由渠道支持的会话。当 OpenClaw 已经拥有带有已知路由的会话状态时,会出现一个会话,例如:
桥接器使用现有的 Gateway 网关会话路由元数据来暴露由渠道支持的会话。当 OpenClaw 已经拥有带有已知路由的会话状态时,会出现一个会话,例如:
- `channel`
- recipient 或 destination 元数据
- 收件人或目标元数据
- 可选的 `accountId`
- 可选的 `threadId`
这让 MCP 客户端可以在一个地方:
这让 MCP 客户端可以在一个地方完成以下操作
- 列出最近已路由的会话
- 读取最近的 transcript 历史
- 等待新的入站事件
- 通过同路由发送回复
- 查看桥接器连接期间到达的审批请求
- 通过同路由发送回复
- 查看桥接器连接期间到达的审批请求
## 用法
@ -122,9 +122,9 @@ openclaw mcp serve --claude-channel-mode off
### `conversations_list`
列出最近那些在 Gateway 网关会话状态中已经具有路由元数据的、由会话支持的会话。
列出最近那些已经在 Gateway 网关会话状态中带有路由元数据的、由会话支持的会话。
有用的过滤器
常用过滤条件
- `limit`
- `search`
@ -138,30 +138,30 @@ openclaw mcp serve --claude-channel-mode off
### `messages_read`
读取一个由会话支持的会话的最近 transcript 消息。
读取一个由会话支持的会话的最近 transcript 消息。
### `attachments_fetch`
从一条 transcript 消息中提取非文本消息内容块。这是针对 transcript 内容的元数据视图,而不是一个独立、持久的附件 blob 存储。
从一条 transcript 消息中提取非文本消息内容块。这是 transcript 内容的元数据视图,不是一个独立的持久化附件 blob 存储。
### `events_poll`
读取自某个数值游标以来排队的实时事件。
从某个数字游标开始读取已排队的实时事件。
### `events_wait`
长轮询,直到下一个匹配的排队事件到达或超时。
当通用 MCP 客户端需要接近实时的投递能力,但又不使用 Claude 专用推送协议时,请使用它
当通用 MCP 客户端需要接近实时的传递而又不使用 Claude 专用推送协议时,可使用此工具
### `messages_send`
通过会话中已记录的同一路由发送文本。
通过该会话上已记录的相同路由发回文本。
当前行为:
- 需要现有的会话路由
- 使用会话的 channel、recipient、account id 和 thread id
- 需要已有会话路由
- 使用该会话的渠道、收件人、账号 id 和线程 id
- 仅发送文本
### `permissions_list_open`
@ -170,7 +170,7 @@ openclaw mcp serve --claude-channel-mode off
### `permissions_respond`
使用以下值之一处理一个待处理的 exec/plugin 审批请求:
用以下值之一处理一个待处理的 exec/plugin 审批请求:
- `allow-once`
- `allow-always`
@ -191,13 +191,13 @@ openclaw mcp serve --claude-channel-mode off
重要限制:
- 该队列仅用于实时事件;它从 MCP 桥接器启动时开始
- `events_poll``events_wait` 本身不会重放早的 Gateway 网关历史
- 持久积压消息应使用 `messages_read` 读取
- 队列仅包含实时事件;它从 MCP 桥接启动时开始
- `events_poll``events_wait` 本身不会重放早的 Gateway 网关历史
- 持久化积压历史应通过 `messages_read` 读取
## Claude 渠道通知
桥接器还可以暴露 Claude 专用渠道通知。这相当于 OpenClaw 版的 Claude Code 渠道适配器:标准 MCP 工具仍然可用,但实时入站消息也可以作为 Claude 专用 MCP 通知到达。
桥接器还可以暴露 Claude 专用渠道通知。这相当于 OpenClaw 版的 Claude Code 渠道适配器:标准 MCP 工具仍然可用,但实时入站消息也可以作为 Claude 专用 MCP 通知到达。
标志:
@ -215,9 +215,9 @@ openclaw mcp serve --claude-channel-mode off
- 入站的 `user` transcript 消息会被转发为 `notifications/claude/channel`
- 通过 MCP 接收到的 Claude 权限请求会在内存中跟踪
- 如果关联会话随后发送 `yes abcde``no abcde`,桥接器会将其转换为 `notifications/claude/channel/permission`
- 这些通知仅在实时会话期间存在;如果 MCP 客户端断开连接,就不再有推送目标
- 这些通知仅在实时会话期间存在;如果 MCP 客户端断开连接,就没有推送目标了
是有意设计为客户端专用的。通用 MCP 客户端应依赖标准轮询工具。
特意是面向特定客户端的。通用 MCP 客户端应依赖标准轮询工具。
## MCP 客户端配置
@ -241,7 +241,7 @@ openclaw mcp serve --claude-channel-mode off
}
```
对于大多数通用 MCP 客户端,先从标准工具接口开始,并忽略 Claude 模式。仅当客户端确实理解 Claude 专用通知方法时,再开启 Claude 模式。
对于大多数通用 MCP 客户端,先从标准工具接口开始,并忽略 Claude 模式。只有在客户端确实理解 Claude 专用通知方法时,才开启 Claude 模式。
## 选项
@ -255,70 +255,70 @@ openclaw mcp serve --claude-channel-mode off
- `--claude-channel-mode <auto|on|off>`Claude 通知模式
- `-v`, `--verbose`:在 stderr 上输出详细日志
果可能,优先使用 `--token-file``--password-file`,而不是内联密钥
有可能,优先使用 `--token-file``--password-file`,而不是内联秘密信息
## 安全性与信任边界
桥接器不会自行发明路由。它只暴露 Gateway 网关已经知道如何路由的会话。
桥接器不会发明路由。它只暴露 Gateway 网关已经知道如何路由的会话。
这意味着:
- 发送者 allowlist、配对以及渠道级信任,仍然属于底层 OpenClaw 渠道配置的职责范围
- `messages_send` 只能通过现有的已存储路由进行回复
- 审批状态对于当前桥接会话来说仅是实时/内存中的
- 桥接认证应使用与你信任给其他任何远程 Gateway 网关客户端相同的 Gateway 网关令牌或密码控制方式
- 发送者 allowlist、配对渠道级信任,仍然属于底层 OpenClaw 渠道配置
- `messages_send` 只能通过一个已存在的已存储路由进行回复
- 审批状态仅对当前桥接会话实时保存在内存中
- 桥接认证应使用与你信任任何其他远程 Gateway 网关客户端相同的 Gateway 网关令牌或密码控制
如果某个会话没有出现在 `conversations_list` 中,通常原因不是 MCP 配置,而是底层 Gateway 网关会话中缺少路由元数据,或其不完整
如果某个会话出现在 `conversations_list` 中,通常原因不是 MCP 配置,而是底层 Gateway 网关会话中缺少或存在不完整的路由元数据。
## 测试
OpenClaw 为这个桥接器提供了一个确定性的 Docker smoke 测试:
OpenClaw 为这个桥接器提供了一个确定性的 Docker 冒烟测试:
```bash
pnpm test:docker:mcp-channels
```
smoke 测试会:
冒烟测试会:
- 启动一个已注入种子数据的 Gateway 网关容器
- 启动一个已预置数据的 Gateway 网关容器
- 启动第二个容器,并在其中启动 `openclaw mcp serve`
- 验证会话发现、transcript 读取、附件元数据读取、实时事件队列行为以及出站发送路由
- 验证会话发现、transcript 读取、附件元数据读取、实时事件队列行为以及出站发送路由
- 通过真实的 stdio MCP 桥接验证 Claude 风格的渠道通知和权限通知
这是在不把真实 Telegram、Discord 或 iMessage 账户接入测试流程的情况下,证明桥接器可正常工作的最快方式
这是在不将真实 Telegram、Discord 或 iMessage 账号接入测试运行的情况下,证明桥接器可正常工作的最快方法
有关更广泛的测试背景,请参见 [测试](/zh-CN/help/testing)。
如需更广泛的测试背景,请参阅 [测试](/zh-CN/help/testing)。
## 故障排除
### 没有返回任何会话
通常意味着 Gateway 网关会话尚不可路由。请确认底层会话已存储 channel/provider、recipient以及可选的 account/thread 路由元数据。
通常表示 Gateway 网关会话本身还不可路由。请确认底层会话已存储渠道/提供商、收件人,以及可选的账号/线程路由元数据。
### `events_poll``events_wait` 漏掉较早的消息
### `events_poll``events_wait` 漏掉较早的消息
这是预期行为。实时队列从桥接器连接时开始。较早的 transcript 历史请用 `messages_read` 读取。
这是预期行为。实时队列从桥接器连接时开始。请使`messages_read` 读取更早的 transcript 历史
### Claude 通知没有出现
### Claude 通知没有显示
请检查以下所有项目
请检查以下各项
- 客户端保持了 stdio MCP 会话处于打开状态
- `--claude-channel-mode` `on``auto`
- `--claude-channel-mode` `on``auto`
- 客户端确实理解 Claude 专用通知方法
- 入站消息发生在桥接器连接之后
### 审批缺失
`permissions_list_open` 显示桥接器连接期间观察到的审批请求。它不是一个持久化审批历史 API。
`permissions_list_open` 显示桥接器连接期间观察到的审批请求。它不是持久化审批历史 API。
## OpenClaw 作为 MCP 客户端注册表
就是 `openclaw mcp list`、`show`、`set` 和 `unset` 这一路径。
对应 `openclaw mcp list`、`show`、`set` 和 `unset` 路径。
这些命令不会通过 MCP 暴露 OpenClaw。它们管理的是 OpenClaw 配置中 `mcp.servers` 下由 OpenClaw 拥有的 MCP 服务器定义。
这些命令不会通过 MCP 暴露 OpenClaw。它们用于管理 OpenClaw 配置中 `mcp.servers` 下由 OpenClaw 拥有的 MCP 服务器定义。
这些已保存的定义供 OpenClaw 稍后启动或配置的运行时使用,例如内嵌 Pi 和其他运行时适配器。OpenClaw 将这些定义集中存储,因此这些运行时不需要各自维护重复的 MCP 服务器列表。
这些已保存的定义供 OpenClaw 稍后启动或配置的运行时使用,例如内嵌 Pi 和其他运行时适配器。OpenClaw 会集中存储这些定义,这样这些运行时就不需要各自维护重复的 MCP 服务器列表。
重要行为:
@ -327,10 +327,11 @@ pnpm test:docker:mcp-channels
- 它们不会验证命令、URL 或远程传输当前是否可达
- 运行时适配器会在执行时决定自己实际支持哪些传输形态
- 内嵌 Pi 会在常规 `coding``messaging` 工具配置文件中暴露已配置的 MCP 工具;`minimal` 仍会隐藏它们,而 `tools.deny: ["bundle-mcp"]` 会显式禁用它们
- 会话范围的内置 MCP 运行时会在空闲 `mcp.sessionIdleTtlMs` 毫秒后被回收(默认 10 分钟;设为 `0` 可禁用),一次性内嵌运行则会在运行结束时清理它们
## 已保存的 MCP 服务器定义
OpenClaw 还会在配置中存储一个轻量级 MCP 服务器注册表,供那些希望使用 OpenClaw 管理的 MCP 定义的界面使用。
OpenClaw 还会在配置中存储一个轻量级 MCP 服务器注册表,供希望使用 OpenClaw 管理的 MCP 定义的界面使用。
命令:
@ -343,7 +344,7 @@ OpenClaw 还会在配置中存储一个轻量级 MCP 服务器注册表,供那
- `list` 会对服务器名称排序。
- 不带名称的 `show` 会打印完整的已配置 MCP 服务器对象。
- `set` 需要在命令行中提供一个 JSON 对象值。
- `set` 需要在命令行中传入一个 JSON 对象值。
- 如果指定名称的服务器不存在,`unset` 会失败。
示例:
@ -387,19 +388,19 @@ openclaw mcp unset context7
#### Stdio 环境变量安全过滤器
OpenClaw 会拒绝那些可能在第一次 RPC 之前改变 stdio MCP 服务器启动方式的解释器启动环境变量键,即使它们出现在服务器的 `env` 块中也是如此。被拦截的键包括 `NODE_OPTIONS`、`PYTHONSTARTUP`、`PYTHONPATH`、`PERL5OPT`、`RUBYOPT`、`SHELLOPTS`、`PS4` 以及类似的运行时控制变量。启动时会以配置错误的形式拒绝这些键,从而防止它们注入隐式前导代码、替换解释器,或为 stdio 进程启用调试器。普通的凭据、代理和服务器专用环境变量(`GITHUB_TOKEN`、`HTTP_PROXY`、自定义 `*_API_KEY` 等)不受影响。
OpenClaw 会拒绝那些可能在第一次 RPC 之前改变 stdio MCP 服务器启动方式的解释器启动环境变量键,即使它们出现在服务器的 `env` 块中也是如此。被阻止的键包括 `NODE_OPTIONS`、`PYTHONSTARTUP`、`PYTHONPATH`、`PERL5OPT`、`RUBYOPT`、`SHELLOPTS`、`PS4` 以及类似的运行时控制变量。对于这些键,启动会以配置错误被拒绝,这样它们就无法注入隐式前导代码、替换解释器,或对 stdio 进程启用调试器。普通凭证、代理和服务器专用环境变量(`GITHUB_TOKEN`、`HTTP_PROXY`、自定义 `*_API_KEY` 等)不受影响。
如果你的 MCP 服务器确实需要某个被拦截的变量,请将其设置在 Gateway 网关宿主进程上,而不是放在 stdio 服务器的 `env` 下。
如果你的 MCP 服务器确实需要其中某个被阻止的变量,请在 Gateway 网关宿主进程上设置它,而不是放在 stdio 服务器的 `env` 下。
### SSE / HTTP 传输
通过 HTTP Server-Sent Events 连接到远程 MCP 服务器。
| Field | Description |
| --------------------- | ---------------------------------------- |
| `url` | 远程服务器的 HTTP 或 HTTPS URL必需 |
| Field | Description |
| --------------------- | -------------------------------------- |
| `url` | 远程服务器的 HTTP 或 HTTPS URL必需 |
| `headers` | 可选的 HTTP 标头键值映射(例如认证令牌) |
| `connectionTimeoutMs` | 每个服务器的连接超时(毫秒,可选) |
| `connectionTimeoutMs` | 每个服务器的连接超时时间(毫秒,可选) |
示例:
@ -418,18 +419,18 @@ OpenClaw 会拒绝那些可能在第一次 RPC 之前改变 stdio MCP 服务器
}
```
`url` 中的敏感值userinfo`headers` 中的敏感值会在日志和状态输出中被打码
`url` 中的敏感值userinfo以及 `headers` 中的敏感值,会在日志和状态输出中被脱敏
### Streamable HTTP 传输
### 可流式 HTTP 传输
`streamable-http` 是与 `sse``stdio` 并列的另一种传输选项。它使用 HTTP 流式传输与远程 MCP 服务器进行双向通信
`streamable-http` 是与 `sse``stdio` 并列的额外传输选项。它使用 HTTP 流进行双向通信,以连接远程 MCP 服务器
| Field | Description |
| --------------------- | ------------------------------------------------------------------- |
| `url` | 远程服务器的 HTTP 或 HTTPS URL必需 |
| `transport` | 设为 `"streamable-http"` 以选择此传输;省略OpenClaw 使用 `sse` |
| `headers` | 可选的 HTTP 标头键值映射(例如认证令牌) |
| `connectionTimeoutMs` | 每个服务器的连接超时(毫秒,可选) |
| Field | Description |
| --------------------- | ------------------------------------------------------------------------------ |
| `url` | 远程服务器的 HTTP 或 HTTPS URL必需 |
| `transport` | 设`"streamable-http"` 以选择此传输方式省略OpenClaw 使用 `sse` |
| `headers` | 可选的 HTTP 标头键值映射(例如认证令牌) |
| `connectionTimeoutMs` | 每个服务器的连接超时时间(毫秒,可选) |
示例:
@ -450,18 +451,18 @@ OpenClaw 会拒绝那些可能在第一次 RPC 之前改变 stdio MCP 服务器
}
```
这些命令只管理已保存的配置。它们不会启动渠道桥接器、打开实时 MCP 客户端会话,也不能证明目标服务器当前可达。
这些命令只管理已保存的配置。它们不会启动渠道桥接、打开实时 MCP 客户端会话,也不会证明目标服务器当前可达。
## 当前限制
本页记录的是当前发布的桥接器行为。
本页记录的是当前发布版本中的桥接器行为。
当前限制:
- 会话发现依赖现有 Gateway 网关会话路由元数据
- 除 Claude 专用适配器外,尚无通用推送协议
- 目前还没有消息编辑或 react 工具
- HTTP/SSE/streamable-http 传输会连接到单个远程服务器;目前还不支持多路复用上游
- 会话发现依赖现有 Gateway 网关会话路由元数据
- 除 Claude 专用适配器外,尚无通用推送协议
- 还没有消息编辑或表情回应工具
- HTTP/SSE/streamable-http 传输连接到单个远程服务器;尚不支持多路复用上游
- `permissions_list_open` 仅包含桥接器连接期间观察到的审批
## 相关内容

View File

@ -1,27 +1,27 @@
---
read_when:
- 你想更改默认模型或查看提供商认证状态
- 你想扫描可用的模型/提供商,并调试认证配置文件
summary: '`openclaw models` 的 CLI 参考(状态/列表/设置/扫描、别名、回退和认证)'
title: 模型
- 你想更改默认模型或查看提供商身份验证状态。
- 你想扫描可用的模型/提供商并调试身份验证配置文件。
summary: '`openclaw models` 的 CLI 参考(status/list/set/scan、别名、回退机制、身份验证)'
title: Models
x-i18n:
generated_at: "2026-04-24T03:15:02Z"
generated_at: "2026-04-25T06:52:25Z"
model: gpt-5.4
provider: openai
source_hash: 08e04342ef240bf7a1f60c4d4e2667d17c9a97e985c1b170db8538c890dc8119
source_hash: 2755657b334b8722da06e31fa1d69a5dced3d74e5aeadd38d625039f15911d69
source_path: cli/models.md
workflow: 15
---
# `openclaw models`
模型发现、扫描和配置(默认模型、回退和认证配置文件)。
模型发现、扫描和配置(默认模型、回退机制、身份验证配置文件)。
相关内容:
- 提供商 + 模型:[模型](/zh-CN/providers/models)
- 模型选择概念 + `/models` 斜杠命令:[模型概念](/zh-CN/concepts/models)
- 提供商证设置:[入门指南](/zh-CN/start/getting-started)
- 提供商 + 模型:[Models](/zh-CN/providers/models)
- 模型选择概念 + `/models` 斜杠命令:[Models 概念](/zh-CN/concepts/models)
- 提供商身份验证设置:[入门指南](/zh-CN/start/getting-started)
## 常用命令
@ -32,38 +32,44 @@ openclaw models set <model-or-alias>
openclaw models scan
```
`openclaw models status` 会显示已解析的默认值/回退值以及认证概览。
当提供商使用情况快照可用时OAuth/API 密钥状态部分会包含提供商使用窗口和配额快照。
当前支持使用窗口的提供商有Anthropic、GitHub Copilot、Gemini CLI、OpenAI
Codex、MiniMax、Xiaomi 和 z.ai。使用情况认证在可用时来自提供商特定的钩子
否则OpenClaw 会回退为从认证配置文件、环境变量或配置中匹配 OAuth/API 密钥
凭证。
`openclaw models status` 会显示已解析的默认值/回退项以及身份验证概览。
当提供商使用情况快照可用时OAuth/API 密钥状态部分会包含
提供商使用时间窗口和配额快照。
当前支持使用情况时间窗口的提供商有Anthropic、GitHub Copilot、Gemini CLI、OpenAI
Codex、MiniMax、Xiaomi 和 z.ai。使用情况身份验证在可用时来自提供商特定的钩子
否则 OpenClaw 会回退为匹配来自身份验证配置文件、环境变量或配置中的
OAuth/API 密钥凭证。
`--json` 输出中,`auth.providers` 是感知环境变量/配置/存储的提供商
概览,而 `auth.oauth`表示认证存储中的配置文件健康状态。
添加 `--probe`对每个已配置的提供商配置文件运行实时证探测。
探测会发出真实请求(可能消耗令牌并触发速率限制)。
使用 `--agent <id>` 可检查某个已配置智能体的模型/证状态。省略时,
该命令会在设置了 `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR` 时使用它们,否则使用
已配置的默认智能体。
探测行可能来自证配置文件、环境变量凭证或 `models.json`
概览,而 `auth.oauth`是身份验证存储中配置文件健康状态。
添加 `--probe` 可对每个已配置的提供商配置文件运行实时身份验证探测。
探测会发出真实请求(可能消耗令牌并触发速率限制)。
使用 `--agent <id>` 可检查某个已配置智能体的模型/身份验证状态。省略时,
该命令会在设置了 `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR` 时使用它们,
否则使用已配置的默认智能体。
探测行可能来自身份验证配置文件、环境变量凭证或 `models.json`
说明:
- `models set <model-or-alias>` 接受 `provider/model` 或别名。
- `models list` 是只读的:它会读取配置、证配置文件、现有目录
状态和提供商自有的目录条目,但不会重写
- `models list` 是只读的:它会读取配置、身份验证配置文件、现有目录
状态以及提供商自有的目录行,但不会重写
`models.json`
- `models list --all` 会包含内置的、由提供商自有的静态目录条目,即使
你尚未使用该提供商完成认证也是如此。这些条目仍会显示为不可用,直到配置好匹配的认证。
- `models list --all` 会包含提供商自带的静态目录行,即使你
还未对此提供商完成身份验证。这些行仍会显示为不可用,直到配置了匹配的身份验证。
- `models list` 会将原生模型元数据和运行时能力上限区分开来。在表格
输出中,如果有效运行时上限与原生上下文窗口不同,`Ctx` 会显示 `contextTokens/contextWindow`JSON 行会包含 `contextTokens`
前提是提供商暴露了该上限。
- `models list --provider <id>` 按提供商 id 过滤,例如 `moonshot`
`openai-codex`。它不接受交互式提供商选择器中的显示标签,例如 `Moonshot AI`
`openai-codex`。它不接受交互式提供商
选择器中的显示标签,例如 `Moonshot AI`
- 模型引用通过按**第一个** `/` 进行拆分来解析。如果模型 ID 包含 `/`OpenRouter 风格),请包含提供商前缀(例如:`openrouter/moonshotai/kimi-k2`)。
- 如果你省略了提供商OpenClaw 会先将输入解析为别名,然后
解析为对该精确模型 id 的唯一已配置提供商匹配,最后才会回退到已配置的默认提供商,并显示弃用警告。
如果该提供商不再公开已配置的默认模型OpenClaw
会回退到第一个已配置的提供商/模型,而不是暴露一个
已删除提供商的陈旧默认值。
- `models status` 可能会在认证输出中显示 `marker(<value>)`,用于表示非秘密占位符(例如 `OPENAI_API_KEY`、`secretref-managed`、`minimax-oauth`、`oauth:chutes`、`ollama-local`),而不是将它们作为秘密值进行掩码。
- 如果你省略提供商OpenClaw 会先将输入解析为别名,然后
解析为精确匹配该模型 id 的唯一已配置提供商,最后才
以弃用警告的方式回退到已配置的默认提供商。
如果该提供商不再暴露已配置的默认模型OpenClaw
会回退到第一个已配置的提供商/模型,而不是显示一个
过时的、已移除提供商默认值。
- `models status` 可能会在身份验证输出中显示 `marker(<value>)`,用于表示非机密占位符(例如 `OPENAI_API_KEY`、`secretref-managed`、`minimax-oauth`、`oauth:chutes`、`ollama-local`),而不是像机密信息那样进行掩码处理。
### `models status`
@ -72,13 +78,13 @@ Codex、MiniMax、Xiaomi 和 z.ai。使用情况认证在可用时来自提供
- `--json`
- `--plain`
- `--check`(退出码 1=已过期/缺失2=即将过期)
- `--probe`(对已配置证配置文件进行实时探测)
- `--probe`(对已配置的身份验证配置文件进行实时探测)
- `--probe-provider <name>`(探测单个提供商)
- `--probe-profile <id>`(可重复传入或使用逗号分隔的配置文件 id
- `--probe-profile <id>`(可重复使用,或使用逗号分隔的配置文件 id
- `--probe-timeout <ms>`
- `--probe-concurrency <n>`
- `--probe-max-tokens <n>`
- `--agent <id>`(已配置的智能体 id覆盖 `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`
- `--agent <id>`(已配置的智能体 id覆盖 `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`
探测状态分组:
@ -91,24 +97,24 @@ Codex、MiniMax、Xiaomi 和 z.ai。使用情况认证在可用时来自提供
- `unknown`
- `no_model`
预期的探测详情/原因代码情况:
预期的探测详情/原因代码情况:
- `excluded_by_auth_order`:存在已存储的配置文件,但显式
`auth.order.<provider>` 未包含它,因此探测会报告该排除情况,而不是
- `excluded_by_auth_order`:存在已存储的配置文件,但显式
`auth.order.<provider>` 省略了它,因此探测会报告该排除,而不是
尝试使用它。
- `missing_credential`、`invalid_expires`、`expired`、`unresolved_ref`
配置文件存在,但不符合条件/无法解析。
- `no_model`:提供商证存在,但 OpenClaw 无法为该提供商解析出可用于探测的
- `no_model`:提供商身份验证存在,但 OpenClaw 无法为该提供商解析出可用于探测的
模型候选项。
## 别名 + 回退
## 别名 + 回退机制
```bash
openclaw models aliases list
openclaw models fallbacks list
```
## 证配置文件
## 身份验证配置文件
```bash
openclaw models auth add
@ -117,10 +123,10 @@ openclaw models auth setup-token --provider <id>
openclaw models auth paste-token
```
`models auth add` 是交互式认证辅助工具。它可以启动提供商认
流程OAuth/API 密钥),或根据你选择的提供商引导你手动粘贴令牌。
`models auth add` 是交互式身份验证辅助工具。它可以启动提供商身份验
流程OAuth/API 密钥),或根据你选择的提供商引导你手动粘贴令牌。
`models auth login` 会运行提供商插件的证流程OAuth/API 密钥)。使用
`models auth login` 会运行提供商插件的身份验证流程OAuth/API 密钥)。使用
`openclaw plugins list` 可查看已安装了哪些提供商。
示例:
@ -131,18 +137,20 @@ openclaw models auth login --provider openai-codex --set-default
说明:
- `setup-token``paste-token` 仍然是面向提供令牌认证方法的提供商的通用令牌命令。
- `setup-token` 需要交互式 TTY并运行该提供商的令牌认证
方法(当该提供商暴露此方法时,默认使用其 `setup-token` 方法)。
- `paste-token` 接受在其他地方生成或由自动化产生的令牌字符串。
- `setup-token``paste-token` 仍然是面向暴露令牌身份验证方法的提供商的通用
令牌命令。
- `setup-token` 需要交互式 TTY并运行该提供商的令牌身份验证
方法(当该提供商暴露了 `setup-token` 方法时,默认使用该方法)。
- `paste-token` 接受在其他地方或通过自动化生成的令牌字符串。
- `paste-token` 需要 `--provider`,会提示输入令牌值,并将其写入默认配置文件 id `<provider>:manual`,除非你传入
`--profile-id`
- `paste-token --expires-in <duration>` 会根据相对时长(例如 `365d``12h`)存储一个绝对的令牌过期时间。
- Anthropic 说明Anthropic 员工告诉我们OpenClaw 风格的 Claude CLI 用法再次被允许,因此 OpenClaw 将 Claude CLI 复用和 `claude -p` 用法视为此集成的获准方式,除非 Anthropic 发布新的政策。
- Anthropic 的 `setup-token` / `paste-token` 仍可作为受支持的 OpenClaw 令牌路径使用,但现在 OpenClaw 在可用时更倾向于使用 Claude CLI 复用和 `claude -p`
- `paste-token --expires-in <duration>` 会根据相对时长存储一个绝对令牌过期时间,例如
`365d``12h`
- Anthropic 说明Anthropic 工作人员告诉我们,再次允许 OpenClaw 风格的 Claude CLI 使用方式,因此除非 Anthropic 发布新的策略,否则 OpenClaw 会将 Claude CLI 复用和 `claude -p` 用法视为此集成的受支持方式。
- Anthropic 的 `setup-token` / `paste-token` 仍然可作为受支持的 OpenClaw 令牌路径使用,但 OpenClaw 现在在可用时更推荐使用 Claude CLI 复用和 `claude -p`
## 相关
## 相关内容
- [CLI 参考](/zh-CN/cli)
- [模型选择](/zh-CN/concepts/model-providers)
- [模型故障切换](/zh-CN/concepts/model-failover)
- [模型故障转移](/zh-CN/concepts/model-failover)

View File

@ -1,78 +1,78 @@
---
read_when:
- 你需要一份按提供商分类的模型设置参考资料
- 你想要模型提供商的示例配置或 CLI 新手引导命令
summary: 模型提供商概览,包含示例配置 CLI 流程
- 你需要一份按提供商逐一说明的模型设置参考文档
- 你想要针对模型提供商的示例配置或 CLI 新手引导命令
summary: 模型提供商概览,包含示例配置 + CLI 流程
title: 模型提供商
x-i18n:
generated_at: "2026-04-25T05:54:03Z"
generated_at: "2026-04-25T06:52:24Z"
model: gpt-5.4
provider: openai
source_hash: bdab460823e3138377a7e2b183b31caa64bb2eef4c9e77ebd8db0aacc97493bb
source_hash: fe2871809711608b3e1d996084b834978b15f21dfeea1ac767dce4c1299be0aa
source_path: concepts/model-providers.md
workflow: 15
---
**LLM/模型提供商**参考(不是像 WhatsApp/Telegram 这样的聊天渠道)。有关模型选择规则,请参见 [Models](/zh-CN/concepts/models)。
针对 **LLM/模型提供商**参考文档(不是像 WhatsApp/Telegram 这样的聊天渠道)。关于模型选择规则,请参阅 [Models](/zh-CN/concepts/models)。
## 快速规则
- 模型引用使用 `provider/model`(例`opencode/claude-opus-4-6`)。
- 设置后,`agents.defaults.models` 会作为允许列表。
- 模型引用使用 `provider/model`例:`opencode/claude-opus-4-6`)。
- 设置后,`agents.defaults.models` 会作为允许列表生效
- CLI 辅助命令:`openclaw onboard`、`openclaw models list`、`openclaw models set <provider/model>`。
- `models.providers.*.models[].contextWindow` 是原生模型元数据;`contextTokens` 是运行时生效的上限。
- 回退规则、冷却探测和会话覆盖持久化:参见 [模型故障转移](/zh-CN/concepts/model-failover)。
- OpenAI 系列路由按前缀区分:`openai/<model>` 在 PI 中使用直接的 OpenAI API 密钥提供商,`openai-codex/<model>` 在 PI 中使用 Codex OAuth`openai/<model>` 加上 `agents.defaults.embeddedHarness.runtime: "codex"` 则使用原生 Codex app-server harness。参见 [OpenAI](/zh-CN/providers/openai) 和 [Codex harness](/zh-CN/plugins/codex-harness)。如果你对 provider/运行时的拆分感到困惑,请先阅读 [Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
- 插件自动启用遵循相同边界:`openai-codex/<model>` 属于 OpenAI 插件,而 Codex 插件则通过 `embeddedHarness.runtime: "codex"` 或旧版 `codex/<model>` 引用启用。
- CLI 运行时也使用相同拆分:选择规范模型引用,例如 `anthropic/claude-*`、`google/gemini-*` 或 `openai/gpt-*`,然后在你想使用本地 CLI 后端时,将 `agents.defaults.embeddedHarness.runtime` 设为 `claude-cli`、`google-gemini-cli` 或 `codex-cli`。旧版 `claude-cli/*`、`google-gemini-cli/*` 和 `codex-cli/*` 引用会迁移回规范提供商引用,并将运行时单独记录。
- GPT-5.5 当前通过订阅/OAuth 路由提供PI 中使用 `openai-codex/gpt-5.5`,或使用带 Codex app-server harness 的 `openai/gpt-5.5`。`openai/gpt-5.5` 的直接 API 密钥路由会在 OpenAI 在公共 API 上启用 GPT-5.5 后受支持;在此之前,请为 `OPENAI_API_KEY` 配置使用已启用 API 的模型,例如 `openai/gpt-5.4`
- `models.providers.*.models[].contextWindow`模型原生元数据;`contextTokens` 是运行时生效的上限。
- 故障切换规则、冷却探测以及会话覆盖持久化:请参阅 [Model failover](/zh-CN/concepts/model-failover)。
- OpenAI 系列路由按前缀区分:`openai/<model>` 使用 PI 中基于直接 OpenAI API 密钥的 provider`openai-codex/<model>` 使用 PI 中的 Codex OAuth`openai/<model>` 加上 `agents.defaults.embeddedHarness.runtime: "codex"` 则使用原生 Codex app-server harness。请参阅 [OpenAI](/zh-CN/providers/openai) 和 [Codex harness](/zh-CN/plugins/codex-harness)。如果 provider/运行时 的划分让你感到困惑,请先阅读 [Agent Runtimes](/zh-CN/concepts/agent-runtimes)。
- 插件自动启用遵循相同边界:`openai-codex/<model>` 属于 OpenAI 插件,而 Codex 插件 `embeddedHarness.runtime: "codex"` 或旧版 `codex/<model>` 引用启用。
- CLI 运行时 也使用相同的划分:选择规范模型引用,例如 `anthropic/claude-*`、`google/gemini-*` 或 `openai/gpt-*`,然后在你想使用本地 CLI 后端时,将 `agents.defaults.embeddedHarness.runtime` 设为 `claude-cli`、`google-gemini-cli` 或 `codex-cli`。旧版 `claude-cli/*`、`google-gemini-cli/*` 和 `codex-cli/*` 引用会迁移回规范 provider 引用,并将运行时 单独记录。
- GPT-5.5 可通过 PI 中的 `openai-codex/gpt-5.5`、原生 Codex app-server harness以及当内置 PI 目录为你的安装暴露 `openai/gpt-5.5` 时通过公共 OpenAI API 使用
## 插件拥有的 provider 行为
## 插件拥有的 provider 行为
大多数提供商特定逻辑都位于 provider 插件中(`registerProvider(...)`),而 OpenClaw 保留通用推理循环。插件负责新手引导、模型目录、认证环境变量映射、传输/配置规范化、工具 schema 清理、故障转移分类、OAuth 刷新、用量报告、thinking/reasoning 配置文件等。
大多数 provider 特定逻辑都位于 provider 插件(`registerProvider(...)`)中,而 OpenClaw 负责保留通用推理循环。插件负责新手引导、模型目录、认证环境变量映射、传输/配置规范化、工具 schema 清理、故障切换分类、OAuth 刷新、使用情况上报、thinking/reasoning 配置等。
完整的 provider SDK 钩子列表和内置插件示例见 [提供商插件](/zh-CN/plugins/sdk-provider-plugins)。如果某个提供商需要完全自定义的请求执行器,那属于另一个更深层的扩展面
provider SDK 钩子和内置插件示例的完整列表位于 [Provider plugins](/zh-CN/plugins/sdk-provider-plugins)。如果某个 provider 需要完全自定义的请求执行器,那将属于另一个更深层的扩展接口
<Note>
provider 运行时 `capabilities` 是共享运行器元数据provider 家族、转录/工具特性、传输/缓存提示)。它不同于[公开能力模型](/zh-CN/plugins/architecture#public-capability-model),后者描述的是插件注册了什么能力(文本推理、语音等)。
provider 运行时 `capabilities` 是共享运行器元数据provider 系列、转录/工具使用特殊行为、传输/缓存提示)。它不同于[公开能力模型](/zh-CN/plugins/architecture#public-capability-model),后者描述的是插件注册了什么(文本推理、语音等)。
</Note>
## API 密钥轮换
- 支持所选提供商的通用提供商轮换。
- 对选定的 provider 支持通用 provider 轮换。
- 可通过以下方式配置多个密钥:
- `OPENCLAW_LIVE_<PROVIDER>_KEY`(单个实时覆盖,最高优先级)
- `<PROVIDER>_API_KEYS`(逗号或分号分隔列表)
- `<PROVIDER>_API_KEYS`(逗号或分号分隔列表)
- `<PROVIDER>_API_KEY`(主密钥)
- `<PROVIDER>_API_KEY_*`(编号列表,例如 `<PROVIDER>_API_KEY_1`
- 对于 Google 提供商,还会将 `GOOGLE_API_KEY` 作为回退选项
- 密钥选择顺序会保留优先级并去重。
- 只有在收到速率限制响应时,请求才会使用下一个密钥重试(例如 `429`、`rate_limit`、`quota`、`resource exhausted`、`Too many concurrent requests`、`ThrottlingException`、`concurrency limit reached`、`workers_ai ... quota limit exceeded`,或周期性用量限制消息)。
- 非速率限制失败会立即失败;不会尝试密钥轮换。
- 当所有候选密钥都失败时,返回最后一次尝试的最终错误。
- 对于 Google provider`GOOGLE_API_KEY` 也会作为回退包含在内
- 密钥选择顺序会保留优先级并对值去重。
- 仅在遇到限流响应时,请求才会使用下一个密钥重试(例如 `429`、`rate_limit`、`quota`、`resource exhausted`、`Too many concurrent requests`、`ThrottlingException`、`concurrency limit reached`、`workers_ai ... quota limit exceeded`,或周期性用量限制消息)。
- 非限流失败会立即失败;不会尝试密钥轮换。
- 当所有候选密钥都失败时,返回最后一次尝试的最终错误。
## 内置提供商pi-ai 目录)
## 内置 providerpi-ai 目录)
OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers` 配置;只需设置认证信息并选择模型。
OpenClaw 附带 piai 目录。这些 provider **不需要**
`models.providers` 配置;只需设置认证信息并选择一个模型。
### OpenAI
- Provider`openai`
- 认证:`OPENAI_API_KEY`
- 可选轮换:`OPENAI_API_KEYS`、`OPENAI_API_KEY_1`、`OPENAI_API_KEY_2`,以及 `OPENCLAW_LIVE_OPENAI_KEY`(单个覆盖)
- 示例模型:`openai/gpt-5.4`、`openai/gpt-5.4-mini`
- 一旦 OpenAI 在 API 上公开 GPT-5.5,这里就已为 GPT-5.5 直接 API 支持做好准备
- 在不使用 Codex app-server 运行时的情况下使用 `openai/gpt-5.5` 前,请先用 `openclaw models list --provider openai` 验证直接 API 可用性
- 示例模型:`openai/gpt-5.5`、`openai/gpt-5.4`、`openai/gpt-5.4-mini`
- GPT-5.5 直接 API 支持取决于你的安装所附带的 PI 目录版本;在不使用 Codex app-server 运行时 的情况下使用 `openai/gpt-5.5` 之前,请先通过 `openclaw models list --provider openai` 验证。
- CLI`openclaw onboard --auth-choice openai-api-key`
- 默认传输为 `auto`(优先 WebSocket回退 SSE
- 可通过 `agents.defaults.models["openai/<model>"].params.transport` 按模型覆盖(`"sse"`、`"websocket"` 或 `"auto"`
- 可按模型通过 `agents.defaults.models["openai/<model>"].params.transport` 覆盖(`"sse"`、`"websocket"` 或 `"auto"`
- OpenAI Responses WebSocket 预热默认通过 `params.openaiWsWarmup` 启用(`true`/`false`
- OpenAI 优先级处理可通过 `agents.defaults.models["openai/<model>"].params.serviceTier` 启用
- `/fast``params.fastMode` 会将直接 `openai/*` Responses 请求映射为 `api.openai.com` 上的 `service_tier=priority`
- 如果你想使用显式分层而不是共享的 `/fast` 开关,请使用 `params.serviceTier`
- 当你想要显式指定层级,而不是使用共享的 `/fast` 开关时,请使用 `params.serviceTier`
- 隐藏的 OpenClaw 归因头(`originator`、`version`、`User-Agent`)仅适用于发往 `api.openai.com` 的原生 OpenAI 流量,不适用于通用 OpenAI 兼容代理
- 原生 OpenAI 路由还会保留 Responses `store`、prompt-cache 提示以及 OpenAI reasoning 兼容载整形;代理路由则不会
- `openai/gpt-5.3-codex-spark` 在 OpenClaw 中被有意抑制,因为实时 OpenAI API 请求会拒绝它,而当前 Codex 目录也未公开
- 原生 OpenAI 路由还会保留 Responses `store`、prompt-cache 提示以及 OpenAI reasoning 兼容载整形;代理路由则不会
- `openai/gpt-5.3-codex-spark` 在 OpenClaw 中被有意屏蔽,因为实时 OpenAI API 请求会拒绝它,而当前 Codex 目录也未暴露
```json5
{
@ -87,9 +87,9 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- 可选轮换:`ANTHROPIC_API_KEYS`、`ANTHROPIC_API_KEY_1`、`ANTHROPIC_API_KEY_2`,以及 `OPENCLAW_LIVE_ANTHROPIC_KEY`(单个覆盖)
- 示例模型:`anthropic/claude-opus-4-6`
- CLI`openclaw onboard --auth-choice apiKey`
- 直接公共 Anthropic 请求支持共享的 `/fast` 开关和 `params.fastMode`,包括发送到 `api.anthropic.com` 的 API 密钥和 OAuth 认证流量OpenClaw 会将其映射为 Anthropic `service_tier``auto` 或 `standard_only`
- Anthropic 说明Anthropic 工作人员告诉我们OpenClaw 风格的 Claude CLI 用法再次被允许,因此除非 Anthropic 发布新政策,否则 OpenClaw 将 Claude CLI 复用和 `claude -p` 用法视为此集成的已授权方式
- Anthropic setup-token 仍作为 OpenClaw 支持的令牌路径提供,但 OpenClaw 现在在可用时更倾向于 Claude CLI 复用和 `claude -p`
- 直接公共 Anthropic 请求支持共享的 `/fast` 开关和 `params.fastMode`,包括发送到 `api.anthropic.com` 的 API 密钥认证与 OAuth 认证流量OpenClaw 会将其映射为 Anthropic `service_tier``auto` 与 `standard_only`
- Anthropic 说明Anthropic 员告诉我们OpenClaw 风格的 Claude CLI 用法再次被允许,因此 OpenClaw 将 Claude CLI 复用和 `claude -p` 用法视为该集成的许可方式,除非 Anthropic 发布新的策略
- Anthropic setup-token 仍然是 OpenClaw 支持的令牌路径,但 OpenClaw 现在在可用时优先使用 Claude CLI 复用和 `claude -p`
```json5
{
@ -102,19 +102,19 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- Provider`openai-codex`
- 认证OAuthChatGPT
- PI 模型引用:`openai-codex/gpt-5.5`
- 原生 Codex app-server harness 引用: `agents.defaults.embeddedHarness.runtime: "codex"``openai/gpt-5.5`
- 原生 Codex app-server harness 引用:`openai/gpt-5.5`,配合 `agents.defaults.embeddedHarness.runtime: "codex"`
- 原生 Codex app-server harness 文档:[Codex harness](/zh-CN/plugins/codex-harness)
- 旧版模型引用:`codex/gpt-*`
- 插件边界:`openai-codex/*` 加载 OpenAI 插件;原生 Codex app-server 插件仅通过 Codex harness 运行时或旧版 `codex/*` 引用选择
- 插件边界:`openai-codex/*` 加载 OpenAI 插件;原生 Codex app-server 插件仅由 Codex harness 运行时 或旧版 `codex/*` 引用选择。
- CLI`openclaw onboard --auth-choice openai-codex` 或 `openclaw models auth login --provider openai-codex`
- 默认传输为 `auto`(优先 WebSocket回退 SSE
- 可通过 `agents.defaults.models["openai-codex/<model>"].params.transport` 按 PI 模型覆盖(`"sse"`、`"websocket"` 或 `"auto"`
- `params.serviceTier` 也会原生 Codex Responses 请求(`chatgpt.com/backend-api`上传递
- 隐藏的 OpenClaw 归因头(`originator`、`version`、`User-Agent`)仅附加发往 `chatgpt.com/backend-api` 的原生 Codex 流量,不适用于通用 OpenAI 兼容代理
- 可按 PI 模型通过 `agents.defaults.models["openai-codex/<model>"].params.transport` 覆盖(`"sse"`、`"websocket"` 或 `"auto"`
- `params.serviceTier` 也会转发到原生 Codex Responses 请求(`chatgpt.com/backend-api`
- 隐藏的 OpenClaw 归因头(`originator`、`version`、`User-Agent`)仅附加发往 `chatgpt.com/backend-api` 的原生 Codex 流量,不适用于通用 OpenAI 兼容代理
- 与直接 `openai/*` 共享相同的 `/fast` 开关和 `params.fastMode` 配置OpenClaw 会将其映射为 `service_tier=priority`
- `openai-codex/gpt-5.5` 保留原生 `contextWindow = 1000000` 和默认运行时 `contextTokens = 272000`;可通过 `models.providers.openai-codex.models[].contextTokens` 覆盖运行时上限
- `openai-codex/gpt-5.5` 使用 Codex 目录原生 `contextWindow = 400000` 和默认运行时 `contextTokens = 272000`;可通过 `models.providers.openai-codex.models[].contextTokens` 覆盖运行时 上限
- 策略说明OpenAI Codex OAuth 明确支持像 OpenClaw 这样的外部工具/工作流。
- 在 OpenAI 于公共 API 上启用 GPT-5.5 之前,当前 GPT-5.5 访问都通过此 OAuth/订阅路由进行
- 当你想使用 Codex OAuth/订阅路径时,请使用 `openai-codex/gpt-5.5`;当你的 API 密钥设置和本地目录暴露了公共 API 路径时,请使用 `openai/gpt-5.5`
```json5
{
@ -136,7 +136,7 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
### 其他订阅式托管选项
- [Qwen Cloud](/zh-CN/providers/qwen)Qwen Cloud provider 能力面,以及阿里巴巴 DashScope 和 Coding Plan 端点映射
- [Qwen Cloud](/zh-CN/providers/qwen)Qwen Cloud provider 接口,以及 Alibaba DashScope 和 Coding Plan 端点映射
- [MiniMax](/zh-CN/providers/minimax)MiniMax Coding Plan OAuth 或 API 密钥访问
- [GLM models](/zh-CN/providers/glm)Z.AI Coding Plan 或通用 API 端点
@ -162,14 +162,16 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- 示例模型:`google/gemini-3.1-pro-preview`、`google/gemini-3-flash-preview`
- 兼容性:使用 `google/gemini-3.1-flash-preview` 的旧版 OpenClaw 配置会被规范化为 `google/gemini-3-flash-preview`
- CLI`openclaw onboard --auth-choice gemini-api-key`
- Thinking`/think adaptive` 使用 Google 动态 thinking。Gemini 3/3.1 不包含固定 `thinkingLevel`Gemini 2.5 会发送 `thinkingBudget: -1`
- 直接 Gemini 运行还接受 `agents.defaults.models["google/<model>"].params.cachedContent`(或旧版 `cached_content`),以转发 provider 原生 `cachedContents/...` 句柄Gemini 缓存命中会显示为 OpenClaw `cacheRead`
- Thinking`/think adaptive` 使用 Google 动态 thinking。Gemini 3/3.1 不包含固定的 `thinkingLevel`Gemini 2.5 会发送 `thinkingBudget: -1`
- 直接 Gemini 运行也接受 `agents.defaults.models["google/<model>"].params.cachedContent`
(或旧版 `cached_content`),用于转发 provider 原生的
`cachedContents/...` 句柄Gemini 缓存命中会以 OpenClaw `cacheRead` 的形式显示
### Google Vertex 和 Gemini CLI
- Providers`google-vertex`、`google-gemini-cli`
- 认证Vertex 使用 gcloud ADCGemini CLI 使用其 OAuth 流程
- 注意OpenClaw 中的 Gemini CLI OAuth 属于非官方集成。一些用户报告称,在使用第三方客户端后其 Google 账号受到限制。若你选择继续,请先查看 Google 条款,并使用非关键账号。
- 注意OpenClaw 中的 Gemini CLI OAuth 是非官方集成。一些用户报告称在使用第三方客户端后Google 账号受到了限制。若你选择继续,请查看 Google 条款并使用非关键账号。
- Gemini CLI OAuth 作为内置 `google` 插件的一部分提供。
- 先安装 Gemini CLI
- `brew install gemini-cli`
@ -177,9 +179,10 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- 启用:`openclaw plugins enable google`
- 登录:`openclaw models auth login --provider google-gemini-cli --set-default`
- 默认模型:`google-gemini-cli/gemini-3-flash-preview`
- 注意:你**不需要**将 client id 或 secret 粘贴到 `openclaw.json` 中。CLI 登录流程会将令牌存储在 Gateway 网关主机上的认证配置文件中。
- 如果登录后请求失败,请在 Gateway 网关主机上设置 `GOOGLE_CLOUD_PROJECT``GOOGLE_CLOUD_PROJECT_ID`
- Gemini CLI JSON 回复从 `response` 中解析;用量会回退到 `stats`,其中 `stats.cached` 会被规范化为 OpenClaw `cacheRead`
- 注意:你**不需要**将 client id 或 secret 粘贴到 `openclaw.json` 中。CLI 登录流程会将令牌存储在 Gateway 网关 主机上的认证配置文件中。
- 如果登录后请求失败,请在 Gateway 网关 主机上设置 `GOOGLE_CLOUD_PROJECT``GOOGLE_CLOUD_PROJECT_ID`
- Gemini CLI JSON 回复会从 `response` 解析;使用量会回退到
`stats`,其中 `stats.cached` 会被规范化为 OpenClaw `cacheRead`
### Z.AIGLM
@ -188,13 +191,14 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- 示例模型:`zai/glm-5.1`
- CLI`openclaw onboard --auth-choice zai-api-key`
- 别名:`z.ai/*` 和 `z-ai/*` 会被规范化为 `zai/*`
- `zai-api-key` 会自动检测匹配的 Z.AI 端点;`zai-coding-global`、`zai-coding-cn`、`zai-global` 和 `zai-cn` 会强制使用特定能力面
- `zai-api-key` 会自动检测匹配的 Z.AI 端点;`zai-coding-global`、`zai-coding-cn`、`zai-global` 和 `zai-cn` 会强制使用特定接口
### Vercel AI Gateway
- Provider`vercel-ai-gateway`
- 认证:`AI_GATEWAY_API_KEY`
- 示例模型:`vercel-ai-gateway/anthropic/claude-opus-4.6`、`vercel-ai-gateway/moonshotai/kimi-k2.6`
- 示例模型:`vercel-ai-gateway/anthropic/claude-opus-4.6`、
`vercel-ai-gateway/moonshotai/kimi-k2.6`
- CLI`openclaw onboard --auth-choice ai-gateway-api-key`
### Kilo Gateway 网关
@ -204,14 +208,17 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
- 示例模型:`kilocode/kilo/auto`
- CLI`openclaw onboard --auth-choice kilocode-api-key`
- Base URL`https://api.kilo.ai/api/gateway/`
- 静态回退目录内置了 `kilocode/kilo/auto`;实时 `https://api.kilo.ai/api/gateway/models` 发现还可以进一步扩展运行时目录。
- `kilocode/kilo/auto` 背后的确切上游路由由 Kilo Gateway 网关负责,不是 OpenClaw 中硬编码的。
- 静态回退目录内置了 `kilocode/kilo/auto`;实时
`https://api.kilo.ai/api/gateway/models` 发现还可以进一步扩展运行时
目录。
- `kilocode/kilo/auto` 背后的确切上游路由由 Kilo Gateway 网关控制,
并非在 OpenClaw 中硬编码。
设置详情请参见 [/providers/kilocode](/zh-CN/providers/kilocode)。
设置详情请参 [/providers/kilocode](/zh-CN/providers/kilocode)。
### 其他内置提供商插件
### 其他内置 provider 插件
| 提供商 | Id | 认证环境变量 | 示例模型 |
| Provider | Id | 认证环境变量 | 示例模型 |
| ----------------------- | -------------------------------- | ------------------------------------------------------------ | ----------------------------------------------- |
| BytePlus国际版 | `byteplus` / `byteplus-plan` | `BYTEPLUS_API_KEY` | `byteplus-plan/ark-code-latest` |
| Cerebras | `cerebras` | `CEREBRAS_API_KEY` | `cerebras/zai-glm-4.7` |
@ -239,29 +246,32 @@ OpenClaw 自带 piai 目录。这些提供商**不需要** `models.providers`
一些值得了解的特殊行为:
- **OpenRouter** 仅在已验证的 `openrouter.ai` 路由上应用其应用归因头和 Anthropic `cache_control` 标记。DeepSeek、Moonshot 和 ZAI 引用可用于由 OpenRouter 管理的 prompt 缓存 TTL但不会收到 Anthropic 缓存标记。作为代理风格的 OpenAI 兼容路径,它会跳过仅限原生 OpenAI 的整形(`serviceTier`、Responses `store`、prompt-cache 提示、OpenAI reasoning 兼容性。Gemini 后端引用仅保留代理 Gemini thought-signature 清理。
- **Kilo Gateway 网关** 的 Gemini 后端引用遵循相同的代理 Gemini 清理路径;`kilocode/kilo/auto` 和其他不支持代理 reasoning 的引用会跳过代理 reasoning 注入。
- **MiniMax** API 密钥新手引导会写入显式的纯文本 M2.7 聊天模型定义;图像理解仍保留在插件拥有的 `MiniMax-VL-01` 媒体 provider 上。
- **xAI** 使用 xAI Responses 路径。`/fast` 或 `params.fastMode: true` 会将 `grok-3`、`grok-3-mini`、`grok-4` 和 `grok-4-0709` 重写为 `*-fast` 变体。`tool_stream` 默认开启;可通过 `agents.defaults.models["xai/<model>"].params.tool_stream=false` 禁用。
- **OpenRouter** 仅在已验证的 `openrouter.ai` 路由上应用其应用归因头和 Anthropic `cache_control` 标记。DeepSeek、Moonshot 和 ZAI 引用符合 OpenRouter 管理的 prompt 缓存 TTL 条件,但不会收到 Anthropic 缓存标记。作为代理式 OpenAI 兼容路径,它会跳过仅原生 OpenAI 支持的整形(`serviceTier`、Responses `store`、prompt-cache 提示、OpenAI reasoning 兼容性)。Gemini 后端引用仅保留代理 Gemini thought-signature 清理。
- **Kilo Gateway 网关** 中以 Gemini 为后端的引用遵循相同的代理 Gemini 清理路径;`kilocode/kilo/auto` 和其他不支持代理 reasoning 的引用会跳过代理 reasoning 注入。
- **MiniMax** API 密钥新手引导会写入显式的纯文本 M2.7 聊天模型定义;图像理解仍保留在插件拥有的 `MiniMax-VL-01` 媒体 provider 上。
- **xAI** 使用 xAI Responses 路径。`/fast` 或 `params.fastMode: true` 会将 `grok-3`、`grok-3-mini`、`grok-4` 和 `grok-4-0709` 重写为它们的 `*-fast` 变体。`tool_stream` 默认开启;可通过 `agents.defaults.models["xai/<model>"].params.tool_stream=false` 禁用。
- **Cerebras** GLM 模型使用 `zai-glm-4.7` / `zai-glm-4.6`OpenAI 兼容 Base URL 为 `https://api.cerebras.ai/v1`
## 通过 `models.providers` 的提供商(自定义/Base URL
## 通过 `models.providers` 使用 provider(自定义/Base URL
使用 `models.providers`(或 `models.json`)来添加**自定义**提供商或 OpenAI/Anthropic 兼容代理。
使用 `models.providers`(或 `models.json`)添加**自定义** provider 或
OpenAI/Anthropic 兼容代理。
下面许多内置提供商插件已经发布了默认目录。
只有当你想覆盖默认 Base URL、headers 或模型列表时,才需要使用显式的 `models.providers.<id>` 条目。
下面许多内置 provider 插件已经发布了默认目录。
只有当你想覆盖默认 Base URL、请求头或模型列表时才需要显式使用
`models.providers.<id>` 条目。
### Moonshot AIKimi
Moonshot 作为内置提供商插件提供。默认使用内置 provider仅当你需要覆盖 Base URL 或模型元数据时,才添加显式 `models.providers.moonshot` 条目:
Moonshot 作为内置 provider 插件提供。默认情况下请使用内置 provider
只有在你需要覆盖 Base URL 或模型元数据时,才添加显式的 `models.providers.moonshot` 条目:
- Provider`moonshot`
- 认证:`MOONSHOT_API_KEY`
- 示例模型:`moonshot/kimi-k2.6`
- CLI`openclaw onboard --auth-choice moonshot-api-key` 或 `openclaw onboard --auth-choice moonshot-api-key-cn`
Kimi K2 模型 id
Kimi K2 模型 ID
[//]: # "moonshot-kimi-k2-model-refs:start"
@ -309,13 +319,13 @@ Kimi Coding 使用 Moonshot AI 的 Anthropic 兼容端点:
}
```
旧版 `kimi/k2p5` 仍然作为兼容模型 id 被接受。
旧版 `kimi/k2p5` 仍然作为兼容模型 ID 被接受。
### Volcano EngineDoubao
Volcano Engine火山引擎在中国提供对 Doubao 和其他模型的访问。
- Provider`volcengine`(编`volcengine-plan`
- Provider`volcengine`(编程版`volcengine-plan`
- 认证:`VOLCANO_ENGINE_API_KEY`
- 示例模型:`volcengine-plan/ark-code-latest`
- CLI`openclaw onboard --auth-choice volcengine-api-key`
@ -328,9 +338,13 @@ Volcano Engine火山引擎在中国提供对 Doubao 和其他模型的访
}
```
新手引导默认使用编码能力面,但同时也会注册通用 `volcengine/*` 目录。
新手引导默认使用编程接口,但通用 `volcengine/*`
目录也会同时注册。
在新手引导/配置模型选择器中Volcengine 认证选项会优先显示 `volcengine/*``volcengine-plan/*` 两类条目。如果这些模型尚未加载OpenClaw 会回退到未筛选目录,而不是显示一个空的 provider 作用域选择器。
在新手引导/配置模型选择器中Volcengine 认证选项会优先显示
`volcengine/*``volcengine-plan/*` 两类条目。如果这些模型尚未加载,
OpenClaw 会回退到未过滤的目录,而不是显示一个空的
provider 作用域选择器。
可用模型:
@ -340,7 +354,7 @@ Volcano Engine火山引擎在中国提供对 Doubao 和其他模型的访
- `volcengine/glm-4-7-251222`GLM 4.7
- `volcengine/deepseek-v3-2-251201`DeepSeek V3.2 128K
模型(`volcengine-plan`
模型(`volcengine-plan`
- `volcengine-plan/ark-code-latest`
- `volcengine-plan/doubao-seed-code`
@ -352,7 +366,7 @@ Volcano Engine火山引擎在中国提供对 Doubao 和其他模型的访
BytePlus ARK 为国际用户提供与 Volcano Engine 相同模型的访问能力。
- Provider`byteplus`(编`byteplus-plan`
- Provider`byteplus`(编程版`byteplus-plan`
- 认证:`BYTEPLUS_API_KEY`
- 示例模型:`byteplus-plan/ark-code-latest`
- CLI`openclaw onboard --auth-choice byteplus-api-key`
@ -365,9 +379,13 @@ BytePlus ARK 为国际用户提供与 Volcano Engine 相同模型的访问能力
}
```
新手引导默认使用编码能力面,但同时也会注册通用 `byteplus/*` 目录。
新手引导默认使用编程接口,但通用 `byteplus/*`
目录也会同时注册。
在新手引导/配置模型选择器中BytePlus国际版认证选项会优先显示 `byteplus/*``byteplus-plan/*` 两类条目。如果这些模型尚未加载OpenClaw 会回退到未筛选目录,而不是显示一个空的 provider 作用域选择器。
在新手引导/配置模型选择器中BytePlus国际版认证选项会优先显示
`byteplus/*``byteplus-plan/*` 两类条目。如果这些模型尚未加载,
OpenClaw 会回退到未过滤的目录,而不是显示一个空的
provider 作用域选择器。
可用模型:
@ -375,7 +393,7 @@ BytePlus ARK 为国际用户提供与 Volcano Engine 相同模型的访问能力
- `byteplus/kimi-k2-5-260127`Kimi K2.5
- `byteplus/glm-4-7-251222`GLM 4.7
模型(`byteplus-plan`
模型(`byteplus-plan`
- `byteplus-plan/ark-code-latest`
- `byteplus-plan/doubao-seed-code`
@ -415,32 +433,35 @@ Synthetic 通过 `synthetic` provider 提供 Anthropic 兼容模型:
MiniMax 通过 `models.providers` 配置,因为它使用自定义端点:
- MiniMax OAuth全球`--auth-choice minimax-global-oauth`
- MiniMax OAuth中国`--auth-choice minimax-cn-oauth`
- MiniMax API 密钥(全球):`--auth-choice minimax-global-api`
- MiniMax API 密钥(中国):`--auth-choice minimax-cn-api`
- 认证:`minimax` 使用 `MINIMAX_API_KEY``minimax-portal` 使用 `MINIMAX_OAUTH_TOKEN``MINIMAX_API_KEY`
- MiniMax OAuthGlobal`--auth-choice minimax-global-oauth`
- MiniMax OAuthCN`--auth-choice minimax-cn-oauth`
- MiniMax API 密钥Global`--auth-choice minimax-global-api`
- MiniMax API 密钥CN`--auth-choice minimax-cn-api`
- 认证:`minimax` 使用 `MINIMAX_API_KEY``minimax-portal` 使用 `MINIMAX_OAUTH_TOKEN`
`MINIMAX_API_KEY`
设置详情、模型选项和配置片段请参 [/providers/minimax](/zh-CN/providers/minimax)。
设置详情、模型选项和配置片段请参 [/providers/minimax](/zh-CN/providers/minimax)。
在 MiniMax 的 Anthropic 兼容流式传输路径上,除非你显式设置,否则 OpenClaw 默认禁用 thinking并且 `/fast on` 会将 `MiniMax-M2.7` 重写为 `MiniMax-M2.7-highspeed`
在 MiniMax 的 Anthropic 兼容流式传输路径上OpenClaw 默认禁用 thinking
除非你显式设置它,并且 `/fast on` 会将
`MiniMax-M2.7` 重写为 `MiniMax-M2.7-highspeed`
由插件拥有的能力拆分:
插件拥有的能力划分:
- 文本/聊天默认保`minimax/MiniMax-M2.7`
- 文本/聊天默认保`minimax/MiniMax-M2.7`
- 图像生成使用 `minimax/image-01``minimax-portal/image-01`
- 图像理解在两种 MiniMax 认证路径上都使用插件拥有的 `MiniMax-VL-01`
- Web 搜索保使用 provider id `minimax`
- 图像理解在两种 MiniMax 认证路径上都使用插件拥有的 `MiniMax-VL-01`
- Web 搜索保使用 provider id `minimax`
### LM Studio
LM Studio 作为内置提供商插件提供,并使用原生 API
LM Studio 作为内置 provider 插件提供,并使用原生 API
- Provider`lmstudio`
- 认证:`LM_API_TOKEN`
- 默认推理 Base URL`http://localhost:1234/v1`
然后设置一个模型(替换为 `http://localhost:1234/api/v1/models` 返回的某个 id
然后设置一个模型(替换为 `http://localhost:1234/api/v1/models` 返回的某个 ID
```json5
{
@ -450,12 +471,13 @@ LM Studio 作为内置提供商插件提供,并使用原生 API
}
```
OpenClaw 使用 LM Studio 原生的 `/api/v1/models``/api/v1/models/load` 进行发现 + 自动加载,并默认使用 `/v1/chat/completions` 进行推理。
设置和故障排除请参见 [/providers/lmstudio](/zh-CN/providers/lmstudio)。
OpenClaw 使用 LM Studio 原生的 `/api/v1/models``/api/v1/models/load`
进行发现 + 自动加载,并默认使用 `/v1/chat/completions` 进行推理。
设置和故障排除请参阅 [/providers/lmstudio](/zh-CN/providers/lmstudio)。
### Ollama
Ollama 作为内置提供商插件提供,并使用 Ollama 原生 API
Ollama 作为内置 provider 插件提供,并使用 Ollama 的原生 API
- Provider`ollama`
- 认证:无需(本地服务器)
@ -463,7 +485,7 @@ Ollama 作为内置提供商插件提供,并使用 Ollama 原生 API
- 安装:[https://ollama.com/download](https://ollama.com/download)
```bash
# Install Ollama, then pull a model:
# 安装 Ollama然后拉取一个模型
ollama pull llama3.3
```
@ -475,23 +497,26 @@ ollama pull llama3.3
}
```
当你通过 `OLLAMA_API_KEY` 显式启用时,系统会在本地 `http://127.0.0.1:11434` 检测 Ollama并且内置 provider 插件会将 Ollama 直接加入 `openclaw onboard` 和模型选择器。有关新手引导、云端/本地模式和自定义配置,请参见 [/providers/ollama](/zh-CN/providers/ollama)。
当你通过 `OLLAMA_API_KEY` 选择启用时Ollama 会在本地 `http://127.0.0.1:11434`
被检测到,并且内置 provider 插件会将 Ollama 直接添加到
`openclaw onboard` 和模型选择器中。关于新手引导、云端/本地模式以及自定义配置,请参阅 [/providers/ollama](/zh-CN/providers/ollama)。
### vLLM
vLLM 作为内置提供商插件提供,用于本地/自托管的 OpenAI 兼容服务器:
vLLM 作为内置 provider 插件提供,用于本地/自托管的 OpenAI 兼容
服务器:
- Provider`vllm`
- 认证:可选(取决于你的服务器)
- 默认 Base URL`http://127.0.0.1:8000/v1`
要在本地启用自动发现(如果你的服务器不强制认证,任意值都可):
要在本地选择启用自动发现(如果你的服务器不强制认证,任意值都可
```bash
export VLLM_API_KEY="vllm-local"
```
然后设置一个模型(替换为 `/v1/models` 返回的某个 id
然后设置一个模型(替换为 `/v1/models` 返回的某个 ID
```json5
{
@ -501,23 +526,25 @@ export VLLM_API_KEY="vllm-local"
}
```
详情请参 [/providers/vllm](/zh-CN/providers/vllm)。
详情请参 [/providers/vllm](/zh-CN/providers/vllm)。
### SGLang
SGLang 作为内置提供商插件提供,用于高速自托管的 OpenAI 兼容服务器:
SGLang 作为内置 provider 插件提供,用于快速自托管的
OpenAI 兼容服务器:
- Provider`sglang`
- 认证:可选(取决于你的服务器)
- 默认 Base URL`http://127.0.0.1:30000/v1`
若要在本地启用自动发现(如果你的服务器不强制认证,任意值都可):
要在本地选择启用自动发现(如果你的服务器不强制
认证,任意值都可用):
```bash
export SGLANG_API_KEY="sglang-local"
```
然后设置一个模型(替换为 `/v1/models` 返回的某个 id
然后设置一个模型(替换为 `/v1/models` 返回的某个 ID
```json5
{
@ -527,7 +554,7 @@ export SGLANG_API_KEY="sglang-local"
}
```
详情请参 [/providers/sglang](/zh-CN/providers/sglang)。
详情请参 [/providers/sglang](/zh-CN/providers/sglang)。
### 本地代理LM Studio、vLLM、LiteLLM 等)
@ -567,18 +594,23 @@ export SGLANG_API_KEY="sglang-local"
说明:
- 对于自定义 provider`reasoning`、`input`、`cost`、`contextWindow` 和 `maxTokens` 都是可选的。
省略OpenClaw 默认值为:
省略OpenClaw 默认值为:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
- `contextWindow: 200000`
- `maxTokens: 8192`
- 建议:设置与你的代理/模型限制相匹配的显式值。
- 对于非原生端点上的 `api: "openai-completions"`(任何非空 `baseUrl` 且其主机不是 `api.openai.com`OpenClaw 会强制 `compat.supportsDeveloperRole: false`,以避免 provider 因不支持 `developer` 角色而返回 400 错误。
- 代理风格的 OpenAI 兼容路由也会跳过仅限原生 OpenAI 的请求整形:不使用 `service_tier`,不使用 Responses `store`,不使用 Completions `store`,不使用 prompt-cache 提示,不使用 OpenAI reasoning 兼容载荷整形,也不添加隐藏的 OpenClaw 归因头。
- 对于需要供应商特定字段的 OpenAI 兼容 Completions 代理,可设置 `agents.defaults.models["provider/model"].params.extra_body`(或 `extraBody`),以将额外 JSON 合并到出站请求体中。
- 如果 `baseUrl` 为空/省略OpenClaw 会保留默认 OpenAI 行为(会解析为 `api.openai.com`)。
- 为安全起见,即使显式设置了 `compat.supportsDeveloperRole: true`,在非原生 `openai-completions` 端点上仍会被覆盖。
- 对于非原生端点上的 `api: "openai-completions"`(任何主机不是 `api.openai.com` 的非空 `baseUrl`OpenClaw 会强制设置 `compat.supportsDeveloperRole: false`,以避免 provider 因不支持 `developer` 角色而返回 400 错误。
- 代理式 OpenAI 兼容路由也会跳过仅原生 OpenAI 支持的请求
整形:没有 `service_tier`,没有 Responses `store`,没有 Completions `store`,没有
prompt-cache 提示,没有 OpenAI reasoning 兼容负载整形,也没有隐藏的
OpenClaw 归因头。
- 对于需要厂商特定字段的 OpenAI 兼容 Completions 代理,
请设置 `agents.defaults.models["provider/model"].params.extra_body`(或
`extraBody`),以将额外 JSON 合并到发送请求的正文中。
- 如果 `baseUrl` 为空或省略OpenClaw 会保留默认 OpenAI 行为(即解析到 `api.openai.com`)。
- 出于安全考虑,即使在非原生 `openai-completions` 端点上显式设置了 `compat.supportsDeveloperRole: true`,也仍会被覆盖。
## CLI 示例
@ -588,11 +620,11 @@ openclaw models set opencode/claude-opus-4-6
openclaw models list
```
见:[配置](/zh-CN/gateway/configuration),了解完整配置示例。
请参阅:[Configuration](/zh-CN/gateway/configuration) 获取完整配置示例。
## 相关内容
- [Models](/zh-CN/concepts/models) — 模型配置别名
- [模型故障转移](/zh-CN/concepts/model-failover) — 回退链和重试行为
- [配置参考](/zh-CN/gateway/config-agents#agent-defaults) — 模型配置键
- [Providers](/zh-CN/providers) — 每个 provider 的设置指南
- [Models](/zh-CN/concepts/models) — 模型配置别名
- [Model failover](/zh-CN/concepts/model-failover) — 回退链与重试行为
- [Configuration reference](/zh-CN/gateway/config-agents#agent-defaults) — 模型配置键
- [Providers](/zh-CN/providers) — 按 provider 分类的设置指南

View File

@ -1,31 +1,31 @@
---
read_when:
- 当 API 提供商失败时,你希望有一个可靠的回退方案
- 你正在运行 Codex CLI 或其他本地 AI CLI希望复用它们。
- 你想了解用于 CLI 后端工具访问的 MCP loopback bridge
summary: CLI 后端:带可选 MCP 工具桥接的本地 AI CLI 回退方案
- 当 API 提供商失败时,你希望有一个可靠的回退方案
- 你正在运行 Codex CLI 或其他本地 AI CLI且想要复用它们
- 你想了解用于 CLI 后端工具访问的 MCP loopback bridge
summary: CLI 后端:带可选 MCP 工具桥接的本地 AI CLI 回退机制
title: CLI 后端
x-i18n:
generated_at: "2026-04-24T18:08:05Z"
generated_at: "2026-04-25T06:52:28Z"
model: gpt-5.4
provider: openai
source_hash: 81d5f41ebaf16d4171379cf446b4c70b167519cd1f647c0701cccda19f0b3419
source_hash: 09e184bb99a6c354738c3d770460bc2f282a31c41d2cbce4c1e021ae828ba27c
source_path: gateway/cli-backends.md
workflow: 15
---
OpenClaw 可以在 API 提供商不可用、受到速率限制或临时行为异常时,运行**本地 AI CLI** 作为**纯文本回退方案**。这个设计刻意保持保守
OpenClaw 可以在 API 提供商不可用、被限流或暂时异常时运行**本地 AI CLI** 作为**纯文本回退机制**。这是一种有意保持保守的设计
- **OpenClaw 工具不会被直接注入**,但设置了 `bundleMcp: true` 的后端可以通过 loopback MCP bridge 接收 Gateway 网关工具。
- 对支持的 CLI 提供 **JSONL 流式传输**
- **支持会话**这样后续轮次可以保持连贯)。
- 如果 CLI 接受图像路径,**图像可以透传**。
- 对支持的 CLI 提供 **JSONL 流式传输**
- **支持会话**因此后续轮次能保持连贯)。
- 如果 CLI 接受图像路径,**图像可以透传**。
个功能被设计为一种**安全兜底机制**,而不是主要路径。当你希望获得“不管怎样都能工作”的文本响应,同时又不依赖外部 API 时,可以使用它。
被设计为一种**安全网**,而不是主要路径。当你想要“不管怎样都能工作”的文本响应,而不依赖外部 API 时,可以使用它。
如果你需要完整的 harness 运行时,包含 ACP 会话控制、后台任务、线程/会话绑定,以及持久化的外部编码会话,请改用 [ACP Agents](/zh-CN/tools/acp-agents)。CLI 后端不是 ACP。
如果你想要一个具备 ACP 会话控制、后台任务、线程/对话绑定以及持久化外部编码会话的完整 harness 运行时,请改用 [ACP Agents](/zh-CN/tools/acp-agents)。CLI 后端不是 ACP。
## 面向初学者的快速开始
## 对初学者友好的快速开始
你可以**无需任何配置**使用 Codex CLI内置的 OpenAI 插件会注册一个默认后端):
@ -33,7 +33,7 @@ OpenClaw 可以在 API 提供商不可用、受到速率限制或临时行为异
openclaw agent --message "hi" --model codex-cli/gpt-5.5
```
如果你的 Gateway 网关运行在 launchd/systemd 下,且 PATH 很精简,只需添加命令路径:
如果你的 Gateway 网关 运行在 `launchd`/`systemd` 下并且 `PATH` 很精简,只需添加命令路径:
```json5
{
@ -49,13 +49,13 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
}
```
就这样。不需要密钥,也不需要除 CLI 本身之外的额外认证配置。
这样。除了 CLI 本身之外,不需要密钥,也不需要额外认证配置。
如果你在 Gateway 网关主机上将某个内置 CLI 后端用作**主消息提供商**,当你的配置在模型引用中或在 `agents.defaults.cliBackends` 下显式引用该后端时OpenClaw 现在会自动加载其所属的内置插件。
如果你在 Gateway 网关 主机上将内置 CLI 后端用作**主消息提供商**,当你的配置在模型引用中或在 `agents.defaults.cliBackends` 下显式引用该后端时OpenClaw 现在会自动加载其所属的内置插件。
## 将它用作回退方案
## 将它用作回退机制
CLI 后端添加到你的回退列表中,这样它只会在主模型失败时运行:
将一个 CLI 后端添加到你的回退列表中,这样它只会在主模型失败时运行:
```json5
{
@ -74,10 +74,10 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
}
```
说明
注意
- 如果你使用 `agents.defaults.models`allowlist你也必须把 CLI 后端模型包含进去。
- 如果主提供商失败(认证、速率限制、超时OpenClaw 将接着尝试 CLI 后端。
- 如果你使用 `agents.defaults.models`允许列表),你也必须把你的 CLI 后端模型包含进去。
- 如果主提供商失败(认证、限流、超时OpenClaw 将接着尝试 CLI 后端。
## 配置概览
@ -87,8 +87,8 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
agents.defaults.cliBackends
```
每个条目都以一个**提供商 id** 为键(例如 `codex-cli`、`my-cli`)。
这个提供商 id 会成为你的模型引用左侧部分:
每个条目都以一个**provider id** 为键(例如 `codex-cli`、`my-cli`)。
这个 provider id 会成为你的模型引用左侧部分:
```
<provider>/<model>
@ -118,7 +118,7 @@ agents.defaults.cliBackends
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptArg: "--system",
// 类似 Codex 的 CLI 也可以改为指向提示文件:
// 类似 Codex 的 CLI 也可以改为指向一个提示文件:
// systemPromptFileConfigArg: "-c",
// systemPromptFileConfigKey: "model_instructions_file",
systemPromptWhen: "first",
@ -134,25 +134,29 @@ agents.defaults.cliBackends
## 工作原理
1. 根据提供商前缀(`codex-cli/...`**选择后端**。
2. 使用相同的 OpenClaw 提示词 + 工作区上下文**构建系统提示词**。
3. 使用会话 id如果支持**执行 CLI**,以保持历史一致。
内置的 `claude-cli` 后端会为每个 OpenClaw 会话保持一个 Claude stdio 进程存活,并通过 stream-json stdin 发送后续轮次。
4. **解析输出**JSON 或纯文本),并返回最终文本。
5. 按后端**持久化会话 id**,以便后续轮次复用相同的 CLI 会话。
1. 根据提供商前缀(`codex-cli/...`**选择一个后端**。
2. 使用相同的 OpenClaw 提示词和工作区上下文**构建系统提示词**。
3. 如果支持,则使用会话 id **执行 CLI**,以便保持历史一致。
内置的 `claude-cli` 后端会为每个 OpenClaw 会话保持一个 Claude stdio 进程存活,
并通过 stream-json stdin 发送后续轮次。
4. **解析输出**JSON 或纯文本)并返回最终文本。
5. 按后端**持久化会话 id**,以便后续轮次复用同一个 CLI 会话。
<Note>
内置的 Anthropic `claude-cli` 后端现已再次受支持。Anthropic 员工告诉我们,再次允许 OpenClaw 风格的 Claude CLI 用法,因此除非 Anthropic 发布新的策略,否则 OpenClaw 会将此集成中的 `claude -p` 用法视为已获认可
内置的 Anthropic `claude-cli` 后端现已再次受支持。Anthropic 员工告诉我们,允许使用 OpenClaw 风格的 Claude CLI因此除非 Anthropic 发布新的策略,否则 OpenClaw 会将 `claude -p` 的用法视为该集成的受认可方式
</Note>
内置的 OpenAI `codex-cli` 后端会通过 Codex 的 `model_instructions_file` 配置覆盖项(`-c
model_instructions_file="..."`)传递 OpenClaw 的系统提示词。Codex 没有像 Claude 那样的 `--append-system-prompt` 标志,因此 OpenClaw 会为每个新的 Codex CLI 会话将组装好的提示词写入临时文件。
model_instructions_file="..."`)传递 OpenClaw 的系统提示词。Codex 不提供类似 Claude 的
`--append-system-prompt` 标志,因此 OpenClaw 会为每个新的 Codex CLI 会话将组装后的提示词写入临时文件。
内置的 Anthropic `claude-cli` 后端会通过两种方式接收 OpenClaw Skills 快照:一种是附加系统提示词中的精简版 OpenClaw Skills 目录,另一种是通过 `--plugin-dir` 传入的临时 Claude Code 插件。该插件仅包含对该智能体/会话符合条件的 Skills因此 Claude Code 的原生 Skill 解析器看到的过滤结果,与 OpenClaw 原本会在提示词中公布的一致。Skill 的环境变量/API 密钥覆盖仍然由 OpenClaw 应用到本次运行的子进程环境中
内置的 Anthropic `claude-cli` 后端会通过两种方式接收 OpenClaw Skills 快照:一种是在追加的系统提示词中包含精简版的 OpenClaw Skills 目录,另一种是通过 `--plugin-dir` 传入一个临时 Claude Code 插件。该插件仅包含对此智能体/会话符合条件的 Skills因此 Claude Code 的原生技能解析器会看到与 OpenClaw 否则会在提示词中声明的相同过滤结果。对于运行过程Skill 环境变量/API 密钥覆盖仍然由 OpenClaw 应用于子进程环境
Claude CLI 也有自己的非交互权限模式。OpenClaw 将其映射到现有的 exec 策略,而不是新增 Claude 专用配置:当生效的请求 exec 策略为 YOLO`tools.exec.security: "full"` 且 `tools.exec.ask: "off"`OpenClaw 会添加 `--permission-mode bypassPermissions`。每个智能体的 `agents.list[].tools.exec` 设置会覆盖该智能体的全局 `tools.exec`。如果要强制使用不同的 Claude 模式,可在 `agents.defaults.cliBackends.claude-cli.args` 以及对应的 `resumeArgs` 下设置显式原始后端参数,例如 `--permission-mode default``--permission-mode acceptEdits`
Claude CLI 也有它自己的非交互权限模式。OpenClaw 会将其映射到现有的 exec 策略,而不是增加 Claude 专用配置:当生效的请求 exec 策略为 YOLO`tools.exec.security: "full"` 和
`tools.exec.ask: "off"`OpenClaw 会添加 `--permission-mode bypassPermissions`
对于该智能体,按智能体配置的 `agents.list[].tools.exec` 会覆盖全局 `tools.exec`。如果要强制使用不同的 Claude 模式,请在 `agents.defaults.cliBackends.claude-cli.args` 和匹配的 `resumeArgs` 下设置显式原始后端参数,例如 `--permission-mode default``--permission-mode acceptEdits`
在 OpenClaw 能使用内置的 `claude-cli` 后端之前Claude Code 本身必须已经在同一主机上登录:
在 OpenClaw 可以使用内置的 `claude-cli` 后端之前Claude Code 本身必须已经在同一主机上登录:
```bash
claude auth login
@ -160,24 +164,28 @@ claude auth status --text
openclaw models auth login --provider anthropic --method cli --set-default
```
仅当 `claude` 二进制文件不在 PATH 中时,才使用 `agents.defaults.cliBackends.claude-cli.command`
仅当 `claude` 二进制文件不在 `PATH` 中时,才使用 `agents.defaults.cliBackends.claude-cli.command`
## 会话
- 如果 CLI 支持会话,请设置 `sessionArg`(例如 `--session-id`)或 `sessionArgs`(占位符 `{sessionId}`),用于在多个标志中插入该 id。
- 如果 CLI 使用带有不同标志的**resume 子命令**,请设置 `resumeArgs`(恢复时替换 `args`),必要时还可设置 `resumeOutput`(用于非 JSON 恢复)。
- 如果 CLI 支持会话,请设置 `sessionArg`(例如 `--session-id`)或
`sessionArgs`(占位符 `{sessionId}`),用于需要将该 ID 插入多个标志的情况。
- 如果 CLI 使用**恢复子命令**且标志不同,请设置
`resumeArgs`(恢复时替换 `args`),并可选设置 `resumeOutput`
(用于非 JSON 恢复)。
- `sessionMode`
- `always`:始终发送会话 id如果未存储则生成新的 UUID
- `existing`:仅在之前存储过会话 id 时发送。
- `none`:永不发送会话 id。
- `claude-cli` 默认使用 `liveSession: "claude-stdio"`、`output: "jsonl"` 和 `input: "stdin"`,这样后续轮次可以在 Claude 进程仍然活跃时复用该实时进程。现在默认就是 warm stdio包括省略传输字段的自定义配置在内。如果 Gateway 网关重启或者空闲进程退出OpenClaw 会从存储的 Claude 会话 id 恢复。存储的会话 id 会先根据现有可读的项目转录进行校验,再决定是否恢复,因此虚假的绑定会以 `reason=transcript-missing` 被清除,而不是在 `--resume` 下悄悄启动一个新的 Claude CLI 会话。
- 已存储的 CLI 会话属于提供商所有的连续性。隐式的每日会话重置不会切断它们;`/reset` 和显式的 `session.reset` 策略仍然会切断。
- `existing`:仅在之前已存储会话 id 时发送。
- `none`:从不发送会话 id。
- `claude-cli` 默认使用 `liveSession: "claude-stdio"`、`output: "jsonl"`
以及 `input: "stdin"`,因此只要它处于活动状态,后续轮次就会复用存活的 Claude 进程。现在 warm stdio 已是默认行为,包括省略传输字段的自定义配置也是如此。如果 Gateway 网关 重启或空闲进程退出OpenClaw 会从已存储的 Claude 会话 id 恢复。恢复前,已存储的会话 id 会针对现有且可读的项目转录记录进行验证,因此虚假的绑定会以 `reason=transcript-missing` 被清除,而不是在 `--resume` 下静默启动一个新的 Claude CLI 会话。
- 已存储的 CLI 会话属于提供商拥有的连续性。隐式的每日会话重置不会切断它们;`/reset` 和显式的 `session.reset` 策略仍会切断。
序列化说明:
- `serialize: true` 会保持同一通道运行按顺序执行。
- 大多数 CLI 会在一个提供商通道上串行
- 当所选认证身份发生变化时OpenClaw 会丢弃已存储 CLI 会话的复用,包括认证配置文件 id 变化、静态 API 密钥变化、静态令牌变化,或在 CLI 暴露了 OAuth 账户身份时该身份发生变化。OAuth 访问令牌和刷新令牌轮换不会切断已存储的 CLI 会话。如果某个 CLI 不暴露稳定的 OAuth 账户 idOpenClaw 会让该 CLI 自行强制执行恢复权限。
- `serialize: true` 会保持同一通道中的运行按顺序执行。
- 大多数 CLI 会在一个提供商通道上串行执行
- 当所选认证身份发生变化时OpenClaw 会丢弃已存储 CLI 会话的复用,包括 auth profile id、静态 API 密钥、静态令牌,或当 CLI 暴露该信息时的 OAuth 账户身份发生变化。OAuth 访问令牌和刷新令牌的轮换不会切断已存储 CLI 会话。如果某个 CLI 不暴露稳定的 OAuth 账户 idOpenClaw 会让该 CLI 自行强制执行恢复权限。
## 图像(透传)
@ -188,24 +196,26 @@ imageArg: "--image",
imageMode: "repeat"
```
OpenClaw 会将 base64 图像写入临时文件。如果设置了 `imageArg`,这些路径会作为 CLI 参数传递。如果缺少 `imageArg`OpenClaw 会将文件路径追加到提示词中(路径注入);对于那些能从普通路径自动加载本地文件的 CLI这样就足够了。
OpenClaw 会将 base64 图像写入临时文件。如果设置了 `imageArg`,这些
路径会作为 CLI 参数传入。如果缺少 `imageArg`OpenClaw 会把文件路径追加到提示词中(路径注入),这对于那些能够从纯路径自动加载本地文件的 CLI 已经足够。
## 输入 / 输出
- `output: "json"`(默认)会尝试解析 JSON并提取文本 + 会话 id。
- `output: "json"`(默认)会尝试解析 JSON 并提取文本 + 会话 id。
- 对于 Gemini CLI JSON 输出,当 `usage` 缺失或为空时OpenClaw 会从 `response` 读取回复文本,并从 `stats` 读取用量。
- `output: "jsonl"` 会解析 JSONL 流(例如 Codex CLI `--json`),并提取最终智能体消息以及存在时的会话标识符。
- `output: "jsonl"` 会解析 JSONL 流(例如 Codex CLI `--json`),并提取最终智能体消息以及会话
标识符(如果存在)。
- `output: "text"` 会将 stdout 视为最终响应。
输入模式:
- `input: "arg"`(默认)将提示词作为最后一个 CLI 参数传递
- `input: "stdin"` 通过 stdin 发送提示词。
- 如果提示词非常长且设置了 `maxPromptArgChars`,则会使用 stdin。
- `input: "arg"`(默认)会将提示词作为最后一个 CLI 参数传入
- `input: "stdin"` 通过 stdin 发送提示词。
- 如果提示词非常长,并且设置了 `maxPromptArgChars`,则会使用 stdin。
## 默认值(插件所有)
## 默认值(由插件拥有)
内置的 OpenAI 插件也为 `codex-cli` 注册了默认值:
内置的 OpenAI 插件还会为 `codex-cli` 注册一个默认值:
- `command: "codex"`
- `args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]`
@ -216,7 +226,7 @@ OpenClaw 会将 base64 图像写入临时文件。如果设置了 `imageArg`
- `imageArg: "--image"`
- `sessionMode: "existing"`
内置的 Google 插件也为 `google-gemini-cli` 注册了默认值:
内置的 Google 插件还会为 `google-gemini-cli` 注册一个默认值:
- `command: "gemini"`
- `args: ["--output-format", "json", "--prompt", "{prompt}"]`
@ -227,7 +237,7 @@ OpenClaw 会将 base64 图像写入临时文件。如果设置了 `imageArg`
- `sessionMode: "existing"`
- `sessionIdFields: ["session_id", "sessionId"]`
前提条件:本地 Gemini CLI 必须已安装,并且可通过 PATH 中的
前提条件:本地 Gemini CLI 必须已安装,并且`PATH` 中可作为
`gemini` 使用(`brew install gemini-cli` 或
`npm install -g @google/gemini-cli`)。
@ -235,22 +245,23 @@ Gemini CLI JSON 说明:
- 回复文本从 JSON 的 `response` 字段读取。
- 当 `usage` 不存在或为空时,用量会回退到 `stats`
- `stats.cached` 会被规范化为 OpenClaw `cacheRead`
- 如果 `stats.input` 缺失OpenClaw 会
`stats.input_tokens - stats.cached` 推导输入 token。
- `stats.cached` 会被标准化为 OpenClaw `cacheRead`
- 如果 `stats.input` 缺失OpenClaw 会根据
`stats.input_tokens - stats.cached` 推导输入 token
仅在需要时覆盖(常见情况:使用绝对 `command` 路径)。
## 插件所有的默认值
## 由插件拥有的默认值
CLI 后端默认值现在属于插件表面的一部分:
CLI 后端默认值现在插件表面的一部分:
- 插件使用 `api.registerCliBackend(...)` 注册它们。
- 后端 `id` 会成为模型引用中的提供商前缀。
- 用户在 `agents.defaults.cliBackends.<id>` 中的配置仍会覆盖插件默认值。
- 后端特定的配置清理仍由插件通过可选的 `normalizeConfig` 钩子负责。
- 后端的 `id` 会成为模型引用中的提供商前缀。
- `agents.defaults.cliBackends.<id>` 中的用户配置仍会覆盖插件默认值。
- 后端特定的配置清理由插件通过可选的
`normalizeConfig` 钩子继续拥有。
如果插件需要非常轻量的提示词/消息兼容性适配,而不想替换提供商或 CLI 后端,它们可以声明双向文本变换
需要极小提示词/消息兼容性垫片的插件,可以声明双向文本转换,而无需替换提供商或 CLI 后端
```typescript
api.registerTextTransforms({
@ -268,44 +279,52 @@ api.registerTextTransforms({
```
`input` 会重写传递给 CLI 的系统提示词和用户提示词。`output`
会在 OpenClaw 处理自身控制标记和渠道投递之前,重写流式传输的助手增量以及已解析的最终文本。
会在 OpenClaw 处理自身控制标记和渠道投递之前,重写流式 assistant 增量内容和已解析的最终文本。
对于输出与 Claude Code stream-json 兼容的 JSONL 的 CLI请在该后端配置上设置
对于输出与 Claude Code stream-json 兼容的 JSONL 的 CLI请在该后端配置上设置
`jsonlDialect: "claude-stream-json"`
## 内置 MCP 覆盖层
## 捆绑 MCP 覆盖层
CLI 后端**不会**直接接收 OpenClaw 工具调用,但后端可以通过设置 `bundleMcp: true` 选择接收生成的 MCP 配置覆盖层。
CLI 后端**不会**直接接收 OpenClaw 工具调用,但后端可以通过设置 `bundleMcp: true` 来选择加入一个自动生成的 MCP 配置覆盖层。
当前内置行为:
当前内置行为:
- `claude-cli`:生成严格的 MCP 配置文件
- `codex-cli`:为 `mcp_servers` 生成内联配置覆盖;生成的 OpenClaw loopback server 会标记为 Codex 的按服务器工具批准模式,这样 MCP 调用就不会卡在本地批准提示上
- `google-gemini-cli`:生成 Gemini system settings 文件
- `claude-cli`:生成的严格 MCP 配置文件
- `codex-cli`:针对 `mcp_servers` 的内联配置覆盖;生成的
OpenClaw loopback server 会标记为 Codex 的按服务器工具批准模式,
因此 MCP 调用不会因本地批准提示而卡住
- `google-gemini-cli`:生成的 Gemini 系统设置文件
启用内置 MCP 后OpenClaw 会:
启用 bundle MCP 后OpenClaw 会:
- 启动一个 loopback HTTP MCP server向 CLI 进程暴露 Gateway 网关工具
- 启动一个 loopback HTTP MCP 服务器,将 Gateway 网关工具暴露给 CLI 进程
- 使用按会话生成的令牌(`OPENCLAW_MCP_TOKEN`)对桥接进行认证
- 将工具访问范围限定在当前会话、账户和渠道上下文
- 为当前工作区加载已启用的内置 MCP 服务器
- 将工具访问范围限定在当前会话、账户和渠道上下文
- 为当前工作区加载已启用的 bundle-MCP 服务器
- 将它们与任何现有的后端 MCP 配置/设置结构合并
- 使用所属扩展定义的后端集成模式重写启动配置
- 使用所属扩展提供的后端集成模式重写启动配置
如果没有启用任何 MCP 服务器,只要某个后端选择启用内置 MCPOpenClaw 仍会注入严格配置,以确保后台运行保持隔离。
如果没有启用任何 MCP 服务器,当后端选择加入 bundle MCP 时OpenClaw 仍会注入严格配置,以便后台运行保持隔离。
按会话范围的内置 MCP 运行时会被缓存,以便在同一会话内复用;在空闲 `mcp.sessionIdleTtlMs` 毫秒后会被回收(默认 10 分钟;设置为 `0` 可禁用。一次性嵌入式运行例如认证探测、slug 生成和活动 Memory 召回)会在运行结束时请求清理,因此 stdio 子进程和 Streamable HTTP/SSE 流不会在运行结束后继续存在。
## 限制
- **没有直接的 OpenClaw 工具调用。** OpenClaw 不会将工具调用直接注入 CLI 后端协议。只有在后端选择启用 `bundleMcp: true` 时,它们才能看到 Gateway 网关工具。
- **流式传输是后端特定的。** 有些后端会流式输出 JSONL其他后端则会缓冲到退出时再输出。
- **没有直接的 OpenClaw 工具调用。** OpenClaw 不会将工具调用直接注入
CLI 后端协议。只有在后端选择加入
`bundleMcp: true` 时,后端才能看到 Gateway 网关工具。
- **流式传输是后端特定的。** 有些后端会流式输出 JSONL另一些则会缓冲
直到退出。
- **结构化输出** 取决于 CLI 的 JSON 格式。
- **Codex CLI 会话** 通过文本输出恢复(不是 JSONL因此其结构化程度低于初始的 `--json` 运行。不过 OpenClaw 会话本身仍可正常工作。
- **Codex CLI 会话** 通过文本输出恢复(不是 JSONL其结构化程度低于初始的 `--json` 运行。不过 OpenClaw 会话本身仍正常工作。
## 故障排除
- **找不到 CLI**:将 `command` 设置为完整路径。
- **模型名称错误**:使用 `modelAliases``provider/model` 映射到 CLI 模型。
- **没有会话连续性**:确保已设置 `sessionArg`,并且 `sessionMode` 不是 `none`Codex CLI 当前无法使用 JSON 输出恢复)。
- **模型名称错误**:使用 `modelAliases``provider/model` 映射为 CLI 模型。
- **没有会话连续性**:确保已设置 `sessionArg`,并且 `sessionMode` 不是
`none`Codex CLI 当前无法使用 JSON 输出恢复)。
- **图像被忽略**:设置 `imageArg`(并确认 CLI 支持文件路径)。
## 相关内容

View File

@ -3,18 +3,18 @@ read_when:
- 配置 `tools.*` 策略、允许列表或实验性功能
- 注册自定义提供商或覆盖基础 URL
- 设置与 OpenAI 兼容的自托管端点
summary: 工具配置(策略、实验性开关、提供商支持的工具)自定义提供商 / 基础 URL 设置
title: 配置——工具和自定义提供商
summary: 工具配置(策略、实验性开关、提供商支持的工具)以及自定义提供商 / 基础 URL 设置
title: 配置 —— 工具和自定义提供商
x-i18n:
generated_at: "2026-04-25T00:40:28Z"
generated_at: "2026-04-25T06:52:28Z"
model: gpt-5.4
provider: openai
source_hash: a3a9ab07a5536196f3ba6c64111eb97206c3b4ff12e497564fe09684193e5c8a
source_hash: d63b080550a6c95d714d3bb42c2b079368040aa09378d88c2e498ccd5ec113c1
source_path: gateway/config-tools.md
workflow: 15
---
`tools.*` 配置键和自定义提供商 / 基础 URL 设置。关于智能体、渠道及其他顶层配置键,请参见
`tools.*` 配置键以及自定义提供商 / 基础 URL 设置。有关智能体、渠道和其他顶层配置键,请参阅
[配置参考](/zh-CN/gateway/configuration-reference)。
## 工具
@ -23,35 +23,35 @@ x-i18n:
`tools.profile` 会在 `tools.allow` / `tools.deny` 之前设置基础允许列表:
当未设置时,本地新手引导默认会将新的本地配置设为 `tools.profile: "coding"`(已有的显式配置档案会被保留)。
本地新手引导会在未设置时,将新的本地配置默认设为 `tools.profile: "coding"`(现有的显式配置档案会被保留)。
| 配置档案 | 包含 |
| 配置档案 | 包含内容 |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `minimal` | 仅 `session_status` |
| `minimal` | 仅 `session_status` |
| `coding` | `group:fs`、`group:runtime`、`group:web`、`group:sessions`、`group:memory`、`cron`、`image`、`image_generate`、`video_generate` |
| `messaging` | `group:messaging`、`sessions_list`、`sessions_history`、`sessions_send`、`session_status` |
| `full` | 无限制(与未设置相同) |
| `messaging` | `group:messaging`、`sessions_list`、`sessions_history`、`sessions_send`、`session_status` |
| `full` | 无限制(与未设置相同) |
### 工具组
### 工具
| 组 | 工具 |
| | 工具 |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| `group:runtime` | `exec`、`process`、`code_execution``bash` 可作为 `exec` 的别名) |
| `group:fs` | `read`、`write`、`edit`、`apply_patch` |
| `group:runtime` | `exec`、`process`、`code_execution``bash` 可作为 `exec` 的别名使用 |
| `group:fs` | `read`、`write`、`edit`、`apply_patch` |
| `group:sessions` | `sessions_list`、`sessions_history`、`sessions_send`、`sessions_spawn`、`sessions_yield`、`subagents`、`session_status` |
| `group:memory` | `memory_search`、`memory_get` |
| `group:web` | `web_search`、`x_search`、`web_fetch` |
| `group:ui` | `browser`、`canvas` |
| `group:automation` | `cron`、`gateway` |
| `group:messaging` | `message` |
| `group:nodes` | `nodes` |
| `group:agents` | `agents_list` |
| `group:media` | `image`、`image_generate`、`video_generate`、`tts` |
| `group:openclaw` | 所有内置工具(不包括提供商插件) |
| `group:memory` | `memory_search`、`memory_get` |
| `group:web` | `web_search`、`x_search`、`web_fetch` |
| `group:ui` | `browser`、`canvas` |
| `group:automation` | `cron`、`gateway` |
| `group:messaging` | `message` |
| `group:nodes` | `nodes` |
| `group:agents` | `agents_list` |
| `group:media` | `image`、`image_generate`、`video_generate`、`tts` |
| `group:openclaw` | 所有内置工具(不包括提供商插件) |
### `tools.allow` / `tools.deny`
全局工具允许 / 拒绝策略(拒绝优先)。不区分大小写,支持 `*` 通配符。即使 Docker 沙箱关闭时也会应用。
全局工具允许 / 拒绝策略(`deny` 优先生效)。不区分大小写,支持 `*` 通配符。即使 Docker 沙箱关闭,也会应用。
```json5
{
@ -77,7 +77,7 @@ x-i18n:
### `tools.elevated`
控制沙箱外的提升权限 `exec` 访问:
控制沙箱外的提升权限 `exec` 访问:
```json5
{
@ -93,9 +93,9 @@ x-i18n:
}
```
- 每个智能体的覆盖项`agents.list[].tools.elevated`)只能进一步收紧限制。
- `/elevated on|off|ask|full` 会按会话存储状态;内联指令仅对单条消息生效
- 提升权限的 `exec` 会绕过沙箱隔离,并使用已配置的逃逸路径(默认`gateway`,或者当 `exec` 目标为 `node`使用 `node`)。
- 按智能体覆盖`agents.list[].tools.elevated`)只能进一步收紧限制。
- `/elevated on|off|ask|full` 会按会话存储状态;内联指令仅应用于单条消息
- 提升权限的 `exec` 会绕过沙箱隔离,并使用已配置的逃逸路径(默认`gateway`,如果 `exec` 目标是 `node`,则使用 `node`)。
### `tools.exec`
@ -142,13 +142,13 @@ x-i18n:
```
- `historySize`:为循环分析保留的最大工具调用历史记录数。
- `warningThreshold`用于警告的重复无进展模式阈值。
- `warningThreshold`针对重复且无进展模式发出警告的阈值。
- `criticalThreshold`:用于阻止严重循环的更高重复阈值。
- `globalCircuitBreakerThreshold`针对任何无进展运行的硬停止阈值。
- `detectors.genericRepeat`:对重复的同工具 / 同参数调用发出警告。
- `globalCircuitBreakerThreshold`对任何无进展运行进行硬停止的阈值。
- `detectors.genericRepeat`:对重复调用相同工具 / 相同参数发出警告。
- `detectors.knownPollNoProgress`:对已知轮询工具(`process.poll`、`command_status` 等)的无进展情况发出警告 / 阻止。
- `detectors.pingPong`:对交替出现的无进展成对模式发出警告 / 阻止。
- 如果 `warningThreshold >= criticalThreshold``criticalThreshold >= globalCircuitBreakerThreshold`验证会失败。
- 如果 `warningThreshold >= criticalThreshold``criticalThreshold >= globalCircuitBreakerThreshold`校验将失败。
### `tools.web`
@ -182,7 +182,7 @@ x-i18n:
### `tools.media`
配置传入媒体理解能力(图像 / 音频 / 视频):
配置传入媒体理解(图像 / 音频 / 视频):
```json5
{
@ -190,7 +190,7 @@ x-i18n:
media: {
concurrency: 2,
asyncCompletion: {
directSend: false, // 选择启用:将完成的异步音乐 / 视频直接发送到渠道
directSend: false, // 选择启用:将完成的异步音乐 / 视频直接发送到渠道
},
audio: {
enabled: true,
@ -231,14 +231,14 @@ x-i18n:
- `capabilities`:可选列表(`image`、`audio`、`video`)。默认值:`openai` / `anthropic` / `minimax` → 图像,`google` → 图像 + 音频 + 视频,`groq` → 音频。
- `prompt`、`maxChars`、`maxBytes`、`timeoutSeconds`、`language`:每个条目的覆盖设置。
- 失败时会回退到下一个条目。
- 如果失败,会回退到下一个条目。
提供商认证遵循标准顺序:`auth-profiles.json` → 环境变量 → `models.providers.*.apiKey`
**异步完成字段:**
- `asyncCompletion.directSend`:当为 `true` 时,已完成的异步 `music_generate`
`video_generate` 任务会优先尝试直接发送到渠道。默认值:`false`
- `asyncCompletion.directSend`:当`true` 时,已完成的异步 `music_generate`
`video_generate` 任务会先尝试直接投递到渠道。默认值:`false`
(旧版请求者会话唤醒 / 模型投递路径)。
</Accordion>
@ -258,7 +258,7 @@ x-i18n:
### `tools.sessions`
控制哪些会话可以被会话工具(`sessions_list`、`sessions_history`、`sessions_send`作为目标
控制会话工具(`sessions_list`、`sessions_history`、`sessions_send`可以定位哪些会话
默认值:`tree`(当前会话 + 由其生成的会话,例如子智能体)。
@ -273,12 +273,12 @@ x-i18n:
}
```
注意
说明
- `self`:仅当前会话键。
- `tree`:当前会话 + 由当前会话生成的会话(子智能体)。
- `agent`:属于当前智能体 id 的任意会话(如果你在同一个智能体 id 下按发送者运行会话,也可能包含其他用户)。
- `all`:任意会话。跨智能体定向仍然需要 `tools.agentToAgent`
- `agent`:属于当前智能体 id 的任何会话(如果你在同一个智能体 id 下按发送者运行会话,可能包括其他用户)。
- `all`:任何会话。跨智能体定位仍然需要 `tools.agentToAgent`
- 沙箱限制:当当前会话处于沙箱隔离中,且 `agents.defaults.sandbox.sessionToolsVisibility="spawned"` 时,即使 `tools.sessions.visibility="all"`,可见性也会被强制为 `tree`
### `tools.sessions_spawn`
@ -301,20 +301,20 @@ x-i18n:
}
```
注意
说明
- 附件支持 `runtime: "subagent"`。ACP 运行时会拒绝它们。
- 文件会被实体化到子工作区`.openclaw/attachments/<uuid>/`,并带一个 `.manifest.json`
- 仅 `runtime: "subagent"` 支持附件。ACP 运行时会拒绝它们。
- 文件会被实体化到子工作区的 `.openclaw/attachments/<uuid>/`,并带一个 `.manifest.json`
- 附件内容会自动从转录持久化中脱敏。
- Base64 输入会通过严格的字母表 / 填充检查以及解码前大小保护进行验证。
- 目录和文件权限分别为 `0700` `0600`
- 清理`cleanup` 策略控制:`delete` 总是会删除附件;`keep` 仅在 `retainOnSessionKeep: true` 时保留附件
- Base64 输入会使用严格的字母表 / 填充校验,以及解码前大小保护进行验证。
- 目录文件权限为 `0700`,文件权限为 `0600`
- 清理遵循 `cleanup` 策略:`delete` 总是删除附件;`keep` 仅在 `retainOnSessionKeep: true` 时保留它们
<a id="toolsexperimental"></a>
### `tools.experimental`
实验性内置工具标志。默认关闭,除非严格智能体式 GPT-5 自动启用规则适用
实验性的内置工具标志。默认关闭,除非适用 strict-agentic GPT-5 自动启用规则
```json5
{
@ -326,11 +326,11 @@ x-i18n:
}
```
注意
说明
- `planTool`:为非简单的多步骤工作跟踪启用结构化 `update_plan` 工具。
- 默认值:`false`,除非 `agents.defaults.embeddedPi.executionContract`(或某个智能体的覆盖设置)被设为 `"strict-agentic"`,且运行的是 OpenAI 或 OpenAI Codex 的 GPT-5 系列。将其设为 `true` 可在该范围之外强制开启该工具,设为 `false` 则即使在严格智能体式 GPT-5 运行中也保持关闭。
- 启用后,系统提示词还会添加使用指,以便模型仅在重要工作中使用它,并且最多只保留一个 `in_progress` 步骤。
- 默认值:`false`,除非 `agents.defaults.embeddedPi.executionContract`(或每个智能体的覆盖值)被设置为 `"strict-agentic"`,并且运行的是 OpenAI 或 OpenAI Codex GPT-5 系列。设为 `true` 可在该范围之外强制启用此工具;设为 `false` 则即使在 strict-agentic GPT-5 运行中也保持关闭。
- 启用后,系统提示词还会添加使用指,以便模型仅在重要工作中使用它,并且最多只保留一个 `in_progress` 步骤。
### `agents.defaults.subagents`
@ -350,8 +350,8 @@ x-i18n:
}
```
- `model`:生成的子智能体默认模型。如果省略,子智能体会继承调用方的模型。
- `allowAgents`:当请求方智能体未设置自己的 `subagents.allowAgents` 时,`sessions_spawn` 目标智能体 id 默认允许列表(`["*"]` = 任意;默认:仅同一智能体)。
- `model`:生成的子智能体默认使用的模型。如果省略,子智能体会继承调用方的模型。
- `allowAgents`:当请求方智能体未设置自己的 `subagents.allowAgents` 时,`sessions_spawn` 目标智能体 id 默认允许列表(`["*"]` = 任意;默认:仅同一智能体)。
- `runTimeoutSeconds`:当工具调用省略 `runTimeoutSeconds` 时,`sessions_spawn` 的默认超时时间(秒)。`0` 表示无超时。
- 每个子智能体的工具策略:`tools.subagents.tools.allow` / `tools.subagents.tools.deny`
@ -388,47 +388,47 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
}
```
- 使用 `authHeader: true` + `headers` 来满足自定义认证需求
- 使用 `OPENCLAW_AGENT_DIR` 覆盖智能体配置根目录(或使用 `PI_CODING_AGENT_DIR`,这是旧版环境变量别名)
- 对于匹配的提供商 ID合并优先级如下
- 如需自定义认证,请使用 `authHeader: true` + `headers`
- 使用 `OPENCLAW_AGENT_DIR`(或旧版环境变量别名 `PI_CODING_AGENT_DIR`)覆盖智能体配置根目录
- 匹配提供商 ID 的合并优先级
- 非空的智能体 `models.json` `baseUrl` 值优先。
- 非空的智能体 `apiKey` 值仅在该提供商在当前配置 / 认证档案上下文中不是由 SecretRef 管理时优先。
- 由 SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用使用 `ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`),而不是持久化已解析的 Secret
- 由 SecretRef 管理的提供商 header 值会从源标记刷新(环境变量引用使用 `secretref-env:ENV_VAR_NAME`,文件 / exec 引用使用 `secretref-managed`)。
- 非空的智能体 `apiKey` 值仅在当前配置 / auth-profile 上下文中该提供商不是由 SecretRef 管理时优先。
- 由 SecretRef 管理的提供商 `apiKey` 值会从源标记刷新(环境变量引用`ENV_VAR_NAME`,文件 / exec 引用为 `secretref-managed`),而不是持久化已解析的密钥
- 由 SecretRef 管理的提供商头部值会从源标记刷新(环境变量引用为 `secretref-env:ENV_VAR_NAME`,文件 / exec 引用为 `secretref-managed`)。
- 空的或缺失的智能体 `apiKey` / `baseUrl` 会回退到配置中的 `models.providers`
- 匹配模型的 `contextWindow` / `maxTokens` 会在显式配置值和隐式目录值之间取较高值。
- 匹配模型的 `contextTokens` 会在存在时保留显式运行时上限;当你想限制有效上下文而不改变模型原生元数据时可使用它。
- 当你希望配置完全重写 `models.json` 时,使用 `models.mode: "replace"`
- 标记持久化以源为准:标记从活动源配置快照(解析前)写入,而不是从已解析的运行时 Secret 值写入
- 匹配模型的 `contextWindow` / `maxTokens` 会在显式配置值与隐式目录值之间采用较高的值。
- 匹配模型的 `contextTokens` 会在存在时保留显式运行时上限;当你希望限制生效上下文而不修改模型原生元数据时,请使用它。
- 当你希望配置完全重写 `models.json` 时,使用 `models.mode: "replace"`
- 标记持久化以源为准:标记写入自当前活动的源配置快照(解析前),而不是来自解析后的运行时密钥值
### 提供商字段详情
- `models.mode`:提供商目录行为(`merge` 或 `replace`)。
- `models.providers`:以提供商 id 为键的自定义提供商映射。
- 安全编辑:对增量更新,使用 `openclaw config set models.providers.<id> '<json>' --strict-json --merge``openclaw config set models.providers.<id>.models '<json-array>' --strict-json --merge`。除非你传入 `--replace`,否则 `config set` 会拒绝破坏性替换
- 安全编辑:使用 `openclaw config set models.providers.<id> '<json>' --strict-json --merge``openclaw config set models.providers.<id>.models '<json-array>' --strict-json --merge` 进行增量更新。`config set` 会拒绝破坏性替换,除非你传入 `--replace`
- `models.providers.*.api`:请求适配器(`openai-completions`、`openai-responses`、`anthropic-messages`、`google-generative-ai` 等)。
- `models.providers.*.apiKey`:提供商凭证(优先使用 SecretRef / 环境变量替换)。
- `models.providers.*.auth`:认证策略(`api-key`、`token`、`oauth`、`aws-sdk`)。
- `models.providers.*.injectNumCtxForOpenAICompat`:对于 Ollama + `openai-completions``options.num_ctx` 注入请求中(默认:`true`)。
- `models.providers.*.authHeader`:在需要时强制通过 `Authorization` header 传输凭证。
- `models.providers.*.injectNumCtxForOpenAICompat`:对于 Ollama + `openai-completions`向请求中注入 `options.num_ctx`(默认:`true`)。
- `models.providers.*.authHeader`:在需要时强制通过 `Authorization` 传输凭证。
- `models.providers.*.baseUrl`:上游 API 基础 URL。
- `models.providers.*.headers`:用于代理 / 租户路由的额外静态 header
- `models.providers.*.headers`:用于代理 / 租户路由的额外静态头部
- `models.providers.*.request`:模型提供商 HTTP 请求的传输覆盖设置。
- `request.headers`:额外 header(与提供商默认值合并)。值支持 SecretRef。
- `request.auth`:认证策略覆盖。模式:`"provider-default"`(使用提供商内置认证)、`"authorization-bearer"`(配合 `token`)、`"header"`(配合 `headerName`、`value`,可选 `prefix`)。
- `request.proxy`HTTP 代理覆盖。模式:`"env-proxy"`(使用 `HTTP_PROXY` / `HTTPS_PROXY` 环境变量)、`"explicit-proxy"`(配合 `url`)。两种模式都支持可选的 `tls` 子对象。
- `request.tls`:直接连接的 TLS 覆盖。字段:`ca`、`cert`、`key`、`passphrase`(均支持 SecretRef、`serverName`、`insecureSkipVerify`。
- `request.allowPrivateNetwork`:当为 `true` 时,如果 DNS 将 `baseUrl` 解析到私有、CGNAT 或类似地址范围,则通过提供商 HTTP 抓取保护允许 HTTPS 访问(这是面向可信自托管 OpenAI 兼容端点的运维人员选择启用项。WebSocket 使用相同的 `request` 处理 header / TLS但不使用该抓取 SSRF 防护门。默认 `false`
- `request.headers`:额外头部(与提供商默认值合并)。值支持 SecretRef。
- `request.auth`:认证策略覆盖。模式:`"provider-default"`(使用提供商内置认证)、`"authorization-bearer"`(配合 `token`)、`"header"`(配合 `headerName`、`value` 和可选的 `prefix`)。
- `request.proxy`HTTP 代理覆盖。模式:`"env-proxy"`(使用 `HTTP_PROXY` / `HTTPS_PROXY` 环境变量)、`"explicit-proxy"`(配合 `url`)。两种模式都接受可选的 `tls` 子对象。
- `request.tls`:直连时的 TLS 覆盖。字段:`ca`、`cert`、`key`、`passphrase`(都支持 SecretRef、`serverName`、`insecureSkipVerify`。
- `request.allowPrivateNetwork`:当`true` 时,如果 DNS 将 `baseUrl` 解析到私有、CGNAT 或类似网段,则允许通过提供商 HTTP 抓取防护访问 HTTPS `baseUrl`(这是针对受信任、自托管、与 OpenAI 兼容端点的运维人员选择启用项。WebSocket 也使用相同的 `request` 处理头部 / TLS但不使用该抓取 SSRF 防护门。默认值为 `false`
- `models.providers.*.models`:显式提供商模型目录条目。
- `models.providers.*.models.*.contextWindow`:模型原生上下文窗口元数据。
- `models.providers.*.models.*.contextTokens`:可选的运行时上下文上限。当你希望有效上下文预算小于模型原生 `contextWindow` 时使用
- `models.providers.*.models.*.compat.supportsDeveloperRole`:可选兼容性提示。对于 `api: "openai-completions"`存在非空、非原生 `baseUrl`(主机不是 `api.openai.com`的情况OpenClaw 会在运行时强制将其设为 `false`。空的 / 省略的 `baseUrl` 会保留默认 OpenAI 行为。
- `models.providers.*.models.*.compat.requiresStringContent`面向仅支持字符串的 OpenAI 兼容聊天端点的可选兼容性提示。当为 `true`OpenClaw 会在发送请求前将纯文本 `messages[].content` 数组展平为普通字符串。
- `plugins.entries.amazon-bedrock.config.discovery`Bedrock 自动发现设置根节点
- `models.providers.*.models.*.contextTokens`:可选的运行时上下文上限。当你希望有效上下文预算小于模型原生 `contextWindow` 时使用;当两者不同,`openclaw models list` 会同时显示这两个值
- `models.providers.*.models.*.compat.supportsDeveloperRole`:可选兼容性提示。对于 `api: "openai-completions"``baseUrl` 为非空、非原生值(主机不是 `api.openai.com`的情况OpenClaw 会在运行时将其强制设为 `false`。空的 / 省略的 `baseUrl` 会保留默认 OpenAI 行为。
- `models.providers.*.models.*.compat.requiresStringContent`针对仅支持字符串的 OpenAI 兼容聊天端点的可选兼容性提示。当`true`OpenClaw 会在发送请求前将纯文本 `messages[].content` 数组展平为字符串。
- `plugins.entries.amazon-bedrock.config.discovery`Bedrock 自动发现设置根。
- `plugins.entries.amazon-bedrock.config.discovery.enabled`:开启 / 关闭隐式发现。
- `plugins.entries.amazon-bedrock.config.discovery.region`:用于发现的 AWS 区域。
- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`:用于定向发现的可选提供商 id 过滤器。
- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`:发现刷新轮询间隔。
- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`:用于定向发现的可选 provider-id 过滤器。
- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`:发现刷新轮询间隔。
- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`:已发现模型的回退上下文窗口。
- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`:已发现模型的回退最大输出 token 数。
@ -468,7 +468,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
}
```
对于 Cerebras使用 `cerebras/zai-glm-4.7`;对于直连 Z.AI使用 `zai/glm-4.7`
Cerebras 请使用 `cerebras/zai-glm-4.7`Z.AI 直连请使用 `zai/glm-4.7`
</Accordion>
@ -485,7 +485,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
}
```
设置 `OPENCODE_API_KEY`(或 `OPENCODE_ZEN_API_KEY`。Zen 目录使用 `opencode/...` 引用Go 目录使用 `opencode-go/...` 引用。快捷方式:`openclaw onboard --auth-choice opencode-zen` 或 `openclaw onboard --auth-choice opencode-go`
设置 `OPENCODE_API_KEY`(或 `OPENCODE_ZEN_API_KEY`。Zen 目录使用 `opencode/...` 引用Go 目录使用 `opencode-go/...` 引用。快捷方式:`openclaw onboard --auth-choice opencode-zen` 或 `openclaw onboard --auth-choice opencode-go`
</Accordion>
@ -506,7 +506,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
- 通用端点:`https://api.z.ai/api/paas/v4`
- 编码端点(默认):`https://api.z.ai/api/coding/paas/v4`
- 对于通用端点,定义一个自定义提供商并覆盖基础 URL。
- 对于通用端点,定义一个覆盖基础 URL 的自定义提供商
</Accordion>
@ -548,8 +548,8 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
对于中国端点:`baseUrl: "https://api.moonshot.cn/v1"` 或 `openclaw onboard --auth-choice moonshot-api-key-cn`
原生 Moonshot 端点会在共享的
`openai-completions` 传输上宣告流式用量兼容性,而 OpenClaw 会依据端点能力
而不只是内置提供商 id 来处理这一点。
`openai-completions` 传输上声明流式使用兼容性,而 OpenClaw 会依据端点能力
而不只是内置提供商 id 本身来处理这一点。
</Accordion>
@ -571,7 +571,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
</Accordion>
<Accordion title="SyntheticAnthropic 兼容)">
<Accordion title="SyntheticAnthropic 兼容)">
```json5
{
@ -606,7 +606,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
}
```
基础 URL 不应包含 `/v1`Anthropic 客户端会自行追加)。快捷方式:`openclaw onboard --auth-choice synthetic-api-key`。
基础 URL 不应包含 `/v1`Anthropic 客户端会追加)。快捷方式:`openclaw onboard --auth-choice synthetic-api-key`。
</Accordion>
@ -650,8 +650,8 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
`openclaw onboard --auth-choice minimax-global-api`
`openclaw onboard --auth-choice minimax-cn-api`
模型目录默认仅包含 M2.7。
在 Anthropic 兼容的流式传输路径上OpenClaw 默认会禁用 MiniMax thinking
除非你明确自行设置 `thinking`。`/fast on` 或
Anthropic 兼容的流式路径上OpenClaw 默认会禁用 MiniMax thinking
除非你自行显式设置 `thinking`。`/fast on` 或
`params.fastMode: true` 会将 `MiniMax-M2.7` 重写为
`MiniMax-M2.7-highspeed`
@ -659,7 +659,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
<Accordion title="本地模型LM Studio">
参见 [本地模型](/zh-CN/gateway/local-models)。简而言之:在较强硬件上通过 LM Studio Responses API 运行大型本地模型;同时保留已合并的托管模型作为回退。
参见 [本地模型](/zh-CN/gateway/local-models)。简而言之:在性能足够强的硬件上,通过 LM Studio Responses API 运行大型本地模型;同时保留已合并的托管模型作为回退。
</Accordion>
@ -667,7 +667,7 @@ OpenClaw 使用内置模型目录。可通过配置中的 `models.providers` 或
## 相关内容
- [配置参考](/zh-CN/gateway/configuration-reference) — 其他顶层键
- [配置——智能体](/zh-CN/gateway/config-agents)
- [配置——渠道](/zh-CN/gateway/config-channels)
- [配置参考](/zh-CN/gateway/configuration-reference) — 其他顶层键
- [配置 —— 智能体](/zh-CN/gateway/config-agents)
- [配置 —— 渠道](/zh-CN/gateway/config-channels)
- [工具和插件](/zh-CN/tools)

View File

@ -1,63 +1,100 @@
---
read_when:
- 你需要精确到字段级别的配置语义或默认值
- 你正在验证 channel、model、Gateway 网关或工具配置块
summary: 用于核心 OpenClaw 键、默认值以及指向各专用子系统参考文档链接的 Gateway 网关配置参考
- 你正在验证渠道、模型、Gateway 网关 或工具配置块
summary: Gateway 网关 配置参考,涵盖核心 OpenClaw 键名、默认值,以及指向专用子系统参考的链接
title: 配置参考
x-i18n:
generated_at: "2026-04-25T05:54:11Z"
generated_at: "2026-04-25T06:52:24Z"
model: gpt-5.4
provider: openai
source_hash: 6fc32c7387a8ece01020342186b52202d954a44c6db3fa827a5ed4302e995af7
source_hash: f658493b3354d2f5dca8adf8a32d3d1c07691a35923badb2cbd697d69e0f50f9
source_path: gateway/configuration-reference.md
workflow: 15
---
`~/.openclaw/openclaw.json` 的核心配置参考。若要查看面向任务的概览,请参阅[配置](/zh-CN/gateway/configuration)。
`~/.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 面验证配置文档基线哈希
- `config.schema.lookup` 会返回一个按路径范围限定的 schema 节点,用于下钻工具
- `pnpm config:docs:check` / `pnpm config:docs:gen` 会根据当前 schema 面验证配置文档基线哈希
专用深参考:
专用深参考:
- [Memory 配置参考](/zh-CN/reference/memory-config)用于 `agents.defaults.memorySearch.*`、`memory.qmd.*`、`memory.citations`,以及位于 `plugins.entries.memory-core.config.dreaming` 下的 dreaming 配置
- [Slash commands](/zh-CN/tools/slash-commands),适用于当前内置 + 捆绑命令目录
- 各自所属的渠道 / 插件页面,适用于渠道特定的命令
- [内存配置参考](/zh-CN/reference/memory-config),用于 `agents.defaults.memorySearch.*`、`memory.qmd.*`、`memory.citations`,以及 `plugins.entries.memory-core.config.dreaming` 下的 dreaming 配置
- [斜杠命令](/zh-CN/tools/slash-commands),用于当前内置 + 打包的命令目录
- 渠道特定命令面的所属渠道 / 插件页
配置格式为 **JSON5**(允许注释和尾随逗号。所有字段都是可选的——OpenClaw 在省略时会使用安全默认值。
配置格式为 **JSON5**(允许注释 + 尾随逗号)。所有字段都是可选的 —— OpenClaw 在省略时会使用安全的默认值。
---
## 渠道
每个渠道的配置键已移至专用页面——请参阅
每个渠道的配置键已移至专用页面 —— 请参见
[配置 — 渠道](/zh-CN/gateway/config-channels),了解 `channels.*`
其中包括 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage 其他
内置渠道(认证、访问控制、多账号、提及门控)。
包括 Slack、Discord、Telegram、WhatsApp、Matrix、iMessage 其他
内置渠道(身份验证、访问控制、多账户、提及门控)。
## 智能体默认值、多智能体、会话和消息
已移至专用页面——请参阅
[配置 — 智能体](/zh-CN/gateway/config-agents)了解
已移至专用页面 —— 请参见
[配置 — 智能体](/zh-CN/gateway/config-agents)内容包括
- `agents.defaults.*`(工作区、模型、thinking、heartbeat、memory、媒体、Skills、沙箱
- `agents.defaults.*`(工作区、模型、思考、心跳、内存、媒体、Skills、沙箱
- `multiAgent.*`(多智能体路由和绑定)
- `session.*`(会话生命周期、压缩、清理)
- `messages.*`(消息交付、TTS、Markdown 渲染)
- `messages.*`(消息投递、TTS、Markdown 渲染)
- `talk.*`Talk 模式)
- `talk.silenceTimeoutMs`未设置时Talk 会在发送转录文本前保留平台默认的停顿窗口(`macOS 和 Android 为 700 msiOS 为 900 ms`
- `talk.silenceTimeoutMs`未设置时Talk 会在发送转录文本前保持平台默认的停顿窗口(`macOS 和 Android 上为 700 msiOS 上为 900 ms`
## 工具和自定义提供商
工具策略、实验性开关、由 provider 支持的工具配置,以及自定义
provider / base-URL 设置已移至专用页面——请参阅
工具策略、实验性开关、由提供商支持的工具配置,以及自定义
提供商 / base-URL 设置已移至专用页面 —— 请参见
[配置 — 工具和自定义提供商](/zh-CN/gateway/config-tools)。
## MCP
由 OpenClaw 管理的 MCP 服务器定义位于 `mcp.servers` 下,
并由嵌入式 Pi 和其他运行时适配器使用。`openclaw mcp list`、
`show`、`set` 和 `unset` 命令会管理这个配置块,而不会在编辑配置期间连接到
目标服务器。
```json5
{
mcp: {
// Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction.
sessionIdleTtlMs: 600000,
servers: {
docs: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-fetch"],
},
remote: {
url: "https://example.com/mcp",
transport: "streamable-http", // streamable-http | sse
headers: {
Authorization: "Bearer ${MCP_REMOTE_TOKEN}",
},
},
},
},
}
```
- `mcp.servers`:为暴露已配置 MCP 工具的运行时提供具名的 stdio 或远程 MCP 服务器定义。
- `mcp.sessionIdleTtlMs`:会话范围内内置 MCP 运行时的空闲 TTL。
一次性嵌入式运行会请求在运行结束时清理;这个 TTL 是
长生命周期会话和未来调用方的兜底机制。
运行时行为请参见 [MCP](/zh-CN/cli/mcp#openclaw-as-an-mcp-client-registry) 和
[CLI 后端](/zh-CN/gateway/cli-backends#bundle-mcp-overlays)。
## Skills
```json5
@ -83,11 +120,12 @@ provider / base-URL 设置已移至专用页面——请参阅
}
```
- `allowBundled`:仅对内置 Skills 生效的可选允许列表(托管 / 工作区 Skills 不受影响)。
- `allowBundled`:仅对内置 Skills 的可选允许列表(托管 / 工作区 Skills 不受影响)。
- `load.extraDirs`:额外的共享 Skills 根目录(优先级最低)。
- `install.preferBrew`:为 `true` 时,若 `brew` 可用,则优先使用 Homebrew 安装器,然后才回退到其他安装器类型。
- `install.nodeManager``metadata.openclaw.install` 规范的 Node 安装器偏好(`npm` | `pnpm` | `yarn` | `bun`)。
- `entries.<skillKey>.enabled: false`:即使某个 Skill 已内置 / 已安装,也会禁用它。
- `install.preferBrew`:为 true 时,如果 `brew` 可用,则优先使用 Homebrew 安装器,然后才回退到其他安装器类型。
- `install.nodeManager`:用于 `metadata.openclaw.install`
规范的 Node 安装器偏好(`npm` | `pnpm` | `yarn` | `bun`)。
- `entries.<skillKey>.enabled: false`:即使 Skill 已内置 / 已安装,也会禁用该 Skill。
- `entries.<skillKey>.apiKey`:为声明了主环境变量的 Skills 提供的便捷字段(明文字符串或 SecretRef 对象)。
---
@ -117,44 +155,44 @@ provider / base-URL 设置已移至专用页面——请参阅
```
- 从 `~/.openclaw/extensions`、`<workspace>/.openclaw/extensions` 以及 `plugins.load.paths` 加载。
- 发现机制接受原生 OpenClaw 插件,以及兼容的 Codex bundles 和 Claude bundles包括无 manifest 的 Claude 默认布局 bundles
- **配置变更需要重启 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 提供钩子目录。
- 设备发现接受原生 OpenClaw 插件,以及兼容的 Codex 包和 Claude 包,包括无 manifest 的 Claude 默认布局包
- **配置更改需要重启 Gateway 网关。**
- `allow`:可选允许列表(仅加载列出的插件)。`deny` 优先生效
- `plugins.entries.<id>.apiKey`:插件级 API 密钥便捷字段(插件支持时可用)。
- `plugins.entries.<id>.env`:插件范围的环境变量映射。
- `plugins.entries.<id>.hooks.allowPromptInjection`:当为 `false` 时,核心会阻止 `before_prompt_build`,并忽略旧版 `before_agent_start` 中会修改提示词的字段,同时保留旧版 `modelOverride``providerOverride`。适用于原生插件钩子以及受支持的提供钩子目录。
- `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>.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 抓取 provider 设置。
- `apiKey`Firecrawl API key(接受 SecretRef。会回退到 `plugins.entries.firecrawl.config.webSearch.apiKey`、旧版 `tools.web.fetch.firecrawl.apiKey``FIRECRAWL_API_KEY` 环境变量。
- 渠道插件的账 / 运行时设置位于 `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` 环境变量。
- `baseUrl`Firecrawl API 基础 URL默认`https://api.firecrawl.dev`)。
- `onlyMainContent`:仅提取页面主体内容(默认:`true`)。
- `maxAgeMs`最大缓存时长(毫秒,默认:`172800000` / 2 天)。
- `timeoutSeconds`:抓取请求超时秒数(默认:`60`)。
- `plugins.entries.xai.config.xSearch`xAI X SearchGrok Web 搜索)设置。
- `enabled`:启用 X Search provider
- `maxAgeMs`缓存的最大存活时间(毫秒)(默认:`172800000` / 2 天)。
- `timeoutSeconds`:抓取请求超时时间(秒)(默认:`60`)。
- `plugins.entries.xai.config.xSearch`xAI X SearchGrok web search)设置。
- `enabled`:启用 X Search 提供商
- `model`:用于搜索的 Grok 模型(例如 `"grok-4-1-fast"`)。
- `plugins.entries.memory-core.config.dreaming`memory dreaming 设置。有关阶段和阈值,请参阅 [Dreaming](/zh-CN/concepts/dreaming)。
- `plugins.entries.memory-core.config.dreaming`memory dreaming 设置。阶段和阈值请参见 [Dreaming](/zh-CN/concepts/dreaming)。
- `enabled`dreaming 总开关(默认 `false`)。
- `frequency`:每次完整 dreaming 扫描的 cron 频率(默认 `"0 3 * * *"`)。
- 阶段策略和阈值属于实现细节(不是面向用户的配置键)。
- 完整的 memory 配置位于 [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 包插件也可以从 `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`。
- 将 `plugins.installs.*` 视为管状态;优先使用 CLI 命令,而不是手动编辑。
- 包 `source`、`spec`、`sourcePath`、`installPath`、`version`、`resolvedName`、`resolvedVersion`、`resolvedSpec`、`integrity`、`shasum`、`resolvedAt`、`installedAt`。
- 将 `plugins.installs.*` 视为管状态;优先使用 CLI 命令,而不是手动编辑。
请参阅[插件](/zh-CN/tools/plugin)。
请参见 [插件](/zh-CN/tools/plugin)。
---
@ -205,25 +243,25 @@ provider / base-URL 设置已移至专用页面——请参阅
```
- `evaluateEnabled: false` 会禁用 `act:evaluate``wait --fn`
- `tabCleanup` 会在空闲时间后,或当某个会话超出其标签页上限时,回收已跟踪的主智能体标签页。将 `idleMinutes: 0``maxTabsPerSession: 0` 设为 0 可分别禁用这些单独的清理模式。
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` 在未设置时为禁用状态,因此浏览器导航默认保持严格。
- 仅当你明确受信任私有网络浏览器导航时,才设置 `ssrfPolicy.dangerouslyAllowPrivateNetwork: true`
- 在严格模式下,远程 CDP 配置文件端点(`profiles.*.cdpUrl`)在可达性 / 发现检查期间也受相同的私有网络阻止策略约束。
- `ssrfPolicy.allowPrivateNetwork`支持作为旧版别名
- 在严格模式下,使用 `ssrfPolicy.hostnameAllowlist``ssrfPolicy.allowedHostnames` 配置显式例外
- 远程配置文件为仅附加模式(不支持 start / stop / reset
- `tabCleanup` 会在空闲时间后,或当某个会话超过其上限时,回收被跟踪的主智能体标签页。将 `idleMinutes: 0``maxTabsPerSession: 0` 设为 0 可禁用各自对应的清理模式。
- 未设置时,`ssrfPolicy.dangerouslyAllowPrivateNetwork` 为禁用状态,因此浏览器导航默认保持严格模式
- 仅当你明确愿意信任私有网络浏览器导航时,才将 `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` 设为 true
- 在严格模式下,远程 CDP 配置文件端点(`profiles.*.cdpUrl`)在可达性 / 设备发现检查期间也相同的私有网络阻止策略约束。
- `ssrfPolicy.allowPrivateNetwork`然作为旧版别名受支持
- 在严格模式下,使用 `ssrfPolicy.hostnameAllowlist``ssrfPolicy.allowedHostnames` 进行显式例外配置
- 远程配置文件仅支持附加模式(禁用 start / stop / reset
- `profiles.*.cdpUrl` 接受 `http://`、`https://`、`ws://` 和 `wss://`
当你希望 OpenClaw 发现 `/json/version` 时,请使用 HTTP(S)
当你的提供商提供直接的 DevTools WebSocket URL 时,请使用 WS(S)。
- `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` 配置文件保留当前 Chrome MCP 路由限制:使用 snapshot / ref 驱动的操作,而不是 CSS 选择器定位;单文件上传钩子;不支持对话框超时覆盖;不支持 `wait --load networkidle`;也不支持 `responsebody`、PDF 导出、下载拦截或批量操作。
- 本地托管的 `openclaw` 配置文件会自动分配 `cdpPort``cdpUrl`;仅在远程 CDP 场景下才显式设置 `cdpUrl`
- 本地托管配置文件可以设置 `executablePath`,以覆盖该配置文件的全局 `browser.executablePath`。可用它让一个配置文件运行在 Chrome 中,另一个运行在 Brave 中。
- `existing-session` 配置文件保留当前 Chrome MCP 路由限制:使用基于 snapshot / ref 的操作,而不是 CSS 选择器定位;单文件上传钩子;不支持对话框超时覆盖;不支持 `wait --load networkidle`;也不支持 `responsebody`、PDF 导出、下载拦截或批量操作。
- 本地托管的 `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`、窗口大小设置或调试标志)。
- `browser.executablePath` 接受表示你的操作系统主目录的 `~`
- 控制服务:仅限 loopback端口从 `gateway.port` 派生,默认 `18791`)。
- `extraArgs` 会为本地 Chromium 启动追加额外的启动标志(例如
`--disable-gpu`、窗口尺寸设置或调试标志)。
---
@ -241,8 +279,8 @@ provider / base-URL 设置已移至专用页面——请参阅
}
```
- `seamColor`:原生应用 UI 外的强调色Talk 模式气泡色调等)。
- `assistant`Control UI 身份覆盖。会回退到活动智能体身份。
- `seamColor`:原生应用 UI 外的强调色Talk 模式气泡色调等)。
- `assistant`Control UI 身份覆盖。会回退到当前活动智能体身份。
---
@ -289,20 +327,20 @@ provider / base-URL 设置已移至专用页面——请参阅
// password: "your-password",
},
trustedProxies: ["10.0.0.1"],
// 可选。默认 false。
// Optional. Default false.
allowRealIpFallback: false,
nodes: {
pairing: {
// 可选。默认未设置 / 禁用。
// Optional. Default unset/disabled.
autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"],
},
allowCommands: ["canvas.navigate"],
denyCommands: ["system.run"],
},
tools: {
// 额外的 /tools/invoke HTTP deny
// Additional /tools/invoke HTTP denies
deny: ["browser"],
// 从默认 HTTP deny 列表中移除工具
// Remove tools from the default HTTP deny list
allow: ["gateway"],
},
push: {
@ -317,53 +355,59 @@ provider / base-URL 设置已移至专用页面——请参阅
}
```
<Accordion title="Gateway 网关字段详情">
<Accordion title="Gateway 网关 字段详情">
- `mode``local`(运行 gateway`remote`(连接到远程 gateway)。除非为 `local`,否则 Gateway 网关会拒绝启动。
- `port`WS + HTTP 复用的单一端口。优先级:`--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`
- `mode``local`(运行 Gateway 网关)或 `remote`(连接到远程 Gateway 网关)。除非为 `local`,否则 Gateway 网关 会拒绝启动。
- `port`用于 WS + HTTP 的单一复用端口。优先级:`--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`
- `bind``auto`、`loopback`(默认)、`lan``0.0.0.0`)、`tailnet`(仅 Tailscale IP`custom`
- **旧版 bind 别名**:请在 `gateway.bind` 中使用 bind 模式值(`auto`、`loopback`、`lan`、`tailnet`、`custom`),不要使用主机别名(`0.0.0.0`、`127.0.0.1`、`localhost`、`::`、`::1`)。
- **Docker 注意事项**:默认的 `loopback` bind 会在容器内监听 `127.0.0.1`。使用 Docker bridge 网络(`-p 18789:18789`)时,流量会到达 `eth0`,因此 gateway 无法访问。请使用 `--network host`,或设置 `bind: "lan"`(或设置 `bind: "custom"` 并配合 `customBindHost: "0.0.0.0"`)以监听所有接口。
- **Auth**:默认必需。非 loopback bind 需要 gateway auth。实际意味着共享 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"`:将 auth 委托给身份感知型反向代理,并信任来自 `gateway.trustedProxies` 的身份标头(参见 [Trusted Proxy Auth](/zh-CN/gateway/trusted-proxy-auth))。此模式要求使用**非 loopback** 的代理来源;同主机 loopback 反向代理不满足 trusted-proxy auth 要求。
- `gateway.auth.allowTailscale`:为 `true`Tailscale Serve 身份标头可满足 Control UI / WebSocket auth通过 `tailscale whois` 验证。HTTP API 端点**不会**使用该 Tailscale 标头 auth它们仍遵循 gateway 的常规 HTTP auth 模式。此无 token 流程假定 gateway 主机是受信任的。当 `tailscale.mode = "serve"` 时默认值为 `true`
- `gateway.auth.rateLimit`:可选的认证失败限制器。按客户端 IP 和 auth 范围生效(共享密钥和 device-token 会分别跟踪)。被阻止的尝试会返回 `429` + `Retry-After`
- 在异步 Tailscale Serve Control UI 路径中,同一 `{scope, clientIp}` 的失败尝试会在写入失败记录前被串行化。因此,同一客户端的并发错误尝试可能会在第二个请求时触发限制器,而不是两个请求都竞态通过并仅表现为普通不匹配。
- `gateway.auth.rateLimit.exemptLoopback` 默认为 `true`;当你有意也要对 localhost 流量进行速率限制时(例如测试设置或严格代理部署),请设为 `false`
- 来自浏览器源的 WS auth 尝试始终会启用限流,且关闭 loopback 豁免(作为针对基于浏览器的 localhost 暴力破解的纵深防御)。
- 在 loopback 上,这些来自浏览器源的锁定会按标准化后的 `Origin` 值隔离,因此来自某个 localhost origin 的重复失败不会自动锁定另一个 origin。
- `tailscale.mode``serve`(仅 tailnetloopback bind`funnel`(公开,需要 auth
- `controlUi.allowedOrigins`:用于 Gateway 网关 WebSocket 连接的显式浏览器 origin 允许列表。当预期浏览器客户端来自非 loopback origin 时必须设置。
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`:危险模式,为有意依赖 Host 标头 origin 策略的部署启用 Host 标头 origin 回退。
- **旧版 bind 别名**:在 `gateway.bind` 中使用 bind 模式值(`auto`、`loopback`、`lan`、`tailnet`、`custom`),不要使用主机别名(`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"`)以在所有接口上监听。
- **Auth**:默认必须启用。非 loopback 绑定要求 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 auth 要求。
- `gateway.auth.allowTailscale`:为 `true`Tailscale Serve 身份标头可满足 Control UI / WebSocket 认证(通过 `tailscale whois` 验证。HTTP API 端点**不会**使用该 Tailscale 标头认证;它们仍遵循 Gateway 网关 的常规 HTTP 认证模式。当 `tailscale.mode = "serve"` 时默认值为 `true`。这种无 token 流程假定 Gateway 网关 所在主机可信。
- `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 源的重复失败不会自动
锁定另一个源。
- `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`:客户端进程环境变量级别的紧急放行覆盖,允许对受信任私有网络 IP 使用明文 `ws://`;默认仍然只允许对 loopback 使用明文。没有对应的 `openclaw.json` 配置项,且诸如 `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` 之类的浏览器私有网络配置不会影响 Gateway 网关 WebSocket 客户端。
- `gateway.remote.token` / `.password` 是远程客户端凭证字段。它们本身不会配置 gateway auth。
- `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`:按渠道禁用健康监控重启,同时保留全局监控启用。
- `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 / 浏览器 / Control UI / WebChat 配对,也不会自动批准角色、作用域、元数据或公钥升级。
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`:在配对和允许列表评估之后,对已声明节点命令进行全局允许 / 拒绝整形。
- `gateway.tools.deny`:对 HTTP `POST /tools/invoke` 额外阻止的工具名称(扩展默认 deny 列表)。
- `gateway.tools.allow`:从默认 HTTP deny 列表中移除工具名称。
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`:客户端进程环境变量中的紧急放行覆盖,允许对可信私有网络
IP 使用明文 `ws://`;默认情况下,明文仍然仅限 loopback。没有对应的 `openclaw.json`
配置项,且诸如
`browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` 之类的浏览器私有网络配置不会影响 Gateway 网关
WebSocket 客户端。
- `gateway.remote.token` / `.password` 是远程客户端凭证字段。它们本身不会配置 Gateway 网关 认证。
- `gateway.push.apns.relay.baseUrl`:官方 / TestFlight iOS 构建在将基于 relay 的注册发布到 Gateway 网关 后,供其使用的外部 APNs relay 的基础 HTTPS URL。此 URL 必须与编译进 iOS 构建中的 relay URL 一致。
- `gateway.push.apns.relay.timeoutMs`Gateway 网关 到 relay 的发送超时时间(毫秒)。默认值为 `10000`
- 基于 relay 的注册会委托给某个特定的 Gateway 网关 身份。配对的 iOS 应用会获取 `gateway.identity.get`,将该身份包含在 relay 注册中,并将一个按注册范围划分的发送授权转发给 Gateway 网关。其他 Gateway 网关 无法复用这个已存储的注册。
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`:上述 relay 配置的临时环境变量覆盖。
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`:仅用于开发的例外开关,可为 loopback HTTP relay URL 放行。生产环境的 relay URL 应保持为 HTTPS。
- `gateway.channelHealthCheckMinutes`:渠道健康监控间隔(分钟)。设为 `0` 可全局禁用健康监控重启。默认值:`5`。
- `gateway.channelStaleEventThresholdMinutes`:陈旧套接字阈值(分钟)。应保持大于或等于 `gateway.channelHealthCheckMinutes`。默认值:`30`。
- `gateway.channelMaxRestartsPerHour`:每个渠道 / 账户在滚动一小时内允许的最大健康监控重启次数。默认值:`10`。
- `channels.<provider>.healthMonitor.enabled`:在保持全局监控启用的情况下,按渠道选择退出健康监控重启。
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`:多账户渠道的按账户覆盖。设置后,它会优先于渠道级覆盖。
- 本地 Gateway 网关 调用路径仅在 `gateway.auth.*` 未设置时才可将 `gateway.remote.*` 用作回退。
- 如果通过 SecretRef 显式配置了 `gateway.auth.token` / `gateway.auth.password` 且无法解析,则解析会以关闭方式失败(不会被远程回退掩盖)。
- `trustedProxies`:终止 TLS 或注入转发客户端标头的反向代理 IP。只列出你控制的代理。loopback 条目对于同主机代理 / 本地检测设置仍然有效(例如 Tailscale Serve 或本地反向代理),但它们**不会**让 loopback 请求有资格使用 `gateway.auth.mode: "trusted-proxy"`
- `allowRealIpFallback`:为 `true` 时,如果缺少 `X-Forwarded-For`Gateway 网关 会接受 `X-Real-IP`。默认值为 `false`,以实现失败即关闭的行为。
- `gateway.nodes.pairing.autoApproveCidrs`:可选的 CIDR / IP 允许列表,用于自动批准首次节点设备配对,且该配对没有请求任何作用域。未设置时为禁用状态。它不会自动批准 operator / browser / Control UI / WebChat 配对,也不会自动批准角色、作用域、元数据或公钥升级。
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`:在完成配对和允许列表评估之后,对已声明节点命令进行全局允许 / 拒绝整形。
- `gateway.tools.deny`:为 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`
@ -372,11 +416,11 @@ provider / base-URL 设置已移至专用页面——请参阅
空允许列表会被视为未设置;请使用 `gateway.http.endpoints.responses.files.allowUrl=false`
和 / 或 `gateway.http.endpoints.responses.images.allowUrl=false` 来禁用 URL 抓取。
- 可选的响应加固标头:
- `gateway.http.securityHeaders.strictTransportSecurity`(仅对你控制的 HTTPS origin 设置;参见 [Trusted Proxy Auth](/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)
### 多实例隔离
一台主机上运行多个 gateways 时,请使用唯一的端口和状态目录:
同一主机上运行多个 Gateway 网关,并使用唯一端口和状态目录:
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
@ -386,7 +430,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`
@ -404,10 +448,10 @@ openclaw gateway --port 19001
}
```
- `enabled`:在 gateway 监听器上启用 TLS 终止HTTPS / WSS默认`false`)。
- `autoGenerate`当未配置显式文件时,自动生成本地自签名证书 / 密钥对;仅用于本地 / 开发环境。
- `enabled`:在 Gateway 网关 监听器处启用 TLS 终止HTTPS / WSS默认值`false`)。
- `autoGenerate`在未配置显式文件时自动生成本地自签名 cert / key 对;仅用于本地 / 开发环境。
- `certPath`TLS 证书文件的文件系统路径。
- `keyPath`TLS 私钥文件的文件系统路径;请限制文件权限。
- `keyPath`TLS 私钥文件的文件系统路径;应保持权限受限。
- `caPath`:可选的 CA bundle 路径,用于客户端验证或自定义信任链。
### `gateway.reload`
@ -424,13 +468,13 @@ openclaw gateway --port 19001
}
```
- `mode`:控制如何在运行时应用配置编辑
- `mode`:控制配置编辑在运行时如何应用
- `"off"`:忽略实时编辑;更改需要显式重启。
- `"restart"`:配置变更时始终重启 gateway 进程。
- `"hot"`:在不重启的情况下于进程内应用更改。
- `"hybrid"`(默认):先尝试热重载;如有需要则回退重启。
- `debounceMs`在应用配置更改前的防抖窗口(毫秒,非负整数)。
- `deferralTimeoutMs`:在强制重启前,等待进行中操作完成的最长时间(毫秒,默认`300000` = 5 分钟)。
- `"restart"`:配置更改时始终重启 Gateway 网关 进程。
- `"hot"`:在进程内应用更改而不重启
- `"hybrid"`(默认):先尝试热重载;如有需要则回退重启。
- `debounceMs`应用配置更改前的防抖窗口(毫秒)(非负整数)。
- `deferralTimeoutMs`:在强制重启前等待进行中操作的最长时间(毫秒)(默认值`300000` = 5 分钟)。
---
@ -468,46 +512,46 @@ openclaw gateway --port 19001
```
认证:`Authorization: Bearer <token>` 或 `x-openclaw-token: <token>`
拒绝使用查询字符串 hook token。
拒绝查询字符串中的 hook token。
验证安全说明:
验证安全说明:
- `hooks.enabled=true` 要求 `hooks.token` 为非空。
- `hooks.token` 必须与 `gateway.auth.token` **不同**;复用 Gateway 网关 token 会被拒绝。
- `hooks.path` 不能为 `/`;请使用专用子路径,例如 `/hooks`
- 如果 `hooks.allowRequestSessionKey=true`,请约束 `hooks.allowedSessionKeyPrefixes`(例如 `["hook:"]`)。
- 如果某个映射或预设使用模板化 `sessionKey`,请设置 `hooks.allowedSessionKeyPrefixes``hooks.allowRequestSessionKey=true`。静态映射键不需要显式启用。
- 如果某个映射或 preset 使用模板化的 `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`
- 经过模板渲染的映射 `sessionKey` 值会被视为外部提供,因此同样要求 `hooks.allowRequestSessionKey=true`
<Accordion title="映射详情">
- `match.path` 匹配 `/hooks` 之后的子路径(例如 `/hooks/gmail``gmail`)。
- `match.source` 匹配通用路径的某个负载字段。
- 像 `{{messages[0].subject}}` 这样的模板会从负载中读取。
- `transform` 可以指向一个返回 hook action 的 JS / TS 模块。
- `transform.module` 必须是相对路径,并且必须位于 `hooks.transformsDir`(绝对路径和路径穿越会被拒绝)。
- `agentId` 路由到特定智能体;未知 ID 会回退到默认值。
- `allowedAgentIds`:限制显式路由(`*` 或省略 = 允许全部`[]` = 全部拒绝)。
- `defaultSessionKey`:可选的固定会话键,用于没有显式 `sessionKey` 的 hook 智能体运行。
- `allowRequestSessionKey`:允许 `/hooks/agent` 调用方以及模板驱动的映射会话键设置 `sessionKey`(默认:`false`)。
- `allowedSessionKeyPrefixes`:显式 `sessionKey` 值(请求 + 映射)的可选前缀允许列表,例如 `["hook:"]`。当任意映射或预设使用模板化 `sessionKey` 时,它将成为必需项。
- `deliver: true` 会将最终回复发送到某个渠道;`channel` 默认`last`
- `model`覆盖此次 hook 运行使用的 LLM若设置了模型目录则该模型必须被允许)。
- `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如果设置了模型目录必须被允许)。
</Accordion>
### Gmail 集成
- 内置 Gmail 预设使用 `sessionKey: "hook:gmail:{{messages[0].id}}"`
- 如果你保留这种按消息路由方式,请设置 `hooks.allowRequestSessionKey: true`,并将 `hooks.allowedSessionKeyPrefixes` 约束为匹配 Gmail 命名空间,例如 `["hook:", "hook:gmail:"]`
- 如果你需要 `hooks.allowRequestSessionKey: false`,请用静态 `sessionKey` 覆盖预设,而不是使用默认的模板化值。
- 内置 Gmail preset 使用 `sessionKey: "hook:gmail:{{messages[0].id}}"`
- 如果你保留这种按消息路由方式,请设置 `hooks.allowRequestSessionKey: true`,并将 `hooks.allowedSessionKeyPrefixes` 约束为与 Gmail 命名空间匹配,例如 `["hook:", "hook:gmail:"]`
- 如果你需要 `hooks.allowRequestSessionKey: false`,请用静态 `sessionKey` 覆盖该 preset而不是使用模板化默认值。
```json5
{
@ -530,8 +574,8 @@ openclaw gateway --port 19001
}
```
- 配置后Gateway 网关会在启动时自动启动 `gog gmail watch serve`。设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 可禁用。
- 不要在 Gateway 网关之外另外运行一个独立的 `gog gmail watch serve`
- 配置后Gateway 网关 会在启动时自动启动 `gog gmail watch serve`。设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 可禁用。
- 不要在 Gateway 网关 旁边单独运行另一个 `gog gmail watch serve`
---
@ -547,18 +591,18 @@ 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 网关认证token / password / trusted-proxy与其他 Gateway 网关 HTTP 面相同
- 节点 WebView 通常不会发送认证标头;节点配对并连接后Gateway 网关会为 canvas / A2UI 访问公布节点作用域 capability URL。
- Capability URL 绑定到活动节点 WS 会话,并且过期很快。不使用基于 IP 的回退。
- 会向所提供的 HTML 注入实时重载客户端。
- 仅本地:保持 `gateway.bind: "loopback"`(默认)。
- 非 loopback 绑定canvas 路由与其他 Gateway 网关 HTTP 面相同,要求 Gateway 网关 认证token / password / trusted-proxy
- 节点 WebView 通常不会发送认证标头;节点完成配对并连接后Gateway 网关 会为 canvas / A2UI 访问公布节点作用域的能力 URL。
- 能力 URL 绑定到当前活动的节点 WS 会话,并且会很快过期。不使用基于 IP 的回退。
- 会向所提供的 HTML 注入实时重载客户端。
- 为空时会自动创建初始 `index.html`
- 也会在 `/__openclaw__/a2ui/` 提供 A2UI。
- 更改需要重启 gateway
- 对于大型目录或出现 `EMFILE` 错误,请禁用实时重载。
- 更改需要重启 Gateway 网关
- 对于大型目录或 `EMFILE` 错误,请禁用实时重载。
---
@ -590,7 +634,7 @@ openclaw gateway --port 19001
}
```
会在 `~/.openclaw/dns/` 下写入单播 DNS-SD 区域。对于跨网络设备发现,请配 DNS 服务器(推荐 CoreDNS+ Tailscale split DNS 使用
会在 `~/.openclaw/dns/` 下写入一个单播 DNS-SD 区域。对于跨网络设备发现,请配 DNS 服务器(推荐 CoreDNS+ Tailscale split DNS。
设置:`openclaw dns setup --apply`。
@ -615,10 +659,10 @@ openclaw gateway --port 19001
}
```
- 只有进程环境中缺少该键时,才会应用内联环境变量。
- 只有进程环境中缺少该键时,才会应用内联环境变量。
- `.env` 文件:当前工作目录 `.env` + `~/.openclaw/.env`(两者都不会覆盖现有变量)。
- `shellEnv`:从你的登录 shell 配置文件导入缺失的预期键名。
- 完整优先级请参阅[环境](/zh-CN/help/environment)。
- `shellEnv`:从你的登录 shell 配置文件导入缺失的预期键名。
- 完整优先级请参见 [环境](/zh-CN/help/environment)。
### 环境变量替换
@ -632,20 +676,20 @@ openclaw gateway --port 19001
}
```
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`。
- 缺失 / 为空的变量会在加载配置时报错
- 仅匹配大写名称:`[A-Z_][A-Z0-9_]*`。
- 缺失 / 为空的变量会在配置加载时抛出错误
- 使用 `$${VAR}` 可转义为字面量 `${VAR}`
- 可与 `$include` 配合使用。
- 可与 `$include` 一起使用。
---
## Secrets
SecretRef 是增量支持的:明文值仍然可用。
SecretRef 是增量的:明文值仍然可用。
### `SecretRef`
使用一种对象形状:
使用如下对象形状:
```json5
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
@ -655,17 +699,17 @@ SecretRef 是增量支持的:明文值仍然可用。
- `provider` 模式:`^[a-z][a-z0-9_-]{0,63}$`
- `source: "env"` 的 id 模式:`^[A-Z][A-Z0-9_]{0,127}$`
- `source: "file"` 的 id绝对 JSON pointer(例如 `"/providers/openai/apiKey"`
- `source: "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)
- `secrets apply` 面向受支持的 `openclaw.json` 凭证路径。
- `auth-profiles.json` 中的 ref 也包含在运行时解析和审计覆盖范围中
- `auth-profiles.json` 中的引用已纳入运行时解析和审计覆盖范围
### Secret providers 配置
### Secret 提供商配置
```json5
{
@ -695,18 +739,18 @@ SecretRef 是增量支持的:明文值仍然可用。
说明:
- `file` provider 支持 `mode: "json"``mode: "singleValue"`(在 `singleValue` 模式下,`id` 必须为 `"value"`)。
- 当 Windows ACL 验证不可用时,文件和 exec provider 路径会以关闭失败方式处理。仅对无法验证但受信任的路径设置 `allowInsecurePath: true`
- `exec` provider 要求使用绝对 `command` 路径,并通过 stdin / stdout 传输协议负载
- 默认情况下,符号链接命令路径会被拒绝。设置 `allowSymlinkCommand: true` 可允许符号链接路径,同时仍会验证解析后的目标路径。
- 如果配置了 `trustedDirs`,则受信任目录检查会应用到解析后的目标路径。
- 默认情况下,`exec` 子进程环境最小化;请通过 `passEnv` 显式传递所需变量。
- Secret ref 会在激活时解析为内存快照,之后请求路径只读取该快照。
- 激活期间会应用活动面过滤:启用表面上的未解析 ref 会导致启动 / 重载失败,而非活动表面会被跳过并给出诊断信息。
- `file` 提供商支持 `mode: "json"``mode: "singleValue"`(在 singleValue 模式下,`id` 必须为 `"value"`)。
- 当无法验证 Windows ACL 时file 和 exec 提供商路径会以关闭方式失败。仅对无法验证但可信的路径设置 `allowInsecurePath: true`
- `exec` 提供商要求使用绝对 `command` 路径,并通过 stdin / stdout 上的协议负载进行通信
- 默认情况下,会拒绝符号链接命令路径。设置 `allowSymlinkCommand: true` 可允许符号链接路径,同时验证解析后的目标路径。
- 如果配置了 `trustedDirs`,则可信目录检查会应用于解析后的目标路径。
- 默认情况下,`exec` 子进程环境最小化;请通过 `passEnv` 显式传递所需变量。
- Secret 引用会在激活时解析为内存中的快照,之后请求路径只会读取该快照。
- 激活期间会应用活动面过滤:已启用面上的未解析引用会导致启动 / 重载失败,而非活动面则会被跳过并给出诊断信息。
---
## 凭证存储
## Auth 存储
```json5
{
@ -724,13 +768,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` 条目时会进行清理。
- 每个智能体的 profile 存储在 `<agentDir>/auth-profiles.json`
- `auth-profiles.json` 对静态凭证模式支持值级引用(`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)。
- 请参 [OAuth](/zh-CN/concepts/oauth)。
- Secrets 运行时行为以及 `audit/configure/apply` 工具:参见 [Secrets Management](/zh-CN/gateway/secrets)。
### `auth.cooldowns`
@ -752,15 +796,20 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `billingBackoffHours`:当某个 profile 因真实的计费 / 余额不足错误而失败时的基础退避时长(小时,默认:`5`)。即使在 `401` / `403` 响应上,明确的计费文本仍可能归入这里,但 provider 特定的文本匹配器仍只作用于拥有它们的 provider例如 OpenRouter 的 `Key limit exceeded`)。可重试的 HTTP `402` 用量窗口或 organization / workspace 支出限制消息,则仍归入 `rate_limit` 路径。
- `billingBackoffHoursByProvider`:可选的按 provider 覆盖的计费退避时长(小时)。
- `billingMaxHours`:计费退避指数增长的上限(小时,默认:`24`)。
- `authPermanentBackoffMinutes`:高置信度 `auth_permanent` 失败的基础退避时长(分钟,默认:`10`)。
- `authPermanentMaxMinutes``auth_permanent` 退避增长的上限(分钟,默认:`60`)。
- `failureWindowHours`:用于退避计数器的滚动窗口(小时,默认:`24`)。
- `overloadedProfileRotations`:对于过载错误,在切换到模型回退之前,同一 provider 内允许的最大 auth-profile 轮换次数(默认:`1`)。诸如 `ModelNotReadyException` 这样的 provider 忙碌形态归入这里。
- `overloadedBackoffMs`:在重试某个过载的 provider / profile 轮换之前的固定延迟(毫秒,默认:`0`)。
- `rateLimitedProfileRotations`:对于速率限制错误,在切换到模型回退之前,同一 provider 内允许的最大 auth-profile 轮换次数(默认:`1`)。该 rate-limit 类别包括 provider 形态的文本,例如 `Too many concurrent requests`、`ThrottlingException`、`concurrency limit reached`、`workers_ai ... quota limit exceeded` 和 `resource exhausted`
- `billingBackoffHours`:当某个 profile 因真实的
账单 / 余额不足错误而失败时的基础回退时间(小时)(默认:`5`)。即使在 `401` / `403` 响应上,显式的账单文本
也仍可能归入这里,但提供商特定的文本
匹配器仍仅限于拥有它们的提供商(例如 OpenRouter 的
`Key limit exceeded`)。可重试的 HTTP `402` 使用窗口或
organization / workspace 支出上限消息则仍归入 `rate_limit` 路径。
- `billingBackoffHoursByProvider`:账单回退小时数的可选按提供商覆盖。
- `billingMaxHours`:账单回退指数增长的小时上限(默认:`24`)。
- `authPermanentBackoffMinutes`:高置信度 `auth_permanent` 失败的基础回退时间(分钟)(默认:`10`)。
- `authPermanentMaxMinutes``auth_permanent` 回退增长的分钟上限(默认:`60`)。
- `failureWindowHours`:用于回退计数器的滚动时间窗口(小时)(默认:`24`)。
- `overloadedProfileRotations`:对于过载错误,在切换到模型回退之前,同一提供商 auth-profile 的最大轮换次数(默认:`1`)。像 `ModelNotReadyException` 这样的提供商忙碌形态会归入这里。
- `overloadedBackoffMs`:在重试过载的提供商 / profile 轮换前的固定延迟(默认:`0`)。
- `rateLimitedProfileRotations`:对于限流错误,在切换到模型回退之前,同一提供商 auth-profile 的最大轮换次数(默认:`1`)。该限流桶包括提供商形态的文本,例如 `Too many concurrent requests`、`ThrottlingException`、`concurrency limit reached`、`workers_ai ... quota limit exceeded` 和 `resource exhausted`
---
@ -781,12 +830,12 @@ SecretRef 是增量支持的:明文值仍然可用。
- 默认日志文件:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`。
- 设置 `logging.file` 可使用稳定路径。
- 使用 `--verbose` 时,`consoleLevel` 会提升 `debug`
- `maxFileBytes`:在抑制写入前允许的最大日志文件大小(字节,正整数;默认:`524288000` = 500 MB。生产部署请使用外部日志轮转。
- 使用 `--verbose` 时,`consoleLevel` 会提升 `debug`
- `maxFileBytes`:在抑制写入之前允许的最大日志文件大小(字节)(正整数;默认:`524288000` = 500 MB。生产部署请使用外部日志轮转。
---
## Diagnostics
## 诊断
```json5
{
@ -827,21 +876,21 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `enabled`instrumentation 输出总开关(默认:`true`)。
- `flags`:启用定向日志输出的标志字符串数组(支持 `"telegram.*"``"*"` 这样的通配符)。
- `stuckSessionWarnMs`:当会话仍处于处理中状态时,发出卡住会话警告的时长阈值(毫秒)。
- `otel.enabled`:启用 OpenTelemetry 导出管线(默认:`false`)。
- `otel.endpoint`OTel 导出的 collector URL。
- `enabled`instrumentation 输出总开关(默认:`true`)。
- `flags`用于启用定向日志输出的标志字符串数组(支持通配符,如 `"telegram.*"``"*"`)。
- `stuckSessionWarnMs`:当会话保持在处理中状态时,用于发出卡住会话警告的年龄阈值(毫秒)。
- `otel.enabled`:启用 OpenTelemetry 导出管(默认:`false`)。
- `otel.endpoint`用于 OTel 导出的 collector URL。
- `otel.protocol``"http/protobuf"`(默认)或 `"grpc"`
- `otel.headers`:随 OTel 导出请求发送的额外 HTTP / gRPC 元数据标头。
- `otel.serviceName`:资源属性使用的服务名。
- `otel.serviceName`:资源属性的服务名
- `otel.traces` / `otel.metrics` / `otel.logs`:启用 trace、metrics 或 log 导出。
- `otel.sampleRate`trace 采样率 `0``1`
- `otel.sampleRate``0``1` 的 trace 采样率。
- `otel.flushIntervalMs`:定期刷新 telemetry 的间隔(毫秒)。
- `otel.captureContent`显式启用用于 OTEL span 属性的原始内容捕获。默认关闭。布尔值 `true` 会捕获非 system 的消息 / 工具内容;对象形式则允许你显式启用 `inputMessages`、`outputMessages`、`toolInputs`、`toolOutputs` 和 `systemPrompt`
- `otel.captureContent`为 OTEL span 属性选择性启用原始内容捕获。默认关闭。布尔值 `true` 会捕获非 system 消息 / 工具内容;对象形式可让你显式启用 `inputMessages`、`outputMessages`、`toolInputs`、`toolOutputs` 和 `systemPrompt`
- `cacheTrace.enabled`:为嵌入式运行记录缓存跟踪快照(默认:`false`)。
- `cacheTrace.filePath`:缓存跟踪 JSONL 的输出路径(默认:`$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`)。
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`:控制缓存跟踪输出包含哪些内容(默认全为 `true`)。
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`:控制缓存跟踪输出包含哪些内容(默认全`true`)。
---
@ -863,12 +912,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`)。
---
@ -901,21 +950,21 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `enabled`:全局 ACP 功能门控(默认:`false`)。
- `dispatch.enabled`ACP 会话轮次分发的独立门控(默认:`true`)。设为 `false` 可在阻止执行的同时保留 ACP 命令可用。
- `backend`:默认 ACP 运行时 backend id必须匹配已注册的 ACP 运行时插件)。
- `defaultAgent`:当 spawn 未指定显式目标时ACP 目标智能体 id 的回退值
- `allowedAgents`:允许用于 ACP 运行时会话的智能体 id 允许列表;为空表示没有额外限制。
- `maxConcurrentSessions`:同时处于活动状态的 ACP 会话最大数量。
- `enabled`:全局 ACP 功能开关(默认:`false`)。
- `dispatch.enabled`ACP 会话轮次分发的独立开关(默认:`true`)。设为 `false` 可在阻止执行的同时保留 ACP 命令可用。
- `backend`:默认 ACP 运行时后端 id必须匹配已注册的 ACP 运行时插件)。
- `defaultAgent`:当派生运行未指定显式目标时使用的 ACP 目标智能体 id
- `allowedAgents`:允许用于 ACP 运行时会话的智能体 id 列表;空值表示无额外限制。
- `maxConcurrentSessions`:同时活跃的 ACP 会话最大数量。
- `stream.coalesceIdleMs`:流式文本的空闲合并刷新窗口(毫秒)。
- `stream.maxChunkChars`:拆分流式分块投影前允许的最大块大小。
- `stream.maxChunkChars`:拆分流式分块投影前的最大块大小。
- `stream.repeatSuppression`:每轮抑制重复的状态 / 工具行(默认:`true`)。
- `stream.deliveryMode``"live"` 表示增量流式输出;`"final_only"` 表示缓冲到轮次终结事件后再输出。
- `stream.hiddenBoundarySeparator`隐藏工具事件之后、可见文本之前使用的分隔符(默认:`"paragraph"`)。
- `stream.maxOutputChars`:每个 ACP 轮次允许投影的最大助手输出字符数。
- `stream.maxSessionUpdateChars`:投影 ACP 状态 / 更新行允许的最大字符数。
- `stream.tagVisibility`记录 tag 名称到布尔可见性覆盖的映射,用于流式事件。
- `runtime.ttlMinutes`ACP 会话 worker 在可被清理前的空闲 TTL分钟
- `stream.deliveryMode``"live"` 逐步流式输出;`"final_only"` 则缓冲到轮次终止事件时再输出。
- `stream.hiddenBoundarySeparator`:隐藏工具事件之后、可见文本之前的分隔符(默认:`"paragraph"`)。
- `stream.maxOutputChars`:每个 ACP 轮次投影的助手输出最大字符数。
- `stream.maxSessionUpdateChars`:投影 ACP 状态 / 更新行的最大字符数。
- `stream.tagVisibility`标签名称到布尔可见性覆盖的记录,用于流式事件。
- `runtime.ttlMinutes`ACP 会话工作进程在可被清理前的空闲 TTL分钟
- `runtime.installCommand`:在引导 ACP 运行时环境时执行的可选安装命令。
---
@ -932,11 +981,11 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `cli.banner.taglineMode` 控制 banner 标语样式:
- `cli.banner.taglineMode` 控制横幅标语样式:
- `"random"`(默认):轮换的有趣 / 季节性标语。
- `"default"`:固定的中性标语(`All your chats, one OpenClaw.`)。
- `"off"`:不显示标语文本(仍显示 banner 标题 / 版本)。
- 若要隐藏整个 banner而不仅是标语),请设置环境变量 `OPENCLAW_HIDE_BANNER=1`
- `"off"`:不显示标语文本(仍会显示横幅标题 / 版本)。
- 若要隐藏整个横幅(而不仅仅是标语),请设置环境变量 `OPENCLAW_HIDE_BANNER=1`
---
@ -960,15 +1009,15 @@ SecretRef 是增量支持的:明文值仍然可用。
## 身份
请参阅[智能体默认值](/zh-CN/gateway/config-agents#agent-defaults)中的 `agents.list` 身份字段。
请参见 [智能体默认值](/zh-CN/gateway/config-agents#agent-defaults) 下 `agents.list`身份字段。
---
## Bridge 协议(旧版节点,历史参考)(旧版,已移除)
## Bridge protocol(旧版节点,历史参考)(旧版,已移除)
当前构建已不再包含 TCP bridge。节点通过 Gateway 网关 WebSocket 连接。`bridge.*` 键已不再属于配置 schema 的一部分(在移除前会导致验证失败;`openclaw doctor --fix` 可以移除未知键)。
当前构建已不再包含 TCP Bridge protocol旧版节点历史参考。节点通过 Gateway 网关 WebSocket 连接。`bridge.*` 键已不再属于配置 schema 的一部分(在移除之前,验证会失败;`openclaw doctor --fix` 可以清除未知键)。
<Accordion title="旧版 bridge 配置(历史参考)">
<Accordion title="旧版 Bridge protocol旧版节点历史参考配置(历史参考)">
```json
{
@ -1006,11 +1055,11 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `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` 的存储作业
- `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若省略则不会发送 auth 标头。
- `webhook`:已弃用的旧版回退 webhook URLhttp / https仅用于仍带有 `notify: true` 的已存储任务
### `cron.retry`
@ -1026,11 +1075,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`
@ -1048,11 +1097,11 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- `enabled`启用 cron 作业失败告警(默认:`false`)。
- `after`连续失败多少次后触发告警(正整数,最小值:`1`)。
- `cooldownMs`:同一作业重复告警之间的最小间隔(毫秒,非负整数)。
- `mode`交付模式——`"announce"` 通过渠道消息发送;`"webhook"` 向已配置的 webhook 发起 POST
- `accountId`:用于限定告警交付范围的可选账号或渠道 id。
- `enabled`为 cron 任务启用失败告警(默认:`false`)。
- `after`在触发告警前的连续失败次数(正整数,最小值:`1`)。
- `cooldownMs`:同一任务重复告警之间的最小间隔(毫秒)(非负整数)。
- `mode`投递模式 —— `"announce"` 通过渠道消息发送;`"webhook"` 则 POST 到已配置的 webhook
- `accountId`:用于限定告警投递范围的可选账户或渠道 id。
### `cron.failureDestination`
@ -1069,16 +1118,16 @@ SecretRef 是增量支持的:明文值仍然可用。
}
```
- 所有作业共用的 cron 失败通知默认目标。
- 所有任务共用的 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"`
- `channel`announce 投递的渠道覆盖。`"last"` 会复用最后一次已知的投递渠道。
- `to`:显式 announce 目标或 webhook URL。在 webhook 模式下为必填项
- `accountId`投递的可选账户覆盖。
- 每个任务`delivery.failureDestination` 会覆盖这个全局默认值。
- 当既未设置全局失败目标,也未设置每任务失败目标时,已通过 `announce` 投递的任务会在失败时回退到其主 announce 目标。
- `delivery.failureDestination``sessionTarget="isolated"` 的任务受支持,除非该任务的主 `delivery.mode` `"webhook"`
请参阅 [Cron Jobs](/zh-CN/automation/cron-jobs)。隔离的 cron 执行会作为[后台任务](/zh-CN/automation/tasks)进行跟踪。
请参见 [Cron 任务](/zh-CN/automation/cron-jobs)。隔离的 cron 执行会作为[后台任务](/zh-CN/automation/tasks)进行跟踪。
---
@ -1086,28 +1135,28 @@ SecretRef 是增量支持的:明文值仍然可用。
`tools.media.models[].args` 中展开的模板占位符:
| 变量 | 描述 |
| ------------------ | ------------------------------------------------- |
| `{{Body}}` | 完整的入站消息正文 |
| `{{RawBody}}` | 原始正文(无历史记录 / 发送者包装) |
| Variable | 描述 |
| ------------------ | ---- |
| `{{Body}}` | 完整的入站消息正文 |
| `{{RawBody}}` | 原始正文(无历史记录 / 发送者包装) |
| `{{BodyStripped}}` | 去除群组提及后的正文 |
| `{{From}}` | 发送者标识符 |
| `{{To}}` | 目标标识符 |
| `{{MessageSid}}` | 渠道消息 id |
| `{{SessionId}}` | 当前会话 UUID |
| `{{From}}` | 发送者标识符 |
| `{{To}}` | 目标标识符 |
| `{{MessageSid}}` | 渠道消息 id |
| `{{SessionId}}` | 当前会话 UUID |
| `{{IsNewSession}}` | 新建会话时为 `"true"` |
| `{{MediaUrl}}` | 入站媒体伪 URL |
| `{{MediaPath}}` | 本地媒体路径 |
| `{{MediaType}}` | 媒体类型image / audio / document / …) |
| `{{Transcript}}` | 音频转录文本 |
| `{{Prompt}}` | 为 CLI 条目解析后的媒体提示词 |
| `{{MaxChars}}` | 为 CLI 条目解析后的最大输出字符数 |
| `{{ChatType}}` | `"direct"``"group"` |
| `{{MediaUrl}}` | 入站媒体伪 URL |
| `{{MediaPath}}` | 本地媒体路径 |
| `{{MediaType}}` | 媒体类型image / audio / document / …) |
| `{{Transcript}}` | 音频转录文本 |
| `{{Prompt}}` | CLI 条目的已解析媒体提示词 |
| `{{MaxChars}}` | CLI 条目的已解析最大输出字符数 |
| `{{ChatType}}` | `"direct"``"group"` |
| `{{GroupSubject}}` | 群组主题(尽力而为) |
| `{{GroupMembers}}` | 群组成员预览(尽力而为) |
| `{{SenderName}}` | 发送者显示名称(尽力而为) |
| `{{SenderE164}}` | 发送者电话号码(尽力而为) |
| `{{Provider}}` | provider 提示whatsapp、telegram、discord 等) |
| `{{SenderName}}` | 发送者显示名称(尽力而为) |
| `{{SenderE164}}` | 发送者电话号码(尽力而为) |
| `{{Provider}}` | 提供商提示whatsapp、telegram、discord 等) |
---
@ -1128,20 +1177,20 @@ SecretRef 是增量支持的:明文值仍然可用。
**合并行为:**
- 单文件:替换所在的包含对象。
- 单文件:替换所在的包含对象。
- 文件数组:按顺序深度合并(后者覆盖前者)。
- 同级键:在 includes 之后合并(覆盖 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会给出清晰消息。
- 同级键:在 include 之后合并(覆盖 include 的值)。
- 嵌套 include最多 10 层
- 路径:相对于发起 include 的文件解析,但必须保持在顶层配置目录(`openclaw.json` 的 `dirname`)内。只有在最终仍解析到该边界内时,才允许使用绝对路径 / `../` 形式
- 当 OpenClaw 自有写入仅更改由单文件 include 支持的某个顶层区段时,这些更改会直写到该 include 文件。例如,`plugins install` 会把 `plugins: { $include: "./plugins.json5" }` 的更新写入 `plugins.json5`,并保持 `openclaw.json` 不变。
- 对于根级 include、include 数组以及带有同级覆盖的 includeOpenClaw 自有写入为只读;这些写入会以关闭方式失败,而不是将配置展平。
- 错误:对缺失文件、解析错误和循环 include 提供清晰的错误消息。
---
_相关内容[配置](/zh-CN/gateway/configuration) · [配置示例](/zh-CN/gateway/configuration-examples) · [Doctor](/zh-CN/gateway/doctor)_
## 相关内容
## 相关
- [配置](/zh-CN/gateway/configuration)
- [配置示例](/zh-CN/gateway/configuration-examples)

View File

@ -1,36 +1,36 @@
---
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并使用实时语音默认设置
summary: Google Meet 插件:通过 Chrome 或 Twilio 加入明确指定的 Meet URL并使用实时语音默认设置
title: Google Meet 插件
x-i18n:
generated_at: "2026-04-25T06:39:33Z"
generated_at: "2026-04-25T06:52:33Z"
model: gpt-5.4
provider: openai
source_hash: b4ba4dd272e9951f19f2f2cc17be8e2c30b698137d77b4c589cbe33c34bc6d95
source_hash: d512862fc3fd8da8b3e581bb69f04238ca533de448b90481ff39ac333061d50c
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` 保留给更广义的智能体电话会议工作流
- 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 +39,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,8 +73,8 @@ command -v rec play
openclaw googlemeet setup
```
设置输出旨在便于智能体读取。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟的实时介绍,以及在配置了 Twilio 委派时,`voice-call` 插件和 Twilio 凭证是否就绪。
请求智能体加入之前,应将任何 `ok: false` 的检查视为阻塞项。
设置输出旨在让智能体可读。它会报告 Chrome 配置文件、音频桥接、节点固定、延迟的实时介绍,以及在配置了 Twilio 委派时,`voice-call` 插件和 Twilio 凭证是否就绪。
要求智能体加入之前,将任何 `ok: false` 的检查都视为阻塞项。
脚本或机器可读输出请使用 `openclaw googlemeet setup --json`
加入会议:
@ -94,13 +94,13 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij
}
```
创建一个新会议并加入:
创建新会议并加入:
```bash
openclaw googlemeet create --transport chrome-node --mode realtime
```
创建 URL 而不加入:
创建 URL 而不加入:
```bash
openclaw googlemeet create --no-join
@ -108,14 +108,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。
- 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 标签页。
加入和创建流程也会在打开新标签页前尝试复用现有的 Meet 标签页。匹配时会忽略无害的 URL 查询字符串,`authuser`,因此智能体重试应聚焦到已打开的会议,而不是创建第二个 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用实时语音加入并把链接发给我。”
智能体应使用 `action: "create"` 调用 `google_meet`,然后分享返回的 `meetingUri`
```json
{
@ -125,21 +127,24 @@ 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 中,选择 `BlackHole 2ch` 作为 OpenClaw 使用的麦克风/扬声器路径。为了获得干净的双工音频,请使用独立的虚拟设备或类似 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 配置文件。
- VM 中不需要Gateway 网关服务、智能体配置、OpenAI/GPT 密钥或模型提供商设置。
- Parallels macOS VMOpenClaw CLI/节点主机、Google Chrome、SoX、BlackHole 2ch以及一个已登录 Google 的 Chrome 配置文件。
- VM 中不需要Gateway 网关服务、智能体配置、OpenAI/GPT 密钥或模型提供商设置。
安装 VM 依赖:
@ -147,13 +152,13 @@ Chrome 会以已登录的 Chrome 配置文件身份加入。在 Meet 中,为 O
brew install blackhole-2ch sox
```
安装 BlackHole 后重启 VM以便 macOS 暴露 `BlackHole 2ch`
安装 BlackHole 后重启 VMmacOS 才会暴露 `BlackHole 2ch`
```bash
sudo reboot
```
重启后,验证 VM 可以看到音频设备和 SoX 命令:
重启后,验证 VM 能看到该音频设备和 SoX 命令:
```bash
system_profiler SPAudioDataType | grep -i BlackHole
@ -172,14 +177,14 @@ openclaw plugins enable google-meet
openclaw node run --host <gateway-host> --port 18789 --display-name parallels-macos
```
如果 `<gateway-host>` 是局域网 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 \
@ -187,8 +192,8 @@ 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 网关主机上批准该节点:
@ -197,7 +202,7 @@ openclaw devices list
openclaw devices approve <requestId>
```
确认 Gateway 网关可以看到该节点,并且它同时广播了 `googlemeet.chrome` 和浏览器能力/`browser.proxy`
确认 Gateway 网关看到该节点,并且它同时广播了 `googlemeet.chrome` 和浏览器能力/`browser.proxy`
```bash
openclaw nodes status
@ -233,61 +238,67 @@ openclaw nodes status
}
```
现在即可从 Gateway 网关主机正常加入:
现在就可以从 Gateway 网关主机正常加入:
```bash
openclaw googlemeet join https://meet.google.com/abc-defg-hij
```
或者让智能体使用 `google_meet` 工具,并设置 `transport: "chrome-node"`
或者要求智能体使用 `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`,只有在恰好有一个已连接节点同时广播 `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"` 或某个命名的现有会话配置文件。
- 重复的 Meet 标签页:保持启用 `chrome.reuseExistingTab: true`。OpenClaw 会先激活相同 Meet URL 的现有标签页,再打开新标签页;而且浏览器会议创建会复用进行中的 `https://meet.google.com/new` 或 Google 账号提示标签页,而不是再打开一个
- 没有音频:在 Meet 中,将麦克风/扬声器路由到 OpenClaw 使用的虚拟音频设备路径;使用独立虚拟设备或类似 Loopback 的路由以获得干净的双工音频
## 安装说明
Chrome 实时默认设置使用两个外部工具:
- `sox`:命令行音频工具。该插件使用 `rec``play` 命令来实现默认的 8 kHz G.711 mu-law 音频桥接。
- `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`,加入会以设置错误失败,而不是在没有音频路径的情况下静默加入。
将 Chrome 麦克风和扬声器音频通过本地 OpenClaw 音频桥接进行路由。如果未安装 `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 节点上:
@ -314,7 +325,7 @@ Twilio 传输是一种严格的拨号计划,并委派给 Voice Call 插件。
}
```
通过环境变量或配置提供 Twilio 凭证。使用环境变量可以避免将密钥放入 `openclaw.json`
通过环境变量或配置提供 Twilio 凭证。环境变量可将密钥保留在 `openclaw.json` 之外
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -322,9 +333,9 @@ export TWILIO_AUTH_TOKEN=...
export TWILIO_FROM_NUMBER=+15550001234
```
启用 `voice-call`请重启或重新加载 Gateway 网关;在 Gateway 网关进程重新加载之前,插件配置变更不会出现在已运行的 Gateway 网关进程中。
启用 `voice-call` 后请重启或重新加载 Gateway 网关;在 Gateway 网关进程重新加载之前,插件配置变更不会出现在已运行的进程中。
然后验证:
然后进行验证:
```bash
openclaw config validate
@ -332,7 +343,7 @@ 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 \
@ -352,29 +363,153 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
## OAuth 和预检
OAuth 对于创建 Meet 链接是可选的,因为 `googlemeet create` 可以回退到浏览器自动化。当你希望使用官方 API 创建、空间解析,或 Meet Media API 预检时,请配置 OAuth。
OAuth 对于创建 Meet 链接是可选的,因为 `googlemeet create` 可以回退到浏览器自动化。当你需要官方 API 创建、空间解析或 Meet Media API 预检时,请配置 OAuth。
Google Meet API 访问优先使用个人 OAuth 客户端。配置
`oauth.clientId`,并可选配置 `oauth.clientSecret`,然后运行:
Google Meet API 访问使用用户 OAuth创建一个 Google Cloud OAuth 客户端,请求所需作用域,授权一个 Google 账号,然后将生成的 refresh token 存储在 Google Meet 插件配置中,或提供 `OPENCLAW_GOOGLE_MEET_*` 环境变量。
OAuth 不会替代 Chrome 加入路径。使用浏览器参会时Chrome 和 `chrome-node` 传输方式仍然通过已登录的 Chrome 配置文件、BlackHole/SoX以及一个已连接节点来加入。OAuth 仅用于官方 Google Meet API 路径:创建会议空间、解析空间,以及执行 Meet Media API 预检。
### 创建 Google 凭证
在 Google Cloud Console 中:
1. 创建或选择一个 Google Cloud 项目。
2. 为该项目启用 **Google Meet REST API**
3. 配置 OAuth 同意屏幕。
- 对于 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 client ID。
- 应用类型:**Web application**。
- 已获授权的重定向 URI
```text
http://localhost:8085/oauth2callback
```
6. 复制 client ID 和 client secret。
Google Meet `spaces.create` 需要 `meetings.space.created`
`meetings.space.readonly` 允许 OpenClaw 将 Meet URL/代码解析为会议空间。
`meetings.conference.media.readonly` 用于 Meet Media API 预检和媒体相关工作;对于实际的 Media API 使用Google 可能要求加入 Developer Preview。
如果你只需要基于浏览器的 Chrome 加入,可完全跳过 OAuth。
### 生成 refresh token
配置 `oauth.clientId`,并可选配置 `oauth.clientSecret`,或将它们作为环境变量传入,然后运行:
```bash
openclaw googlemeet auth login --json
```
该命令会输出一个带刷新令牌的 `oauth` 配置块。它使用 PKCE、本地回调 `http://localhost:8085/oauth2callback`,以及通过 `--manual` 进行手动复制/粘贴的流程。
该命令会输出一个包含 refresh token `oauth` 配置块。它使用 PKCE、本地回调 `http://localhost:8085/oauth2callback`,以及通过 `--manual` 启用的手动复制/粘贴流程。
OAuth 同意范围包括 Meet 空间创建、Meet 空间读取权限,以及 Meet 会议媒体读取权限。如果你在支持会议创建之前就已完成认证,请重新运行 `openclaw googlemeet auth login --json`,以便刷新令牌具备 `meetings.space.created` scope。
示例:
浏览器回退不需要 OAuth 凭证。在该模式下Google 认证来自所选节点上的已登录 Chrome 配置文件,而不是来自 OpenClaw 配置。
```bash
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json
```
支持以下环境变量作为回退:
当浏览器无法访问本地回调时,请使用手动模式:
```bash
OPENCLAW_GOOGLE_MEET_CLIENT_ID="your-client-id" \
OPENCLAW_GOOGLE_MEET_CLIENT_SECRET="your-client-secret" \
openclaw googlemeet auth login --json --manual
```
JSON 输出包含:
```json
{
"oauth": {
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"refreshToken": "refresh-token",
"accessToken": "access-token",
"expiresAt": 1770000000000
},
"scope": "..."
}
```
`oauth` 对象存储到 Google Meet 插件配置下:
```json5
{
plugins: {
entries: {
"google-meet": {
enabled: true,
config: {
oauth: {
clientId: "your-client-id",
clientSecret: "your-client-secret",
refreshToken: "refresh-token",
},
},
},
},
},
}
```
如果你不想将 refresh token 放入配置中,优先使用环境变量。
如果配置和环境变量值同时存在,插件会优先解析配置,然后再回退到环境变量。
OAuth 同意内容包括 Meet 空间创建、Meet 空间读取访问,以及 Meet 会议媒体读取访问。如果你在会议创建支持出现之前就已完成认证,请重新运行 `openclaw googlemeet auth login --json`,以便 refresh token 包含 `meetings.space.created` 作用域。
### 使用 Doctor 验证 OAuth
当你需要快速、无密钥暴露的健康检查时,请运行 OAuth Doctor
```bash
openclaw googlemeet doctor --oauth --json
```
这不会加载 Chrome 运行时,也不要求连接 Chrome 节点。它会检查 OAuth 配置是否存在,以及 refresh token 是否可以生成 access token。JSON 报告仅包含 `ok`、`configured`、`tokenSource`、`expiresAt` 和检查消息等状态字段;它不会输出 access token、refresh token 或 client secret。
常见结果:
| 检查 | 含义 |
| -------------------- | --------------------------------------------------------------------------------------- |
| `oauth-config` | 存在 `oauth.clientId``oauth.refreshToken`,或存在已缓存的 access token。 |
| `oauth-token` | 已缓存的 access token 仍然有效,或 refresh token 已生成新的 access token。 |
| `meet-spaces-get` | 可选的 `--meeting` 检查已解析出一个现有 Meet 空间。 |
| `meet-spaces-create` | 可选的 `--create-space` 检查已创建一个新的 Meet 空间。 |
如需一并证明 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` 作用域时,请使用它。
如需证明对现有会议空间具有读取权限:
```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 未启用、已同意的 refresh token 缺少所需作用域,或该 Google 账号无权访问该 Meet 空间。若是 refresh token 错误,则表示应重新运行 `openclaw googlemeet auth login --json` 并存储新的 `oauth` 块。
浏览器回退不需要 OAuth 凭证。在该模式下Google 认证来自所选节点上已登录的 Chrome 配置文件,而不是来自 OpenClaw 配置。
以下环境变量可作为回退值:
- `OPENCLAW_GOOGLE_MEET_CLIENT_ID``GOOGLE_MEET_CLIENT_ID`
- `OPENCLAW_GOOGLE_MEET_CLIENT_SECRET``GOOGLE_MEET_CLIENT_SECRET`
- `OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN``GOOGLE_MEET_REFRESH_TOKEN`
- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN``GOOGLE_MEET_ACCESS_TOKEN`
- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT`
`GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT`
- `OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT``GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT`
- `OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING``GOOGLE_MEET_DEFAULT_MEETING`
- `OPENCLAW_GOOGLE_MEET_PREVIEW_ACK``GOOGLE_MEET_PREVIEW_ACK`
@ -390,21 +525,21 @@ openclaw googlemeet resolve-space --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet preflight --meeting https://meet.google.com/abc-defg-hij
```
在 Meet 创建会议记录后,列出会议产物和出席情况:
在 Meet 创建会议记录后,列出会议工件和出勤情况:
```bash
openclaw googlemeet artifacts --meeting https://meet.google.com/abc-defg-hij
openclaw googlemeet attendance --meeting https://meet.google.com/abc-defg-hij
```
如果你已经知道会议记录 id可以直接指定
如果你已经知道 conference record id可以直接使用它
```bash
openclaw googlemeet artifacts --conference-record conferenceRecords/abc123 --json
openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --json
```
`artifacts`返回会议记录元数据,以及当 Google 为该会议提供时的参会者、录制、转录和智能笔记资源元数据。`attendance` 会将参会者展开为带加入/离开时间戳的参会者会话行。这些命令仅使用 Meet REST API转录或智能笔记文档正文下载被有意排除在范围之外因为那需要额外的 Google Docs/Drive 访问权限。
`artifacts`在 Google 为该会议暴露这些资源时,返回会议记录元数据,以及参与者、录音、转录、结构化 transcript-entry 和智能笔记资源元数据。对于大型会议,可使用 `--no-transcript-entries` 跳过条目查询。`attendance` 会将参与者展开为 participant-session 行,并附带加入/离开时间戳。这些命令仅使用 Meet REST APIGoogle Docs/Drive 文档正文下载被明确排除在范围之外,因为那需要单独的 Google Docs/Drive 访问权限。
创建一个新的 Meet 空间:
@ -412,9 +547,9 @@ openclaw googlemeet attendance --conference-record conferenceRecords/abc123 --js
openclaw googlemeet create
```
该命令会输出新的 `meeting uri`、来源和加入会话。有 OAuth 凭证时,它会使用官方 Google Meet API。没有 OAuth 凭证时,它会回退为使用固定的 Chrome 节点上已登录的浏览器配置文件。智能体可以使用 `google_meet` 工具,并设置 `action: "create"`,一步完成创建和加入。若只想创建 URL请传入 `"join": false`
该命令会输出新的 `meeting uri`、来源以及加入会话。使用 OAuth 凭证时,它会使用官方 Google Meet API。没有 OAuth 凭证时,它会回退为使用固定的 Chrome 节点上已登录的浏览器配置文件。智能体可以使用 `google_meet` 工具并设置 `action: "create"`,以一步完成创建和加入。若仅创建 URL请传入 `"join": false`
来自浏览器回退的 JSON 输出示例:
浏览器回退的 JSON 输出示例:
```json
{
@ -434,7 +569,7 @@ openclaw googlemeet create
}
```
如果浏览器回退在创建 URL 之前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法会返回失败响应,`google_meet` 工具也会返回结构化细节,而不是普通字符串:
如果浏览器回退在创建 URL 之前遇到 Google 登录或 Meet 权限阻塞Gateway 网关方法会返回失败响应,`google_meet` 工具会返回结构化详情,而不是普通字符串:
```json
{
@ -452,9 +587,9 @@ openclaw googlemeet create
}
```
当智能体看到 `manualActionRequired: true` 时,它应报告 `manualActionMessage`,再加上浏览器节点/标签页上下文,并停止继续打开新的 Meet 标签页,直到操作员完成浏览器步骤。
当智能体看到 `manualActionRequired: true` 时,它应报告 `manualActionMessage`,再加上浏览器节点/标签页上下文,并停止打开新的 Meet 标签页,直到操作员完成浏览器步骤。
来自 API 创建的 JSON 输出示例:
API 创建的 JSON 输出示例:
```json
{
@ -475,13 +610,13 @@ 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
@ -509,18 +644,18 @@ export GEMINI_API_KEY=...
- `defaultTransport: "chrome"`
- `defaultMode: "realtime"`
- `chromeNode.node``chrome-node` 的可选节点 id/名称/IP
- `chromeNode.node`用于 `chrome-node` 的可选节点 id/名称/IP
- `chrome.audioBackend: "blackhole-2ch"`
- `chrome.guestName: "OpenClaw Agent"`:在已退出登录的 Meet 访客面上使用的名称
- `chrome.autoJoin: true`:通过 OpenClaw 浏览器自动化在 `chrome-node` 上尽力填写访客名并点击立即加入
- `chrome.guestName: "OpenClaw Agent"`:在已退出登录的 Meet 访客面上使用的名称
- `chrome.autoJoin: true`:通过 OpenClaw 浏览器自动化`chrome-node` 上尽力填写访客名称并点击 Join Now
- `chrome.reuseExistingTab: true`:激活现有 Meet 标签页,而不是打开重复标签页
- `chrome.waitForInCallMs: 20000`在触发实时介绍之前,等待 Meet 标签页报告已在通话中
- `chrome.audioInputCommand`SoX `rec` 命令,将 8 kHz G.711 mu-law 音频写入 stdout
- `chrome.audioOutputCommand`SoX `play` 命令,从 stdin 读取 8 kHz G.711 mu-law 音频
- `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` 命令
- `realtime.provider: "openai"`
- `realtime.toolPolicy: "safe-read-only"`
- `realtime.instructions`:简短口头回复;更深入的回答使用 `openclaw_agent_consult`
- `realtime.introMessage`实时桥接连接时的简短口头就绪检查;将其设为 `""` 可静默加入
- `realtime.instructions`:简短的语音回复,并在需要更深入回答时使用 `openclaw_agent_consult`
- `realtime.introMessage`当实时桥接连接时的简短语音就绪检查;将其设为 `""` 可静默加入
可选覆盖项:
@ -566,7 +701,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 通话
## 工具
@ -581,17 +716,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。使用 `action: "speak"`提供 `sessionId``message`,可让实时智能体立即发言。使用 `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 通话
- `inCall`Chrome 看起来已进入 Meet 通话
- `micMuted`:尽力检测的 Meet 麦克风状态
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`在语音功能可用之前,浏览器配置文件需要手动登录、Meet 主持人准入、权限授予,或浏览器控制修复
- `manualActionRequired` / `manualActionReason` / `manualActionMessage`浏览器配置文件需要手动登录、Meet 主持人准入、权限授予,或浏览器控制修复,语音功能才能正常工作
- `providerConnected` / `realtimeReady`:实时语音桥接状态
- `lastInputAt` / `lastOutputAt`:桥接最近一次接收发送音频的时间
- `lastInputAt` / `lastOutputAt`:桥接最近一次接收/发送音频的时间
```json
{
@ -601,27 +736,27 @@ export GEMINI_API_KEY=...
}
```
## 实时智能体咨询
## 实时智能体 consult
Chrome 实时模式针对实时语音回路进行了优化。实时语音提供商会听取会议音频,并通过已配置的音频桥接发声。当实时模型需要更深入的推理、当前信息或常规 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
Chrome 实时模式针对实时语音循环进行了优化。实时语音提供商会听取会议音频,并通过已配置的音频桥接发声。当实时模型需要更深入的推理、最新信息或常规 OpenClaw 工具时,它可以调用 `openclaw_agent_consult`
咨询工具会在后台运行常规 OpenClaw 智能体,附带最近的会议转录上下文,并向实时语音会话返回简洁的口头回答。随后语音模型可以将该回答再说回会议中。它使用与 Voice Call 相同的共享实时咨询工具。
consult 工具会在后台运行常规 OpenClaw 智能体,附带最近的会议转录上下文,并向实时语音会话返回简洁的口语化回答。随后语音模型可以将该回答说回会议中。它使用与 Voice Call 相同的共享实时 consult 工具。
`realtime.toolPolicy` 控制咨询运行方式:
`realtime.toolPolicy` 控制 consult 运行方式:
- `safe-read-only`:暴露咨询工具,并将常规智能体限制为只能使用 `read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和 `memory_get`
- `owner`:暴露咨询工具,并让常规智能体使用正常的智能体工具策略
- `none`:不向实时语音模型暴露咨询工具。
- `safe-read-only`:暴露 consult 工具,并将常规智能体限制为使用 `read`、`web_search`、`web_fetch`、`x_search`、`memory_search` 和 `memory_get`
- `owner`:暴露 consult 工具,并允许常规智能体使用正常的智能体工具策略
- `none`:不向实时语音模型暴露 consult 工具
咨询会话键按每个 Meet 会话进行作用域隔离,因此在同一场会议期间,后续咨询调用可以复用之前的咨询上下文。
consult 会话键按每个 Meet 会话进行作用域隔离,因此在同一场会议期间,后续 consult 调用可以复用之前的 consult 上下文。
要在 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 \
@ -629,9 +764,9 @@ openclaw googlemeet test-speech https://meet.google.com/abc-defg-hij \
--message "Say exactly: I'm here and listening."
```
## 实时测试检查清单
## 现场测试检查清单
在将会议交给无人值守的智能体之前,请使用以下顺序
在将会议交给无人值守的智能体之前,使用以下流程
```bash
openclaw googlemeet setup
@ -641,15 +776,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` 返回的 Chrome 健康状态中 `inCall: true`
- Meet 标签页加入通话,且 `test-speech` 返回带有 `inCall: true` 的 Chrome 健康状态
对于远程 Chrome 主机,例如 Parallels macOS VM在更新 Gateway 网关或 VM 之后,最短且安全的检查如下
对于远程 Chrome 主机(例如 Parallels macOS VM在更新 Gateway 网关或 VM 后,这是最短且安全的检查方式
```bash
openclaw googlemeet setup
@ -660,9 +795,9 @@ openclaw nodes invoke \
--params '{"action":"setup"}'
```
这可以证明 Gateway 网关插件已加载、VM 节点已使用当前令牌连接,并且 Meet 音频桥接可用,然后智能体才会打开真实的会议标签页
这可以证明 Gateway 网关插件已加载、VM 节点已使用当前令牌连接,并且 Meet 音频桥接在智能体打开真实会议标签页之前可用
对于 Twilio 冒烟测试,请使用一个暴露电话拨入详情的会议:
对于 Twilio 冒烟测试,请使用一个暴露电话拨入详情的会议:
```bash
openclaw googlemeet setup
@ -674,24 +809,23 @@ 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 能力的节点
@ -704,7 +838,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
openclaw node run --host <gateway-lan-ip> --port 18789 --display-name parallels-macos
```
在 Gateway 网关主机上,批准节点并验证命令:
在 Gateway 网关主机上,批准节点并验证命令:
```bash
openclaw devices list
@ -712,8 +846,7 @@ openclaw devices approve <requestId>
openclaw nodes status
```
该节点必须已连接,并列出 `googlemeet.chrome``browser.proxy`
Gateway 网关配置必须允许这些节点命令:
该节点必须已连接,并列出 `googlemeet.chrome``browser.proxy`。Gateway 网关配置必须允许这些节点命令:
```json5
{
@ -725,8 +858,7 @@ Gateway 网关配置必须允许这些节点命令:
}
```
如果 `googlemeet setup` 中的 `chrome-node-connected` 失败,或者 Gateway 网关日志报告
`gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启该节点。对于局域网 Gateway 网关,这通常意味着:
如果 `googlemeet setup``chrome-node-connected` 检查失败,或者 Gateway 网关日志报告 `gateway token mismatch`,请使用当前 Gateway 网关令牌重新安装或重启节点。对于局域网 Gateway 网关,通常意味着:
```bash
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
@ -737,7 +869,7 @@ OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 \
--force
```
然后重新加载节点服务并再次运行:
然后重新加载节点服务并再次运行:
```bash
openclaw googlemeet setup
@ -746,31 +878,30 @@ openclaw nodes status --connected
### 浏览器已打开,但智能体无法加入
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康状态。如果其中报告 `manualActionRequired: true`,请向操作员展示 `manualActionMessage`,并在浏览器操作完成前停止重试。
运行 `googlemeet test-speech` 并检查返回的 Chrome 健康状态。如果报告 `manualActionRequired: true`,请向操作员展示 `manualActionMessage`,并在浏览器操作完成前停止重试。
常见手动操作:
- 登录 Chrome 配置文件。
- 从 Meet 主持人账批准访客加入。
- 当 Chrome 原生权限提示出现时,授予 Chrome 麦克风/摄像头权限。
- 从 Meet 主持人账批准访客加入。
- 当出现 Chrome 原生权限提示时,授予 Chrome 麦克风/摄像头权限。
- 关闭或修复卡住的 Meet 权限对话框。
不要仅因为 Meet 显示 “Do you want people to hear you in the meeting?” 就报告“未登录”。这是 Meet 的音频选择中间页OpenClaw 会在可用时通过浏览器自动化点击 **Use microphone**,并继续等待真正的会议状态。对于仅创建 URL 的浏览器回退,由于创建 URL 不需要实时音频路径,OpenClaw 可能会点击 **Continue without microphone**
不要仅因为 Meet 显示 “Do you want people to hear you in the meeting?” 就报告“未登录”。那是 Meet 的音频选择过渡界面在可用时OpenClaw 会通过浏览器自动化点击 **Use microphone**,并继续等待真实会议状态。对于仅创建 URL 的浏览器回退OpenClaw 可能会点击 **Continue without microphone**,因为创建 URL 不需要实时音频路径
### 会议创建失败
当配置了 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` scope;请重新运行 `openclaw googlemeet auth login --json` 并更新插件配置。
- 对于浏览器回退:`defaultTransport: "chrome-node"` `chromeNode.node` 指向一个已连接、同时具备 `browser.proxy``googlemeet.chrome` 的节点
- 对于 API 创建:已配置 `oauth.clientId``oauth.refreshToken`,或存在匹配`OPENCLAW_GOOGLE_MEET_*` 环境变量。
- 对于 API 创建:refresh token 是在添加创建支持之后生成的。较旧的令牌可能缺少 `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**,或者在仅创建 URL 的回退中点击 **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`
### 智能体已加入但不说话
### 智能体已加入但不说话
检查实时路径:
@ -779,33 +910,32 @@ openclaw googlemeet setup
openclaw googlemeet doctor
```
要进行收听/回话,请使用 `mode: "realtime"`。`mode: "transcribe"` 按设计不会启动双工实时语音桥接。
使用 `mode: "realtime"` 进行收听/回话。`mode: "transcribe"` 按设计不会启动双工实时语音桥接。
还要验证:
- Gateway 网关主机上存在实时提供商密钥,例如 `OPENAI_API_KEY``GEMINI_API_KEY`
- Chrome 主机上可 `BlackHole 2ch`
- Gateway 网关主机上有可用的实时提供商密钥,例如 `OPENAI_API_KEY``GEMINI_API_KEY`
- Chrome 主机上可以看到 `BlackHole 2ch`
- Chrome 主机上存在 `rec``play`
- Meet 麦克风和扬声器已通过 OpenClaw 使用的虚拟音频路径进行路由。
- Meet 麦克风和扬声器已通过 OpenClaw 使用的虚拟音频路径进行路由。
`googlemeet doctor [session-id]` 会输出会话、节点、通话中状态、手动操作原因、实时提供商连接、`realtimeReady`、音频输入/输出活动、最近音频时间戳、字节计数以及浏览器 URL。
当你需要原始 JSON 时,请使用 `googlemeet status [session-id]`
`googlemeet doctor [session-id]` 会输出会话、节点、通话中状态、手动操作原因、实时提供商连接状态、`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 或 caller number 时,`twilio-voice-call-credentials` 会失败。请在 Gateway 网关主机上设置这些值:
```bash
export TWILIO_ACCOUNT_SID=AC...
@ -821,13 +951,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
@ -835,7 +965,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 \
@ -844,23 +974,23 @@ openclaw googlemeet join https://meet.google.com/abc-defg-hij \
--dtmf-sequence ww123456#
```
如果提供商在输入 PIN 前需要暂停,请在 `--dtmf-sequence` 中使用前导 `w` 或逗号。
如果提供商在输入 PIN 前需要暂停,请在 `--dtmf-sequence` 中使用前导 `w` 或逗号。
## 说明
Google Meet 的官方媒体 API 偏向接收,因此向 Meet 通话中发声仍然需要一个参会者路径。该插件将这一边界保持得很清晰Chrome 负责浏览器参会和本地音频路由Twilio 负责电话拨入参会。
Google Meet 的官方媒体 API 偏向接收方向,因此向 Meet 通话中发声仍然需要一个参会者路径。该插件将这一边界保持为可见Chrome 负责浏览器参会和本地音频路由Twilio 负责电话拨入参会。
Chrome 实时模式需要以下两种之一:
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` 还会挂断底层语音呼叫。
## 相关内容
- [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)