乐于分享
好东西不私藏

用终端接管OpenClaw——CLI远程调用Gateway,全量命令解析,技术干货篇!

用终端接管OpenClaw——CLI远程调用Gateway,全量命令解析,技术干货篇!

OPENCLAW CLI · FULL DOCUMENTATION

飞书有CLI、Vercel有CLI、Cloudflare有CLI。但凡认真做开发者生态的产品,CLI从来不是可选项,而是基础设施。

OpenClaw同样提供了完整的CLI远程调用能力——通过openclaw gateway call命令,可以在终端中向本地或远程网关发送任意RPC调用,覆盖150+个方法,和WebSocket JSON-RPC完全对齐。

CLI不只是给人敲的。Agent之间的调用、自动化脚本的集成、CI/CD流水线里的健康检查、运维人员的日常排障,CLI都是最直接的接入方式。

这篇文章把OpenClaw CLI远程调用的每一个细节、每一种配置方式、每一个踩坑点全部扒出来,包含实测验证结论。同时这也是一篇OpenClaw命令行的完整手册——55个顶级命令全部收录、逐条解释,配合前面的OpenClaw系列教程一起看,基本可以做到不翻官方文档也能高效操作。收藏这篇,终端里遇到任何OpenClaw命令问题直接翻就行。同样的,依旧是一份AI手册,觉得太长,丢给AI找你关注的命令点。

01概述

openclaw gateway call 命令的底层就是一个一次性WebSocket客户端:建连、握手、调用、断开。没有长连接、没有事件推送,干完就走。

工作原理:

┌─────────────────────────────────────────────────────────────────────┐│ openclaw gateway call <method> –url wss://… –token *** –json   │└──────────┬──────────────────────────────────────────────────────────┘           │           ▼┌──────────────────────────────────────────┐│  CLI 内部流程:                            ││  1. 建立 WebSocket 连接                   ││  2. 接收 connect.challenge               ││  3. 发送 connect(含设备签名 + Token)     ││  4. 收到 hello-ok                        ││  5. 发送 req: { method, params }         ││  6. 收到 res: { ok, payload }            ││  7. 输出结果并断开连接                     │└──────────────────────────────────────────┘

核心特性一览:

特性
说明
方法数量
大小命令150+ 个(全量)
连接模式
一次性连接(连接 → 握手 → 调用 → 断开)
事件推送
不支持(单次调用无法接收持续推送)
设备签名
CLI 自动使用本机 Ed25519 密钥签名
输出格式
支持 –json 结构化输出
超时控制
–timeout

 参数
适用场景
运维终端 / Shell 脚本 / 一次性管理 / CI/CD
02安装与前置条件
安装OpenClaw
# npm 全局安装npm install -g openclaw# 或 Homebrew (macOS)brew install openclaw# 验证安装openclaw –version
确认版本
openclaw –version# 输出: OpenClaw 2026.5.19 (a185ca2)

CLI版本必须与远程网关的协议版本兼容。版本不匹配是最常见的问题来源,后面踩坑实录会详细展开。

03配置远程网关连接

三种配置方式,按优先级从低到高排列。本系列推荐第二种——配置文件方式,一次写好长期复用。

方式A:每次命令行传参
openclaw gateway call health \  –url wss://你的网关地址 \  –token *** \  –json

适合一次性临时调用。

方式B:配置文件(推荐)

编辑~/.openclaw/openclaw.json,添加远程网关配置:

{  “gateway”: {    “remote”: {      “url”: “wss://openclaw-mp7b01wc-xxx.fc.zyunapp.cn”,      “token”: “zqi-05…5e3f”    }  }}

配置后直接使用,无需每次传参:

openclaw gateway call health –json

这是最推荐的方式:地址和Token在文件里一次写好,所有命令自动带上。后面所有示例都默认你已经这么配过了。

方式C:环境变量
export OPENCLAW_GATEWAY_URL=”wss://你的网关地址”export OPENCLAW_GATEWAY_TOKEN=”***”openclaw gateway call health –json

适合CI/CD和Shell脚本场景,用环境变量隔离不同环境。

连接优先级

CLI按以下优先级解析网关地址:

1. –url 命令行参数(最高)

2. 环境变量 OPENCLAW_GATEWAY_URL

3. 配置文件 gateway.remote.url

4. 本地网关 wss://127.0.0.1:18443(最低)

[!] 重要陷阱:一旦你显式传了–url,CLI不会再回落到配置文件或环境变量里的Token。要么把–token一起传,要么干脆全靠配置文件。这是官方文档明确写的:”Missing explicit credentials is an error.”

04核心命令

openclaw gateway 下面是一套完整的网关管理命令家族。

Gateway子命令总览
openclaw gateway –help
命令
说明
openclaw gateway call <method>
调用任意 Gateway RPC 方法(150+ 全量)
openclaw gateway health
查看网关健康状态
openclaw gateway status
查看网关服务运行状态(服务层视角)
openclaw gateway probe
“debug everything” 全链路探测
openclaw gateway stability
稳定性诊断记录器
openclaw gateway diagnostics export
导出诊断 zip 用于 bug report
openclaw gateway usage-cost
查看费用统计
openclaw gateway discover
Bonjour 局域网发现网关
openclaw gateway run
前台运行网关
openclaw gateway install
安装为系统服务
openclaw gateway start
启动网关服务
openclaw gateway stop
停止网关服务
openclaw gateway restart
重启网关服务
openclaw gateway uninstall
卸载网关服务
通用选项
选项
说明
默认值
–url <url>
Gateway WebSocket URL
配置文件中的值
–token ***
认证 Token
配置文件中的值
–password ***
密码认证
–timeout <ms>
超时时间(毫秒)
10000
–expect-final
等待最终响应(用于 Agent 调用)
false
–json
JSON 格式输出
false
05gateway call 通用调用

gateway call 是整个CLI的核心——它能调用任何一个RPC方法。

基本语法
openclaw gateway call <method> [options]
传递参数
# 通过 –params 传递 JSON 参数openclaw gateway call models.list –params ‘{“view”:”default”}’ –json# 无参数的方法openclaw gateway call health –json# 复杂参数openclaw gateway call channels.status –params ‘{“probe”:true,”timeoutMs”:15000}’ –json

–params 必须是合法的JSON字符串。

输出格式
# 人类友好输出(默认)openclaw gateway call health# JSON 结构化输出(适合脚本解析)openclaw gateway call health –json# 配合 jq 过滤openclaw gateway call status –json | jq ‘.sessions.count’

–json 模式没有颜色、没有 spinner,纯粹给脚本用。

06常用场景示例

12个典型场景,覆盖日常运维、Agent管理、配置操作全链路。

健康检查
openclaw gateway health –json

输出:

{  “ok”: true,  “ts”: 1779505350450,  “durationMs”: 418,  “eventLoop”: { “degraded”: false, “utilization”: 0.046 },  “channels”: { “tuitui”: { “running”: false, “configured”: false } }}

/healthz 是HTTP层的存活探针,收到响应就说明进程在。/readyz 更严格,startup插件、channels、hooks全部settle了才返回ok。health 命令走的是WebSocket RPC,比HTTP多一层——能拿到 eventLoop 诊断块,包含事件循环延迟、CPU利用率和 degraded 标志。

系统状态
openclaw gateway call status –params ‘{“includeChannelSummary”:true}’ –json
模型列表
openclaw gateway call models.list –params ‘{“view”:”default”}’ –json | jq ‘.models’
渠道管理
# 查看渠道状态openclaw gateway call channels.status –params ‘{“probe”:true}’ –json# 启动渠道openclaw gateway call channels.start –params ‘{“channel”:”tuitui”,”accountId”:”default”}’ –json# 停止渠道openclaw gateway call channels.stop –params ‘{“channel”:”tuitui”}’ –json
Agent管理
# 列出所有 Agentopenclaw gateway call agents.list –json# 切换模型openclaw gateway call agents.update –params ‘{“agentId”:”main”,”model”:”zyuncs/360-deepseek-v4-pro”}’ –json# 创建新 Agentopenclaw gateway call agents.create –params ‘{“name”:”助手”,”workspace”:”/data/workspace-new”,”model”:”zyuncs/copilotcode-14″}’ –json
文件读写
# 列出文件openclaw gateway call agents.files.list –params ‘{“agentId”:”main”}’ –json# 读取文件内容openclaw gateway call agents.files.get –params ‘{“agentId”:”main”,”name”:”SOUL.md”}’ –json | jq -r ‘.file.content’# 写入文件openclaw gateway call agents.files.set –params ‘{“agentId”:”main”,”name”:”IDENTITY.md”,”content”:”# 新内容\n…”}’ –json
技能状态
openclaw gateway call skills.status –json | jq ‘.skills[] | select(.eligible==true) | .name’
工具目录
openclaw gateway call tools.catalog –params ‘{“includePlugins”:true}’ –json | jq ‘.groups[].tools[].id’
定时任务
# 列出定时任务openclaw gateway call cron.list –json# 手动触发openclaw gateway call cron.run –params ‘{“id”:”task-id”}’ –json
配置管理
# 读取配置openclaw gateway call config.get –json > config-backup.json# 查看配置 Schemaopenclaw gateway call config.schema –json | jq ‘.properties | keys’
聊天对话
# 发送消息(触发 Agent 回复)openclaw gateway call chat.send \  –params ‘{“message”:”你好,请介绍一下你自己”}’ \  –expect-final \  –timeout 60000 \  –json
费用统计
openclaw gateway usage-cost –days 7 –json
07诊断与探测

这四个命令是CLI独有的诊断利器。出了问题别瞎猜,先跑一遍这些。

gateway probe——全链路探测

gateway probe 是”debug everything”命令。它比 status 更深入——同时探测你配置的remote网关和localhost本地网关,还会验证认证能力和读写权限。

openclaw gateway probeopenclaw gateway probe –json

输出语义解读:

输出字段
含义
Reachable: yes
至少一个目标接受了WebSocket连接
Capability: read-only
认证通过但只有读权限
Capability: admin-capable
认证通过,有完整管理权限
Capability: pairing-pending
设备配对还没完成
Capability: connect-only
连上了但什么权限都没有
Read probe: ok
read-scope的RPC调用也成功了
Read probe: limited
连接成功但read权限受限(degraded)

JSON模式下会输出完整的诊断结构:okdegradedcapabilityprimaryTargetIdwarnings[]network,以及每个target的 connect 和 auth 详情。

Exit code非零 = 所有目标都不可达。

如果你的远端网关绑在loopback上,还可以通过SSH隧道探测:

# SSH隧道探测远端网关openclaw gateway probe –ssh user@gateway-host# 指定SSH密钥openclaw gateway probe –ssh user@gateway-host –ssh-identity ~/.ssh/id_ed25519# 自动从DNS-SD发现的网关里选一个作为SSH目标openclaw gateway probe –ssh-auto

配置文件也支持SSH默认值:gateway.remote.sshTarget 和 gateway.remote.sshIdentity

gateway stability——稳定性诊断

gateway stability 拉取运行中网关的稳定性记录器数据。出过大body告警、内存压力事件、异常崩溃——这里都有记录。

# 查看最近稳定性事件openclaw gateway stability# 按事件类型过滤openclaw gateway stability –type payload.large# 读取上一次崩溃时写入的bundleopenclaw gateway stability –bundle latest# 导出zip用于提交bug reportopenclaw gateway stability –bundle latest –export# JSON模式openclaw gateway stability –json
选项
说明
默认值
–limit
最大事件数
25(最大1000)
–type
按事件类型过滤(如 payload.largediagnostic.memory.pressure
–since-seq
只看某个序列号之后的事件
–bundle
读持久化bundle(latest 或指定路径)
–export
导出可分享的诊断zip

隐私说明:记录只保留操作元数据(事件名、计数、字节大小、内存读数、队列状态),不保留聊天文本、webhook body、tool输出、token、cookie、secret。要彻底关闭可以设 diagnostics.enabled: false

网关在fatal exit、shutdown超时、restart startup失败时会自动把诊断快照写到 ~/.openclaw/logs/stability/openclaw-stability-*.json

gateway diagnostics export——导出诊断包

做bug report的标准姿势:导出一个诊断zip,附到issue里。

openclaw gateway diagnostics exportopenclaw gateway diagnostics export –output openclaw-diagnostics.zipopenclaw gateway diagnostics export –json
选项
说明
默认值
–output
输出路径
默认放state目录
–log-lines
包含的日志行数上限
5000
–log-bytes
检查的日志字节上限
1000000
–no-stability-bundle
跳过stability bundle

导出内容包含:manifest、Markdown摘要、config shape(脱敏)、sanitized log、Gateway status/health snapshots、最新stability bundle。

该zip是设计成可安全分享的——保留操作细节(子系统名、状态码、耗时、端口、插件ID),脱掉了聊天文本、webhook body、tool输出、凭证、cookie、prompt内容、hostname。

gateway usage-cost——费用统计
# 默认30天openclaw gateway usage-cost# 最近7天openclaw gateway usage-cost –days 7# JSON模式openclaw gateway usage-cost –json
08协议版本兼容性

这是CLI远程调用最关键的前置条件。版本不对,什么都白搭。

版本检查

OpenClaw Gateway使用协议版本号进行兼容性检查:

组件
当前协议版本
最低兼容
CLI 端 (本文测试版本 2026.5.19)
v4
v4
网关端 (本文测试版本 2026.5.7)
v3
v3
版本不匹配症状

当CLI和网关协议版本不匹配时:

GatewayClientRequestError: protocol mismatchgateway closed (1002): protocol mismatch
解决方案

方案A:升级网关端(推荐)

# 在远端服务器执行openclaw updateopenclaw gateway restart

方案B:降级CLI端

npm install -g openclaw@远端版本号

方案C:使用Node.js脚本自定义协议版本

当CLI版本不匹配时,可以直接用Node.js脚本指定 minProtocol: 3

const { callGateway } = require(‘./src/gateway/call.js’);await callGateway({  url: ‘wss://网关地址’,  token: ‘zqi-xxxxx’,  method: ‘health’,  minProtocol: 3,  // 手动降低协议版本  maxProtocol: 4,});
当前验证结论
验证项
结果
CLI (v4) → 旧版网关 (v3)
协议版本不匹配,失败
手动 Node.js 脚本(v3 → v3)
正常工作
HTTP /health 端点
正常工作
HTTP /v1/models 端点
正常工作

结论:本文测试环境中,CLI版本为2026.5.19 (Protocol v4),另一台网关版本为2026.5.7 (Protocol v3),存在一个大版本差异。CLI方式遇到这种情况需要版本对齐才能工作,你对照自己CLI和网关的版本号看下是否匹配。WebSocket脚本方式可以手动指定协议版本绕过此限制。

09二次开发与脚本集成

CLI的价值在于可编程。以下是四种典型的集成方式。

Shell脚本批量操作
#!/bin/bash# batch-operations.sh – 批量管理 OpenClawGATEWAY_OPTS=”–url wss://网关地址 –token *** –json”# 批量获取所有信息echo “=== 系统状态 ===”openclaw gateway call status $GATEWAY_OPTS | jq ‘.runtimeVersion’echo “=== 活跃 Agent ===”openclaw gateway call agents.list $GATEWAY_OPTS | jq ‘.agents[].agentId’echo “=== 渠道状态 ===”openclaw gateway call channels.status $GATEWAY_OPTS | jq ‘.channelAccounts | to_entries[] | “\(.key): \(.value[0].running)”‘echo “=== 已激活技能 ===”openclaw gateway call skills.status $GATEWAY_OPTS | jq ‘[.skills[] | select(.eligible==true)] | length’
监控脚本(与cron配合)
#!/bin/bash# monitor-gateway.sh – 定期检查网关健康GATEWAY_OPTS=”–url wss://网关地址 –token *** –json –timeout 5000″ALERT_WEBHOOK=”https://your-webhook.example.com/alert”health=$(openclaw gateway health $GATEWAY_OPTS 2>/dev/null)ok=$(echo “$health” | jq -r ‘.ok’)degraded=$(echo “$health” | jq -r ‘.eventLoop.degraded’)if [ “$ok” != “true” ] || [ “$degraded” == “true” ]; then  curl -sS “$ALERT_WEBHOOK” \    -H ‘Content-Type: application/json’ \    -d “{\”text\”:\”[!] OpenClaw 网关异常: ok=$ok degraded=$degraded\”}”fi
Python封装CLI调用
import subprocessimport jsondef openclaw_call(method, params=None, url=None, token=None, timeout=10000):    cmd = [‘openclaw’, ‘gateway’, ‘call’, method, ‘–json’, ‘–timeout’, str(timeout)]    if url:        cmd.extend([‘–url’, url])    if token:        cmd.extend([‘–token’, token])    if params:        cmd.extend([‘–params’, json.dumps(params)])    result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout/1000 + 5)    if result.returncode != 0:        raise Exception(f”CLI error: {result.stderr}”)    return json.loads(result.stdout)# 使用health = openclaw_call(‘health’, url=’wss://网关地址’, token=’zqi-xxx’)models = openclaw_call(‘models.list’, params={‘view’: ‘default’})
GitHub Actions CI/CD集成
name: Deploy & Verifyon: [push]jobs:  verify-gateway:    runs-on: ubuntu-latest    steps:      – name: Install OpenClaw        run: npm install -g openclaw      – name: Health Check        env:          OPENCLAW_GATEWAY_URL: ${{ secrets.GATEWAY_URL }}          OPENCLAW_GATEWAY_TOKEN: ${{ secrets.GATEWAY_TOKEN }}        run: |          openclaw gateway health –json          openclaw gateway call channels.status –json      – name: Switch Model (if needed)        env:          OPENCLAW_GATEWAY_URL: ${{ secrets.GATEWAY_URL }}          OPENCLAW_GATEWAY_TOKEN: ${{ secrets.GATEWAY_TOKEN }}        run: |          openclaw gateway call agents.update \            –params ‘{“agentId”:”main”,”model”:”zyuncs/360-deepseek-v4-pro”}’ \            –json
10服务生命周期管理

CLI不只是能远程调用RPC,它还负责管理网关进程本身——安装、启动、停止、重启、卸载。

基本操作
openclaw gateway install     # 安装为系统服务(macOS launchd / Linux systemd)openclaw gateway start       # 启动openclaw gateway stop        # 停止openclaw gateway restart     # 重启openclaw gateway uninstall   # 卸载

所有命令都支持 –json 输出。

安装选项
openclaw gateway install –port 18789 –token *** –force –json
选项
说明
–port
WebSocket端口
`–runtime <node\
bun>`
运行时选择
–token ***
认证Token
–wrapper <path>
用wrapper套壳启动
–force
强制重新安装
用wrapper套壳启动

当你的Token或Secret存储在外部Secret Manager(如Doppler、Vault)里,不想明文写到服务配置里,可以用wrapper套壳:

cat > ~/.local/bin/openclaw-doppler <<‘EOF’#!/usr/bin/env bashset -euo pipefailexec doppler run –project my-project –config production — openclaw “$@”EOFchmod +x ~/.local/bin/openclaw-doppleropenclaw gateway install –wrapper ~/.local/bin/openclaw-doppler –forceopenclaw gateway restart

wrapper接收正常的Gateway参数,负责注入环境变量后exec到openclaw。

也可以通过环境变量设置:

OPENCLAW_WRAPPER=”$HOME/.local/bin/openclaw-doppler” openclaw gateway install –force

清除wrapper:

OPENCLAW_WRAPPER= openclaw gateway install –force
重启策略

重启不是只有一种:

# 普通重启(默认,兼容旧行为)openclaw gateway restart# 安全重启:预检活跃工作,等drain完再重启openclaw gateway restart –safe# 安全重启但跳过等待:stuck task的逃生口openclaw gateway restart –safe –skip-deferral# 覆盖drain超时openclaw gateway restart –wait 30s# 强制重启:跳过一切检查,立即重启openclaw gateway restart –force

–safe 的行为:检查当前有没有正在进行的reply delivery、embedded runs、task runs,有的话等它们跑完再重启。如果某个task一直卡着不结束,–safe –skip-deferral 就是逃生口——跑safe预检但不等了,直接重启。

–wait 30s 可以覆盖默认的drain超时时间。支持 s(秒)、m(分)、h(小时)单位,–wait 0 表示无限等待。

停止的两种模式
# 普通停止(macOS: launchctl bootout,不持久化禁用)openclaw gateway stop# 持久化停止(禁用KeepAlive和RunAtLoad,重启后也不自动恢复)openclaw gateway stop –disable

macOS上的区别:默认 stop 用 launchctl bootout,只在当前boot session生效,KeepAlive自动恢复机制依然存在——万一崩溃了会被拉起来,gateway start 也能正常用。加了 –disable 才是真正持久化禁用,直到你手动 gateway start

11局域网发现

如果在局域网里有多台机器跑着网关,gateway discover 通过Bonjour扫描会自动发现它们。这也是之前安全漏洞爆发出来的一个入口点,如果安全问题不重视,侵入一台,所有实例都能访问爆破。

# 扫描局域网网关openclaw gateway discover# 调大超时(默认2秒)openclaw gateway discover –timeout 4000# JSON输出,提取所有网关的WebSocket地址openclaw gateway discover –json | jq ‘.beacons[].wsUrl’

底层扫描 _openclaw-gw._tcp beacon,支持两种模式:

模式
范围
说明
mDNS
local.

 局域网
默认开启,自动发现同一网络内的网关
Wide-Area DNS-SD
自定义域
需要配置DNS服务器和split DNS

发现的beacon会携带TXT hints:

TXT字段
含义
role
网关角色
transport
传输类型(如 gateway
gatewayPort
WebSocket端口(通常18789)
sshPort
SSH端口(full discovery模式)
tailnetDns
MagicDNS hostname
gatewayTls

 / gatewayTlsSha256
TLS状态和证书指纹
cliPath
CLI路径(full discovery模式)

只有开启了Bonjour discovery的网关(默认开启)才会广播beacon。

12与其他方式对比
维度
CLI 远程调用
WebSocket JSON-RPC
Admin HTTP RPC
方法数量
150+ 全量
150+ 全量
~50 白名单
连接模式
一次性 WS
长连接 WS
HTTP 短连接
需要安装
需装 CLI
无需
无需
设备签名
自动
可选
不需要
事件推送
不支持
支持
不支持
协议版本
必须匹配
可手动指定
无协议要求
适用场景
运维终端
Web UI / 实时管理
自动化脚本
输出格式
CLI 美化 / JSON
原始 JSON
原始 JSON
何时选择CLI

适合的场景:

◆ 运维人员日常终端操作
◆ 快速调试和验证
◆ 需要设备签名的安全环境
◆ 已安装OpenClaw的服务器
◆ CI/CD流水线健康检查

不适合的场景:

◆ 前端Web页面(用WebSocket)
◆ 轻量CI环境(用HTTP RPC或curl)
◆ 需要实时事件推送(只有WebSocket能做到)

WebSocket JSON-RPC的完整协议拆解——长连接、事件推送、双向错误信息

原因
解决方案
protocol mismatch
CLI 与网关协议版本不匹配
升级网关或降级 CLI
gateway closed (1008): unauthorized
Token 不正确
检查 Token
ECONNREFUSED
网关未启动或地址错误
检查网关地址和端口
ETIMEDOUT
网络不可达
检查网络连接
CERT_HAS_EXPIRED
TLS 证书过期
更新证书或添加 –tls-fingerprint
missing scope: operator.read
权限不足
确保 Token 有足够权限
device identity required
网关要求设备配对
完成配对或配置 dangerouslyDisableDeviceAuth
调试步骤
# 1. 检查网关是否在线(HTTP 层)curl -k https://网关地址/health# 2. 检查 CLI 版本openclaw –version# 3. 尝试最简单的调用openclaw gateway call health –url wss://网关地址 –token *** –json –timeout 5000# 4. 开启详细日志OPENCLAW_LOG_LEVEL=debug openclaw gateway call health –url wss://网关地址 –token *** –json# 5. 全链路探测(推荐)openclaw gateway probe –json
网络诊断
# 检查 WebSocket 端口可达性nc -zv 网关域名 443# 检查 DNS 解析nslookup 网关域名# 测试 TLS 握手openssl s_client -connect 网关域名:443 -servername 网关域名
14踩坑实录

以下为实机验证踩坑记录,全部基于真实环境复现。

坑1:协议版本不匹配(最常见)

实测现象:

场景
CLI 协议
网关协议
结果
CLI (2026.5.19) → 同版本网关
v4
v4
正常
CLI (2026.5.19) → 旧版网关 (2026.5.7)
v4
v3
protocol mismatch

错误输出:

GatewayClientRequestError: protocol mismatchgateway closed (1002): protocol mismatch

根因:CLI发送minProtocol:4, maxProtocol:4,远端网关只支持v3,协议协商失败。这个错误发生在握手阶段,Token还没来得及被检验就被断开了。

解决方案:

1. 升级网关到与CLI相同版本

2. 降级CLI:npm install -g openclaw@远端版本

3. 用Node.js脚本手动指定minProtocol: 3(WebSocket方式不受此限制)

关键点:看到protocol mismatch不要以为是Token错误。这是版本不匹配,和认证无关。

坑2:CLI和WebSocket脚本的协议行为差异

同一个远端网关(Protocol v3):

方式
minProtocol
maxProtocol
结果
CLI openclaw gateway call
4(硬编码)
4(硬编码)
失败
Node.js 手动 WebSocket
3(可指定)
4(可指定)
成功

CLI的协议版本由源码硬编码(MIN_CLIENT_PROTOCOL_VERSION),无法通过命令行参数覆盖。如果远端网关版本较老,CLI方式完全不可用,只能用WebSocket脚本。

坑3:ws://和wss://的选择
网关配置
使用协议
说明
本地 bind: “loopback”
ws://127.0.0.1:端口
本地无需 TLS
远端 FC/云部署
wss://域名
必须 TLS
自签证书
wss://

 + –tls-fingerprint
需要指纹验证

CLI调用本地网关:

# 正确:ws:// (本地无 TLS)openclaw gateway call health –url ws://127.0.0.1:18789 –token *** –json# 错误:wss:// (本地没有 TLS 证书)openclaw gateway call health –url wss://127.0.0.1:18789 –token *** –json

本地网关用ws://,远端网关用wss://。搞反了会连接失败但错误信息不明显。

坑4:Scope被清空问题

实测现象(远端网关,WebSocket直连):

连接方式
client.id
有 Origin 头
授权的 scopes
cli

 + Token,无 Origin
cli
[]

 (被清空)
cli

 + Token,无 Origin,有 device 签名
cli
[“operator.read”,”operator.write”,”operator.admin”]
openclaw-control-ui

 + Token + 匹配 Origin
openclaw-control-ui
[“operator.read”,”operator.write”,”operator.admin”]

即使Token正确、握手成功,如果没有设备签名且不是Control UI模式,网关会静默清空你声明的scopes。hello-ok返回“scopes”: [],后续所有需要权限的调用都会报missing scope务必在握手成功后检查返回的scopes是否非空

坑5:–expect-final的正确使用时机
# 错误:普通查询不需要 –expect-final(会一直等待直到超时)openclaw gateway call health –expect-final –json# 正确:Agent 执行才需要(等待 Agent 完成整个任务)openclaw gateway call chat.send \  –params ‘{“message”:”帮我写个总结”}’ \  –expect-final \  –timeout 120000 \  –json

–expect-final会让CLI等待”最终响应”,如果方法本身只有一次响应(如health),CLI拿到第一个ok:true后还会继续等,直到超时。

坑6:CLI vs Admin HTTP RPC vs WebSocket功能对比验证

在同一台本地网关上的实测对比:

功能
CLI gateway call
Admin HTTP RPC
WebSocket 脚本
health
支持
支持
支持
status
支持
支持
支持
models.list
支持
支持
支持
channels.status
支持
支持
支持
agents.list
支持
支持
支持
agents.files.list
支持
不支持 (400: not supported)
支持
agents.files.get
支持
不支持 (400: not supported)
支持
agents.files.set
支持
不支持 (400: not supported)
支持
skills.status
支持
不支持 (400: not supported)
支持
tools.catalog
支持
不支持 (400: not supported)
支持
chat.send
支持
不支持 (400: not supported)
支持
事件推送
不支持
不支持
支持
需要插件
不需要
需启用
不需要
协议版本要求
必须匹配
可手动指定

结论已经很明显:CLI和WebSocket能力完全对齐(150+方法全量),Admin HTTP RPC只有~50个白名单方法。但CLI是一次性的刀——没有事件推送、没有长连接。WebSocket的完整协议细节和实时推送机制,第3篇会全面拆解。

坑7:–url传参时凭证不回落

这个坑官方文档写得很清楚但容易忽略:

# 错误:传了–url但没传–token,CLI不会用配置文件里的Tokenopenclaw gateway call health –url wss://某个地址 –json# 结果:认证失败# 正确:显式传–url就要显式传–tokenopenclaw gateway call health –url wss://某个地址 –token *** –json

一旦你传了–url,CLI就认为你要完全手动控制,不会再fallback到配置文件或环境变量里的Token。要么全手动,要么全靠配置文件。

15附录:OpenClaw CLI 完整命令清单

以下是从源码扒出来的全部顶级命令,共55个。这张表相当于OpenClaw的命令行字典——不管你是日常运维还是写自动化脚本,碰到不确定的命令直接来这里查。配合前面的OpenClaw系列教程一起用,上手效率会快很多。

核心命令(Core Commands)
命令
说明
有子命令
openclaw crestodian
交互式安装/修复助手
×
openclaw setup
初始化本地配置和 Agent workspace
×
openclaw onboard
交互式 onboarding(网关/workspace/技能)
×
openclaw configure
交互式配置(凭证/渠道/网关/Agent 默认)
×
openclaw config
配置 get/set/unset/file/validate
openclaw backup
创建+验证本地状态备份
openclaw migrate
从其他 Agent 系统导入状态
openclaw doctor
诊断+修复配置/网关/插件/渠道
×
openclaw dashboard
用当前 Token 打开 Control UI
×
openclaw reset
重置本地配置/状态(保留 CLI)
×
openclaw uninstall
卸载网关服务+本地数据(CLI 保留)
×
openclaw message
发送/读取/管理渠道消息
openclaw mcp
管理 OpenClaw MCP 配置
openclaw agent
通过网关跑一轮 Agent
×
openclaw agents
管理隔离的 Agent(workspace/auth/路由)
openclaw status
网关/渠道/模型/近期会话状态
×
openclaw health
拉网关详细健康数据
×
openclaw sessions
列出存储的会话
openclaw commitments
管理 follow-up commitments
openclaw tasks
检查后台 Task 和 Flow
子 CLI 模块(Sub-CLIs)
命令
说明
有子命令
openclaw acp
运行/管理 ACP 编码 Agent
openclaw gateway
运行/检查/查询网关
openclaw daemon
管理网关服务(legacy alias)
openclaw logs
拖网关日志(本地/RPC)
×
openclaw system
系统事件/心跳/在线状态
openclaw models
列出/扫描/设置模型提供商
openclaw infer
跑模型/媒体/搜索/嵌入命令
openclaw capability
跑 provider capability 命令
openclaw approvals
管理 exec 审批
openclaw exec-policy
显示/同步 exec 策略
openclaw nodes
配对节点+通过网关跑节点命令
openclaw devices
设备配对+Token 管理
openclaw node
运行无头节点服务
openclaw sandbox
管理 Agent 隔离沙箱容器
openclaw tui
打开连接到网关的 TUI
×
openclaw terminal
本地 TUI(tui –local alias)
×
openclaw chat
本地 TUI(tui –local alias)
×
openclaw cron
调度+检查网关定时任务
openclaw dns
DNS 助手(Tailscale + CoreDNS)
openclaw docs
搜索 OpenClaw 在线文档
×
openclaw qa
QA 场景+私有 QA 调试 UI
openclaw proxy
调试代理+检查抓包流量
openclaw hooks
管理内部 Agent hooks
openclaw webhooks
Webhook 助手+集成
openclaw qr
生成手机配对 QR 码
×
openclaw clawbot
Legacy clawbot 别名
openclaw pairing
安全 DM 配对(批准入站请求)
openclaw plugins
安装/启用/禁用/检查插件
openclaw channels
添加/移除/登录/检查渠道
openclaw directory
联系人和群组 ID 查询
openclaw security
安全工具+本地配置审计
openclaw secrets
审计/应用/重载 SecretRef 凭证
openclaw skills
列出/检查/安装 Agent 技能
openclaw update
更新 OpenClaw+检查更新通道
openclaw completion
生成 shell 补全脚本
×
16下一篇预告

CLI是一次性的刀,干完就走。但有些场景需要一直在线——实时事件推送、双向通信、前端Web页面管理。第3篇将深入WebSocket全协议,拆解长连接、握手流程、事件订阅、心跳保活,以及如何用纯脚本写一个完整的OpenClaw管理前端。

下篇见。

版权声明:本文由AI技术博客原创,转载请注明出处。

#openclaw#龙虾#RPC#管理页面#CLI#命令行