Skip to content

[Bug] CLI-mode gateway RPC client handshake timeout in v2026.3.13 — connect.challenge never processed #46218

@MSCHKY

Description

@MSCHKY

Environment

  • OpenClaw: 2026.3.13 (61d171a)
  • Node: v22.22.0
  • OS: Debian 12 (bookworm), x86_64
  • Install: npm global (npm i -g openclaw)
  • Gateway: systemd user service, loopback bind

Problem

After upgrading from v2026.3.12 → v2026.3.13, all CLI commands using the CLI-mode gateway RPC client fail with handshake timeout. Probe-mode commands (status, doctor) still work fine.

2 independent gateways on the same host (different user accounts, different ports) exhibit identical behavior after the upgrade.

Minimal repro

openclaw gateway call health --json
# → "gateway timeout after 10000ms"

Also fails: openclaw devices list, openclaw gateway call device.pair.list --json --params "{}"

Still working (probe/token-auth path):

openclaw status   #
openclaw doctor   #

Gateway log during failure

[ws] handshake timeout conn=9511c15d… remote=127.0.0.1
[ws] closed before connect conn=9511c15d… code=1006 reason=n/a

Debug log (OPENCLAW_LOG_LEVEL=debug)

{"cause":"handshake-timeout","handshake":"failed","durationMs":27462,"host":"127.0.0.1:18791","handshakeMs":3000}

No parse error, no challenge received — the CLI opens the WebSocket but never processes the server's connect.challenge event.

Raw WS client proof

A minimal WS client does receive the challenge immediately:

NODE_PATH=/path/to/openclaw/node_modules node -e \
  "const W=require('ws'); const ws=new W('ws://127.0.0.1:18791'); ws.on('message',m=>console.log(m.toString()))"

Output:

{"type":"event","event":"connect.challenge","payload":{"nonce":"c432338f-...","ts":1773495351042}}

Gateway sends challenge correctly. The OpenClaw CLI binary just never responds to it.

What was ruled out

  • PATH / binary mismatch (confirmed same binary via command -v + --version in login shell)
  • Proxy vars (none set)
  • Device identity corruption (full reset of device.json + device-auth.json + paired.json → same result)
  • Quoting / shell expansion (tested via SCP'd script + bash -l, direct binary path call)
  • 2 gateways, 2 users, different ports — identical behavior

Additional context

  • Upgraded from v2026.3.12 where all CLI commands worked correctly
  • gateway.controlUi.dangerouslyDisableDeviceAuth is unrelated (Control UI only, does not affect CLI-mode RPC)
  • No operational impact on gateway/channels — Telegram, heartbeat, sessions all work fine

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions