Summary
On local gateways using gateway.auth.mode=token, CLI detail calls on localhost can lose paired operator scopes because device identity is suppressed when a shared gateway token/password is present. This makes status --deep and last-heartbeat behave inconsistently even though basic health checks still work.
Separately, openclaw gateway probe budgets only 800ms for the localLoopback target, which is too short for full detail probes on healthy localhost gateways.
Symptoms
openclaw status --deep can show gateway summary issues such as missing scope: operator.read
Last heartbeat can show as unavailable even while heartbeats are actually running
openclaw gateway probe --json can report a localhost timeout on a healthy gateway
- simple socket/health checks still succeed, making the failure look inconsistent
Root cause
- Local CLI gateway calls deliberately skip
deviceIdentity on loopback whenever a shared token/password exists, so detail RPCs do not benefit from paired operator scopes.
localLoopback probe budget is fixed at 800ms, while real full localhost detail probes can take ~1.7-1.9s.
Proposed fix
- always allow CLI localhost gateway calls / detail probes to attach
deviceIdentity
- raise
localLoopback probe budget to something like 3000ms
Reproduction notes
Observed on Linux local gateway with loopback bind and token auth. Direct websocket + health were fine; failures appeared only on detail RPC paths (status, system-presence, last-heartbeat) and on the CLI probe budget path.
Summary
On local gateways using
gateway.auth.mode=token, CLI detail calls on localhost can lose paired operator scopes because device identity is suppressed when a shared gateway token/password is present. This makesstatus --deepandlast-heartbeatbehave inconsistently even though basic health checks still work.Separately,
openclaw gateway probebudgets only 800ms for thelocalLoopbacktarget, which is too short for full detail probes on healthy localhost gateways.Symptoms
openclaw status --deepcan show gateway summary issues such asmissing scope: operator.readLast heartbeatcan show as unavailable even while heartbeats are actually runningopenclaw gateway probe --jsoncan report a localhost timeout on a healthy gatewayRoot cause
deviceIdentityon loopback whenever a shared token/password exists, so detail RPCs do not benefit from paired operator scopes.localLoopbackprobe budget is fixed at 800ms, while real full localhost detail probes can take ~1.7-1.9s.Proposed fix
deviceIdentitylocalLoopbackprobe budget to something like 3000msReproduction notes
Observed on Linux local gateway with loopback bind and token auth. Direct websocket + health were fine; failures appeared only on detail RPC paths (
status,system-presence,last-heartbeat) and on the CLI probe budget path.