Docs: normalize zh-CN terminology + tone

What: switch to 你/你的 tone; standardize Skills/Gateway网关/local loopback/私信 wording
Why: align zh-CN docs with issue 6995 feedback + idiomatic tech style
Tests: pnpm docs:build
This commit is contained in:
Josh Palmer
2026-02-02 15:46:45 +01:00
parent 2b1f68c928
commit 5676a6b38d
237 changed files with 2322 additions and 2337 deletions
+7 -7
View File
@@ -17,21 +17,21 @@ x-i18n:
OpenClaw 支持通过 OAuth 和 API 密钥对模型提供商进行认证。对于 Anthropic 账户,我们推荐使用 **API 密钥**。对于 Claude 订阅访问,请使用 `claude setup-token` 创建的长期有效令牌。
参见 [/concepts/oauth](/concepts/oauth) 了解完整的 OAuth 流程和存储布局。
参见 [/concepts/oauth](/concepts/oauth) 了解全部 OAuth 流程和存储布局。
## 推荐的 Anthropic 设置(API 密钥)
如果你直接使用 Anthropic,请使用 API 密钥。
1. 在 Anthropic 控制台中创建 API 密钥。
2. 将其放置在 **Gateway 主机**(运行 `openclaw gateway` 的机器)上。
2. 将其放置在 **Gateway网关主机**(运行 `openclaw gateway` 的机器)上。
```bash
export ANTHROPIC_API_KEY="..."
openclaw models status
```
3. 如果 Gateway 在 systemd/launchd 下运行,建议将密钥放在 `~/.openclaw/.env` 中,以便守护进程能够读取:
3. 如果 Gateway网关在 systemd/launchd 下运行,建议将密钥放在 `~/.openclaw/.env` 中,以便守护进程能够读取:
```bash
cat >> ~/.openclaw/.env <<'EOF'
@@ -39,20 +39,20 @@ ANTHROPIC_API_KEY=...
EOF
```
然后重启守护进程(或重启 Gateway 进程)并重新检查:
然后重启守护进程(或重启 Gateway网关进程)并重新检查:
```bash
openclaw models status
openclaw doctor
```
如果你不想自行管理环境变量,手引导向导可以为守护进程存储 API 密钥:`openclaw onboard`
如果你不想自行管理环境变量,手引导向导可以为守护进程存储 API 密钥:`openclaw onboard`
参见[帮助](/help)了解环境变量继承的详细信息(`env.shellEnv``~/.openclaw/.env`、systemd/launchd)。
## Anthropicsetup-token(订阅认证)
对于 Anthropic,推荐的方式是使用 **API 密钥**。如果你使用的是 Claude 订阅,也支持 setup-token 流程。在 **Gateway 主机**上运行:
对于 Anthropic,推荐的方式是使用 **API 密钥**。如果你使用的是 Claude 订阅,也支持 setup-token 流程。在 **Gateway网关主机**上运行:
```bash
claude setup-token
@@ -126,7 +126,7 @@ openclaw models auth order clear --provider anthropic
### "No credentials found"
如果 Anthropic 令牌配置缺失,请在 **Gateway 主机**上运行 `claude setup-token`,然后重新检查:
如果 Anthropic 令牌配置缺失,请在 **Gateway网关主机**上运行 `claude setup-token`,然后重新检查:
```bash
openclaw models status
+1 -1
View File
@@ -38,7 +38,7 @@ OpenClaw 通过 `exec` 工具运行 shell 命令,并将长时间运行的任
## 子进程桥接
在 exec/process 工具之外启动长时间运行的子进程时(例如 CLI 重启或 Gateway 辅助进程),请挂载子进程桥接助手,以便终止信号能被正确转发,并在退出/出错时分离监听器。这可以避免在 systemd 上产生孤儿进程,并保持跨平台的关闭行为一致性。
在 exec/process 工具之外启动长时间运行的子进程时(例如 CLI 重启或 Gateway网关辅助进程),请挂载子进程桥接助手,以便终止信号能被正确转发,并在退出/出错时分离监听器。这可以避免在 systemd 上产生孤儿进程,并保持跨平台的关闭行为一致性。
环境变量覆盖:
+27 -27
View File
@@ -2,7 +2,7 @@
read_when:
- 在 macOS/iOS 上调试 Bonjour 发现问题
- 更改 mDNS 服务类型、TXT 记录或发现相关的用户体验
summary: Bonjour/mDNS 发现 + 调试(Gateway 信标、客户端及常见故障模式)
summary: Bonjour/mDNS 发现 + 调试(Gateway网关信标、客户端及常见故障模式)
title: Bonjour 发现
x-i18n:
generated_at: "2026-02-01T20:25:34Z"
@@ -15,21 +15,21 @@ x-i18n:
# Bonjour / mDNS 发现
OpenClaw 使用 BonjourmDNS / DNSSD)作为**仅限局域网的便捷方式**来发现活跃的 Gateway(WebSocket 端点)。这是尽力而为的机制,**不能**替代 SSH 或基于 Tailnet 的连接。
OpenClaw 使用 BonjourmDNS / DNSSD)作为**仅限局域网的便捷方式**来发现活跃的 Gateway网关(WebSocket 端点)。这是尽力而为的机制,**不能**替代 SSH 或基于 Tailnet 的连接。
## 通过 Tailscale 实现广域 Bonjour(单播 DNSSD
如果节点和 Gateway 处于不同网络,组播 mDNS 无法跨越网络边界。可以通过切换到基于 Tailscale 的**单播 DNSSD**"广域 Bonjour")来保持相同的发现体验。
如果节点和 Gateway网关处于不同网络,组播 mDNS 无法跨越网络边界。可以通过切换到基于 Tailscale 的**单播 DNSSD**"广域 Bonjour")来保持相同的发现体验。
概要步骤:
1. 在 Gateway 主机上运行 DNS 服务器(可通过 Tailnet 访问)。
1. 在 Gateway网关主机上运行 DNS 服务器(可通过 Tailnet 访问)。
2. 在专用区域下为 `_openclaw-gw._tcp` 发布 DNSSD 记录(示例:`openclaw.internal.`)。
3. 配置 Tailscale **分割 DNS**,使选择的域名通过该 DNS 服务器为客户端(包括 iOS)解析。
3. 配置 Tailscale **分割 DNS**,使选择的域名通过该 DNS 服务器为客户端(包括 iOS)解析。
OpenClaw 支持任意发现域名;`openclaw.internal.` 仅为示例。iOS/Android 节点会同时浏览 `local.`配置的广域域名。
OpenClaw 支持任意发现域名;`openclaw.internal.` 仅为示例。iOS/Android 节点会同时浏览 `local.`配置的广域域名。
### Gateway 配置(推荐)
### Gateway网关配置(推荐)
```json5
{
@@ -38,7 +38,7 @@ OpenClaw 支持任意发现域名;`openclaw.internal.` 仅为示例。iOS/Andr
}
```
### 一次性 DNS 服务器设置(Gateway 主机)
### 一次性 DNS 服务器设置(Gateway网关主机)
```bash
openclaw dns setup --apply
@@ -46,8 +46,8 @@ openclaw dns setup --apply
此命令会安装 CoreDNS 并将其配置为:
- 仅在 Gateway 的 Tailscale 接口上监听 53 端口
-`~/.openclaw/dns/<domain>.db` 提供选择的域名服务(示例:`openclaw.internal.`
- 仅在 Gateway网关的 Tailscale 接口上监听 53 端口
-`~/.openclaw/dns/<domain>.db` 提供选择的域名服务(示例:`openclaw.internal.`
从 Tailnet 连接的机器上验证:
@@ -60,36 +60,36 @@ dig @<TAILNET_IPV4> -p 53 _openclaw-gw._tcp.openclaw.internal PTR +short
在 Tailscale 管理控制台中:
- 添加指向 Gateway Tailnet IP 的名称服务器(UDP/TCP 53)。
- 添加分割 DNS,使的发现域名使用该名称服务器。
- 添加指向 Gateway网关 Tailnet IP 的名称服务器(UDP/TCP 53)。
- 添加分割 DNS,使的发现域名使用该名称服务器。
客户端接受 Tailnet DNS 后,iOS 节点即可在的发现域名中浏览 `_openclaw-gw._tcp`,无需组播。
客户端接受 Tailnet DNS 后,iOS 节点即可在的发现域名中浏览 `_openclaw-gw._tcp`,无需组播。
### Gateway 监听器安全(推荐)
### Gateway网关监听器安全(推荐)
Gateway WS 端口(默认 `18789`)默认绑定到回环地址。若需局域网/Tailnet 访问,请显式绑定并保持认证启用。
Gateway网关 WS 端口(默认 `18789`)默认绑定到 local loopback。若需局域网/Tailnet 访问,请显式绑定并保持认证启用。
对于仅限 Tailnet 的设置:
-`~/.openclaw/openclaw.json` 中设置 `gateway.bind: "tailnet"`
- 重启 Gateway(或重启 macOS 菜单栏应用)。
- 重启 Gateway网关(或重启 macOS 菜单栏应用)。
## 广播方
只有 Gateway 广播 `_openclaw-gw._tcp`
只有 Gateway网关广播 `_openclaw-gw._tcp`
## 服务类型
- `_openclaw-gw._tcp` — Gateway 传输信标(供 macOS/iOS/Android 节点使用)。
- `_openclaw-gw._tcp` — Gateway网关传输信标(供 macOS/iOS/Android 节点使用)。
## TXT 键(非机密提示)
Gateway 广播小型非机密提示以方便 UI 流程:
Gateway网关广播小型非机密提示以方便 UI 流程:
- `role=gateway`
- `displayName=<友好名称>`
- `lanHost=<主机名>.local`
- `gatewayPort=<端口>`Gateway WS + HTTP
- `gatewayPort=<端口>`Gateway网关 WS + HTTP
- `gatewayTls=1`(仅在启用 TLS 时)
- `gatewayTlsSha256=<sha256>`(仅在启用 TLS 且指纹可用时)
- `canvasPort=<端口>`(仅在启用 canvas 主机时;默认 `18793`
@@ -113,9 +113,9 @@ Gateway 广播小型非机密提示以方便 UI 流程:
如果浏览正常但解析失败,通常是遇到了局域网策略或 mDNS 解析器问题。
## 在 Gateway 日志中调试
## 在 Gateway网关日志中调试
Gateway 会写入滚动日志文件(启动时输出为 `gateway log file: ...`)。查找 `bonjour:` 行,特别是:
Gateway网关会写入滚动日志文件(启动时输出为 `gateway log file: ...`)。查找 `bonjour:` 行,特别是:
- `bonjour: advertise failed ...`
- `bonjour: ... name conflict resolved` / `hostname conflict resolved`
@@ -127,8 +127,8 @@ iOS 节点使用 `NWBrowser` 来发现 `_openclaw-gw._tcp`。
要获取日志:
- 设置 → Gateway → 高级 → **发现调试日志**
- 设置 → Gateway → 高级 → **发现日志** → 复现问题 → **复制**
- 设置 → Gateway网关 → 高级 → **发现调试日志**
- 设置 → Gateway网关 → 高级 → **发现日志** → 复现问题 → **复制**
日志包含浏览器状态转换和结果集变化。
@@ -137,7 +137,7 @@ iOS 节点使用 `NWBrowser` 来发现 `_openclaw-gw._tcp`。
- **Bonjour 无法跨网络**:请使用 Tailnet 或 SSH。
- **组播被阻止**:某些 Wi‑Fi 网络会禁用 mDNS。
- **睡眠 / 接口变动**macOS 可能会临时丢失 mDNS 结果;请重试。
- **浏览正常但解析失败**:保持机器名称简单(避免使用表情符号或标点符号),然后重启 Gateway。服务实例名称来源于主机名,因此过于复杂的名称可能会导致某些解析器混淆。
- **浏览正常但解析失败**:保持机器名称简单(避免使用表情符号或标点符号),然后重启 Gateway网关。服务实例名称来源于主机名,因此过于复杂的名称可能会导致某些解析器混淆。
## 转义的实例名称(`\032`
@@ -149,7 +149,7 @@ Bonjour/DNSSD 经常将服务实例名称中的字节转义为十进制 `\DDD
## 禁用 / 配置
- `OPENCLAW_DISABLE_BONJOUR=1` 禁用广播(旧版:`OPENCLAW_DISABLE_BONJOUR`)。
- `~/.openclaw/openclaw.json` 中的 `gateway.bind` 控制 Gateway 绑定模式。
- `~/.openclaw/openclaw.json` 中的 `gateway.bind` 控制 Gateway网关绑定模式。
- `OPENCLAW_SSH_PORT` 覆盖 TXT 中广播的 SSH 端口(旧版:`OPENCLAW_SSH_PORT`)。
- `OPENCLAW_TAILNET_DNS` 在 TXT 中发布 MagicDNS 提示(旧版:`OPENCLAW_TAILNET_DNS`)。
- `OPENCLAW_CLI_PATH` 覆盖广播的 CLI 路径(旧版:`OPENCLAW_CLI_PATH`)。
@@ -157,4 +157,4 @@ Bonjour/DNSSD 经常将服务实例名称中的字节转义为十进制 `\DDD
## 相关文档
- 发现策略和传输选择:[发现](/gateway/discovery)
- 节点配对 + 审批:[Gateway 配对](/gateway/pairing)
- 节点配对 + 审批:[Gateway网关配对](/gateway/pairing)
+13 -13
View File
@@ -2,7 +2,7 @@
read_when:
- 构建或调试节点客户端(iOS/Android/macOS 节点模式)
- 排查配对或桥接认证故障
- 审计 Gateway 暴露的节点接口
- 审计 Gateway网关暴露的节点接口
summary: 桥接协议(旧版节点):TCP JSONL、配对、作用域 RPC
title: 桥接协议
x-i18n:
@@ -16,18 +16,18 @@ x-i18n:
# 桥接协议(旧版节点传输)
桥接协议是一种**旧版**节点传输方式(TCP JSONL)。新的节点客户端应改用统一的 Gateway WebSocket 协议。
桥接协议是一种**旧版**节点传输方式(TCP JSONL)。新的节点客户端应改用统一的 Gateway网关 WebSocket 协议。
如果你正在构建操作端或节点客户端,请使用 [Gateway 协议](/gateway/protocol)。
如果你正在构建操作端或节点客户端,请使用 [Gateway网关协议](/gateway/protocol)。
**注意:** 当前版本的 OpenClaw 不再附带 TCP 桥接监听器;本文档仅作历史参考保留。旧版 `bridge.*` 配置键已不再属于配置模式的一部分。
## 为什么有两种协议
- **安全边界**:桥接仅暴露一个小型允许列表,而非完整的 Gateway API 接口。
- **配对与节点身份**:节点准入由 Gateway 管理,并与每个节点的令牌绑定。
- **发现体验**:节点可以通过局域网上的 Bonjour 发现 Gateway,或通过 tailnet 直接连接。
- **回环 WS**:完整的 WS 控制平面保持在本地,除非通过 SSH 隧道转发。
- **安全边界**:桥接仅暴露一个小型允许列表,而非完整的 Gateway网关 API 接口。
- **配对与节点身份**:节点准入由 Gateway网关管理,并与每个节点的令牌绑定。
- **发现体验**:节点可以通过局域网上的 Bonjour 发现 Gateway网关,或通过 tailnet 直接连接。
- **local loopback WS**:完整的 WS 控制平面保持在本地,除非通过 SSH 隧道转发。
## 传输方式
@@ -40,20 +40,20 @@ x-i18n:
## 握手与配对
1. 客户端发送 `hello`,附带节点元数据和令牌(如果已配对)。
2. 如果未配对,Gateway 回复 `error``NOT_PAIRED`/`UNAUTHORIZED`)。
2. 如果未配对,Gateway网关回复 `error``NOT_PAIRED`/`UNAUTHORIZED`)。
3. 客户端发送 `pair-request`
4. Gateway 等待审批,然后发送 `pair-ok``hello-ok`
4. Gateway网关等待审批,然后发送 `pair-ok``hello-ok`
`hello-ok` 返回 `serverName`,可能包含 `canvasHostUrl`
## 帧类型
客户端 → Gateway
客户端 → Gateway网关
- `req` / `res`:作用域 Gateway RPC(聊天、会话、配置、健康检查、语音唤醒、skills.bins
- `req` / `res`:作用域 Gateway网关 RPC(聊天、会话、配置、健康检查、语音唤醒、skills.bins
- `event`:节点信号(语音转录、智能体请求、聊天订阅、执行生命周期)
Gateway → 客户端:
Gateway网关 → 客户端:
- `invoke` / `invoke-res`:节点命令(`canvas.*``camera.*``screen.record``location.get``sms.send`
- `event`:已订阅会话的聊天更新
@@ -63,7 +63,7 @@ Gateway → 客户端:
## 执行生命周期事件
节点可以发出 `exec.finished``exec.denied` 事件以展示 system.run 活动。这些会映射为 Gateway 中的系统事件。(旧版节点可能仍会发出 `exec.started`。)
节点可以发出 `exec.finished``exec.denied` 事件以展示 system.run 活动。这些会映射为 Gateway网关中的系统事件。(旧版节点可能仍会发出 `exec.started`。)
有效载荷字段(除特别说明外均为可选):
+1 -1
View File
@@ -39,7 +39,7 @@ Codex CLI 同样开箱即用:
openclaw agent --message "hi" --model codex-cli/gpt-5.2-codex
```
如果你的 Gateway 在 launchd/systemd 下运行且 PATH 较精简,只需添加命令路径:
如果你的 Gateway网关在 launchd/systemd 下运行且 PATH 较精简,只需添加命令路径:
```json5
{
+1 -1
View File
@@ -393,7 +393,7 @@ x-i18n:
},
},
// Gateway + 网络
// Gateway网关 + 网络
gateway: {
mode: "local",
port: 18789,
+62 -62
View File
@@ -30,11 +30,11 @@ OpenClaw 从 `~/.openclaw/openclaw.json` 读取可选的 **JSON5** 配置(支
## 严格配置验证
OpenClaw 只接受完全匹配 schema 的配置。
未知键、类型错误或无效值会导致 Gateway **拒绝启动**以确保安全。
未知键、类型错误或无效值会导致 Gateway网关 **拒绝启动**以确保安全。
验证失败时:
- Gateway 不会启动。
- Gateway网关不会启动。
- 只允许诊断命令(例如:`openclaw doctor``openclaw logs``openclaw health``openclaw status``openclaw service``openclaw help`)。
- 运行 `openclaw doctor` 查看具体问题。
- 运行 `openclaw doctor --fix`(或 `--yes`)应用迁移/修复。
@@ -43,7 +43,7 @@ Doctor 不会写入任何更改,除非你明确选择了 `--fix`/`--yes`。
## Schema + UI 提示
Gateway 通过 `config.schema` 暴露配置的 JSON Schema 表示,供 UI 编辑器使用。
Gateway网关通过 `config.schema` 暴露配置的 JSON Schema 表示,供 UI 编辑器使用。
控制台 UI 根据此 schema 渲染表单,并提供 **Raw JSON** 编辑器作为应急手段。
渠道插件和扩展可以为其配置注册 schema + UI 提示,因此渠道设置
@@ -53,8 +53,8 @@ Gateway 通过 `config.schema` 暴露配置的 JSON Schema 表示,供 UI 编
## 应用 + 重启(RPC
使用 `config.apply` 在一步中验证 + 写入完整配置并重启 Gateway。
它会写入重启哨兵文件,并在 Gateway 恢复后 ping 最后活跃的会话。
使用 `config.apply` 在一步中验证 + 写入完整配置并重启 Gateway网关
它会写入重启哨兵文件,并在 Gateway网关恢复后 ping 最后活跃的会话。
警告:`config.apply` 会替换**整个配置**。如果你只想更改部分键,
请使用 `config.patch``openclaw config set`。请备份 `~/.openclaw/openclaw.json`
@@ -88,7 +88,7 @@ openclaw gateway call config.apply --params '{
- `null` 删除键
- 数组替换
`config.apply` 类似,它会验证、写入配置、存储重启哨兵,并调度
Gateway 重启(当提供 `sessionKey` 时可选择唤醒)。
Gateway网关重启(当提供 `sessionKey` 时可选择唤醒)。
参数:
@@ -294,7 +294,7 @@ OpenClaw 从父进程(shell、launchd/systemd、CI 等)读取环境变量。
}
```
参见 [/environment](/environment) 了解完整的优先级和来源。
参见 [/environment](/environment) 了解全部优先级和来源。
### `env.shellEnv`(可选)
@@ -406,7 +406,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
### `agents.list[].identity`
用于默认值和用户体验的可选每智能体身份标识。由 macOS 手引导助手写入。
用于默认值和用户体验的可选每智能体身份标识。由 macOS 手引导助手写入。
如果设置了,OpenClaw 会推导默认值(仅在你未明确设置时):
@@ -484,7 +484,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
### `channels.whatsapp.dmPolicy`
控制 WhatsApp 私聊(DM)的处理方式:
控制 WhatsApp 私聊(私信)的处理方式:
- `"pairing"`(默认):未知发送者会收到配对码;所有者必须批准
- `"allowlist"`:仅允许 `channels.whatsapp.allowFrom`(或已配对的允许存储)中的发送者
@@ -536,7 +536,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
### `channels.whatsapp.accounts`(多账号)
在一个 Gateway 中运行多个 WhatsApp 账号:
在一个 Gateway网关中运行多个 WhatsApp 账号:
```json5
{
@@ -734,7 +734,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
### 多智能体路由(`agents.list` + `bindings`
在一个 Gateway 中运行多个隔离的智能体(独立的工作区、`agentDir`、会话)。
在一个 Gateway网关中运行多个隔离的智能体(独立的工作区、`agentDir`、会话)。
入站消息通过绑定路由到智能体。
- `agents.list[]`:每智能体覆盖。
@@ -783,7 +783,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
#### 每智能体访问配置(多智能体)
每个智能体可以携带自己的沙盒 + 工具策略。用于在一个 Gateway 中混合访问级别:
每个智能体可以携带自己的沙盒 + 工具策略。用于在一个 Gateway网关中混合访问级别:
- **完全访问**(个人智能体)
- **只读**工具 + 工作区
@@ -1011,7 +1011,7 @@ OpenClaw 在以下位置存储**每个智能体的**认证配置文件(OAuth +
### `web`WhatsApp Web 渠道运行时)
WhatsApp 通过 Gateway 的 Web 渠道(Baileys Web)运行。当存在已链接的会话时自动启动。
WhatsApp 通过 Gateway网关的 Web 渠道(Baileys Web)运行。当存在已链接的会话时自动启动。
设置 `web.enabled: false` 使其默认关闭。
```json5
@@ -1099,7 +1099,7 @@ OpenClaw 仅在存在 `channels.telegram` 配置段时启动 Telegram。机器
草稿流式传输说明:
- 使用 Telegram `sendMessageDraft`(草稿气泡,不是真正的消息)。
- 需要**私聊话题**DM 中的 message_thread_id;机器人已启用话题)。
- 需要**私聊话题**私信 中的 message_thread_id;机器人已启用话题)。
- `/reasoning stream` 将推理过程流式传输到草稿中,然后发送最终答案。
重试策略默认值和行为记录在[重试策略](/concepts/retry)中。
@@ -1611,7 +1611,7 @@ WhatsApp 入站前缀通过 `channels.whatsapp.messagePrefix` 配置(已弃用
### `talk`
Talk 模式(macOS/iOS/Android)的默认值。语音 ID 在未设置时回退到 `ELEVENLABS_VOICE_ID``SAG_VOICE_ID`
`apiKey` 在未设置时回退到 `ELEVENLABS_API_KEY`(或 Gateway 的 shell 配置文件)。
`apiKey` 在未设置时回退到 `ELEVENLABS_API_KEY`(或 Gateway网关的 shell 配置文件)。
`voiceAliases` 允许 Talk 指令使用友好名称(例如 `"voice":"Clawd"`)。
```json5
@@ -2721,7 +2721,7 @@ Z.AI 模型通过内置的 `zai` 提供商提供。在环境中设置 `ZAI_API_K
- `per-account-channel-peer`:按账号 + 渠道 + 发送者隔离私聊(推荐用于多账号收件箱)。
- `identityLinks`:将规范 id 映射到提供商前缀的对等方,以便在使用 `per-peer`、`per-channel-peer` 或 `per-account-channel-peer` 时同一人跨渠道共享私聊会话。
- 示例:`alice: ["telegram:123456789", "discord:987654321012345678"]`。
- `reset`:主重置策略。默认为 Gateway 主机上本地时间凌晨 4:00 每日重置。
- `reset`:主重置策略。默认为 Gateway网关主机上本地时间凌晨 4:00 每日重置。
- `mode``daily` 或 `idle`(当存在 `reset` 时默认:`daily`)。
- `atHour`:本地小时(0-23)作为每日重置边界。
- `idleMinutes`:滑动空闲窗口(分钟)。当 daily + idle 都配置时,先到期的获胜。
@@ -2732,23 +2732,23 @@ Z.AI 模型通过内置的 `zai` 提供商提供。在环境中设置 `ZAI_API_K
- `sendPolicy.default`:无规则匹配时的 `allow` 或 `deny` 回退。
- `sendPolicy.rules[]`:按 `channel`、`chatType``direct|group|room`)或 `keyPrefix`(例如 `cron:`)匹配。第一个 deny 获胜;否则 allow。
### `skills`技能配置)
### `skills`Skills配置)
控制内置白名单、安装偏好、额外技能文件夹和每技能覆盖。适用于**内置**技能和 `~/.openclaw/skills`(工作区技能在名称冲突时仍然优先)。
控制内置白名单、安装偏好、额外 Skills 文件夹和每 Skills 覆盖。适用于**内置**Skills 和 `~/.openclaw/skills`(工作区 Skills 在名称冲突时仍然优先)。
字段:
- `allowBundled`:可选的**仅内置**技能白名单。如果设置,仅那些内置技能符合条件(管理/工作区技能不受影响)。
- `load.extraDirs`:额外要扫描的技能目录(最低优先级)。
- `allowBundled`:可选的**仅内置**Skills 白名单。如果设置,仅那些内置 Skills 符合条件(管理/工作区 Skills 不受影响)。
- `load.extraDirs`:额外要扫描的 Skills 目录(最低优先级)。
- `install.preferBrew`:可用时优先使用 brew 安装程序(默认:true)。
- `install.nodeManager`node 安装偏好(`npm` | `pnpm` | `yarn`,默认:npm)。
- `entries.<skillKey>`:每技能配置覆盖。
- `entries.<skillKey>`:每 Skills配置覆盖。
技能字段:
Skills 字段:
- `enabled`:设为 `false` 禁用技能,即使它是内置/已安装的。
- `enabled`:设为 `false` 禁用 Skills,即使它是内置/已安装的。
- `env`:为智能体运行注入的环境变量(仅在尚未设置时)。
- `apiKey`:对于声明了主环境变量的技能的可选便利字段(例如 `nano-banana-pro` → `GEMINI_API_KEY`)。
- `apiKey`:对于声明了主环境变量的 Skills 的可选便利字段(例如 `nano-banana-pro` → `GEMINI_API_KEY`)。
示例:
@@ -2779,8 +2779,8 @@ Z.AI 模型通过内置的 `zai` 提供商提供。在环境中设置 `ZAI_API_K
### `plugins`(扩展)
控制插件发现、允许/拒绝和每插件配置。插件从 `~/.openclaw/extensions`、`<workspace>/.openclaw/extensions` 以及任何 `plugins.load.paths` 条目加载。**配置更改需要重启 Gateway。**
参见 [/plugin](/plugin) 了解完整用法。
控制插件发现、允许/拒绝和每插件配置。插件从 `~/.openclaw/extensions`、`<workspace>/.openclaw/extensions` 以及任何 `plugins.load.paths` 条目加载。**配置更改需要重启 Gateway网关。**
参见 [/plugin](/plugin) 了解全部用法。
字段:
@@ -2816,7 +2816,7 @@ Z.AI 模型通过内置的 `zai` 提供商提供。在环境中设置 `ZAI_API_K
### `browser`OpenClaw 管理的浏览器)
OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge/Chromium 实例并暴露一个小型回环控制服务。
OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge/Chromium 实例并暴露一个小型 local loopback 控制服务。
配置文件可以通过 `profiles.<name>.cdpUrl` 指向**远程** Chromium 浏览器。远程配置文件为仅附加模式(start/stop/reset 被禁用)。
`browser.cdpUrl` 保留用于旧版单配置文件配置,以及作为仅设置 `cdpPort` 的配置文件的基础 scheme/host。
@@ -2825,10 +2825,10 @@ OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge
- enabled`true`
- evaluateEnabled`true`(设为 `false` 禁用 `act:evaluate` 和 `wait --fn`
- 控制服务:仅回环(端口从 `gateway.port` 派生,默认 `18791`
- 控制服务:仅 local loopback(端口从 `gateway.port` 派生,默认 `18791`
- CDP URL`http://127.0.0.1:18792`(控制服务 + 1,旧版单配置文件)
- 配置文件颜色:`#FF4500`(龙虾橙)
- 注意:控制服务器由运行中的 GatewayOpenClaw.app 菜单栏或 `openclaw gateway`)启动。
- 注意:控制服务器由运行中的 Gateway网关OpenClaw.app 菜单栏或 `openclaw gateway`)启动。
- 自动检测顺序:如果为 Chromium 内核则使用默认浏览器;否则 Chrome → Brave → Edge → Chromium → Chrome Canary。
```json5
@@ -2873,9 +2873,9 @@ OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge
}
```
### `gateway`Gateway 服务器模式 + 绑定)
### `gateway`Gateway网关服务器模式 + 绑定)
使用 `gateway.mode` 明确声明此机器是否应运行 Gateway。
使用 `gateway.mode` 明确声明此机器是否应运行 Gateway网关
默认值:
@@ -2913,7 +2913,7 @@ OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge
信任的代理:
- `gateway.trustedProxies`:在 Gateway 前面终止 TLS 的反向代理 IP 列表。
- `gateway.trustedProxies`:在 Gateway网关前面终止 TLS 的反向代理 IP 列表。
- 当连接来自这些 IP 之一时,OpenClaw 使用 `x-forwarded-for`(或 `x-real-ip`)来确定客户端 IP,用于本地配对检查和 HTTP 认证/本地检查。
- 仅列出你完全控制的代理,并确保它们**覆盖**传入的 `x-forwarded-for`。
@@ -2923,8 +2923,8 @@ OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge
- `gateway.port` 控制用于 WebSocket + HTTP(控制台 UI、hooks、A2UI)的单一多路复用端口。
- OpenAI Chat Completions 端点:**默认禁用**;通过 `gateway.http.endpoints.chatCompletions.enabled: true` 启用。
- 优先级:`--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > 默认 `18789`。
- 默认需要 Gateway 认证(token/密码或 Tailscale Serve 身份)。非回环绑定需要共享 token/密码。
- 手引导向导默认生成 gateway token(即使在回环上)。
- 默认需要 Gateway网关认证(token/密码或 Tailscale Serve 身份)。非 local loopback 绑定需要共享 token/密码。
- 手引导向导默认生成 gateway token(即使在 local loopback 上)。
- `gateway.remote.token` **仅**用于远程 CLI 调用;它不启用本地 gateway 认证。`gateway.token` 被忽略。
认证和 Tailscale
@@ -2934,18 +2934,18 @@ OpenClaw 可以为 OpenClaw 启动一个**专用、隔离的** Chrome/Brave/Edge
- 当设置了 `gateway.auth.mode` 时,仅接受该方法(加上可选的 Tailscale 头部)。
- `gateway.auth.password` 可在此设置,或通过 `OPENCLAW_GATEWAY_PASSWORD`(推荐)。
- `gateway.auth.allowTailscale` 允许 Tailscale Serve 身份头部
`tailscale-user-login`)在请求通过回环到达且带有 `x-forwarded-for`、
`tailscale-user-login`)在请求通过 local loopback 到达且带有 `x-forwarded-for`、
`x-forwarded-proto` 和 `x-forwarded-host` 时满足认证。OpenClaw 在接受之前
通过 `tailscale whois` 解析 `x-forwarded-for` 地址来验证身份。为 `true` 时,
Serve 请求不需要 token/密码;设为 `false` 要求显式凭据。当
`tailscale.mode = "serve"` 且认证模式不是 `password` 时默认为 `true`。
- `gateway.tailscale.mode: "serve"` 使用 Tailscale Serve(仅 tailnet回环绑定)。
- `gateway.tailscale.mode: "serve"` 使用 Tailscale Serve(仅 tailnetlocal loopback 绑定)。
- `gateway.tailscale.mode: "funnel"` 公开暴露仪表板;需要认证。
- `gateway.tailscale.resetOnExit` 在关闭时重置 Serve/Funnel 配置。
远程客户端默认值(CLI):
- `gateway.remote.url` 设置 `gateway.mode = "remote"` 时 CLI 调用的默认 Gateway WebSocket URL。
- `gateway.remote.url` 设置 `gateway.mode = "remote"` 时 CLI 调用的默认 Gateway网关 WebSocket URL。
- `gateway.remote.transport` 选择 macOS 远程传输(`ssh` 默认,`direct` 用于 ws/wss)。使用 `direct` 时,`gateway.remote.url` 必须为 `ws://` 或 `wss://`。`ws://host` 默认端口 `18789`。
- `gateway.remote.token` 提供远程调用的 token(不需要认证时留空)。
- `gateway.remote.password` 提供远程调用的密码(不需要认证时留空)。
@@ -2986,13 +2986,13 @@ macOS 应用行为:
### `gateway.reload`(配置热重载)
Gateway 监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自动应用更改。
Gateway网关监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自动应用更改。
模式:
- `hybrid`(默认):安全更改热应用;关键更改重启 Gateway。
- `hybrid`(默认):安全更改热应用;关键更改重启 Gateway网关
- `hot`:仅应用热安全更改;需要重启时记录日志。
- `restart`:任何配置更改都重启 Gateway。
- `restart`:任何配置更改都重启 Gateway网关
- `off`:禁用热重载。
```json5
@@ -3012,7 +3012,7 @@ Gateway 监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自
- `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`
热应用(无需完全重启 Gateway):
热应用(无需完全重启 Gateway网关):
- `hooks`webhook 认证/路径/映射)+ `hooks.gmail`Gmail 监视器重启)
- `browser`(浏览器控制服务器重启)
@@ -3022,7 +3022,7 @@ Gateway 监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自
- `telegram`、`discord`、`signal`、`imessage`(渠道重启)
- `agent`、`models`、`routing`、`messages`、`session`、`whatsapp`、`logging`、`skills`、`ui`、`talk`、`identity`、`wizard`(动态读取)
需要完全重启 Gateway
需要完全重启 Gateway网关
- `gateway`(端口/绑定/认证/控制台 UI/tailscale
- `bridge`(旧版)
@@ -3033,7 +3033,7 @@ Gateway 监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自
### 多实例隔离
要在一台主机上运行多个 Gateway(用于冗余或救援机器人),请隔离每个实例的状态 + 配置并使用唯一端口:
要在一台主机上运行多个 Gateway网关(用于冗余或救援机器人),请隔离每个实例的状态 + 配置并使用唯一端口:
- `OPENCLAW_CONFIG_PATH`(每实例配置)
- `OPENCLAW_STATE_DIR`(会话/凭据)
@@ -3045,8 +3045,8 @@ Gateway 监视 `~/.openclaw/openclaw.json`(或 `OPENCLAW_CONFIG_PATH`)并自
- `openclaw --dev …` → 使用 `~/.openclaw-dev` + 端口从基础 `19001` 偏移
- `openclaw --profile <name> …` → 使用 `~/.openclaw-<name>`(端口通过配置/环境变量/标志)
参见 [Gateway 运维手册](/gateway) 了解派生的端口映射(gateway/browser/canvas)。
参见[多 Gateway](/gateway/multiple-gateways) 了解浏览器/CDP 端口隔离细节。
参见 [Gateway网关运维手册](/gateway) 了解派生的端口映射(gateway/browser/canvas)。
参见[多 Gateway网关](/gateway/multiple-gateways) 了解浏览器/CDP 端口隔离细节。
示例:
@@ -3056,9 +3056,9 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
```
### `hooks`Gateway webhook
### `hooks`Gateway网关 webhook
在 Gateway HTTP 服务器上启用简单的 HTTP webhook 端点。
在 Gateway网关 HTTP 服务器上启用简单的 HTTP webhook 端点。
默认值:
@@ -3151,12 +3151,12 @@ Gmail hook 的模型覆盖:
- 启动时,如果配置的模型不在模型目录或白名单中,会发出警告。
- `hooks.gmail.thinking` 设置 Gmail hook 的默认思考级别,被每 hook 的 `thinking` 覆盖。
Gateway 自动启动:
Gateway网关自动启动:
- 如果 `hooks.enabled=true` 且 `hooks.gmail.account` 已设置,Gateway 在启动时
- 如果 `hooks.enabled=true` 且 `hooks.gmail.account` 已设置,Gateway网关在启动时
启动 `gog gmail watch serve` 并自动续期监视。
- 设置 `OPENCLAW_SKIP_GMAIL_WATCHER=1` 禁用自动启动(用于手动运行)。
- 避免在 Gateway 旁边单独运行 `gog gmail watch serve`;它会
- 避免在 Gateway网关旁边单独运行 `gog gmail watch serve`;它会
因 `listen tcp 127.0.0.1:8788: bind: address already in use` 而失败。
注意:当 `tailscale.mode` 开启时,OpenClaw 将 `serve.path` 默认为 `/`,以便
@@ -3166,11 +3166,11 @@ Tailscale 可以正确代理 `/gmail-pubsub`(它会去除设置的路径前缀
### `canvasHost`LAN/tailnet Canvas 文件服务器 + 实时重载)
Gateway 通过 HTTP 提供 HTML/CSS/JS 目录服务,以便 iOS/Android 节点可以简单地 `canvas.navigate` 到它。
Gateway网关通过 HTTP 提供 HTML/CSS/JS 目录服务,以便 iOS/Android 节点可以简单地 `canvas.navigate` 到它。
默认根目录:`~/.openclaw/workspace/canvas`
默认端口:`18793`(选择此端口以避免 OpenClaw 浏览器 CDP 端口 `18792`
服务器监听 **Gateway 绑定主机**(LAN 或 Tailnet),以便节点可以访问。
服务器监听 **Gateway网关绑定主机**(LAN 或 Tailnet),以便节点可以访问。
服务器:
@@ -3195,7 +3195,7 @@ Gateway 通过 HTTP 提供 HTML/CSS/JS 目录服务,以便 iOS/Android 节点
}
```
`canvasHost.*` 的更改需要重启 Gateway(配置重载会触发重启)。
`canvasHost.*` 的更改需要重启 Gateway网关(配置重载会触发重启)。
禁用方式:
@@ -3205,11 +3205,11 @@ Gateway 通过 HTTP 提供 HTML/CSS/JS 目录服务,以便 iOS/Android 节点
### `bridge`(旧版 TCP 桥接,已移除)
当前版本不再包含 TCP 桥接监听器;`bridge.*` 配置键会被忽略。
节点通过 Gateway WebSocket 连接。此部分仅保留供历史参考。
节点通过 Gateway网关 WebSocket 连接。此部分仅保留供历史参考。
旧版行为:
- Gateway 可以为节点(iOS/Android)暴露简单的 TCP 桥接,通常在端口 `18790`。
- Gateway网关可以为节点(iOS/Android)暴露简单的 TCP 桥接,通常在端口 `18790`。
默认值:
@@ -3231,7 +3231,7 @@ TLS
- `bridge.tls.certPath` / `bridge.tls.keyPath`:桥接证书 + 私钥的 PEM 路径。
- `bridge.tls.caPath`:可选的 PEM CA 捆绑包(自定义根证书或未来的 mTLS)。
启用 TLS 后,Gateway 在发现 TXT 记录中通告 `bridgeTls=1` 和 `bridgeTlsSha256`,以便节点可以固定证书。如果尚未存储指纹,手动连接使用首次信任。
启用 TLS 后,Gateway网关在发现 TXT 记录中通告 `bridgeTls=1` 和 `bridgeTlsSha256`,以便节点可以固定证书。如果尚未存储指纹,手动连接使用首次信任。
自动生成的证书需要 PATH 中有 `openssl`;如果生成失败,桥接不会启动。
```json5
@@ -3267,14 +3267,14 @@ TLS
### `discovery.wideArea`(广域 Bonjour / 单播 DNSSD
启用后,Gateway 在 `~/.openclaw/dns/` 下使用配置的发现域(示例:`openclaw.internal.`)为 `_openclaw-gw._tcp` 写入单播 DNS-SD 区域。
启用后,Gateway网关在 `~/.openclaw/dns/` 下使用配置的发现域(示例:`openclaw.internal.`)为 `_openclaw-gw._tcp` 写入单播 DNS-SD 区域。
要使 iOS/Android 跨网络发现(跨地域访问),请配合以下使用:
- 在 Gateway 主机上运行 DNS 服务器,为你选择的域名提供服务(推荐 CoreDNS)
- Tailscale **split DNS**,使客户端通过 Gateway DNS 服务器解析该域名
- 在 Gateway网关主机上运行 DNS 服务器,为你选择的域名提供服务(推荐 CoreDNS)
- Tailscale **split DNS**,使客户端通过 Gateway网关 DNS 服务器解析该域名
一次性设置助手(Gateway 主机):
一次性设置助手(Gateway网关主机):
```bash
openclaw dns setup --apply
@@ -3313,9 +3313,9 @@ openclaw dns setup --apply
| `{{SenderE164}}` | 发送者电话号码(尽力而为) |
| `{{Provider}}` | 提供商提示(whatsapp | telegram | discord | googlechat | slack | signal | imessage | msteams | webchat | …) |
## CronGateway 调度器)
## CronGateway网关调度器)
Cron 是 Gateway 自有的唤醒和定时任务调度器。参见 [Cron 任务](/automation/cron-jobs) 了解功能概述和 CLI 示例。
Cron 是 Gateway网关自有的唤醒和定时任务调度器。参见 [Cron 任务](/automation/cron-jobs) 了解功能概述和 CLI 示例。
```json5
{
+25 -25
View File
@@ -3,7 +3,7 @@ read_when:
- 实现或更改 Bonjour 发现/广播功能
- 调整远程连接模式(直连 vs SSH)
- 为远程节点设计节点发现 + 配对方案
summary: 节点发现与传输(Bonjour、Tailscale、SSH)用于查找 Gateway
summary: 节点发现与传输(Bonjour、Tailscale、SSH)用于查找 Gateway网关
title: 发现与传输
x-i18n:
generated_at: "2026-02-01T20:25:57Z"
@@ -18,36 +18,36 @@ x-i18n:
OpenClaw 有两个表面上看起来相似但实际上不同的问题:
1. **操作者远程控制**:macOS 菜单栏应用控制运行在其他位置的 Gateway。
2. **节点配对**iOS/Android(以及未来的节点)找到 Gateway 并安全配对。
1. **操作者远程控制**:macOS 菜单栏应用控制运行在其他位置的 Gateway网关
2. **节点配对**iOS/Android(以及未来的节点)找到 Gateway网关并安全配对。
设计目标是将所有网络发现/广播保留在 **Node Gateway**`openclaw gateway`)中,让客户端(Mac 应用、iOS)作为消费者。
设计目标是将所有网络发现/广播保留在 **Node Gateway网关**`openclaw gateway`)中,让客户端(Mac 应用、iOS)作为消费者。
## 术语
- **Gateway**:一个长期运行的 Gateway 进程,拥有状态(会话、配对、节点注册表)并运行渠道。大多数配置每台主机使用一个;也可以进行隔离的多 Gateway 设置。
- **Gateway WS(控制平面)**:默认位于 `127.0.0.1:18789` 的 WebSocket 端点;可通过 `gateway.bind` 绑定到局域网/Tailnet。
- **直连 WS 传输**:面向局域网/Tailnet 的 Gateway WS 端点(无 SSH)。
- **Gateway网关**:一个长期运行的 Gateway网关进程,拥有状态(会话、配对、节点注册表)并运行渠道。大多数配置每台主机使用一个;也可以进行隔离的多 Gateway网关设置。
- **Gateway网关 WS(控制平面)**:默认位于 `127.0.0.1:18789` 的 WebSocket 端点;可通过 `gateway.bind` 绑定到局域网/Tailnet。
- **直连 WS 传输**:面向局域网/Tailnet 的 Gateway网关 WS 端点(无 SSH)。
- **SSH 传输(回退)**:通过 SSH 转发 `127.0.0.1:18789` 实现远程控制。
- **旧版 TCP 桥接(已弃用/移除)**:旧的节点传输方式(参见 [桥接协议](/gateway/bridge-protocol));不再用于发现广播。
协议详情:
- [Gateway 协议](/gateway/protocol)
- [Gateway网关协议](/gateway/protocol)
- [桥接协议(旧版)](/gateway/bridge-protocol)
## 为什么同时保留"直连"和 SSH
- **直连 WS** 在同一网络和 Tailnet 内提供最佳用户体验:
- 通过 Bonjour 在局域网上自动发现
- 配对令牌 + ACL 由 Gateway 管理
- 配对令牌 + ACL 由 Gateway网关管理
- 不需要 shell 访问;协议接口可以保持精简且可审计
- **SSH** 仍然是通用的回退方案:
- 在任何有 SSH 访问的地方都可以工作(甚至跨不相关的网络)
- 不受组播/mDNS 问题影响
- 除 SSH 外不需要新的入站端口
## 发现输入(客户端如何获知 Gateway 位置)
## 发现输入(客户端如何获知 Gateway网关位置)
### 1) Bonjour / mDNS(仅限局域网)
@@ -55,20 +55,20 @@ Bonjour 是尽力而为的机制,无法跨网络。它仅用于"同一局域
目标方向:
- **Gateway** 通过 Bonjour 广播其 WS 端点。
- 客户端浏览并显示"选择 Gateway"列表,然后存储所选端点。
- **Gateway网关** 通过 Bonjour 广播其 WS 端点。
- 客户端浏览并显示"选择 Gateway网关"列表,然后存储所选端点。
故障排除和信标详情:[Bonjour](/gateway/bonjour)。
#### 服务信标详情
- 服务类型:
- `_openclaw-gw._tcp`Gateway 传输信标)
- `_openclaw-gw._tcp`Gateway网关传输信标)
- TXT 键(非机密):
- `role=gateway`
- `lanHost=<主机名>.local`
- `sshPort=22`(或实际广播的端口)
- `gatewayPort=18789`Gateway WS + HTTP
- `gatewayPort=18789`Gateway网关 WS + HTTP
- `gatewayTls=1`(仅在启用 TLS 时)
- `gatewayTlsSha256=<sha256>`(仅在启用 TLS 且指纹可用时)
- `canvasPort=18793`(默认 canvas 主机端口;服务于 `/__openclaw__/canvas/`
@@ -78,7 +78,7 @@ Bonjour 是尽力而为的机制,无法跨网络。它仅用于"同一局域
禁用/覆盖:
- `OPENCLAW_DISABLE_BONJOUR=1` 禁用广播。
- `~/.openclaw/openclaw.json` 中的 `gateway.bind` 控制 Gateway 绑定模式。
- `~/.openclaw/openclaw.json` 中的 `gateway.bind` 控制 Gateway网关绑定模式。
- `OPENCLAW_SSH_PORT` 覆盖 TXT 中广播的 SSH 端口(默认为 22)。
- `OPENCLAW_TAILNET_DNS` 发布 `tailnetDns` 提示(MagicDNS)。
- `OPENCLAW_CLI_PATH` 覆盖广播的 CLI 路径。
@@ -89,11 +89,11 @@ Bonjour 是尽力而为的机制,无法跨网络。它仅用于"同一局域
- Tailscale MagicDNS 名称(首选)或稳定的 Tailnet IP。
如果 Gateway 能检测到自己运行在 Tailscale 下,它会将 `tailnetDns` 作为可选提示发布给客户端(包括广域信标)。
如果 Gateway网关能检测到自己运行在 Tailscale 下,它会将 `tailnetDns` 作为可选提示发布给客户端(包括广域信标)。
### 3) 手动 / SSH 目标
当没有直接路由(或直连被禁用)时,客户端始终可以通过 SSH 转发回环 Gateway 端口进行连接。
当没有直接路由(或直连被禁用)时,客户端始终可以通过 SSH 转发 local loopback Gateway网关端口进行连接。
参见 [远程访问](/gateway/remote)。
@@ -102,22 +102,22 @@ Bonjour 是尽力而为的机制,无法跨网络。它仅用于"同一局域
推荐的客户端行为:
1. 如果已配置并可达已配对的直连端点,则使用它。
2. 否则,如果 Bonjour 在局域网上发现了 Gateway,提供一键"使用此 Gateway"选项并将其保存为直连端点。
2. 否则,如果 Bonjour 在局域网上发现了 Gateway网关,提供一键"使用此 Gateway网关"选项并将其保存为直连端点。
3. 否则,如果配置了 Tailnet DNS/IP,尝试直连。
4. 否则,回退到 SSH。
## 配对 + 认证(直连传输)
Gateway 是节点/客户端准入的权威来源。
Gateway网关是节点/客户端准入的权威来源。
- 配对请求在 Gateway 中创建/批准/拒绝(参见 [Gateway 配对](/gateway/pairing))。
- Gateway 强制执行:
- 配对请求在 Gateway网关中创建/批准/拒绝(参见 [Gateway网关配对](/gateway/pairing))。
- Gateway网关强制执行:
- 认证(令牌 / 密钥对)
- 权限范围/ACLGateway 不是对所有方法的原始代理)
- 权限范围/ACLGateway网关不是对所有方法的原始代理)
- 速率限制
## 各组件职责
- **Gateway**:广播发现信标,管理配对决策,并托管 WS 端点。
- **macOS 应用**:帮助选择 Gateway,显示配对提示,仅将 SSH 作为回退方案。
- **iOS/Android 节点**:将 Bonjour 浏览作为便捷方式,连接到已配对的 Gateway WS。
- **Gateway网关**:广播发现信标,管理配对决策,并托管 WS 端点。
- **macOS 应用**:帮助选择 Gateway网关,显示配对提示,仅将 SSH 作为回退方案。
- **iOS/Android 节点**:将 Bonjour 浏览作为便捷方式,连接到已配对的 Gateway网关 WS。
+26 -26
View File
@@ -54,7 +54,7 @@ openclaw doctor --non-interactive
openclaw doctor --deep
```
扫描系统服务以查找额外的 Gateway 安装(launchd/systemd/schtasks)。
扫描系统服务以查找额外的 Gateway网关安装(launchd/systemd/schtasks)。
如果你想在写入前查看更改,请先打开配置文件:
@@ -67,7 +67,7 @@ cat ~/.openclaw/openclaw.json
- 可选的 git 安装预检更新(仅交互模式)。
- UI 协议新鲜度检查(当协议 schema 更新时重建控制 UI)。
- 健康检查 + 重启提示。
- 技能状态摘要(可用/缺失/受阻)。
- Skills 状态摘要(可用/缺失/受阻)。
- 遗留值的配置规范化。
- OpenCode Zen 提供商覆盖警告(`models.providers.opencode`)。
- 遗留磁盘状态迁移(会话/智能体目录/WhatsApp 认证)。
@@ -76,14 +76,14 @@ cat ~/.openclaw/openclaw.json
- 模型认证健康:检查 OAuth 过期、可刷新即将过期的令牌、报告认证配置的冷却/禁用状态。
- 额外工作区目录检测(`~/openclaw`)。
- 启用沙箱时的沙箱镜像修复。
- 遗留服务迁移和额外 Gateway 检测。
- Gateway 运行时检查(服务已安装但未运行;缓存的 launchd 标签)。
- 渠道状态警告(从运行中的 Gateway 探测)。
- 遗留服务迁移和额外 Gateway网关检测。
- Gateway网关运行时检查(服务已安装但未运行;缓存的 launchd 标签)。
- 渠道状态警告(从运行中的 Gateway网关探测)。
- Supervisor 配置审计(launchd/systemd/schtasks)及可选修复。
- Gateway 运行时最佳实践检查(Node vs Bun、版本管理器路径)。
- Gateway 端口冲突诊断(默认 `18789`)。
- 开放 DM 策略的安全警告。
- 未设置 `gateway.auth.token` 时的 Gateway 认证警告(本地模式;提供令牌生成)。
- Gateway网关运行时最佳实践检查(Node vs Bun、版本管理器路径)。
- Gateway网关端口冲突诊断(默认 `18789`)。
- 开放 私信 策略的安全警告。
- 未设置 `gateway.auth.token` 时的 Gateway网关认证警告(本地模式;提供令牌生成)。
- Linux 上的 systemd linger 检查。
- 源码安装检查(pnpm workspace 不匹配、缺失 UI 资源、缺失 tsx 二进制文件)。
- 写入更新后的配置 + 向导元数据。
@@ -108,7 +108,7 @@ Doctor 将:
- 显示它应用的迁移。
- 使用更新后的 schema 重写 `~/.openclaw/openclaw.json`
Gateway 在启动时检测到遗留配置格式时也会自动运行 doctor 迁移,因此过时的配置无需手动干预即可修复。
Gateway网关在启动时检测到遗留配置格式时也会自动运行 doctor 迁移,因此过时的配置无需手动干预即可修复。
当前迁移:
@@ -143,7 +143,7 @@ Doctor 可以将旧版磁盘布局迁移到当前结构:
- 从遗留的 `~/.openclaw/credentials/*.json``oauth.json` 除外)
-`~/.openclaw/credentials/whatsapp/<accountId>/...`(默认账户 ID`default`
这些迁移尽力执行且幂等;当 doctor 保留任何遗留文件夹作为备份时会发出警告。Gateway/CLI 在启动时也会自动迁移遗留会话 + 智能体目录,使历史/认证/模型落入每个智能体的路径中,无需手动运行 doctor。WhatsApp 认证仅通过 `openclaw doctor` 进行迁移。
这些迁移尽力执行且幂等;当 doctor 保留任何遗留文件夹作为备份时会发出警告。Gateway网关/CLI 在启动时也会自动迁移遗留会话 + 智能体目录,使历史/认证/模型落入每个智能体的路径中,无需手动运行 doctor。WhatsApp 认证仅通过 `openclaw doctor` 进行迁移。
### 4) 状态完整性检查(会话持久化、路由和安全性)
@@ -177,33 +177,33 @@ Doctor 还会报告由于以下原因暂时不可用的认证配置:
当启用沙箱时,doctor 检查 Docker 镜像,并在当前镜像缺失时提供构建或切换到遗留名称的选项。
### 8) Gateway 服务迁移和清理提示
### 8) Gateway网关服务迁移和清理提示
Doctor 检测遗留 Gateway 服务(launchd/systemd/schtasks),并提供删除它们并使用当前 Gateway 端口安装 OpenClaw 服务的选项。它还可以扫描额外的类 Gateway 服务并打印清理提示。以配置文件命名的 OpenClaw Gateway 服务被视为一等公民,不会被标记为"额外"。
Doctor 检测遗留 Gateway网关服务(launchd/systemd/schtasks),并提供删除它们并使用当前 Gateway网关端口安装 OpenClaw 服务的选项。它还可以扫描额外的类 Gateway网关服务并打印清理提示。以配置文件命名的 OpenClaw Gateway网关服务被视为一等公民,不会被标记为"额外"。
### 9) 安全警告
当提供商对 DM 开放且没有允许列表时,或当策略以危险方式配置时,doctor 会发出警告。
当提供商对 私信 开放且没有允许列表时,或当策略以危险方式配置时,doctor 会发出警告。
### 10) systemd lingerLinux
如果作为 systemd 用户服务运行,doctor 确保 linger 已启用,以便 Gateway 在注销后保持运行。
如果作为 systemd 用户服务运行,doctor 确保 linger 已启用,以便 Gateway网关在注销后保持运行。
### 11) 技能状态
### 11) Skills 状态
Doctor 打印当前工作区可用/缺失/受阻技能的快速摘要。
Doctor 打印当前工作区可用/缺失/受阻 Skills 的快速摘要。
### 12) Gateway 认证检查(本地令牌)
### 12) Gateway网关认证检查(本地令牌)
当本地 Gateway 缺少 `gateway.auth` 时,doctor 发出警告并提供生成令牌的选项。使用 `openclaw doctor --generate-gateway-token` 在自动化中强制创建令牌。
当本地 Gateway网关缺少 `gateway.auth` 时,doctor 发出警告并提供生成令牌的选项。使用 `openclaw doctor --generate-gateway-token` 在自动化中强制创建令牌。
### 13) Gateway 健康检查 + 重启
### 13) Gateway网关健康检查 + 重启
Doctor 运行健康检查,并在 Gateway 看起来不健康时提供重启选项。
Doctor 运行健康检查,并在 Gateway网关看起来不健康时提供重启选项。
### 14) 渠道状态警告
如果 Gateway 健康,doctor 运行渠道状态探测并报告警告及建议的修复方案。
如果 Gateway网关健康,doctor 运行渠道状态探测并报告警告及建议的修复方案。
### 15) Supervisor 配置审计 + 修复
@@ -217,13 +217,13 @@ Doctor 检查已安装的 supervisor 配置(launchd/systemd/schtasks)是否
- `openclaw doctor --repair --force` 覆盖自定义 supervisor 配置。
- 你始终可以通过 `openclaw gateway install --force` 强制完全重写。
### 16) Gateway 运行时 + 端口诊断
### 16) Gateway网关运行时 + 端口诊断
Doctor 检查服务运行时(PID、上次退出状态),并在服务已安装但实际未运行时发出警告。它还检查 Gateway 端口(默认 `18789`)上的端口冲突并报告可能的原因(Gateway 已在运行、SSH 隧道)。
Doctor 检查服务运行时(PID、上次退出状态),并在服务已安装但实际未运行时发出警告。它还检查 Gateway网关端口(默认 `18789`)上的端口冲突并报告可能的原因(Gateway网关已在运行、SSH 隧道)。
### 17) Gateway 运行时最佳实践
### 17) Gateway网关运行时最佳实践
当 Gateway 服务运行在 Bun 或版本管理器管理的 Node 路径(`nvm``fnm``volta``asdf` 等)上时,doctor 会发出警告。WhatsApp + Telegram 渠道需要 Node,而版本管理器路径在升级后可能会失效,因为服务不会加载你的 shell 初始化文件。Doctor 会在系统 Node 安装可用时提供迁移选项(Homebrew/apt/choco)。
当 Gateway网关服务运行在 Bun 或版本管理器管理的 Node 路径(`nvm``fnm``volta``asdf` 等)上时,doctor 会发出警告。WhatsApp + Telegram 渠道需要 Node,而版本管理器路径在升级后可能会失效,因为服务不会加载你的 shell 初始化文件。Doctor 会在系统 Node 安装可用时提供迁移选项(Homebrew/apt/choco)。
### 18) 配置写入 + 向导元数据
+11 -11
View File
@@ -1,9 +1,9 @@
---
read_when:
- 运行或调试 Gateway 进程时
- 运行或调试 Gateway网关进程时
- 调查单实例强制机制时
summary: Gateway 单例守卫:通过 WebSocket 监听器绑定实现
title: Gateway
summary: Gateway网关单例守卫:通过 WebSocket 监听器绑定实现
title: Gateway网关
x-i18n:
generated_at: "2026-02-01T20:25:58Z"
model: claude-opus-4-5
@@ -13,29 +13,29 @@ x-i18n:
workflow: 14
---
# Gateway
# Gateway网关
最后更新:2025-12-11
## 原因
- 确保同一主机上每个基础端口只运行一个 Gateway 实例;额外的 Gateway 必须使用隔离的配置文件和唯一端口。
- 确保同一主机上每个基础端口只运行一个 Gateway网关实例;额外的 Gateway网关必须使用隔离的配置文件和唯一端口。
- 在崩溃/SIGKILL 后不会留下过期的锁文件。
- 当控制端口已被占用时,快速失败并给出清晰的错误信息。
## 机制
- Gateway 在启动时立即通过独占 TCP 监听器绑定 WebSocket 监听器(默认 `ws://127.0.0.1:18789`)。
- 如果绑定失败并返回 `EADDRINUSE`,启动时将抛出 `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`
- Gateway网关在启动时立即通过独占 TCP 监听器绑定 WebSocket 监听器(默认 `ws://127.0.0.1:18789`)。
- 如果绑定失败并返回 `EADDRINUSE`,启动时将抛出 `Gateway网关LockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`
- 操作系统会在进程以任何方式退出时自动释放监听器,包括崩溃和 SIGKILL——无需单独的锁文件或清理步骤。
- 关闭时,Gateway 会关闭 WebSocket 服务器和底层 HTTP 服务器以及时释放端口。
- 关闭时,Gateway网关会关闭 WebSocket 服务器和底层 HTTP 服务器以及时释放端口。
## 错误表现
- 如果另一个进程持有该端口,启动时将抛出 `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`
- 其他绑定失败将表现为 `GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")`
- 如果另一个进程持有该端口,启动时将抛出 `Gateway网关LockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`
- 其他绑定失败将表现为 `Gateway网关LockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")`
## 运维说明
- 如果端口被*其他*进程占用,错误信息相同;请释放该端口或使用 `openclaw gateway --port <port>` 选择另一个端口。
- macOS 应用在启动 Gateway 之前仍会维护自己的轻量级 PID 守卫;运行时锁由 WebSocket 绑定强制执行。
- macOS 应用在启动 Gateway网关之前仍会维护自己的轻量级 PID 守卫;运行时锁由 WebSocket 绑定强制执行。
+5 -5
View File
@@ -18,10 +18,10 @@ x-i18n:
## 快速检查
- `openclaw status` — 本地摘要:Gateway 可达性/模式、更新提示、已关联渠道认证时长、会话 + 近期活动。
- `openclaw status` — 本地摘要:Gateway网关可达性/模式、更新提示、已关联渠道认证时长、会话 + 近期活动。
- `openclaw status --all` — 完整本地诊断(只读、带颜色、可安全粘贴用于调试)。
- `openclaw status --deep` — 还会探测运行中的 Gateway(支持时进行逐渠道探测)。
- `openclaw health --json` — 向运行中的 Gateway 请求完整健康快照(仅限 WS;不直接访问 Baileys socket)。
- `openclaw status --deep` — 还会探测运行中的 Gateway网关(支持时进行逐渠道探测)。
- `openclaw health --json` — 向运行中的 Gateway网关请求完整健康快照(仅限 WS;不直接访问 Baileys socket)。
- 在 WhatsApp/WebChat 中发送 `/status` 作为独立消息,可获取状态回复而不触发智能体。
- 日志:尾部查看 `/tmp/openclaw/openclaw-*.log` 并过滤 `web-heartbeat``web-reconnect``web-auto-reply``web-inbound`
@@ -34,9 +34,9 @@ x-i18n:
## 当出现故障时
- `logged out` 或状态码 409515 → 使用 `openclaw channels logout` 然后 `openclaw channels login` 重新关联。
- Gateway 不可达 → 启动它:`openclaw gateway --port 18789`(如果端口被占用,使用 `--force`)。
- Gateway网关不可达 → 启动它:`openclaw gateway --port 18789`(如果端口被占用,使用 `--force`)。
- 没有收到入站消息 → 确认已关联的手机在线且发送者已被允许(`channels.whatsapp.allowFrom`);对于群聊,确保允许列表 + 提及规则匹配(`channels.whatsapp.groups``agents.list[].groupChat.mentionPatterns`)。
## 专用 "health" 命令
`openclaw health --json` 向运行中的 Gateway 请求其健康快照(CLI 不直接访问渠道 socket)。它会报告已关联凭证/认证时长(如可用)、逐渠道探测摘要、会话存储摘要和探测耗时。如果 Gateway 不可达或探测失败/超时,则以非零状态码退出。使用 `--timeout <ms>` 可覆盖默认的 10 秒超时。
`openclaw health --json` 向运行中的 Gateway网关请求其健康快照(CLI 不直接访问渠道 socket)。它会报告已关联凭证/认证时长(如可用)、逐渠道探测摘要、会话存储摘要和探测耗时。如果 Gateway网关不可达或探测失败/超时,则以非零状态码退出。使用 `--timeout <ms>` 可覆盖默认的 10 秒超时。
+2 -2
View File
@@ -13,7 +13,7 @@ x-i18n:
workflow: 14
---
# 心跳(Gateway
# 心跳(Gateway网关
> **心跳还是定时任务?** 参见 [定时任务与心跳对比](/automation/cron-vs-heartbeat) 了解何时使用哪种方式。
@@ -59,7 +59,7 @@ x-i18n:
- **后台任务**"Consider outstanding tasks" 促使智能体检查待办事项(收件箱、日历、提醒、排队工作)并呈现紧急事项。
- **关怀用户**"Checkup sometimes on your human during day time" 促使偶尔发送一条轻量级的"需要什么帮助吗?"消息,但通过使用你配置的本地时区避免夜间打扰(参见 [/concepts/timezone](/concepts/timezone))。
如果你希望心跳执行非常具体的任务(例如"检查 Gmail PubSub 统计"或"验证 Gateway 健康状态"),请将 `agents.defaults.heartbeat.prompt`(或 `agents.list[].heartbeat.prompt`)设置为自定义内容(原样发送)。
如果你希望心跳执行非常具体的任务(例如"检查 Gmail PubSub 统计"或"验证 Gateway网关健康状态"),请将 `agents.defaults.heartbeat.prompt`(或 `agents.list[].heartbeat.prompt`)设置为自定义内容(原样发送)。
## 响应约定
+40 -40
View File
@@ -1,8 +1,8 @@
---
read_when:
- 运行或调试 Gateway 进程时
summary: Gateway 服务的运维手册、生命周期与操作指南
title: Gateway 运维手册
- 运行或调试 Gateway网关进程时
summary: Gateway网关服务的运维手册、生命周期与操作指南
title: Gateway网关运维手册
x-i18n:
generated_at: "2026-02-01T20:40:09Z"
model: claude-opus-4-5
@@ -12,7 +12,7 @@ x-i18n:
workflow: 14
---
# Gateway 服务运维手册
# Gateway网关服务运维手册
最后更新:2025-12-09
@@ -46,11 +46,11 @@ pnpm gateway:watch
- 默认在 `canvasHost.port`(默认 `18793`)启动 Canvas 文件服务器,从 `~/.openclaw/workspace/canvas` 提供 `http://<gateway-host>:18793/__openclaw__/canvas/` 服务。通过 `canvasHost.enabled=false``OPENCLAW_SKIP_CANVAS_HOST=1` 禁用。
- 日志输出到标准输出;使用 launchd/systemd 保持进程存活并轮转日志。
- 传入 `--verbose` 可在故障排除时将调试日志(握手、请求/响应、事件)从日志文件镜像到标准输出。
- `--force` 使用 `lsof` 查找所选端口上的监听进程,发送 SIGTERM,记录被终止的进程,然后启动 Gateway(如果缺少 `lsof` 则快速失败)。
- `--force` 使用 `lsof` 查找所选端口上的监听进程,发送 SIGTERM,记录被终止的进程,然后启动 Gateway网关(如果缺少 `lsof` 则快速失败)。
- 如果在 supervisorlaunchd/systemd/mac app 子进程模式)下运行,停止/重启通常发送 **SIGTERM**;旧版本可能将其显示为 `pnpm` `ELIFECYCLE` 退出码 **143**(SIGTERM),这是正常关闭,不是崩溃。
- **SIGUSR1** 在授权时触发进程内重启(Gateway 工具/配置应用/更新,或启用 `commands.restart` 以进行手动重启)。
- 默认需要 Gateway 认证:设置 `gateway.auth.token`(或 `OPENCLAW_GATEWAY_TOKEN`)或 `gateway.auth.password`。客户端必须发送 `connect.params.auth.token/password`,除非使用 Tailscale Serve 身份。
- 向导现在默认生成令牌,即使在回环地址上也是如此。
- **SIGUSR1** 在授权时触发进程内重启(Gateway网关工具/配置应用/更新,或启用 `commands.restart` 以进行手动重启)。
- 默认需要 Gateway网关认证:设置 `gateway.auth.token`(或 `OPENCLAW_GATEWAY_TOKEN`)或 `gateway.auth.password`。客户端必须发送 `connect.params.auth.token/password`,除非使用 Tailscale Serve 身份。
- 向导现在默认生成令牌,即使在 local loopback 上也是如此。
- 端口优先级:`--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > 默认 `18789`
## 远程访问
@@ -62,17 +62,17 @@ pnpm gateway:watch
- 客户端通过隧道连接到 `ws://127.0.0.1:18789`。
- 如果配置了令牌,客户端即使通过隧道也必须在 `connect.params.auth.token` 中包含令牌。
## 多个 Gateway(同一主机)
## 多个 Gateway网关(同一主机)
通常不需要:一个 Gateway 可以服务多个消息渠道和智能体。仅在需要冗余或严格隔离(例如:救援机器人)时使用多个 Gateway。
通常不需要:一个 Gateway网关可以服务多个消息渠道和智能体。仅在需要冗余或严格隔离(例如:救援机器人)时使用多个 Gateway网关
如果隔离状态 + 配置并使用唯一端口,则支持多实例。完整指南:[多 Gateway](/gateway/multiple-gateways)。
如果隔离状态 + 配置并使用唯一端口,则支持多实例。完整指南:[多 Gateway网关](/gateway/multiple-gateways)。
服务名称是配置文件感知的:
- macOS`bot.molt.<profile>`(旧版 `com.openclaw.*` 可能仍然存在)
- Linux`openclaw-gateway-<profile>.service`
- Windows`OpenClaw Gateway (<profile>)`
- Windows`OpenClaw Gateway网关 (<profile>)`
安装元数据嵌入在服务配置中:
@@ -80,7 +80,7 @@ pnpm gateway:watch
- `OPENCLAW_SERVICE_KIND=gateway`
- `OPENCLAW_SERVICE_VERSION=<version>`
救援机器人模式:保持第二个 Gateway 隔离,使用独立的配置文件、状态目录、工作区和基础端口间距。完整指南:[救援机器人指南](/gateway/multiple-gateways#rescue-bot-guide)。
救援机器人模式:保持第二个 Gateway网关隔离,使用独立的配置文件、状态目录、工作区和基础端口间距。完整指南:[救援机器人指南](/gateway/multiple-gateways#rescue-bot-guide)。
### 开发配置文件(`--dev`
@@ -98,15 +98,15 @@ openclaw --dev health
- `OPENCLAW_STATE_DIR=~/.openclaw-dev`
- `OPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.json`
- `OPENCLAW_GATEWAY_PORT=19001`Gateway WS + HTTP
- 浏览器控制服务端口 = `19003`(派生:`gateway.port+2`,仅回环地址
- `OPENCLAW_GATEWAY_PORT=19001`Gateway网关 WS + HTTP
- 浏览器控制服务端口 = `19003`(派生:`gateway.port+2`,仅 local loopback
- `canvasHost.port=19005`(派生:`gateway.port+4`
- 在 `--dev` 下运行 `setup`/`onboard` 时,`agents.defaults.workspace` 默认变为 `~/.openclaw/workspace-dev`。
派生端口(经验规则):
- 基础端口 = `gateway.port`(或 `OPENCLAW_GATEWAY_PORT` / `--port`
- 浏览器控制服务端口 = 基础端口 + 2(仅回环地址
- 浏览器控制服务端口 = 基础端口 + 2(仅 local loopback
- `canvasHost.port = 基础端口 + 4`(或 `OPENCLAW_CANVAS_HOST_PORT` / 配置覆盖)
- 浏览器配置文件 CDP 端口从 `browser.controlPort + 9 .. + 108` 自动分配(按配置文件持久化)。
@@ -134,9 +134,9 @@ OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b opencla
## 协议(运维视角)
- 完整文档:[Gateway 协议](/gateway/protocol) 和 [Bridge 协议(旧版)](/gateway/bridge-protocol)。
- 完整文档:[Gateway网关协议](/gateway/protocol) 和 [Bridge 协议(旧版)](/gateway/bridge-protocol)。
- 客户端必须发送的第一帧:`req {type:"req", id, method:"connect", params:{minProtocol,maxProtocol,client:{id,displayName?,version,platform,deviceFamily?,modelIdentifier?,mode,instanceId?}, caps, auth?, locale?, userAgent? } }`。
- Gateway 回复 `res {type:"res", id, ok:true, payload:hello-ok }`(或 `ok:false` 附带错误信息,然后关闭连接)。
- Gateway网关回复 `res {type:"res", id, ok:true, payload:hello-ok }`(或 `ok:false` 附带错误信息,然后关闭连接)。
- 握手完成后:
- 请求:`{type:"req", id, method, params}` → `{type:"res", id, ok, payload|error}`
- 事件:`{type:"event", event, payload, seq?, stateVersion?}`
@@ -163,12 +163,12 @@ OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b opencla
- `agent` — 来自智能体运行的流式工具/输出事件(带 seq 标签)。
- `presence` — 在线状态更新(带 stateVersion 的增量)推送给所有已连接的客户端。
- `tick` — 定期心跳/空操作,确认活跃性。
- `shutdown` — Gateway 正在退出;负载包含 `reason` 和可选的 `restartExpectedMs`。客户端应重新连接。
- `shutdown` — Gateway网关正在退出;负载包含 `reason` 和可选的 `restartExpectedMs`。客户端应重新连接。
## WebChat 集成
- WebChat 是原生 SwiftUI UI,直接通过 Gateway WebSocket 进行历史记录、发送、中止和事件交互。
- 远程使用通过相同的 SSH/Tailscale 隧道;如果配置了 Gateway 令牌,客户端在 `connect` 时包含它。
- WebChat 是原生 SwiftUI UI,直接通过 Gateway网关 WebSocket 进行历史记录、发送、中止和事件交互。
- 远程使用通过相同的 SSH/Tailscale 隧道;如果配置了 Gateway网关令牌,客户端在 `connect` 时包含它。
- macOS 应用通过单个 WS(共享连接)连接;它从初始快照中获取在线状态,并监听 `presence` 事件以更新 UI。
## 类型与验证
@@ -191,11 +191,11 @@ OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b opencla
- `NOT_LINKED` — WhatsApp 未认证。
- `AGENT_TIMEOUT` — 智能体未在配置的截止时间内响应。
- `INVALID_REQUEST` — schema/参数验证失败。
- `UNAVAILABLE` — Gateway 正在关闭或依赖不可用。
- `UNAVAILABLE` — Gateway网关正在关闭或依赖不可用。
## 心跳行为
- `tick` 事件(或 WS ping/pong)会定期发出,以便客户端在没有流量时也能知道 Gateway 处于活跃状态。
- `tick` 事件(或 WS ping/pong)会定期发出,以便客户端在没有流量时也能知道 Gateway网关处于活跃状态。
- 发送/智能体确认仍为独立响应;不要将 tick 用于发送。
## 重放/间隙
@@ -215,9 +215,9 @@ OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b opencla
(或 `bot.molt.<profile>.plist`;旧版 `com.openclaw.*` 会被清理)。
- `openclaw doctor` 审计 LaunchAgent 配置,并可将其更新为当前推荐的默认值。
## Gateway 服务管理(CLI
## Gateway网关服务管理(CLI
使用 Gateway CLI 进行安装/启动/停止/重启/状态查询:
使用 Gateway网关 CLI 进行安装/启动/停止/重启/状态查询:
```bash
openclaw gateway status
@@ -229,22 +229,22 @@ openclaw logs --follow
注意事项:
- `gateway status` 默认使用服务解析的端口/配置探测 Gateway RPC(可通过 `--url` 覆盖)。
- `gateway status` 默认使用服务解析的端口/配置探测 Gateway网关 RPC(可通过 `--url` 覆盖)。
- `gateway status --deep` 添加系统级扫描(LaunchDaemons/系统单元)。
- `gateway status --no-probe` 跳过 RPC 探测(在网络不可用时有用)。
- `gateway status --json` 输出稳定,适用于脚本。
- `gateway status` 将 **supervisor 运行时**launchd/systemd 运行中)与 **RPC 可达性**(WS 连接 + 状态 RPC)分开报告。
- `gateway status` 打印配置路径 + 探测目标,以避免"localhost vs LAN 绑定"混淆和配置文件不匹配。
- `gateway status` 在服务看起来正在运行但端口已关闭时包含最后一条 Gateway 错误行。
- `logs` 通过 RPC 跟踪 Gateway 文件日志(无需手动 `tail`/`grep`)。
- 如果检测到其他类似 Gateway 的服务,CLI 会发出警告,除非它们是 OpenClaw 配置文件服务。
我们仍建议大多数场景下**每台机器一个 Gateway**;使用隔离的配置文件/端口实现冗余或救援机器人。参见 [多 Gateway](/gateway/multiple-gateways)。
- `gateway status` 在服务看起来正在运行但端口已关闭时包含最后一条 Gateway网关错误行。
- `logs` 通过 RPC 跟踪 Gateway网关文件日志(无需手动 `tail`/`grep`)。
- 如果检测到其他类似 Gateway网关的服务,CLI 会发出警告,除非它们是 OpenClaw 配置文件服务。
我们仍建议大多数场景下**每台机器一个 Gateway网关**;使用隔离的配置文件/端口实现冗余或救援机器人。参见 [多 Gateway网关](/gateway/multiple-gateways)。
- 清理:`openclaw gateway uninstall`(当前服务)和 `openclaw doctor`(旧版迁移)。
- `gateway install` 在已安装时为空操作;使用 `openclaw gateway install --force` 重新安装(配置文件/环境/路径变更)。
捆绑的 Mac 应用:
- OpenClaw.app 可以捆绑一个基于 Node 的 Gateway 中继,并安装按用户的 LaunchAgent,标签为
- OpenClaw.app 可以捆绑一个基于 Node 的 Gateway网关中继,并安装按用户的 LaunchAgent,标签为
`bot.molt.gateway`(或 `bot.molt.<profile>`;旧版 `com.openclaw.*` 标签仍可正常卸载)。
- 要正常停止,使用 `openclaw gateway stop`(或 `launchctl bootout gui/$UID/bot.molt.gateway`)。
- 要重启,使用 `openclaw gateway restart`(或 `launchctl kickstart -k gui/$UID/bot.molt.gateway`)。
@@ -261,7 +261,7 @@ OpenClaw 在 Linux/WSL2 上默认安装 **systemd 用户服务**。我们推荐
```
[Unit]
Description=OpenClaw Gateway (profile: <profile>, v<version>)
Description=OpenClaw Gateway网关 (profile: <profile>, v<version>)
After=network-online.target
Wants=network-online.target
@@ -282,7 +282,7 @@ WantedBy=default.target
sudo loginctl enable-linger youruser
```
手引导在 Linux/WSL2 上会运行此命令(可能提示输入 sudo 密码;写入 `/var/lib/systemd/linger`)。
手引导在 Linux/WSL2 上会运行此命令(可能提示输入 sudo 密码;写入 `/var/lib/systemd/linger`)。
然后启用服务:
```
@@ -304,23 +304,23 @@ Windows 安装应使用 **WSL2** 并遵循上述 Linux systemd 部分。
- 存活性:打开 WS 并发送 `req:connect` → 期望收到带有 `payload.type="hello-ok"`(含快照)的 `res`。
- 就绪性:调用 `health` → 期望 `ok: true` 且 `linkChannel` 中有已连接的渠道(适用时)。
- 调试:订阅 `tick` 和 `presence` 事件;确保 `status` 显示已连接/认证时间;在线状态条目显示 Gateway 主机和已连接的客户端。
- 调试:订阅 `tick` 和 `presence` 事件;确保 `status` 显示已连接/认证时间;在线状态条目显示 Gateway网关主机和已连接的客户端。
## 安全保证
- 默认假设每台主机一个 Gateway;如果运行多个配置文件,请隔离端口/状态并指向正确的实例。
- 不会回退到直接 Baileys 连接;如果 Gateway 不可用,发送会快速失败。
- 默认假设每台主机一个 Gateway网关;如果运行多个配置文件,请隔离端口/状态并指向正确的实例。
- 不会回退到直接 Baileys 连接;如果 Gateway网关不可用,发送会快速失败。
- 非 connect 的首帧或格式错误的 JSON 会被拒绝并关闭 socket。
- 优雅关闭:关闭前发出 `shutdown` 事件;客户端必须处理关闭 + 重新连接。
## CLI 辅助工具
- `openclaw gateway health|status` — 通过 Gateway WS 请求健康/状态信息。
- `openclaw message send --target <num> --message "hi" [--media ...]` — 通过 Gateway 发送(对 WhatsApp 具有幂等性)。
- `openclaw gateway health|status` — 通过 Gateway网关 WS 请求健康/状态信息。
- `openclaw message send --target <num> --message "hi" [--media ...]` — 通过 Gateway网关发送(对 WhatsApp 具有幂等性)。
- `openclaw agent --message "hi" --to <num>` — 运行智能体回合(默认等待最终结果)。
- `openclaw gateway call <method> --params '{"k":"v"}'` — 用于调试的原始方法调用器。
- `openclaw gateway stop|restart` — 停止/重启受监管的 Gateway 服务(launchd/systemd)。
- Gateway 辅助子命令假设 Gateway 已在 `--url` 上运行;它们不再自动启动 Gateway。
- `openclaw gateway stop|restart` — 停止/重启受监管的 Gateway网关服务(launchd/systemd)。
- Gateway网关辅助子命令假设 Gateway网关已在 `--url` 上运行;它们不再自动启动 Gateway网关
## 迁移指南
+1 -1
View File
@@ -151,7 +151,7 @@ vLLM、LiteLLM、OAI-proxy 或自定义网关均可使用,前提是它们暴
## 故障排除
- Gateway 能否访问代理?执行 `curl http://127.0.0.1:1234/v1/models` 检查。
- Gateway网关能否访问代理?执行 `curl http://127.0.0.1:1234/v1/models` 检查。
- LM Studio 模型已卸载?重新加载;冷启动是常见的"卡住"原因。
- 上下文错误?降低 `contextWindow` 或提高服务器限制。
- 安全性:本地模型跳过了提供商侧的过滤;请保持智能体范围精简并开启压缩,以限制提示注入的影响范围。
+7 -7
View File
@@ -1,7 +1,7 @@
---
read_when:
- 更改日志输出或格式
- 调试 CLI 或 Gateway 输出
- 调试 CLI 或 Gateway网关输出
summary: 日志界面、文件日志、WebSocket 日志样式和控制台格式化
title: 日志
x-i18n:
@@ -20,19 +20,19 @@ x-i18n:
OpenClaw 有两个日志"界面"
- **控制台输出**(你在终端 / 调试界面中看到的内容)。
- **文件日志**JSON 行),由 Gateway 日志记录器写入。
- **文件日志**JSON 行),由 Gateway网关日志记录器写入。
## 基于文件的日志记录器
- 默认滚动日志文件位于 `/tmp/openclaw/` 下(每天一个文件):`openclaw-YYYY-MM-DD.log`
- 日期使用 Gateway 主机的本地时区。
- 日期使用 Gateway网关主机的本地时区。
- 日志文件路径和级别可通过 `~/.openclaw/openclaw.json` 配置:
- `logging.file`
- `logging.level`
文件格式为每行一个 JSON 对象。
控制界面的日志标签页通过 Gateway(`logs.tail`)实时追踪此文件。
控制界面的日志标签页通过 Gateway网关`logs.tail`)实时追踪此文件。
CLI 也可以执行相同操作:
```bash
@@ -64,9 +64,9 @@ CLI 捕获 `console.log/info/warn/error/debug/trace` 并将其写入文件日志
- 匹配项通过保留前 6 个和后 4 个字符进行掩码(长度 >= 18),否则显示 `***`
- 默认覆盖常见的键赋值、CLI 标志、JSON 字段、bearer 头、PEM 块和常见的令牌前缀。
## Gateway WebSocket 日志
## Gateway网关 WebSocket 日志
Gateway 以两种模式打印 WebSocket 协议日志:
Gateway网关以两种模式打印 WebSocket 协议日志:
- **普通模式(无 `--verbose`**:仅打印"有意义的" RPC 结果:
- 错误(`ok=false`
@@ -76,7 +76,7 @@ Gateway 以两种模式打印 WebSocket 协议日志:
### WebSocket 日志样式
`openclaw gateway` 支持按 Gateway 设置的样式开关:
`openclaw gateway` 支持按 Gateway网关设置的样式开关:
- `--ws-log auto`(默认):普通模式经过优化;详细模式使用紧凑输出
- `--ws-log compact`:详细模式下使用紧凑输出(配对的请求/响应)
+12 -12
View File
@@ -1,9 +1,9 @@
---
read_when:
- 在同一台机器上运行多个 Gateway
- 需要为每个 Gateway 提供独立的配置/状态/端口
summary: 在同一主机上运行多个 OpenClaw Gateway(隔离、端口和配置文件)
title: 多个 Gateway
- 在同一台机器上运行多个 Gateway网关
- 需要为每个 Gateway网关提供独立的配置/状态/端口
summary: 在同一主机上运行多个 OpenClaw Gateway网关(隔离、端口和配置文件)
title: 多个 Gateway网关
x-i18n:
generated_at: "2026-02-01T20:35:02Z"
model: claude-opus-4-5
@@ -13,9 +13,9 @@ x-i18n:
workflow: 14
---
# 多个 Gateway(同一主机)
# 多个 Gateway网关(同一主机)
大多数场景只需使用一个 Gateway,因为单个 Gateway 可以处理多个消息连接和智能体。如果需要更强的隔离性或冗余能力(例如救援机器人),请使用独立的配置文件/端口运行多个 Gateway。
大多数场景只需使用一个 Gateway网关,因为单个 Gateway网关可以处理多个消息连接和智能体。如果需要更强的隔离性或冗余能力(例如救援机器人),请使用独立的配置文件/端口运行多个 Gateway网关
## 隔离检查清单(必需)
@@ -50,7 +50,7 @@ openclaw --profile rescue gateway install
## 救援机器人指南
在同一主机上运行第二个 Gateway,为其配置独立的:
在同一主机上运行第二个 Gateway网关,为其配置独立的:
- 配置文件/配置
- 状态目录
@@ -75,9 +75,9 @@ openclaw --profile rescue onboard
# - 工作区名称默认会添加 -rescue 后缀
# - 端口至少应为 18789 + 20 个端口,
# 建议选择完全不同的基础端口,如 19789
# - 其余手引导步骤与正常流程相同
# - 其余手引导流程与正常流程相同
# 安装服务(如果在手引导过程中未自动安装)
# 安装服务(如果在手引导过程中未自动安装)
openclaw --profile rescue gateway install
```
@@ -85,16 +85,16 @@ openclaw --profile rescue gateway install
基础端口 = `gateway.port`(或 `OPENCLAW_GATEWAY_PORT` / `--port`)。
- 浏览器控制服务端口 = 基础端口 + 2(仅限回环地址
- 浏览器控制服务端口 = 基础端口 + 2(仅限 local loopback
- `canvasHost.port = 基础端口 + 4`
- 浏览器配置文件 CDP 端口从 `browser.controlPort + 9 .. + 108` 自动分配
如果在配置或环境变量中覆盖了这些值,必须确保每个实例的值唯一。
如果在配置或环境变量中覆盖了这些值,必须确保每个实例的值唯一。
## 浏览器/CDP 注意事项(常见陷阱)
- **不要**在多个实例上将 `browser.cdpUrl` 设置为相同的值。
- 每个实例需要独立的浏览器控制端口和 CDP 端口范围(从其 Gateway 端口派生)。
- 每个实例需要独立的浏览器控制端口和 CDP 端口范围(从其 Gateway网关端口派生)。
- 如需显式指定 CDP 端口,请为每个实例设置 `browser.profiles.<name>.cdpPort`
- 远程 Chrome:使用 `browser.profiles.<name>.cdpUrl`(按配置文件、按实例设置)。
+6 -6
View File
@@ -1,7 +1,7 @@
---
read_when:
- 集成需要 OpenAI Chat Completions 的工具
summary: 从 Gateway 暴露一个兼容 OpenAI 的 /v1/chat/completions HTTP 端点
summary: 从 Gateway网关暴露一个兼容 OpenAI 的 /v1/chat/completions HTTP 端点
title: OpenAI Chat Completions
x-i18n:
generated_at: "2026-02-01T20:35:14Z"
@@ -14,18 +14,18 @@ x-i18n:
# OpenAI Chat Completions (HTTP)
OpenClaw 的 Gateway 可以提供一个小型的兼容 OpenAI 的 Chat Completions 端点。
OpenClaw 的 Gateway网关可以提供一个小型的兼容 OpenAI 的 Chat Completions 端点。
此端点**默认禁用**。请先在配置中启用它。
- `POST /v1/chat/completions`
- 与 Gateway 使用相同端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/v1/chat/completions`
- 与 Gateway网关使用相同端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/v1/chat/completions`
在底层,请求会作为普通的 Gateway 智能体运行来执行(与 `openclaw agent` 相同的代码路径),因此路由/权限/配置与的 Gateway 保持一致。
在底层,请求会作为普通的 Gateway网关智能体运行来执行(与 `openclaw agent` 相同的代码路径),因此路由/权限/配置与的 Gateway网关保持一致。
## 认证
使用 Gateway 的认证配置。发送 Bearer 令牌:
使用 Gateway网关的认证配置。发送 Bearer 令牌:
- `Authorization: Bearer <token>`
@@ -85,7 +85,7 @@ OpenClaw 的 Gateway 可以提供一个小型的兼容 OpenAI 的 Chat Completio
默认情况下,端点**每次请求无状态**(每次调用生成一个新的会话密钥)。
如果请求中包含 OpenAI 的 `user` 字符串,Gateway 会根据它派生一个稳定的会话密钥,这样重复调用可以共享同一个智能体会话。
如果请求中包含 OpenAI 的 `user` 字符串,Gateway网关会根据它派生一个稳定的会话密钥,这样重复调用可以共享同一个智能体会话。
## 流式传输 (SSE)
+7 -7
View File
@@ -2,7 +2,7 @@
read_when:
- 集成使用 OpenResponses API 的客户端
- 你需要基于 item 的输入、客户端工具调用或 SSE 事件
summary: 从 Gateway 暴露一个兼容 OpenResponses 的 /v1/responses HTTP 端点
summary: 从 Gateway网关暴露一个兼容 OpenResponses 的 /v1/responses HTTP 端点
title: OpenResponses API
x-i18n:
generated_at: "2026-02-01T20:35:34Z"
@@ -15,18 +15,18 @@ x-i18n:
# OpenResponses API (HTTP)
OpenClaw 的 Gateway 可以提供一个兼容 OpenResponses 的 `POST /v1/responses` 端点。
OpenClaw 的 Gateway网关可以提供一个兼容 OpenResponses 的 `POST /v1/responses` 端点。
此端点**默认禁用**。请先在配置中启用。
- `POST /v1/responses`
- 与 Gateway 使用相同端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/v1/responses`
- 与 Gateway网关使用相同端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/v1/responses`
底层实现中,请求作为普通的 Gateway 智能体运行来执行(与 `openclaw agent` 相同的代码路径),因此路由/权限/配置与你的 Gateway 一致。
底层实现中,请求作为普通的 Gateway网关智能体运行来执行(与 `openclaw agent` 相同的代码路径),因此路由/权限/配置与你的 Gateway网关一致。
## 认证
使用 Gateway 的认证配置。发送 bearer 令牌:
使用 Gateway网关的认证配置。发送 bearer 令牌:
- `Authorization: Bearer <token>`
@@ -86,7 +86,7 @@ OpenClaw 的 Gateway 可以提供一个兼容 OpenResponses 的 `POST /v1/respon
默认情况下,端点是**每次请求无状态的**(每次调用生成一个新的会话密钥)。
如果请求包含 OpenResponses 的 `user` 字符串,Gateway 会从中派生一个稳定的会话密钥,使重复调用可以共享同一个智能体会话。
如果请求包含 OpenResponses 的 `user` 字符串,Gateway网关会从中派生一个稳定的会话密钥,使重复调用可以共享同一个智能体会话。
## 请求结构(已支持)
@@ -182,7 +182,7 @@ OpenClaw 的 Gateway 可以提供一个兼容 OpenResponses 的 `POST /v1/respon
- 文件内容被解码并添加到**系统提示**中,而非用户消息中,因此它是临时的(不会持久化到会话历史中)。
- PDF 会被解析提取文本。如果发现的文本很少,前几页会被光栅化为图片并传递给模型。
PDF 解析使用对 Node 友好的 `pdfjs-dist` 旧版构建(无 worker)。现代 PDF.js 构建需要浏览器 worker/DOM 全局对象,因此不在 Gateway 中使用。
PDF 解析使用对 Node 友好的 `pdfjs-dist` 旧版构建(无 worker)。现代 PDF.js 构建需要浏览器 worker/DOM 全局对象,因此不在 Gateway网关中使用。
URL 获取默认值:
+14 -14
View File
@@ -2,9 +2,9 @@
read_when:
- 在没有 macOS UI 的情况下实现节点配对审批
- 添加用于审批远程节点的 CLI 流程
- 扩展 Gateway 协议以支持节点管理
summary: Gateway 拥有的节点配对(方案 B),适用于 iOS 及其他远程节点
title: Gateway 拥有的配对
- 扩展 Gateway网关协议以支持节点管理
summary: Gateway网关拥有的节点配对(方案 B),适用于 iOS 及其他远程节点
title: Gateway网关拥有的配对
x-i18n:
generated_at: "2026-02-01T20:35:26Z"
model: claude-opus-4-5
@@ -14,9 +14,9 @@ x-i18n:
workflow: 14
---
# Gateway 拥有的配对(方案 B
# Gateway网关拥有的配对(方案 B
在 Gateway 拥有的配对模式中,**Gateway** 是决定哪些节点允许加入的权威来源。UI(macOS 应用、未来的客户端)只是用于批准或拒绝待处理请求的前端。
在 Gateway网关拥有的配对模式中,**Gateway网关** 是决定哪些节点允许加入的权威来源。UI(macOS 应用、未来的客户端)只是用于批准或拒绝待处理请求的前端。
**重要说明:**WS 节点在 `connect` 过程中使用**设备配对**(角色 `node`)。`node.pair.*` 是一个独立的配对存储,**不会**控制 WS 握手。只有显式调用 `node.pair.*` 的客户端才使用此流程。
@@ -24,14 +24,14 @@ x-i18n:
- **待处理请求**:节点请求加入,需要审批。
- **已配对节点**:已批准的节点,带有已签发的认证令牌。
- **传输层**Gateway WS 端点转发请求但不决定成员资格。(旧版 TCP 桥接支持已弃用/移除。)
- **传输层**Gateway网关 WS 端点转发请求但不决定成员资格。(旧版 TCP 桥接支持已弃用/移除。)
## 配对工作原理
1. 节点连接到 Gateway WS 并请求配对。
2. Gateway 存储一个**待处理请求**并发出 `node.pair.requested` 事件。
1. 节点连接到 Gateway网关 WS 并请求配对。
2. Gateway网关存储一个**待处理请求**并发出 `node.pair.requested` 事件。
3. 你批准或拒绝该请求(通过 CLI 或 UI)。
4. 批准后,Gateway 签发一个**新令牌**(重新配对时令牌会轮换)。
4. 批准后,Gateway网关签发一个**新令牌**(重新配对时令牌会轮换)。
5. 节点使用该令牌重新连接,此时即为"已配对"状态。
待处理请求会在 **5 分钟**后自动过期。
@@ -48,7 +48,7 @@ openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"
`nodes status` 显示已配对/已连接的节点及其能力。
## API 接口(Gateway 协议)
## API 接口(Gateway网关协议)
事件:
@@ -74,13 +74,13 @@ openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"
macOS 应用可在以下条件满足时选择性地尝试**静默批准**:
- 请求标记为 `silent`,且
- 应用能够使用同一用户验证与 Gateway 主机的 SSH 连接。
- 应用能够使用同一用户验证与 Gateway网关主机的 SSH 连接。
如果静默批准失败,则回退到常规的"批准/拒绝"提示。
## 存储(本地,私有)
配对状态存储在 Gateway 状态目录下(默认 `~/.openclaw`):
配对状态存储在 Gateway网关状态目录下(默认 `~/.openclaw`):
- `~/.openclaw/nodes/paired.json`
- `~/.openclaw/nodes/pending.json`
@@ -95,5 +95,5 @@ macOS 应用可在以下条件满足时选择性地尝试**静默批准**:
## 传输层行为
- 传输层是**无状态的**;它不存储成员信息。
- 如果 Gateway 离线或配对功能被禁用,节点无法配对。
- 如果 Gateway 处于远程模式,配对仍然基于远程 Gateway 的存储进行。
- 如果 Gateway网关离线或配对功能被禁用,节点无法配对。
- 如果 Gateway网关处于远程模式,配对仍然基于远程 Gateway网关的存储进行。
+16 -16
View File
@@ -1,10 +1,10 @@
---
read_when:
- 实现或更新 Gateway WebSocket 客户端
- 实现或更新 Gateway网关 WebSocket 客户端
- 调试协议不匹配或连接失败问题
- 重新生成协议 schema/模型
summary: Gateway WebSocket 协议:握手、帧、版本控制
title: Gateway 协议
summary: Gateway网关 WebSocket 协议:握手、帧、版本控制
title: Gateway网关协议
x-i18n:
generated_at: "2026-02-01T20:35:39Z"
model: claude-opus-4-5
@@ -14,9 +14,9 @@ x-i18n:
workflow: 14
---
# Gateway 协议 (WebSocket)
# Gateway网关协议 (WebSocket)
Gateway WebSocket 协议是 OpenClaw 的**统一控制平面 + 节点传输层**。所有客户端(CLI、Web UI、macOS 应用、iOS/Android 节点、无头节点)均通过 WebSocket 连接,并在握手时声明其**角色** + **作用域**
Gateway网关 WebSocket 协议是 OpenClaw 的**统一控制平面 + 节点传输层**。所有客户端(CLI、Web UI、macOS 应用、iOS/Android 节点、无头节点)均通过 WebSocket 连接,并在握手时声明其**角色** + **作用域**
## 传输
@@ -25,7 +25,7 @@ Gateway WebSocket 协议是 OpenClaw 的**统一控制平面 + 节点传输层**
## 握手 (connect)
Gateway → 客户端(连接前挑战):
Gateway网关 → 客户端(连接前挑战):
```json
{
@@ -35,7 +35,7 @@ Gateway → 客户端(连接前挑战):
}
```
客户端 → Gateway
客户端 → Gateway网关
```json
{
@@ -70,7 +70,7 @@ Gateway → 客户端(连接前挑战):
}
```
Gateway → 客户端:
Gateway网关 → 客户端:
```json
{
@@ -161,7 +161,7 @@ Gateway → 客户端:
- `commands`:允许调用的命令白名单。
- `permissions`:细粒度开关(例如 `screen.record``camera.capture`)。
Gateway 将这些视为**声明**,并在服务端执行白名单校验。
Gateway网关将这些视为**声明**,并在服务端执行白名单校验。
## 在线状态
@@ -170,11 +170,11 @@ Gateway 将这些视为**声明**,并在服务端执行白名单校验。
### 节点辅助方法
- 节点可以调用 `skills.bins` 获取当前技能可执行文件列表,用于自动允许检查。
- 节点可以调用 `skills.bins` 获取当前 Skills 可执行文件列表,用于自动允许检查。
## 执行审批
- 当执行请求需要审批时,Gateway 会广播 `exec.approval.requested`
- 当执行请求需要审批时,Gateway网关会广播 `exec.approval.requested`
- Operator 客户端通过调用 `exec.approval.resolve` 进行处理(需要 `operator.approvals` 作用域)。
## 版本控制
@@ -189,23 +189,23 @@ Gateway 将这些视为**声明**,并在服务端执行白名单校验。
## 认证
- 如果设置了 `OPENCLAW_GATEWAY_TOKEN`(或 `--token`),`connect.params.auth.token` 必须匹配,否则连接将被关闭。
- 配对完成后,Gateway 会签发一个**设备令牌**,其作用域限定为连接的角色 + 作用域。该令牌在 `hello-ok.auth.deviceToken` 中返回,客户端应持久化保存以供后续连接使用。
- 配对完成后,Gateway网关会签发一个**设备令牌**,其作用域限定为连接的角色 + 作用域。该令牌在 `hello-ok.auth.deviceToken` 中返回,客户端应持久化保存以供后续连接使用。
- 设备令牌可通过 `device.token.rotate``device.token.revoke` 进行轮换/撤销(需要 `operator.pairing` 作用域)。
## 设备身份 + 配对
- 节点应包含一个稳定的设备身份(`device.id`),由密钥对指纹派生。
- Gateway 按设备 + 角色签发令牌。
- Gateway网关按设备 + 角色签发令牌。
- 新设备 ID 需要配对审批,除非启用了本地自动审批。
- **本地**连接包括回环地址和 Gateway 主机自身的 tailnet 地址(因此同一主机的 tailnet 绑定仍可自动审批)。
- **本地**连接包括 local loopback 和 Gateway网关主机自身的 tailnet 地址(因此同一主机的 tailnet 绑定仍可自动审批)。
- 所有 WebSocket 客户端在 `connect` 时必须包含 `device` 身份(operator + node)。控制 UI 仅在启用 `gateway.controlUi.allowInsecureAuth` 时可以省略(或使用 `gateway.controlUi.dangerouslyDisableDeviceAuth` 作为紧急措施)。
- 非本地连接必须对服务端提供的 `connect.challenge` nonce 进行签名。
## TLS + 证书固定
- WebSocket 连接支持 TLS。
- 客户端可选择固定 Gateway 证书指纹(参见 `gateway.tls` 配置以及 `gateway.remote.tlsFingerprint` 或 CLI `--tls-fingerprint`)。
- 客户端可选择固定 Gateway网关证书指纹(参见 `gateway.tls` 配置以及 `gateway.remote.tlsFingerprint` 或 CLI `--tls-fingerprint`)。
## 范围
此协议暴露了**完整的 Gateway API**(状态、渠道、模型、聊天、智能体、会话、节点、审批等)。确切的 API 接口由 `src/gateway/protocol/schema.ts` 中的 TypeBox schema 定义。
此协议暴露了**完整的 Gateway网关 API**(状态、渠道、模型、聊天、智能体、会话、节点、审批等)。确切的 API 接口由 `src/gateway/protocol/schema.ts` 中的 TypeBox schema 定义。
+9 -9
View File
@@ -1,7 +1,7 @@
---
read_when: 通过 SSH 将 macOS 应用连接到远程 Gateway
summary: 为 OpenClaw.app 连接远程 Gateway 设置 SSH 隧道
title: 远程 Gateway 设置
read_when: 通过 SSH 将 macOS 应用连接到远程 Gateway网关
summary: 为 OpenClaw.app 连接远程 Gateway网关设置 SSH 隧道
title: 远程 Gateway网关设置
x-i18n:
generated_at: "2026-02-01T20:35:41Z"
model: claude-opus-4-5
@@ -11,9 +11,9 @@ x-i18n:
workflow: 14
---
# 使用远程 Gateway 运行 OpenClaw.app
# 使用远程 Gateway网关运行 OpenClaw.app
OpenClaw.app 使用 SSH 隧道连接到远程 Gateway。本指南将介绍如何进行设置。
OpenClaw.app 使用 SSH 隧道连接到远程 Gateway网关。本指南将介绍如何进行设置。
## 概述
@@ -32,7 +32,7 @@ OpenClaw.app 使用 SSH 隧道连接到远程 Gateway。本指南将介绍如何
┌─────────────────────────────────────────────────────────────┐
│ 远程机器 │
│ │
│ Gateway WebSocket ──► ws://127.0.0.1:18789 ──► │
│ Gateway网关 WebSocket ──► ws://127.0.0.1:18789 ──► │
│ │
└─────────────────────────────────────────────────────────────┘
```
@@ -61,7 +61,7 @@ Host remote-gateway
ssh-copy-id -i ~/.ssh/id_rsa <REMOTE_USER>@<REMOTE_IP>
```
### 第 3 步:设置 Gateway 令牌
### 第 3 步:设置 Gateway网关令牌
```bash
launchctl setenv OPENCLAW_GATEWAY_TOKEN "<your-token>"
@@ -80,7 +80,7 @@ ssh -N remote-gateway &
open /path/to/OpenClaw.app
```
应用现在将通过 SSH 隧道连接到远程 Gateway。
应用现在将通过 SSH 隧道连接到远程 Gateway网关
---
@@ -161,4 +161,4 @@ launchctl bootout gui/$UID/bot.molt.ssh-tunnel
| `KeepAlive` | 隧道崩溃时自动重启 |
| `RunAtLoad` | 在代理加载时启动隧道 |
OpenClaw.app 连接到客户端机器上的 `ws://127.0.0.1:18789`。SSH 隧道将该连接转发到运行 Gateway 的远程机器的 18789 端口。
OpenClaw.app 连接到客户端机器上的 `ws://127.0.0.1:18789`。SSH 隧道将该连接转发到运行 Gateway网关的远程机器的 18789 端口。
+28 -28
View File
@@ -1,7 +1,7 @@
---
read_when:
- 运行或排查远程 Gateway 设置问题
summary: 使用 SSH 隧道(Gateway WebSocket)和 tailnet 进行远程访问
- 运行或排查远程 Gateway网关设置问题
summary: 使用 SSH 隧道(Gateway网关 WebSocket)和 tailnet 进行远程访问
title: 远程访问
x-i18n:
generated_at: "2026-02-01T20:35:58Z"
@@ -14,32 +14,32 @@ x-i18n:
# 远程访问(SSH、隧道和 tailnet)
本仓库通过在专用主机(桌面/服务器)上运行单个 Gateway(主节点)并让客户端连接到它,来支持"通过 SSH 远程访问"。
本仓库通过在专用主机(桌面/服务器)上运行单个 Gateway网关(主节点)并让客户端连接到它,来支持"通过 SSH 远程访问"。
- 对于**操作者(你 / macOS 应用)**:SSH 隧道是通用的后备方案。
- 对于**节点(iOS/Android 及未来设备)**:连接到 Gateway **WebSocket**(根据需要通过局域网/tailnet 或 SSH 隧道)。
- 对于**节点(iOS/Android 及未来设备)**:连接到 Gateway网关**WebSocket**(根据需要通过局域网/tailnet 或 SSH 隧道)。
## 核心思路
- Gateway WebSocket 绑定到你配置端口上的**回环地址**(默认为 18789)。
- 对于远程使用,你通过 SSH 转发该回环端口(或使用 tailnet/VPN 以减少隧道需求)。
- Gateway网关 WebSocket 绑定到你配置端口上的**local loopback**(默认为 18789)。
- 对于远程使用,你通过 SSH 转发该 local loopback 端口(或使用 tailnet/VPN 以减少隧道需求)。
## 常见的 VPN/tailnet 设置(智能体运行的位置)
将 **Gateway 主机**视为"智能体运行的位置"。它拥有会话、认证配置、渠道和状态。
将 **Gateway网关主机**视为"智能体运行的位置"。它拥有会话、认证配置、渠道和状态。
你的笔记本/桌面(及节点)连接到该主机。
### 1) 在 tailnet 中常驻运行的 GatewayVPS 或家庭服务器)
### 1) 在 tailnet 中常驻运行的 Gateway网关VPS 或家庭服务器)
在持久化主机上运行 Gateway,通过 **Tailscale** 或 SSH 访问。
在持久化主机上运行 Gateway网关,通过 **Tailscale** 或 SSH 访问。
- **最佳体验:**保持 `gateway.bind: "loopback"` 并使用 **Tailscale Serve** 提供控制界面。
- **后备方案:**保持回环地址 + 从需要访问的任何机器建立 SSH 隧道。
- **后备方案:**保持 local loopback + 从需要访问的任何机器建立 SSH 隧道。
- **示例:**[exe.dev](/platforms/exe-dev)(简易虚拟机)或 [Hetzner](/platforms/hetzner)(生产 VPS)。
当你的笔记本经常休眠但希望智能体始终在线时,这是理想方案。
### 2) 家庭桌面运行 Gateway,笔记本作为远程控制
### 2) 家庭桌面运行 Gateway网关,笔记本作为远程控制
笔记本**不**运行智能体。它通过远程连接:
@@ -48,34 +48,34 @@ x-i18n:
操作指南:[macOS 远程访问](/platforms/mac/remote)。
### 3) 笔记本运行 Gateway,从其他机器远程访问
### 3) 笔记本运行 Gateway网关,从其他机器远程访问
保持 Gateway 本地运行但安全地暴露它:
保持 Gateway网关本地运行但安全地暴露它:
- 从其他机器通过 SSH 隧道连接到笔记本,或
- 通过 Tailscale Serve 提供控制界面并保持 Gateway 仅绑定回环地址
- 通过 Tailscale Serve 提供控制界面并保持 Gateway网关仅绑定 local loopback
指南:[Tailscale](/gateway/tailscale) 和 [Web 概览](/web)。
## 命令流程(什么在哪里运行)
一个 Gateway 服务拥有状态和渠道。节点是外围设备。
一个 Gateway网关服务拥有状态和渠道。节点是外围设备。
流程示例(Telegram → 节点):
- Telegram 消息到达 **Gateway**
- Gateway 运行**智能体**并决定是否调用节点工具。
- Gateway 通过 Gateway WebSocket`node.*` RPC)调用**节点**。
- 节点返回结果;Gateway 将回复发送回 Telegram。
- Telegram 消息到达 **Gateway网关**
- Gateway网关运行**智能体**并决定是否调用节点工具。
- Gateway网关通过 Gateway网关 WebSocket`node.*` RPC)调用**节点**。
- 节点返回结果;Gateway网关将回复发送回 Telegram。
说明:
- **节点不运行 Gateway 服务。**每台主机只应运行一个 Gateway,除非你有意运行隔离的配置文件(参见[多 Gateway](/gateway/multiple-gateways))。
- macOS 应用"节点模式"只是通过 Gateway WebSocket 连接的节点客户端。
- **节点不运行 Gateway网关服务。**每台主机只应运行一个 Gateway网关,除非你有意运行隔离的配置文件(参见[多 Gateway网关](/gateway/multiple-gateways))。
- macOS 应用"节点模式"只是通过 Gateway网关 WebSocket 连接的节点客户端。
## SSH 隧道(CLI + 工具)
创建到远程 Gateway WebSocket 的本地隧道:
创建到远程 Gateway网关 WebSocket 的本地隧道:
```bash
ssh -N -L 18789:127.0.0.1:18789 user@host
@@ -83,7 +83,7 @@ ssh -N -L 18789:127.0.0.1:18789 user@host
隧道建立后:
- `openclaw health``openclaw status --deep` 现在通过 `ws://127.0.0.1:18789` 访问远程 Gateway。
- `openclaw health``openclaw status --deep` 现在通过 `ws://127.0.0.1:18789` 访问远程 Gateway网关
- `openclaw gateway {status,health,send,agent,call}` 也可以在需要时通过 `--url` 指向转发的 URL。
注意:将 `18789` 替换为你配置的 `gateway.port`(或 `--port`/`OPENCLAW_GATEWAY_PORT`)。
@@ -104,11 +104,11 @@ ssh -N -L 18789:127.0.0.1:18789 user@host
}
```
当 Gateway 仅绑定回环地址时,保持 URL 为 `ws://127.0.0.1:18789` 并先打开 SSH 隧道。
当 Gateway网关仅绑定 local loopback 时,保持 URL 为 `ws://127.0.0.1:18789` 并先打开 SSH 隧道。
## 通过 SSH 访问聊天界面
WebChat 不再使用单独的 HTTP 端口。SwiftUI 聊天界面直接连接到 Gateway WebSocket。
WebChat 不再使用单独的 HTTP 端口。SwiftUI 聊天界面直接连接到 Gateway网关 WebSocket。
- 通过 SSH 转发 `18789`(参见上文),然后将客户端连接到 `ws://127.0.0.1:18789`
- 在 macOS 上,建议使用应用的"通过 SSH 远程连接"模式,它会自动管理隧道。
@@ -121,10 +121,10 @@ macOS 菜单栏应用可以端到端驱动相同的设置(远程状态检查
## 安全规则(远程/VPN
简短版本:**保持 Gateway 仅绑定回环地址**,除非你确定需要绑定其他地址。
简短版本:**保持 Gateway网关仅绑定 local loopback**,除非你确定需要绑定其他地址。
- **回环地址 + SSH/Tailscale Serve** 是最安全的默认设置(无公开暴露)。
- **非回环绑定**`lan`/`tailnet`/`custom`,或回环不可用时的 `auto`)必须使用认证令牌/密码。
- **local loopback + SSH/Tailscale Serve** 是最安全的默认设置(无公开暴露)。
- **非 local loopback 绑定**`lan`/`tailnet`/`custom`,或 local loopback 不可用时的 `auto`)必须使用认证令牌/密码。
- `gateway.remote.token` **仅**用于远程 CLI 调用——它**不会**启用本地认证。
- `gateway.remote.tlsFingerprint` 在使用 `wss://` 时固定远程 TLS 证书。
- **Tailscale Serve** 可以在 `gateway.auth.allowTailscale: true` 时通过身份头进行认证。如果你希望使用令牌/密码,请将其设置为 `false`
@@ -43,10 +43,10 @@ openclaw sandbox explain --json
沙箱由 `agents.defaults.sandbox.mode` 控制:
- `"off"`:所有内容在宿主机上运行。
- `"non-main"`:仅非主会话被沙箱(对群组/渠道来说常常出乎意料)。
- `"all"`:所有内容都被沙箱
- `"non-main"`:仅非主会话被沙箱隔离(对群组/渠道来说常常出乎意料)。
- `"all"`:所有内容都被沙箱隔离
完整的配置矩阵(范围、工作区挂载、镜像)请参阅[沙箱](/gateway/sandboxing)。
完整的配置矩阵(范围、工作区挂载、镜像)请参阅[沙箱隔离](/gateway/sandboxing)。
### 绑定挂载(安全快速检查)
@@ -64,7 +64,7 @@ openclaw sandbox explain --json
- **提供商工具配置文件**`tools.byProvider[provider].profile``agents.list[].tools.byProvider[provider].profile`
- **全局/每智能体工具策略**`tools.allow`/`tools.deny``agents.list[].tools.allow`/`agents.list[].tools.deny`
- **提供商工具策略**`tools.byProvider[provider].allow/deny``agents.list[].tools.byProvider[provider].allow/deny`
- **沙箱工具策略**(仅在沙箱时适用):`tools.sandbox.tools.allow`/`tools.sandbox.tools.deny``agents.list[].tools.sandbox.tools.*`
- **沙箱工具策略**(仅在沙箱隔离时适用):`tools.sandbox.tools.allow`/`tools.sandbox.tools.deny``agents.list[].tools.sandbox.tools.*`
经验法则:
@@ -109,7 +109,7 @@ openclaw sandbox explain --json
- 如果你处于沙箱中,`/elevated on`(或带 `elevated: true``exec`)会在宿主机上运行(审批可能仍然适用)。
- 使用 `/elevated full` 可跳过当前会话的 exec 审批。
- 如果你已经在直接运行模式下,提权实际上是无操作(仍然受门控限制)。
- 提权模式**不是**技能范围的,也**不会**覆盖工具允许/拒绝策略。
- 提权模式**不是**Skills 范围的,也**不会**覆盖工具允许/拒绝策略。
- `/exec` 与提权模式是分开的。它仅为授权发送者调整每会话的 exec 默认设置。
门控:
@@ -130,6 +130,6 @@ openclaw sandbox explain --json
- 从 `tools.sandbox.tools.deny`(或每智能体 `agents.list[].tools.sandbox.tools.deny`)中移除它
- 或将其添加到 `tools.sandbox.tools.allow`(或每智能体允许列表)
### "我以为这是主会话,为什么被沙箱了?"
### "我以为这是主会话,为什么被沙箱隔离了?"
`"non-main"` 模式下,群组/渠道键*不是*主会话。请使用主会话键(通过 `sandbox explain` 查看)或将模式切换为 `"off"`
+10 -10
View File
@@ -17,11 +17,11 @@ x-i18n:
OpenClaw 可以**在 Docker 容器内运行工具**以缩小影响范围。
此功能是**可选的**,通过配置控制(`agents.defaults.sandbox`
`agents.list[].sandbox`)。如果沙箱未启用,工具将在宿主机上运行。
Gateway 始终在宿主机上运行;启用沙箱后,工具执行将在隔离的沙箱中进行。
Gateway网关始终在宿主机上运行;启用沙箱后,工具执行将在隔离的沙箱中进行。
这并非完美的安全边界,但在模型执行了错误操作时,能有效限制文件系统和进程访问。
## 哪些内容会被沙箱
## 哪些内容会被沙箱隔离
- 工具执行(`exec``read``write``edit``apply_patch``process` 等)。
- 可选的沙箱浏览器(`agents.defaults.sandbox.browser`)。
@@ -30,9 +30,9 @@ Gateway 始终在宿主机上运行;启用沙箱后,工具执行将在隔离
- `agents.defaults.sandbox.browser.allowHostControl` 允许沙箱会话显式访问宿主机浏览器。
- 可选的允许列表控制 `target: "custom"``allowedControlUrls``allowedControlHosts``allowedControlPorts`
未被沙箱的内容:
未被沙箱隔离的内容:
- Gateway 进程本身。
- Gateway网关进程本身。
- 任何被显式允许在宿主机上运行的工具(例如 `tools.elevated`)。
- **提权 exec 在宿主机上运行,会绕过沙箱。**
- 如果沙箱未启用,`tools.elevated` 不会改变执行方式(本身已在宿主机上)。参见[提权模式](/tools/elevated)。
@@ -45,7 +45,7 @@ Gateway 始终在宿主机上运行;启用沙箱后,工具执行将在隔离
- `"non-main"`:仅对**非主**会话启用沙箱(如果你希望普通聊天在宿主机上运行,这是默认值)。
- `"all"`:所有会话都在沙箱中运行。
注意:`"non-main"` 基于 `session.mainKey`(默认为 `"main"`),而非智能体 ID。
群组/渠道会话使用各自的键,因此它们被视为非主会话,会被沙箱
群组/渠道会话使用各自的键,因此它们被视为非主会话,会被沙箱隔离
## 作用域
@@ -64,8 +64,8 @@ Gateway 始终在宿主机上运行;启用沙箱后,工具执行将在隔离
- `"rw"`:以读写方式将智能体工作区挂载到 `/workspace`
入站媒体会被复制到活动沙箱工作区中(`media/inbound/*`)。
技能说明:`read` 工具以沙箱为根目录。当 `workspaceAccess: "none"` 时,
OpenClaw 会将符合条件的技能镜像到沙箱工作区(`.../skills`)中以便读取。当设为 `"rw"` 时,工作区技能可从
Skills 说明:`read` 工具以沙箱为根目录。当 `workspaceAccess: "none"` 时,
OpenClaw 会将符合条件的 Skills 镜像到沙箱工作区(`.../skills`)中以便读取。当设为 `"rw"` 时,工作区 Skills 可从
`/workspace/skills` 读取。
## 自定义绑定挂载
@@ -118,7 +118,7 @@ OpenClaw 会将符合条件的技能镜像到沙箱工作区(`.../skills`
scripts/sandbox-setup.sh
```
注意:默认镜像**不包含** Node。如果技能需要 Node(或
注意:默认镜像**不包含** Node。如果 Skills 需要 Node(或
其他运行时),请构建自定义镜像或通过
`sandbox.docker.setupCommand` 安装(需要网络出口 + 可写根文件系统 +
root 用户)。
@@ -132,7 +132,7 @@ scripts/sandbox-browser-setup.sh
默认情况下,沙箱容器以**无网络**方式运行。
可通过 `agents.defaults.sandbox.docker.network` 覆盖。
Docker 安装和容器化 Gateway 的说明在这里:
Docker 安装和容器化 Gateway网关的说明在这里:
[Docker](/install/docker)
## setupCommand(一次性容器设置)
@@ -151,7 +151,7 @@ Docker 安装和容器化 Gateway 的说明在这里:
- `readOnlyRoot: true` 会阻止写入;请设置 `readOnlyRoot: false` 或构建自定义镜像。
- 包安装需要 root 用户(省略 `user` 或设置 `user: "0:0"`)。
- 沙箱 exec **不会**继承宿主机的 `process.env`。请使用
`agents.defaults.sandbox.docker.env`(或自定义镜像)来设置技能 API 密钥。
`agents.defaults.sandbox.docker.env`(或自定义镜像)来设置 Skills API 密钥。
## 工具策略 + 逃逸机制
@@ -55,9 +55,9 @@ cd openclaw-formal-models
make <target>
```
### Gateway 暴露与开放 Gateway 错误配置
### Gateway网关暴露与开放 Gateway网关错误配置
**声明:** 在未启用认证的情况下绑定到非回环地址可能导致远程入侵 / 增加暴露面;令牌/密码可以阻止未授权的攻击者(基于模型假设)。
**声明:** 在未启用认证的情况下绑定到非 local loopback 可能导致远程入侵 / 增加暴露面;令牌/密码可以阻止未授权的攻击者(基于模型假设)。
- 绿色运行:
- `make gateway-exposure-v2`
+55 -55
View File
@@ -26,7 +26,7 @@ openclaw security audit --deep
openclaw security audit --fix
```
它会标记常见的安全隐患(Gateway 认证暴露、浏览器控制暴露、提升的允许列表、文件系统权限)。
它会标记常见的安全隐患(Gateway网关认证暴露、浏览器控制暴露、提升的允许列表、文件系统权限)。
`--fix` 会应用安全防护措施:
@@ -48,13 +48,13 @@ OpenClaw 既是一个产品也是一个实验:你正在将前沿模型的行
- **入站访问**(私聊策略、群组策略、允许列表):陌生人能否触发机器人?
- **工具影响范围**(提升的工具 + 开放房间):提示注入是否可能转化为 shell/文件/网络操作?
- **网络暴露**Gateway 绑定/认证、Tailscale Serve/Funnel、弱/短认证令牌)。
- **网络暴露**Gateway网关绑定/认证、Tailscale Serve/Funnel、弱/短认证令牌)。
- **浏览器控制暴露**(远程节点、中继端口、远程 CDP 端点)。
- **本地磁盘卫生**(权限、符号链接、配置包含、"同步文件夹"路径)。
- **插件**(存在扩展但没有显式允许列表)。
- **模型卫生**(当配置的模型看起来是旧版时发出警告;非硬性阻止)。
如果运行 `--deep`OpenClaw 还会尝试对 Gateway 进行尽力而为的实时探测。
如果运行 `--deep`OpenClaw 还会尝试对 Gateway网关进行尽力而为的实时探测。
## 凭据存储映射
@@ -89,9 +89,9 @@ OpenClaw 既是一个产品也是一个实验:你正在将前沿模型的行
## 反向代理配置
如果你在反向代理(nginx、Caddy、Traefik 等)后面运行 Gateway,应配置 `gateway.trustedProxies` 以实现正确的客户端 IP 检测。
如果你在反向代理(nginx、Caddy、Traefik 等)后面运行 Gateway网关,应配置 `gateway.trustedProxies` 以实现正确的客户端 IP 检测。
当 Gateway 检测到来自**不在** `trustedProxies` 中的地址的代理头(`X-Forwarded-For``X-Real-IP`)时,它**不会**将连接视为本地客户端。如果 Gateway 认证已禁用,这些连接将被拒绝。这可以防止认证绕过,否则代理连接会看起来像来自 localhost 并获得自动信任。
当 Gateway网关检测到来自**不在** `trustedProxies` 中的地址的代理头(`X-Forwarded-For``X-Real-IP`)时,它**不会**将连接视为本地客户端。如果 Gateway网关认证已禁用,这些连接将被拒绝。这可以防止认证绕过,否则代理连接会看起来像来自 localhost 并获得自动信任。
```yaml
gateway:
@@ -102,7 +102,7 @@ gateway:
password: ${OPENCLAW_GATEWAY_PASSWORD}
```
配置 `trustedProxies` 后,Gateway 将使用 `X-Forwarded-For` 头来确定真实客户端 IP 以进行本地客户端检测。请确保你的代理覆写(而非追加)传入的 `X-Forwarded-For` 头以防止欺骗。
配置 `trustedProxies` 后,Gateway网关将使用 `X-Forwarded-For` 头来确定真实客户端 IP 以进行本地客户端检测。请确保你的代理覆写(而非追加)传入的 `X-Forwarded-For` 头以防止欺骗。
## 本地会话日志存储在磁盘上
@@ -110,20 +110,20 @@ OpenClaw 将会话记录存储在 `~/.openclaw/agents/<agentId>/sessions/*.jsonl
## 节点执行(system.run
如果 macOS 节点已配对,Gateway 可以在该节点上调用 `system.run`。这是在 Mac 上的**远程代码执行**:
如果 macOS 节点已配对,Gateway网关可以在该节点上调用 `system.run`。这是在 Mac 上的**远程代码执行**:
- 需要节点配对(批准 + 令牌)。
- 在 Mac 上通过**设置 → 执行审批**(安全 + 询问 + 允许列表)控制。
- 如果你不想要远程执行,请将安全级别设为**拒绝**并移除该 Mac 的节点配对。
## 动态技能(监视器/远程节点)
## 动态 Skills(监视器/远程节点)
OpenClaw 可以在会话中刷新技能列表:
OpenClaw 可以在会话中刷新 Skills 列表:
- **技能监视器**:对 `SKILL.md` 的更改可以在下一个智能体回合更新技能快照。
- **远程节点**:连接 macOS 节点可以使 macOS 专属技能变为可用(基于二进制探测)。
- **Skills 监视器**:对 `SKILL.md` 的更改可以在下一个智能体回合更新 Skills 快照。
- **远程节点**:连接 macOS 节点可以使 macOS 专属 Skills 变为可用(基于二进制探测)。
技能文件夹视为**受信任的代码**,并限制谁可以修改它们。
Skills 文件夹视为**受信任的代码**,并限制谁可以修改它们。
## 威胁模型
@@ -158,12 +158,12 @@ OpenClaw 的立场:
## 插件/扩展
插件在 Gateway **进程内**运行。将它们视为受信任的代码:
插件在 Gateway网关 **进程内**运行。将它们视为受信任的代码:
- 只安装来自你信任的来源的插件。
- 优先使用显式的 `plugins.allow` 允许列表。
- 启用前检查插件配置。
- 插件更改后重启 Gateway。
- 插件更改后重启 Gateway网关
- 如果你从 npm 安装插件(`openclaw plugins install <npm-spec>`),请视同运行不受信任的代码:
- 安装路径为 `~/.openclaw/extensions/<pluginId>/`(或 `$OPENCLAW_STATE_DIR/extensions/<pluginId>/`)。
- OpenClaw 使用 `npm pack` 然后在该目录中运行 `npm install --omit=dev`(npm 生命周期脚本可以在安装期间执行代码)。
@@ -226,7 +226,7 @@ OpenClaw 有两个独立的"谁可以触发我?"层级:
- 在群组中优先使用提及门控;避免在公共房间中使用"始终在线"的机器人。
- 默认将链接、附件和粘贴的指令视为敌意内容。
- 在沙箱中运行敏感的工具执行;将密钥放在智能体可达文件系统之外。
- 注意:沙箱是选择加入的。如果沙箱模式关闭,即使 tools.exec.host 默认为 sandboxexec 也会在 Gateway 主机上运行,且主机 exec 不需要审批,除非你设置 host=gateway 并配置执行审批。
- 注意:沙箱是选择加入的。如果沙箱模式关闭,即使 tools.exec.host 默认为 sandboxexec 也会在 Gateway网关主机上运行,且主机 exec 不需要审批,除非你设置 host=gateway 并配置执行审批。
- 将高风险工具(`exec``browser``web_fetch``web_search`)限制在受信任的智能体或显式允许列表中。
- **模型选择很重要:** 较旧/旧版模型对提示注入和工具滥用的抵抗力可能较弱。对于启用工具的机器人,优先使用现代的、经过指令强化的模型。我们推荐 Anthropic Opus 4.5,因为它在识别提示注入方面表现出色(参见["安全方面的进步"](https://www.anthropic.com/news/claude-opus-4-5))。
@@ -246,7 +246,7 @@ OpenClaw 有两个独立的"谁可以触发我?"层级:
- 使用只读或工具禁用的**阅读器智能体**来总结不受信任的内容,然后将摘要传递给你的主智能体。
- 除非需要,否则为启用工具的智能体关闭 `web_search` / `web_fetch` / `browser`
- 为任何接触不受信任输入的智能体启用沙箱和严格的工具允许列表。
- 将密钥保存在提示之外;通过 Gateway 主机上的环境变量/配置传递。
- 将密钥保存在提示之外;通过 Gateway网关主机上的环境变量/配置传递。
### 模型强度(安全提示)
@@ -275,14 +275,14 @@ OpenClaw 有两个独立的"谁可以触发我?"层级:
假设"被入侵"意味着:有人进入了可以触发机器人的房间,或者令牌泄露了,或者插件/工具做了意外的事情。
1. **阻止影响扩散**
- 禁用提升的工具(或停止 Gateway)直到你了解发生了什么。
- 禁用提升的工具(或停止 Gateway网关)直到你了解发生了什么。
- 锁定入站接口(私聊策略、群组允许列表、提及门控)。
2. **轮换密钥**
- 轮换 `gateway.auth` 令牌/密码。
- 轮换 `hooks.token`(如果使用)并撤销任何可疑的节点配对。
- 撤销/轮换模型提供商凭据(API 密钥/OAuth)。
3. **检查产物**
- 检查 Gateway 日志和最近的会话/记录,查找意外的工具调用。
- 检查 Gateway网关日志和最近的会话/记录,查找意外的工具调用。
- 检查 `extensions/` 并移除任何你不完全信任的内容。
4. **重新运行审计**
- `openclaw security audit --deep` 并确认报告是干净的。
@@ -307,7 +307,7 @@ OpenClaw 有两个独立的"谁可以触发我?"层级:
### 0) 文件权限
在 Gateway 主机上保持配置和状态私有:
在 Gateway网关主机上保持配置和状态私有:
- `~/.openclaw/openclaw.json``600`(仅用户可读写)
- `~/.openclaw``700`(仅用户)
@@ -316,25 +316,25 @@ OpenClaw 有两个独立的"谁可以触发我?"层级:
### 0.4) 网络暴露(绑定 + 端口 + 防火墙)
Gateway 在单个端口上复用 **WebSocket + HTTP**
Gateway网关在单个端口上复用 **WebSocket + HTTP**
- 默认:`18789`
- 配置/标志/环境变量:`gateway.port``--port``OPENCLAW_GATEWAY_PORT`
绑定模式控制 Gateway 监听的位置:
绑定模式控制 Gateway网关监听的位置:
- `gateway.bind: "loopback"`(默认):只有本地客户端可以连接。
- 非回环绑定(`"lan"``"tailnet"``"custom"`)扩大了攻击面。仅在使用共享令牌/密码和真实防火墙时使用。
- 非 local loopback 绑定(`"lan"``"tailnet"``"custom"`)扩大了攻击面。仅在使用共享令牌/密码和真实防火墙时使用。
经验法则:
- 优先使用 Tailscale Serve 而非 LAN 绑定(Serve 将 Gateway 保持在回环上,Tailscale 处理访问)。
- 优先使用 Tailscale Serve 而非 LAN 绑定(Serve 将 Gateway网关保持在 local loopback 上,Tailscale 处理访问)。
- 如果必须绑定到 LAN,将端口防火墙限制到严格的源 IP 允许列表;不要广泛地进行端口转发。
- 永远不要在 `0.0.0.0` 上未认证地暴露 Gateway。
- 永远不要在 `0.0.0.0` 上未认证地暴露 Gateway网关
### 0.4.1) mDNS/Bonjour 发现(信息泄露)
Gateway 通过 mDNS(端口 5353 上的 `_openclaw-gw._tcp`)广播其存在以供本地设备发现。在完整模式下,这包括可能暴露运营细节的 TXT 记录:
Gateway网关通过 mDNS(端口 5353 上的 `_openclaw-gw._tcp`)广播其存在以供本地设备发现。在完整模式下,这包括可能暴露运营细节的 TXT 记录:
- `cliPath`:CLI 二进制文件的完整文件系统路径(暴露用户名和安装位置)
- `sshPort`:公布主机上的 SSH 可用性
@@ -344,7 +344,7 @@ Gateway 通过 mDNS(端口 5353 上的 `_openclaw-gw._tcp`)广播其存在
**建议:**
1. **最小模式**(默认,推荐用于暴露的 Gateway):从 mDNS 广播中省略敏感字段:
1. **最小模式**(默认,推荐用于暴露的 Gateway网关):从 mDNS 广播中省略敏感字段:
```json5
{
@@ -376,13 +376,13 @@ Gateway 通过 mDNS(端口 5353 上的 `_openclaw-gw._tcp`)广播其存在
4. **环境变量**(替代方案):设置 `OPENCLAW_DISABLE_BONJOUR=1` 以在不更改配置的情况下禁用 mDNS。
在最小模式下,Gateway 仍然广播足够的设备发现信息(`role``gatewayPort``transport`),但省略 `cliPath``sshPort`。需要 CLI 路径信息的应用可以通过已认证的 WebSocket 连接获取。
在最小模式下,Gateway网关仍然广播足够的设备发现信息(`role``gatewayPort``transport`),但省略 `cliPath``sshPort`。需要 CLI 路径信息的应用可以通过已认证的 WebSocket 连接获取。
### 0.5) 锁定 Gateway WebSocket(本地认证)
### 0.5) 锁定 Gateway网关 WebSocket(本地认证)
Gateway 认证**默认启用**。如果未配置令牌/密码,Gateway 会拒绝 WebSocket 连接(失败即关闭)。
Gateway网关认证**默认启用**。如果未配置令牌/密码,Gateway网关会拒绝 WebSocket 连接(失败即关闭)。
手引导向导默认生成令牌(即使对于回环),因此本地客户端也必须进行认证。
手引导向导默认生成令牌(即使对于 local loopback),因此本地客户端也必须进行认证。
设置令牌以使**所有** WS 客户端必须认证:
@@ -401,7 +401,7 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
本地设备配对:
- 对于**本地**连接(回环或 Gateway 主机自身的 tailnet 地址),设备配对会自动批准,以保持同主机客户端的流畅。
- 对于**本地**连接(local loopback 或 Gateway网关主机自身的 tailnet 地址),设备配对会自动批准,以保持同主机客户端的流畅。
- 其他 tailnet 对等节点**不被**视为本地;它们仍然需要配对批准。
认证模式:
@@ -412,31 +412,31 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
轮换检查清单(令牌/密码):
1. 生成/设置新密钥(`gateway.auth.token``OPENCLAW_GATEWAY_PASSWORD`)。
2. 重启 Gateway(如果 macOS 应用管理 Gateway,则重启 macOS 应用)。
3. 更新所有远程客户端(调用 Gateway 的机器上的 `gateway.remote.token` / `.password`)。
2. 重启 Gateway网关(如果 macOS 应用管理 Gateway网关,则重启 macOS 应用)。
3. 更新所有远程客户端(调用 Gateway网关的机器上的 `gateway.remote.token` / `.password`)。
4. 验证你无法再使用旧凭据连接。
### 0.6) Tailscale Serve 身份头
`gateway.auth.allowTailscale``true`Serve 的默认值)时,OpenClaw 接受 Tailscale Serve 身份头(`tailscale-user-login`)作为认证。OpenClaw 通过本地 Tailscale 守护进程(`tailscale whois`)解析 `x-forwarded-for` 地址并将其与头匹配来验证身份。这仅在请求命中回环且包含由 Tailscale 注入的 `x-forwarded-for``x-forwarded-proto``x-forwarded-host` 时触发。
`gateway.auth.allowTailscale``true`Serve 的默认值)时,OpenClaw 接受 Tailscale Serve 身份头(`tailscale-user-login`)作为认证。OpenClaw 通过本地 Tailscale 守护进程(`tailscale whois`)解析 `x-forwarded-for` 地址并将其与头匹配来验证身份。这仅在请求命中 local loopback 且包含由 Tailscale 注入的 `x-forwarded-for``x-forwarded-proto``x-forwarded-host` 时触发。
**安全规则:** 不要从你自己的反向代理转发这些头。如果你在 Gateway 前面终止 TLS 或做代理,请禁用 `gateway.auth.allowTailscale` 并改用令牌/密码认证。
**安全规则:** 不要从你自己的反向代理转发这些头。如果你在 Gateway网关前面终止 TLS 或做代理,请禁用 `gateway.auth.allowTailscale` 并改用令牌/密码认证。
受信任的代理:
- 如果你在 Gateway 前面终止 TLS,请将 `gateway.trustedProxies` 设置为你的代理 IP。
- 如果你在 Gateway网关前面终止 TLS,请将 `gateway.trustedProxies` 设置为你的代理 IP。
- OpenClaw 将信任来自这些 IP 的 `x-forwarded-for`(或 `x-real-ip`)来确定客户端 IP,用于本地配对检查和 HTTP 认证/本地检查。
- 确保你的代理**覆写** `x-forwarded-for` 并阻止对 Gateway 端口的直接访问。
- 确保你的代理**覆写** `x-forwarded-for` 并阻止对 Gateway网关端口的直接访问。
参见 [Tailscale](/gateway/tailscale) 和 [Web 概述](/web)。
### 0.6.1) 通过节点主机进行浏览器控制(推荐)
如果你的 Gateway 是远程的但浏览器在另一台机器上运行,请在浏览器机器上运行**节点主机**并让 Gateway 代理浏览器操作(参见[浏览器工具](/tools/browser))。将节点配对视为管理员级别的访问。
如果你的 Gateway网关是远程的但浏览器在另一台机器上运行,请在浏览器机器上运行**节点主机**并让 Gateway网关代理浏览器操作(参见[浏览器工具](/tools/browser))。将节点配对视为管理员级别的访问。
推荐模式:
- 将 Gateway 和节点主机保持在同一个 tailnetTailscale)上。
- 将 Gateway网关和节点主机保持在同一个 tailnetTailscale)上。
- 有意配对节点;如果不需要,禁用浏览器代理路由。
避免:
@@ -448,7 +448,7 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
假设 `~/.openclaw/`(或 `$OPENCLAW_STATE_DIR/`)下的任何内容都可能包含密钥或私有数据:
- `openclaw.json`:配置可能包含令牌(Gateway、远程 Gateway)、提供商设置和允许列表。
- `openclaw.json`:配置可能包含令牌(Gateway网关、远程 Gateway网关)、提供商设置和允许列表。
- `credentials/**`:渠道凭据(例如:WhatsApp 凭据)、配对允许列表、旧版 OAuth 导入。
- `agents/<agentId>/agent/auth-profiles.json`API 密钥 + OAuth 令牌(从旧版 `credentials/oauth.json` 导入)。
- `agents/<agentId>/sessions/**`:会话记录(`*.jsonl`+ 路由元数据(`sessions.json`),可能包含私人消息和工具输出。
@@ -458,14 +458,14 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
加固建议:
- 保持权限收紧(目录 `700`,文件 `600`)。
- 在 Gateway 主机上使用全盘加密。
- 如果主机是共享的,优先为 Gateway 使用专用的操作系统用户账户。
- 在 Gateway网关主机上使用全盘加密。
- 如果主机是共享的,优先为 Gateway网关使用专用的操作系统用户账户。
### 0.8) 日志 + 记录(脱敏 + 保留)
即使访问控制正确,日志和记录也可能泄露敏感信息:
- Gateway 日志可能包含工具摘要、错误和 URL。
- Gateway网关日志可能包含工具摘要、错误和 URL。
- 会话记录可能包含粘贴的密钥、文件内容、命令输出和链接。
建议:
@@ -527,7 +527,7 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
### 5) 安全基线(复制/粘贴)
一个"安全默认"配置,保持 Gateway 私有,要求私聊配对,并避免始终在线的群组机器人:
一个"安全默认"配置,保持 Gateway网关私有,要求私聊配对,并避免始终在线的群组机器人:
```json5
{
@@ -554,8 +554,8 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
两种互补方法:
- **在 Docker 中运行完整 Gateway**(容器边界):[Docker](/install/docker)
- **工具沙箱**`agents.defaults.sandbox`,主机 Gateway + Docker 隔离的工具):[沙箱](/gateway/sandboxing)
- **在 Docker 中运行完整 Gateway网关**(容器边界):[Docker](/install/docker)
- **工具沙箱**`agents.defaults.sandbox`,主机 Gateway网关 + Docker 隔离的工具):[沙箱](/gateway/sandboxing)
注意:为防止跨智能体访问,保持 `agents.defaults.sandbox.scope``"agent"`(默认)或 `"session"` 以实现更严格的按会话隔离。`scope: "shared"` 使用单个容器/工作区。
@@ -576,15 +576,15 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
- 除非你信任沙箱智能体,否则为其禁用主机浏览器控制。
- 将浏览器下载视为不受信任的输入;优先使用隔离的下载目录。
- 如果可能,在智能体配置文件中禁用浏览器同步/密码管理器(减小影响范围)。
- 对于远程 Gateway,假设"浏览器控制"等同于对该配置文件可达内容的"操作员访问"。
- 将 Gateway 和节点主机保持在仅 tailnet 内;避免将中继/控制端口暴露到 LAN 或公共互联网。
- 对于远程 Gateway网关,假设"浏览器控制"等同于对该配置文件可达内容的"操作员访问"。
- 将 Gateway网关和节点主机保持在仅 tailnet 内;避免将中继/控制端口暴露到 LAN 或公共互联网。
- Chrome 扩展中继的 CDP 端点有认证保护;只有 OpenClaw 客户端可以连接。
- 不需要时禁用浏览器代理路由(`gateway.nodes.browser.mode="off"`)。
- Chrome 扩展中继模式**并非**"更安全";它可以接管你现有的 Chrome 标签页。假设它可以在该标签页/配置文件可达的范围内以你的身份行事。
## 每个智能体的访问配置(多智能体)
通过多智能体路由,每个智能体可以拥有自己的沙箱 + 工具策略:使用这个来为每个智能体提供**完全访问**、**只读**或**无访问**。参见[多智能体沙箱与工具](/multi-agent-sandbox-tools)了解完整详情和优先级规则。
通过多智能体路由,每个智能体可以拥有自己的沙箱 + 工具策略:使用这个来为每个智能体提供**完全访问**、**只读**或**无访问**。参见[多智能体沙箱与工具](/multi-agent-sandbox-tools)了解详情和优先级规则。
常见用例:
@@ -698,28 +698,28 @@ Doctor 可以为你生成一个:`openclaw doctor --generate-gateway-token`。
### 遏制
1. **停止它:** 停止 macOS 应用(如果它管理 Gateway)或终止你的 `openclaw gateway` 进程。
1. **停止它:** 停止 macOS 应用(如果它管理 Gateway网关)或终止你的 `openclaw gateway` 进程。
2. **关闭暴露:** 设置 `gateway.bind: "loopback"`(或禁用 Tailscale Funnel/Serve),直到你了解发生了什么。
3. **冻结访问:** 将有风险的私聊/群组切换为 `dmPolicy: "disabled"` / 要求提及,并移除 `"*"` 全部允许条目(如果有的话)。
### 轮换(如果密钥泄露则假设已被入侵)
1. 轮换 Gateway 认证(`gateway.auth.token` / `OPENCLAW_GATEWAY_PASSWORD`)并重启。
2. 轮换远程客户端密钥(任何可以调用 Gateway 的机器上的 `gateway.remote.token` / `.password`)。
1. 轮换 Gateway网关认证(`gateway.auth.token` / `OPENCLAW_GATEWAY_PASSWORD`)并重启。
2. 轮换远程客户端密钥(任何可以调用 Gateway网关的机器上的 `gateway.remote.token` / `.password`)。
3. 轮换提供商/API 凭据(WhatsApp 凭据、Slack/Discord 令牌、`auth-profiles.json` 中的模型/API 密钥)。
### 审计
1. 检查 Gateway 日志:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`)。
1. 检查 Gateway网关日志:`/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`)。
2. 审查相关的记录:`~/.openclaw/agents/<agentId>/sessions/*.jsonl`
3. 审查最近的配置更改(任何可能扩大访问的更改:`gateway.bind``gateway.auth`、私聊/群组策略、`tools.elevated`、插件更改)。
### 收集报告
- 时间戳、Gateway 主机操作系统 + OpenClaw 版本
- 时间戳、Gateway网关主机操作系统 + OpenClaw 版本
- 会话记录 + 简短的日志尾部(脱敏后)
- 攻击者发送了什么 + 智能体做了什么
- Gateway 是否暴露在回环之外(LAN/Tailscale Funnel/Serve
- Gateway网关是否暴露在 local loopback 之外(LAN/Tailscale Funnel/Serve
## 密钥扫描(detect-secrets
+15 -15
View File
@@ -1,8 +1,8 @@
---
read_when:
- 将 Gateway 控制界面暴露到 localhost 之外
- 将 Gateway网关控制界面暴露到 localhost 之外
- 自动化 tailnet 或公共仪表盘访问
summary: 为 Gateway 仪表盘集成 Tailscale Serve/Funnel
summary: 为 Gateway网关仪表盘集成 Tailscale Serve/Funnel
title: Tailscale
x-i18n:
generated_at: "2026-02-01T20:39:04Z"
@@ -13,13 +13,13 @@ x-i18n:
workflow: 14
---
# TailscaleGateway 仪表盘)
# TailscaleGateway网关仪表盘)
OpenClaw 可以为 Gateway 仪表盘和 WebSocket 端口自动配置 Tailscale **Serve**tailnet)或 **Funnel**(公网)。这样 Gateway 仍然绑定在回环地址上,而由 Tailscale 提供 HTTPS、路由以及(对于 Serve)身份头信息。
OpenClaw 可以为 Gateway网关仪表盘和 WebSocket 端口自动配置 Tailscale **Serve**tailnet)或 **Funnel**(公网)。这样 Gateway网关仍然绑定在 local loopback 上,而由 Tailscale 提供 HTTPS、路由以及(对于 Serve)身份头信息。
## 模式
- `serve`:通过 `tailscale serve` 仅限 Tailnet 的 Serve。Gateway 保持在 `127.0.0.1` 上。
- `serve`:通过 `tailscale serve` 仅限 Tailnet 的 Serve。Gateway网关保持在 `127.0.0.1` 上。
- `funnel`:通过 `tailscale funnel` 提供公网 HTTPS。OpenClaw 要求设置共享密码。
- `off`:默认(不启用 Tailscale 自动化)。
@@ -30,7 +30,7 @@ OpenClaw 可以为 Gateway 仪表盘和 WebSocket 端口自动配置 Tailscale *
- `token`(设置了 `OPENCLAW_GATEWAY_TOKEN` 时的默认值)
- `password`(通过 `OPENCLAW_GATEWAY_PASSWORD` 或配置文件设置的共享密钥)
`tailscale.mode = "serve"``gateway.auth.allowTailscale``true` 时,有效的 Serve 代理请求可以通过 Tailscale 身份头(`tailscale-user-login`)进行认证,无需提供令牌/密码。OpenClaw 通过本地 Tailscale 守护进程(`tailscale whois`)解析 `x-forwarded-for` 地址,并将其与头信息匹配来验证身份。OpenClaw 仅在请求来自回环地址且带有 Tailscale 的 `x-forwarded-for``x-forwarded-proto``x-forwarded-host` 头时,才将其视为 Serve 请求。
`tailscale.mode = "serve"``gateway.auth.allowTailscale``true` 时,有效的 Serve 代理请求可以通过 Tailscale 身份头(`tailscale-user-login`)进行认证,无需提供令牌/密码。OpenClaw 通过本地 Tailscale 守护进程(`tailscale whois`)解析 `x-forwarded-for` 地址,并将其与头信息匹配来验证身份。OpenClaw 仅在请求来自 local loopback 且带有 Tailscale 的 `x-forwarded-for``x-forwarded-proto``x-forwarded-host` 头时,才将其视为 Serve 请求。
要强制使用显式凭据,请设置 `gateway.auth.allowTailscale: false` 或强制指定 `gateway.auth.mode: "password"`
## 配置示例
@@ -46,11 +46,11 @@ OpenClaw 可以为 Gateway 仪表盘和 WebSocket 端口自动配置 Tailscale *
}
```
打开:`https://<magicdns>/`(或配置的 `gateway.controlUi.basePath`
打开:`https://<magicdns>/`(或配置的 `gateway.controlUi.basePath`
### 仅限 Tailnet(绑定到 Tailnet IP
希望 Gateway 直接监听 Tailnet IP(不使用 Serve/Funnel)时,使用此方式。
希望 Gateway网关直接监听 Tailnet IP(不使用 Serve/Funnel)时,使用此方式。
```json5
{
@@ -66,7 +66,7 @@ OpenClaw 可以为 Gateway 仪表盘和 WebSocket 端口自动配置 Tailscale *
- 控制界面:`http://<tailscale-ip>:18789/`
- WebSocket`ws://<tailscale-ip>:18789`
注意:在此模式下,回环地址`http://127.0.0.1:18789`)将**不可用**。
注意:在此模式下,local loopback`http://127.0.0.1:18789`)将**不可用**。
### 公网(Funnel + 共享密码)
@@ -93,20 +93,20 @@ openclaw gateway --tailscale funnel --auth password
- Tailscale Serve/Funnel 要求已安装 `tailscale` CLI 并已登录。
- `tailscale.mode: "funnel"` 在认证模式不是 `password` 时将拒绝启动,以避免公网暴露。
- 如果希望 OpenClaw 在关闭时撤销 `tailscale serve``tailscale funnel` 配置,请设置 `gateway.tailscale.resetOnExit`
- 如果希望 OpenClaw 在关闭时撤销 `tailscale serve``tailscale funnel` 配置,请设置 `gateway.tailscale.resetOnExit`
- `gateway.bind: "tailnet"` 是直接绑定 Tailnet(无 HTTPS,无 Serve/Funnel)。
- `gateway.bind: "auto"` 优先使用回环地址;如果只需要 Tailnet,请使用 `tailnet`
- Serve/Funnel 仅暴露 **Gateway 控制界面 + WS**。节点通过同一个 Gateway WS 端点连接,因此 Serve 可用于节点访问。
- `gateway.bind: "auto"` 优先使用 local loopback;如果只需要 Tailnet,请使用 `tailnet`
- Serve/Funnel 仅暴露 **Gateway网关控制界面 + WS**。节点通过同一个 Gateway网关 WS 端点连接,因此 Serve 可用于节点访问。
## 浏览器控制(远程 Gateway + 本地浏览器)
## 浏览器控制(远程 Gateway网关 + 本地浏览器)
如果在一台机器上运行 Gateway,但希望在另一台机器上驱动浏览器,请在浏览器所在机器上运行一个**节点主机**,并将两者保持在同一个 tailnet 中。Gateway 会将浏览器操作代理到节点;无需单独的控制服务器或 Serve URL。
如果在一台机器上运行 Gateway网关,但希望在另一台机器上驱动浏览器,请在浏览器所在机器上运行一个**节点主机**,并将两者保持在同一个 tailnet 中。Gateway网关会将浏览器操作代理到节点;无需单独的控制服务器或 Serve URL。
避免将 Funnel 用于浏览器控制;应将节点配对视为操作员级别的访问。
## Tailscale 前置条件 + 限制
- Serve 要求的 tailnet 已启用 HTTPS;如果未启用,CLI 会提示。
- Serve 要求的 tailnet 已启用 HTTPS;如果未启用,CLI 会提示。
- Serve 会注入 Tailscale 身份头;Funnel 不会。
- Funnel 要求 Tailscale v1.38.3+、MagicDNS、已启用 HTTPS 以及 funnel 节点属性。
- Funnel 仅支持通过 TLS 使用端口 `443``8443``10000`
+6 -6
View File
@@ -2,7 +2,7 @@
read_when:
- 不运行完整智能体轮次而直接调用工具
- 构建需要工具策略执行的自动化流程
summary: 通过 Gateway HTTP 端点直接调用单个工具
summary: 通过 Gateway网关 HTTP 端点直接调用单个工具
title: 工具调用 API
x-i18n:
generated_at: "2026-02-01T20:38:59Z"
@@ -15,16 +15,16 @@ x-i18n:
# 工具调用(HTTP
OpenClaw 的 Gateway 暴露了一个简单的 HTTP 端点,用于直接调用单个工具。该端点始终启用,但受 Gateway 认证和工具策略控制。
OpenClaw 的 Gateway网关暴露了一个简单的 HTTP 端点,用于直接调用单个工具。该端点始终启用,但受 Gateway网关认证和工具策略控制。
- `POST /tools/invoke`
- 与 Gateway 相同的端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/tools/invoke`
- 与 Gateway网关相同的端口(WS + HTTP 多路复用):`http://<gateway-host>:<port>/tools/invoke`
默认最大请求体大小为 2 MB。
## 认证
使用 Gateway 认证配置。发送 Bearer 令牌:
使用 Gateway网关认证配置。发送 Bearer 令牌:
- `Authorization: Bearer <token>`
@@ -50,12 +50,12 @@ OpenClaw 的 Gateway 暴露了一个简单的 HTTP 端点,用于直接调用
- `tool`(字符串,必填):要调用的工具名称。
- `action`(字符串,可选):如果工具 schema 支持 `action` 且 args 中未包含该字段,则映射到 args 中。
- `args`(对象,可选):工具特定的参数。
- `sessionKey`(字符串,可选):目标会话键。如果省略或为 `"main"`Gateway 将使用配置的主会话键(遵循 `session.mainKey` 和默认智能体,或在全局作用域中使用 `global`)。
- `sessionKey`(字符串,可选):目标会话键。如果省略或为 `"main"`Gateway网关将使用配置的主会话键(遵循 `session.mainKey` 和默认智能体,或在全局作用域中使用 `global`)。
- `dryRun`(布尔值,可选):保留供将来使用;当前会被忽略。
## 策略 + 路由行为
工具可用性通过与 Gateway 智能体相同的策略链进行过滤:
工具可用性通过与 Gateway网关智能体相同的策略链进行过滤:
- `tools.profile` / `tools.byProvider.profile`
- `tools.allow` / `tools.byProvider.allow`
+50 -50
View File
@@ -1,7 +1,7 @@
---
read_when:
- 排查运行时问题或故障时
summary: 常见 OpenClaw 故障的快速排障指南
summary: 常见 OpenClaw 故障的快速解决问题指南
title: 故障排除
x-i18n:
generated_at: "2026-02-01T21:08:01Z"
@@ -26,12 +26,12 @@ x-i18n:
| 命令 | 告诉你什么 | 何时使用 |
| ---------------------------------- | --------------------------------------------------------------------------------- | -------------------------------- |
| `openclaw status` | 本地摘要:操作系统 + 更新、Gateway 可达性/模式、服务、智能体/会话、提供商配置状态 | 首次检查,快速概览 |
| `openclaw status` | 本地摘要:操作系统 + 更新、Gateway网关可达性/模式、服务、智能体/会话、提供商配置状态 | 首次检查,快速概览 |
| `openclaw status --all` | 完整本地诊断(只读、可粘贴、基本安全)包含日志尾部 | 需要分享调试报告时 |
| `openclaw status --deep` | 运行 Gateway 健康检查(包括提供商探测;需要 Gateway 可达) | 当"已配置"不等于"正常工作"时 |
| `openclaw gateway probe` | Gateway 发现 + 可达性(本地 + 远程目标) | 怀疑探测了错误的 Gateway 时 |
| `openclaw channels status --probe` | 向运行中的 Gateway 查询渠道状态(可选探测) | Gateway 可达但渠道异常时 |
| `openclaw gateway status` | 管理器状态(launchd/systemd/schtasks)、运行时 PID/退出码、最后一次 Gateway 错误 | 服务"看起来已加载"但实际未运行时 |
| `openclaw status --deep` | 运行 Gateway网关健康检查(包括提供商探测;需要 Gateway网关可达) | 当"已配置"不等于"正常工作"时 |
| `openclaw gateway probe` | Gateway网关发现 + 可达性(本地 + 远程目标) | 怀疑探测了错误的 Gateway网关时 |
| `openclaw channels status --probe` | 向运行中的 Gateway网关查询渠道状态(可选探测) | Gateway网关可达但渠道异常时 |
| `openclaw gateway status` | 管理器状态(launchd/systemd/schtasks)、运行时 PID/退出码、最后一次 Gateway网关错误 | 服务"看起来已加载"但实际未运行时 |
| `openclaw logs --follow` | 实时日志(运行时问题的最佳信号源) | 需要查看实际失败原因时 |
**分享输出:** 优先使用 `openclaw status --all`(它会脱敏令牌)。如果粘贴 `openclaw status` 的输出,建议先设置 `OPENCLAW_SHOW_SECRETS=0`(令牌预览)。
@@ -47,8 +47,8 @@ x-i18n:
修复选项:
- 重新运行手引导,为该智能体选择 **Anthropic**
- 或者在 **Gateway 主机**上粘贴 setup-token
- 重新运行手引导,为该智能体选择 **Anthropic**
- 或者在 **Gateway网关主机**上粘贴 setup-token
```bash
openclaw models auth setup-token --provider anthropic
```
@@ -64,12 +64,12 @@ openclaw models status
这意味着存储的 Anthropic OAuth 令牌已过期且刷新失败。
如果你使用的是 Claude 订阅(无 API 密钥),最可靠的修复方法是
切换到 **Claude Code setup-token** 并在 **Gateway 主机**上粘贴。
切换到 **Claude Code setup-token** 并在 **Gateway网关主机**上粘贴。
**推荐方式(setup-token):**
```bash
# 在 Gateway 主机上运行(粘贴 setup-token
# 在 Gateway网关主机上运行(粘贴 setup-token
openclaw models auth setup-token --provider anthropic
openclaw models status
```
@@ -92,9 +92,9 @@ openclaw models status
**修复:**
- 优先通过 [Tailscale Serve](/gateway/tailscale) 使用 HTTPS。
- 或在 Gateway 主机上本地打开:`http://127.0.0.1:18789/`
- 或在 Gateway网关主机上本地打开:`http://127.0.0.1:18789/`
- 如果必须使用 HTTP,启用 `gateway.controlUi.allowInsecureAuth: true`
使用 Gateway 令牌(仅令牌;无设备身份/配对)。参见
使用 Gateway网关令牌(仅令牌;无设备身份/配对)。参见
[控制面板](/web/control-ui#insecure-http)。
### CI 密钥扫描失败
@@ -104,7 +104,7 @@ openclaw models status
### 服务已安装但未运行
如果 Gateway 服务已安装但进程立即退出,服务
如果 Gateway网关服务已安装但进程立即退出,服务
可能显示"已加载"但实际上没有任何进程在运行。
**检查:**
@@ -122,7 +122,7 @@ Doctor/service 会显示运行时状态(PID/上次退出码)和日志提示
- 文件日志(始终可用):`/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或你配置的 `logging.file`
- macOS LaunchAgent(如已安装):`$OPENCLAW_STATE_DIR/logs/gateway.log``gateway.err.log`
- Linux systemd(如已安装):`journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager`
- Windows`schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST`
- Windows`schtasks /Query /TN "OpenClaw Gateway网关 (<profile>)" /V /FO LIST`
**启用更详细的日志:**
@@ -138,14 +138,14 @@ Doctor/service 会显示运行时状态(PID/上次退出码)和日志提示
完整的格式、配置和访问概览请参见 [/logging](/logging)。
### "Gateway start blocked: set gateway.mode=local"
### "Gateway网关 start blocked: set gateway.mode=local"
这意味着配置文件存在但 `gateway.mode` 未设置(或不是 `local`),因此
Gateway 拒绝启动。
Gateway网关拒绝启动。
**修复(推荐):**
- 运行向导并将 Gateway 运行模式设置为 **Local**
- 运行向导并将 Gateway网关运行模式设置为 **Local**
```bash
openclaw configure
```
@@ -154,7 +154,7 @@ Gateway 拒绝启动。
openclaw config set gateway.mode local
```
**如果你打算运行远程 Gateway**
**如果你打算运行远程 Gateway网关**
- 设置远程 URL 并保持 `gateway.mode=remote`
```bash
@@ -163,21 +163,21 @@ Gateway 拒绝启动。
```
**仅限临时/开发用途:** 传递 `--allow-unconfigured` 以在未设置
`gateway.mode=local` 的情况下启动 Gateway。
`gateway.mode=local` 的情况下启动 Gateway网关
**还没有配置文件?** 运行 `openclaw setup` 创建初始配置,然后重新运行
Gateway。
Gateway网关
### 服务环境(PATH + 运行时)
Gateway 服务运行时使用**最小化 PATH**,以避免 shell/管理器的干扰:
Gateway网关服务运行时使用**最小化 PATH**,以避免 shell/管理器的干扰:
- macOS`/opt/homebrew/bin``/usr/local/bin``/usr/bin``/bin`
- Linux`/usr/local/bin``/usr/bin``/bin`
这有意排除了版本管理器(nvm/fnm/volta/asdf)和包
管理器(pnpm/npm),因为服务不会加载你的 shell 初始化脚本。运行时
变量如 `DISPLAY` 应放在 `~/.openclaw/.env` 中(由 Gateway 在启动早期加载)。
变量如 `DISPLAY` 应放在 `~/.openclaw/.env` 中(由 Gateway网关在启动早期加载)。
`host=gateway` 上的 Exec 运行会将你的登录 shell `PATH` 合并到执行环境中,
因此缺少工具通常意味着你的 shell 初始化脚本没有导出它们(或设置
`tools.exec.pathPrepend`)。参见 [/tools/exec](/tools/exec)。
@@ -186,11 +186,11 @@ WhatsApp + Telegram 渠道需要 **Node**;不支持 Bun。如果你的
服务安装时使用了 Bun 或版本管理器管理的 Node 路径,请运行 `openclaw doctor`
以迁移到系统级 Node 安装。
### 技能在沙箱中缺少 API 密钥
### Skills 在沙箱中缺少 API 密钥
**症状:** 技能在主机上正常运行,但在沙箱中因缺少 API 密钥而失败。
**症状:** Skills 在主机上正常运行,但在沙箱中因缺少 API 密钥而失败。
**原因:** 沙箱的 exec 在 Docker 中运行,**不会**继承主机的 `process.env`
**原因:** 沙箱隔离的 exec 在 Docker 中运行,**不会**继承主机的 `process.env`
**修复:**
@@ -200,21 +200,21 @@ WhatsApp + Telegram 渠道需要 **Node**;不支持 Bun。如果你的
### 服务在运行但端口未监听
如果服务报告**正在运行**但 Gateway 端口上没有监听,
Gateway 很可能拒绝了绑定。
如果服务报告**正在运行**但 Gateway网关端口上没有监听,
Gateway网关很可能拒绝了绑定。
**此处"正在运行"的含义**
- `Runtime: running` 表示你的管理器(launchd/systemd/schtasks)认为进程是活跃的。
- `RPC probe` 表示 CLI 实际上能够连接到 Gateway WebSocket 并调用 `status`
- `RPC probe` 表示 CLI 实际上能够连接到 Gateway网关 WebSocket 并调用 `status`
- 始终以 `Probe target:` + `Config (service):` 作为"我们实际尝试了什么?"的依据。
**检查:**
- `gateway.mode` 对于 `openclaw gateway` 和服务必须为 `local`
- 如果你设置了 `gateway.mode=remote`**CLI 默认**使用远程 URL。服务可能仍在本地运行,但你的 CLI 可能在探测错误的位置。使用 `openclaw gateway status` 查看服务解析的端口 + 探测目标(或传递 `--url`)。
- `openclaw gateway status``openclaw doctor` 会在服务看起来正在运行但端口未打开时显示**最后一次 Gateway 错误**日志。
- 非回环绑定(`lan`/`tailnet`/`custom`,或回环不可用时的 `auto`)需要认证:
- `openclaw gateway status``openclaw doctor` 会在服务看起来正在运行但端口未打开时显示**最后一次 Gateway网关错误**日志。
- 非 local loopback 绑定(`lan`/`tailnet`/`custom`,或 local loopback 不可用时的 `auto`)需要认证:
`gateway.auth.token`(或 `OPENCLAW_GATEWAY_TOKEN`)。
- `gateway.remote.token` 仅用于远程 CLI 调用;它**不会**启用本地认证。
- `gateway.token` 会被忽略;请使用 `gateway.auth.token`
@@ -232,22 +232,22 @@ Gateway 很可能拒绝了绑定。
**如果 `Last gateway error:` 提到 "refusing to bind … without auth"**
- 你将 `gateway.bind` 设置为非回环模式(`lan`/`tailnet`/`custom`,或回环不可用时的 `auto`)但未配置认证。
- 你将 `gateway.bind` 设置为非 local loopback 模式(`lan`/`tailnet`/`custom`,或 local loopback 不可用时的 `auto`)但未配置认证。
- 修复:设置 `gateway.auth.mode` + `gateway.auth.token`(或导出 `OPENCLAW_GATEWAY_TOKEN`)并重启服务。
**如果 `openclaw gateway status` 显示 `bind=tailnet` 但未找到 tailnet 接口**
- Gateway 尝试绑定到 Tailscale IP100.64.0.0/10)但主机上未检测到。
- Gateway网关尝试绑定到 Tailscale IP100.64.0.0/10)但主机上未检测到。
- 修复:在该机器上启动 Tailscale(或将 `gateway.bind` 改为 `loopback`/`lan`)。
**如果 `Probe note:` 显示探测使用回环**
**如果 `Probe note:` 显示探测使用 local loopback**
- 对于 `bind=lan` 这是预期行为:Gateway 监听 `0.0.0.0`(所有接口),回环在本地仍可连接。
- 对于 `bind=lan` 这是预期行为:Gateway网关监听 `0.0.0.0`(所有接口),local loopback 在本地仍可连接。
- 对于远程客户端,请使用真实的 LAN IP(不是 `0.0.0.0`)加端口,并确保已配置认证。
### 地址已被占用(端口 18789)
这意味着某个进程已经在 Gateway 端口上监听。
这意味着某个进程已经在 Gateway网关端口上监听。
**检查:**
@@ -255,7 +255,7 @@ Gateway 很可能拒绝了绑定。
openclaw gateway status
```
它会显示监听者和可能的原因(Gateway 已在运行、SSH 隧道)。
它会显示监听者和可能的原因(Gateway网关已在运行、SSH 隧道)。
如果需要,停止服务或选择其他端口。
### 检测到多余的工作区文件夹
@@ -304,7 +304,7 @@ OpenClaw 有意拒绝**旧版/不安全的模型**(特别是那些更
- 为该提供商选择一个**最新**模型,并更新你的配置或模型别名。
- 如果不确定有哪些可用模型,运行 `openclaw models list`
`openclaw models scan` 并选择一个受支持的模型。
- 检查 Gateway 日志了解详细的失败原因。
- 检查 Gateway网关日志了解详细的失败原因。
另见:[模型 CLI](/cli/models) 和 [模型提供商](/concepts/model-providers)。
@@ -345,7 +345,7 @@ tail -f "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)" | grep "blocked\\|skip
openclaw pairing list <channel>
```
每个渠道默认最多 **3 个**待处理的 DM 配对请求。如果列表已满,新请求在有一个被批准或过期之前不会生成验证码。
每个渠道默认最多 **3 个**待处理的 私信 配对请求。如果列表已满,新请求在有一个被批准或过期之前不会生成验证码。
**检查 2:** 请求是否已创建但未发送回复?
@@ -407,14 +407,14 @@ ls -la ~/.openclaw/agents/<agentId>/sessions/
```bash
# 检查本地状态(凭据、会话、排队事件)
openclaw status
# 探测运行中的 Gateway + 渠道(WA 连接 + Telegram + Discord API
# 探测运行中的 Gateway网关 + 渠道(WA 连接 + Telegram + Discord API
openclaw status --deep
# 查看最近的连接事件
openclaw logs --limit 200 | grep "connection\\|disconnect\\|logout"
```
**修复:** 通常在 Gateway 运行后会自动重连。如果卡住,重启 Gateway 进程(无论你用什么方式管理),或手动运行并附带详细输出:
**修复:** 通常在 Gateway网关运行后会自动重连。如果卡住,重启 Gateway网关进程(无论你用什么方式管理),或手动运行并附带详细输出:
```bash
openclaw gateway --verbose
@@ -464,7 +464,7 @@ OpenClaw 将对话历史保存在内存中。
## 常见故障排除
### "Gateway won't start — configuration invalid"
### "Gateway网关 won't start — configuration invalid"
OpenClaw 现在会在配置包含未知键、格式错误的值或无效类型时拒绝启动。
这是出于安全考虑的有意设计。
@@ -486,7 +486,7 @@ openclaw doctor --fix
- 正在使用的提供商是否存在**凭据**(认证配置文件 + 环境变量)。
- **模型路由**:确认 `agents.defaults.model.primary` 和回退模型是你能访问的模型。
- `/tmp/openclaw/…` 中的 **Gateway 日志**查看具体的提供商错误。
- `/tmp/openclaw/…` 中的 **Gateway网关日志**查看具体的提供商错误。
- **模型状态**:使用 `/model status`(聊天中)或 `openclaw models status`CLI)。
### 我用个人 WhatsApp 号码运行 — 为什么自聊行为异常?
@@ -542,7 +542,7 @@ openclaw gateway restart
### 如何在 git 安装和 npm 安装之间切换?
使用**官网安装脚本**并通过标志选择安装方式。它会
就地升级并重写 Gateway 服务以指向新的安装。
就地升级并重写 Gateway网关服务以指向新的安装。
切换**到 git 安装**
@@ -611,7 +611,7 @@ schema,但此修复尚未包含在最新发布版中(截至
修复清单:
1. **更新 OpenClaw**
- 如果你能从源码运行,拉取 `main` 并重启 Gateway。
- 如果你能从源码运行,拉取 `main` 并重启 Gateway网关
- 否则,等待包含 schema 清洗器的下一个版本。
2. 避免不受支持的关键字,如 `anyOf/oneOf/allOf``patternProperties`
`additionalProperties``minLength``maxLength``format` 等。
@@ -635,12 +635,12 @@ tccutil reset All bot.molt.mac.debug
**修复 2:强制使用新 Bundle ID**
如果重置无效,更改 [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh) 中的 `BUNDLE_ID`(例如添加 `.test` 后缀)并重新构建。这会强制 macOS 将其视为新应用。
### Gateway 卡在"Starting..."
### Gateway网关卡在"Starting..."
应用连接到端口 `18789` 上的本地 Gateway。如果一直卡住:
应用连接到端口 `18789` 上的本地 Gateway网关。如果一直卡住:
**修复 1:停止管理器(推荐)**
如果 Gateway 由 launchd 管理,杀死 PID 只会让它重新启动。先停止管理器:
如果 Gateway网关由 launchd 管理,杀死 PID 只会让它重新启动。先停止管理器:
```bash
openclaw gateway status
@@ -687,8 +687,8 @@ openclaw channels login --verbose
| 日志 | 位置 |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Gateway 文件日志(结构化) | `/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`) |
| Gateway 服务日志(管理器) | macOS`$OPENCLAW_STATE_DIR/logs/gateway.log` + `gateway.err.log`(默认:`~/.openclaw/logs/...`profile 使用 `~/.openclaw-<profile>/logs/...`<br />Linux`journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager`<br />Windows`schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST` |
| Gateway网关文件日志(结构化) | `/tmp/openclaw/openclaw-YYYY-MM-DD.log`(或 `logging.file`) |
| Gateway网关服务日志(管理器) | macOS`$OPENCLAW_STATE_DIR/logs/gateway.log` + `gateway.err.log`(默认:`~/.openclaw/logs/...`profile 使用 `~/.openclaw-<profile>/logs/...`<br />Linux`journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager`<br />Windows`schtasks /Query /TN "OpenClaw Gateway网关 (<profile>)" /V /FO LIST` |
| 会话文件 | `$OPENCLAW_STATE_DIR/agents/<agentId>/sessions/` |
| 媒体缓存 | `$OPENCLAW_STATE_DIR/media/` |
| 凭据 | `$OPENCLAW_STATE_DIR/credentials/` |
@@ -701,7 +701,7 @@ openclaw gateway status
# 包含系统级扫描(旧版/多余服务、端口监听者)
openclaw gateway status --deep
# Gateway 是否可达?
# Gateway网关是否可达?
openclaw health --json
# 如果失败,附带连接详情重新运行:
openclaw health --verbose