Gateway 网关是 OpenClaw 的 WebSocket 服务器(渠道、节点、会话、钩子)。本页中的子命令位于Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw gateway … 下。
Bonjour 设备发现
本地 mDNS + 广域 DNS-SD 设置。
设备发现概览
OpenClaw 如何广播和查找 Gateway 网关。
配置
顶层 Gateway 网关配置键。
运行 Gateway 网关
运行本地 Gateway 网关进程:启动行为
启动行为
- 默认情况下,除非在
~/.openclaw/openclaw.json中设置了gateway.mode=local,否则 Gateway 网关会拒绝启动。对临时/开发运行使用--allow-unconfigured。 openclaw onboard --mode local和openclaw setup预期会写入gateway.mode=local。如果文件存在但缺少gateway.mode,请将其视为损坏或被覆盖的配置并修复,而不是隐式假设为 local 模式。- 如果文件存在且缺少
gateway.mode,Gateway 网关会将其视为可疑的配置损坏,并拒绝为你“猜测 local”。 - 未启用认证时禁止绑定到 loopback 之外的地址(安全护栏)。
- 在授权时,
SIGUSR1会触发进程内重启(默认启用commands.restart;设置commands.restart: false可阻止手动重启,同时仍允许 Gateway 网关工具/配置应用/更新)。 SIGINT/SIGTERM处理器会停止 Gateway 网关进程,但不会恢复任何自定义终端状态。如果你用 TUI 或 raw-mode 输入包装 CLI,请在退出前恢复终端。
选项
WebSocket 端口(默认值来自配置/环境;通常为
18789)。监听器绑定模式。
认证模式覆盖。
令牌覆盖(也会为该进程设置
OPENCLAW_GATEWAY_TOKEN)。密码覆盖。
从文件读取 Gateway 网关密码。
通过 Tailscale 暴露 Gateway 网关。
在关闭时重置 Tailscale serve/funnel 配置。
允许在配置中没有
gateway.mode=local 时启动 Gateway 网关。仅为临时/开发引导绕过启动保护;不会写入或修复配置文件。如果缺失,则创建开发配置 + 工作区(跳过 BOOTSTRAP.md)。
重置开发配置 + 凭证 + 会话 + 工作区(需要
--dev)。启动前终止所选端口上的任何现有监听器。
详细日志。
仅在控制台显示 CLI 后端日志(并启用 stdout/stderr)。
WebSocket 日志样式。
--ws-log compact 的别名。将原始模型流事件记录到 jsonl。
原始流 jsonl 路径。
重启 Gateway 网关
openclaw gateway restart --safe 会要求正在运行的 Gateway 网关在重启前预检活跃的 OpenClaw 工作。如果队列操作、回复投递、嵌入式运行或任务运行处于活跃状态,Gateway 网关会报告阻塞项,合并重复的安全重启请求,并在活跃工作排空后重启。普通 restart 会保留现有的服务管理器行为以保持兼容性。仅当你明确需要立即覆盖路径时才使用 --force。
启动性能分析
- 设置
OPENCLAW_GATEWAY_STARTUP_TRACE=1以在 Gateway 网关启动期间记录阶段耗时,包括每阶段的eventLoopMax延迟,以及 installed-index、manifest registry、启动规划和 owner-map 工作的插件查找表耗时。 - 设置
OPENCLAW_DIAGNOSTICS=timeline并配合OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>,为外部 QA harness 写入尽力而为的 JSONL 启动诊断时间线。你也可以在配置中用diagnostics.flags: ["timeline"]启用该标志;路径仍由环境变量提供。添加OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1以包含事件循环采样。 - 运行
pnpm test:startup:gateway -- --runs 5 --warmup 1对 Gateway 网关启动进行基准测试。该基准会记录首个进程输出、/healthz、/readyz、启动跟踪耗时、事件循环延迟,以及插件查找表耗时详情。
查询正在运行的 Gateway 网关
所有查询命令都使用 WebSocket RPC。- 输出模式
- 共享选项
- 默认:人类可读(在 TTY 中着色)。
--json:机器可读 JSON(无样式/微调器)。--no-color(或NO_COLOR=1):禁用 ANSI,同时保留人类可读布局。
当你设置
--url 时,CLI 不会回退到配置或环境凭证。请显式传入 --token 或 --password。缺少显式凭证是错误。gateway health
/healthz 端点是存活探针:只要服务器能响应 HTTP,它就会返回。HTTP /readyz 端点更严格,在启动插件 sidecar、渠道或已配置钩子仍在稳定时会保持红色。本地或已认证的详细就绪响应包含一个 eventLoop 诊断块,其中包含事件循环延迟、事件循环利用率、CPU 核心比例和 degraded 标志。
gateway usage-cost
从会话日志获取用量成本摘要。
要包含的天数。
gateway stability
从正在运行的 Gateway 网关获取最近的诊断稳定性记录器。
要包含的最近事件最大数量(最大
1000)。按诊断事件类型过滤,例如
payload.large 或 diagnostic.memory.pressure。仅包含诊断序列号之后的事件。
读取持久化稳定性包,而不是调用正在运行的 Gateway 网关。使用
--bundle latest(或仅 --bundle)读取状态目录下的最新包,或直接传入包 JSON 路径。写入可共享的支持诊断 zip,而不是打印稳定性详情。
--export 的输出路径。隐私和包行为
隐私和包行为
gateway diagnostics export
写入一个本地诊断 zip,设计用于附加到 bug 报告。有关隐私模型和包内容,请参见 诊断导出。
输出 zip 路径。默认是状态目录下的支持导出。
要包含的最大已清理日志行数。
要检查的最大日志字节数。
用于健康快照的 Gateway 网关 WebSocket URL。
用于健康快照的 Gateway 网关令牌。
用于健康快照的 Gateway 网关密码。
Status/健康快照超时。
跳过持久化稳定性包查找。
以 JSON 打印写入的路径、大小和清单。
gateway status
gateway status 显示 Gateway 网关服务(launchd/systemd/schtasks),以及可选的连接性/认证能力探测。
添加显式探测目标。已配置的远程 + localhost 仍会被探测。
探测使用的令牌认证。
探测使用的密码认证。
探测超时时间。
跳过连通性探测(仅服务视图)。
同时扫描系统级服务。
将默认连通性探测升级为读取探测,并在该读取探测失败时以非零状态退出。不能与
--no-probe 组合使用。Status 语义
Status 语义
gateway status即使在本地 CLI 配置缺失或无效时,也仍可用于诊断。- 默认
gateway status会证明服务状态、WebSocket 连接,以及握手时可见的认证能力。它不证明读/写/管理员操作。 - 诊断探测对于首次设备认证不会进行变更:如果存在已缓存的设备令牌,它们会复用该令牌,但不会仅为检查状态而创建新的 CLI 设备身份或只读设备配对记录。
gateway status会尽可能解析已配置的认证 SecretRef,用于探测认证。- 如果此命令路径中必需的认证 SecretRef 未解析,且探测连通性/认证失败,
gateway status --json会报告rpc.authWarning;请显式传入--token/--password,或先解析密钥来源。 - 如果探测成功,未解析认证引用的警告会被抑制,以避免误报。
- 当监听中的服务还不够,并且你还需要读取范围的 RPC 调用也保持健康时,请在脚本和自动化中使用
--require-rpc。 --deep会尽力额外扫描 launchd/systemd/schtasks 安装。当检测到多个类似 Gateway 网关的服务时,人类可读输出会打印清理提示,并警告大多数设置应在每台机器上运行一个 Gateway 网关。- 人类可读输出包含已解析的文件日志路径,以及 CLI 与服务配置路径/有效性快照,以帮助诊断配置文件或状态目录漂移。
Linux systemd 认证漂移检查
Linux systemd 认证漂移检查
- 在 Linux systemd 安装中,服务认证漂移检查会从 unit 读取
Environment=和EnvironmentFile=值(包括%h、带引号的路径、多个文件,以及可选的-文件)。 - 漂移检查会使用合并后的运行时 env 解析
gateway.auth.tokenSecretRef(先使用服务命令 env,再回退到进程 env)。 - 如果令牌认证实际上未启用(显式
gateway.auth.mode为password/none/trusted-proxy,或 mode 未设置且密码可能胜出并且没有令牌候选可胜出),令牌漂移检查会跳过配置令牌解析。
gateway probe
gateway probe 是“调试所有内容”的命令。它始终会探测:
- 你配置的远程 Gateway 网关(如果已设置),以及
- localhost(loopback),即使已配置远程目标。
--url,该显式目标会添加到两者之前。人类可读输出会将目标标记为:
URL(显式)远程(已配置)或远程(已配置,未启用)Local loopback
如果多个 Gateway 网关可达,它会全部打印出来。当你使用隔离的配置文件/端口(例如救援机器人)时,支持多个 Gateway 网关,但大多数安装仍只运行一个 Gateway 网关。
解释
解释
Reachable: yes表示至少一个目标接受了 WebSocket 连接。Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only报告探测能够证明的认证能力。它与可达性是分开的。Read probe: ok表示读取范围的详细 RPC 调用(health/status/system-presence/config.get)也成功。Read probe: limited - missing scope: operator.read表示连接成功,但读取范围的 RPC 受限。这会报告为降级可达性,而不是完全失败。Connect: ok之后的Read probe: failed表示 Gateway 网关接受了 WebSocket 连接,但后续读取诊断超时或失败。这同样是降级可达性,而不是不可达的 Gateway 网关。- 与
gateway status一样,probe 会复用现有缓存的设备认证,但不会创建首次设备身份或配对状态。 - 只有在没有任何被探测目标可达时,退出码才为非零。
JSON 输出
JSON 输出
顶层:
ok:至少一个目标可达。degraded:至少一个目标接受了连接,但未完成完整的详细 RPC 诊断。capability:在可达目标中看到的最佳能力(read_only、write_capable、admin_capable、pairing_pending、connected_no_operator_scope或unknown)。primaryTargetId:按以下顺序作为活动胜出者处理的最佳目标:显式 URL、SSH 隧道、已配置远程,然后是 local loopback。warnings[]:尽力提供的警告记录,包含code、message和可选的targetIds。network:从当前配置和主机网络派生的 local loopback/tailnet URL 提示。discovery.timeoutMs和discovery.count:此次探测实际使用的设备发现预算/结果数量。
targets[].connect):ok:连接后的可达性 + 降级分类。rpcOk:完整详细 RPC 成功。scopeLimited:详细 RPC 因缺少 operator scope 而失败。
targets[].auth):role:可用时,hello-ok中报告的认证角色。scopes:可用时,hello-ok中报告的已授予 scopes。capability:该目标暴露的认证能力分类。
常见警告代码
常见警告代码
ssh_tunnel_failed:SSH 隧道设置失败;命令回退到直接探测。multiple_gateways:多个目标可达;除非你有意运行隔离配置文件(例如救援机器人),否则这并不常见。auth_secretref_unresolved:无法为失败目标解析已配置的认证 SecretRef。probe_scope_limited:WebSocket 连接成功,但读取探测因缺少operator.read而受限。
通过 SSH 访问远程(与 Mac 应用一致)
macOS 应用的“通过 SSH 访问远程”模式使用本地端口转发,使远程 Gateway 网关(可能仅绑定到 loopback)可在ws://127.0.0.1:<port> 访问。
CLI 等效命令:
user@host 或 user@host:port(端口默认为 22)。身份文件。
从已解析的设备发现端点(
local. 加上已配置的广域网域名,如果有)中选择第一个发现的 Gateway 网关主机作为 SSH 目标。仅 TXT 的提示会被忽略。gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
低级 RPC 辅助命令。
params 的 JSON 对象字符串。
Gateway 网关 WebSocket URL。
Gateway 网关令牌。
Gateway 网关密码。
超时预算。
主要用于在最终 payload 之前会流式传输中间事件的智能体式 RPC。
机器可读的 JSON 输出。
--params 必须是有效的 JSON。管理 Gateway 网关服务
使用包装器安装
当托管服务必须通过另一个可执行文件启动时,请使用--wrapper,例如
密钥管理器 shim 或 run-as 辅助程序。包装器会接收正常的 Gateway 网关参数,并
负责最终 exec openclaw 或带有这些参数的 Node。
gateway install 会验证路径是
可执行文件,将包装器写入服务 ProgramArguments,并在服务环境中持久化
OPENCLAW_WRAPPER,供后续强制重新安装、更新和 Doctor
修复使用。
OPENCLAW_WRAPPER:
命令选项
命令选项
gateway status:--url、--token、--password、--timeout、--no-probe、--require-rpc、--deep、--jsongateway install:--port、--runtime <node|bun>、--token、--wrapper <path>、--force、--jsongateway restart:--force、--wait <duration>、--jsongateway uninstall|start|stop:--json
生命周期行为
生命周期行为
- 使用
gateway restart重启托管服务。不要将gateway stop和gateway start串联起来作为重启替代;在 macOS 上,gateway stop会有意在停止 LaunchAgent 之前禁用它。 gateway restart --wait 30s会覆盖该次重启配置的重启排空预算。裸数字表示毫秒;也接受s、m和h等单位。--wait 0会无限期等待。gateway restart --force会跳过活跃工作排空并立即重启。当操作员已经检查过列出的任务阻塞项,并希望 Gateway 网关立即恢复时使用它。- 生命周期命令接受
--json,以便脚本使用。
安装时的认证和 SecretRefs
安装时的认证和 SecretRefs
- 当令牌认证需要令牌且
gateway.auth.token由 SecretRef 管理时,gateway install会验证 SecretRef 可解析,但不会将已解析的令牌持久化到服务环境元数据中。 - 如果令牌认证需要令牌,而已配置的令牌 SecretRef 未解析,安装会关闭式失败,而不是持久化回退明文。
- 对于
gateway run上的密码认证,优先使用OPENCLAW_GATEWAY_PASSWORD、--password-file,或由 SecretRef 支持的gateway.auth.password,而不是内联--password。 - 在推断认证模式下,仅 shell 中的
OPENCLAW_GATEWAY_PASSWORD不会放宽安装令牌要求;安装托管服务时,请使用持久配置(gateway.auth.password或配置env)。 - 如果同时配置了
gateway.auth.token和gateway.auth.password,且gateway.auth.mode未设置,安装会被阻止,直到显式设置 mode。
发现 Gateway 网关(Bonjour)
gateway discover 会扫描 Gateway 网关信标(_openclaw-gw._tcp)。
- 组播 DNS-SD:
local. - 单播 DNS-SD(Wide-Area Bonjour):选择一个域(示例:
openclaw.internal.),并设置拆分 DNS + 一个 DNS 服务器;参见 Bonjour。
role(Gateway 网关角色提示)transport(传输协议提示,例如gateway)gatewayPort(WebSocket 端口,通常为18789)sshPort(可选;缺失时,客户端默认使用22作为 SSH 目标端口)tailnetDns(MagicDNS 主机名,可用时)gatewayTls/gatewayTlsSha256(已启用 TLS + 证书指纹)cliPath(写入 Wide-Area 区域的远程安装提示)
gateway discover
每条命令的超时时间(浏览/解析)。
机器可读输出(也会禁用样式/加载指示器)。
- CLI 会扫描
local.以及已启用的已配置 Wide-Area 域。 - JSON 输出中的
wsUrl派生自解析后的服务端点,而不是来自仅 TXT 的提示,例如lanHost或tailnetDns。 - 在
local.mDNS 上,只有当discovery.mdns.mode为full时,才会广播sshPort和cliPath。Wide-Area DNS-SD 仍会写入cliPath;sshPort在那里也仍然是可选的。