Skip to content
Built 26/04/16 13:13commit cc1e88d

OpenClaw Cron Pairing And Operator Scopes

中文 | English

摘要

即使 gateway 正常、机器整体看起来也没坏,cron 创建依然可能失败。在一个真实 OpenClaw 环境里,真正的问题并不是 cron 本身,而是 paired device 的 operator scopes 不够,导致 gateway 用带 pairing 味道的 close reason 拒绝了 cron 操作。

现象

cron(action="status") 或创建 job 这样的操作会报:

text
gateway closed (1008): pairing required

这个报错很容易被误读成 pairing 流程没做完,或者 cron 子系统本身坏了。

根因

真正的问题是实际向 gateway 发请求的 runtime identity 出现了 operator scopes 不匹配。机器上其实已经有 pairing 数据,但真正生效的 client 是 gateway-client,它拥有的 scopes 不足以执行 cron 动作,于是 gateway 就用一个带 pairing 味道的 close reason 拒绝了请求,哪怕 pairing 本身早就完成了。

这次排障里还有第二层陷阱:只改 paired-device record 还不够。runtime 自己还带着一份本地 auth 视图,放在 identity/device-auth.json 里,所以即使 paired.json 已经改对了,effective scopes 仍可能停留在旧状态。

如何确认

  • 检查 ~/.openclaw/identity/device.json,先确认本地 OpenClaw 进程实际使用的是哪个 runtime device 和 client。
  • 检查 ~/.openclaw/identity/device-auth.json,看这个 runtime identity 当前实际拿到的 scopes。
  • 检查 ~/.openclaw/devices/paired.json,确认同一个 device 或 client 的 paired record。
  • 不要先入为主地以为当前活跃设备就是最先看到的 UI 侧条目,要确认真正生效的是不是 gateway-client 之类的 runtime client。
  • 如果设备看起来已配对,但 cron 仍报 gateway closed (1008): pairing required,就应优先怀疑 runtime scopes 不匹配。

修复方法

同时更新真正 gateway client 对应的 paired-device record 和 runtime auth record,让它们对 cron 管理所需的完整 operator 集合达成一致:

  • operator.read
  • operator.write
  • operator.admin
  • operator.pairing
  • operator.approvals

在这次复现环境里,真正需要修的是 ~/.openclaw/devices/paired.json 里的 gateway-client 记录,以及 ~/.openclaw/identity/device-auth.json 里的对应 runtime scopes,而不是只改另一个 paired device,比如 openclaw-control-ui

当这两份记录一致后,cron(action="status") 就恢复可用,后续 cron job 也能正常创建。

实践意义

带 pairing 字样的 gateway close message 不一定真的是“设备没配对”,在实战里它也可能表示“真正运行中的 client 虽然已配对,但 scopes 不足以执行当前 operator 动作”,而且决定结果的状态可能同时分布在 paired state 和 runtime auth state 两层。

相关页面