The Node.js ws library doesn't send an Origin header by default. When the client identifies as openclaw-control-ui, the gateway enforces origin checks and rejects connections with missing origin. Pass the gateway URL as the Origin header so the gateway's local-loopback check sees a valid loopback origin and allows it. Bump to v2.3.20. Made-with: Cursor