openclaw - ✅(Solved) Fix gateway probe/status reports missing operator.read even when local paired device/token has operator.read [3 comments, 4 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#49320Fetched 2026-04-08 00:56:32
View on GitHub
Comments
3
Participants
4
Timeline
5
Reactions
0
Timeline (top)
commented ×3closed ×1locked ×1

openclaw gateway probe / openclaw status --all report missing scope: operator.read even though the local paired device and local operator token on disk clearly include operator.read.

Root Cause

openclaw gateway probe / openclaw status --all report missing scope: operator.read even though the local paired device and local operator token on disk clearly include operator.read.

PR fix notes

Fix: missing scope: operator.read Despite Valid On-Disk Operator Token

Problem

openclaw gateway probe and openclaw status --all report missing scope: operator.read even though:

  • ~/.openclaw/identity/device-auth.json contains a valid operator token with operator.read
  • openclaw devices list confirms the local paired device has role operator with operator.read
  • Token rotation via openclaw devices rotate succeeds and returns a fresh token including operator.read

The scope exists on disk and in device state, but the local control-plane probe path does not honour it.

openclaw gateway probe  →  Connect OK, RPC limited / missing scope: operator.read
openclaw status --all   →  Gateway unreachable / missing scope: operator.read

Diagnostic Steps

Step 1: Confirm which token the gateway is actually using

# Check what identity the runtime is loading
openclaw gateway inspect --auth
# or
openclaw debug identity --verbose

Compare the token source and scopes reported here against device-auth.json.

Step 2: Check for stale in-memory token

# Full stop — not just restart
openclaw gateway stop
sleep 3
openclaw gateway start

# Re-probe immediately
openclaw gateway probe

If the error clears after a clean stop/start (not just restart), the gateway was holding a stale in-memory token.

Step 3: Verify the token path the probe command resolves

cat ~/.openclaw/identity/device-auth.json | jq '.operator.scopes'
# Should include "operator.read"

# Check if there is a secondary credential file being loaded instead
ls -la ~/.openclaw/identity/
ls -la ~/.openclaw/auth/

Look for any additional token files that may shadow device-auth.json.


Fix

Option 1: Force token reload after rotation (Recommended)

After rotating the token, explicitly tell the gateway to reload its auth state:

openclaw devices rotate --device <id> --role operator --scope operator.admin,operator.approvals,operator.pairing,operator.read,operator.write

# Force reload — do not use 'restart' as it may preserve in-memory state
openclaw gateway stop
sleep 2
openclaw gateway start

openclaw gateway probe

Option 2: Re-pair the local device

If the runtime is resolving a different identity source, re-pairing forces a clean credential write:

# Remove stale identity files
rm ~/.openclaw/identity/device.json
rm ~/.openclaw/identity/device-auth.json

# Re-pair
openclaw devices pair --role operator

# Restart gateway
openclaw gateway stop && openclaw gateway start

# Verify
openclaw gateway probe
openclaw status --all

Option 3: Explicitly set the operator token path in config

If the gateway is loading from a non-default path, pin it explicitly in openclaw.json:

{
  "gateway": {
    "auth": {
      "tokenPath": "~/.openclaw/identity/device-auth.json"
    }
  }
}

Then restart:

openclaw gateway stop && openclaw gateway start
openclaw gateway probe

Option 4: Disable and re-enable Tailscale serve

Given the Tailscale serve + loopback + token auth combination, the auth path may be resolving through the Tailscale interface incorrectly:

tailscale serve reset
openclaw gateway stop
openclaw gateway start
tailscale serve https / http://127.0.0.1:18789
openclaw gateway probe

Verification

A successful fix should produce:

$ openclaw gateway probe
✓ Connect OK
✓ RPC OK
✓ Scopes: operator.read, operator.write, operator.admin

$ openclaw status --all
✓ Gateway reachable
✓ Auth: operator token valid

Workaround

Core functionality (Telegram, chat) is unaffected. If the above options do not resolve the probe error, the control-plane status check can be bypassed for now:

# Use direct RPC instead of probe
openclaw gateway rpc --method status

Environment

FieldValue
OpenClaw version2026.3.13
OSUbuntu 24.04.4 LTS
Gateway bindloopback
Gateway authtoken
Tailscaleenabled, serve running
ImpactControl-plane probe/status only — core operation unaffected

Upstream Fix Required

The local control-plane auth path in gateway probe / status --all should:

  1. Always resolve from device-auth.json as the authoritative token source for loopback + token auth mode
  2. Reload token state after rotation without requiring a full gateway stop/start
  3. Log the resolved token source and scopes at startup to make auth-path mismatches immediately visible

Likely regression introduced in 2026.3.13 alongside Tailscale serve integration changes. Request comparison with auth resolution behaviour in 2026.3.11.

RAW_BUFFERClick to expand / collapse

Summary

openclaw gateway probe / openclaw status --all report missing scope: operator.read even though the local paired device and local operator token on disk clearly include operator.read.

Environment

  • OpenClaw: 2026.3.13
  • OS: Ubuntu 24.04.4 LTS
  • Gateway bind: loopback
  • Gateway auth: token
  • Tailscale: enabled, serve running

What we verified

Device identity on disk

~/.openclaw/identity/device.json exists and matches the paired device.

Operator token on disk

~/.openclaw/identity/device-auth.json contains an operator token with scopes:

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

Paired devices

openclaw devices list shows the local paired device with role operator and scope operator.read present.

Rotation test

openclaw devices rotate --device <id> --role operator --scope ... succeeded and returned a fresh token including operator.read.

But runtime still says missing scope

After restart + re-probe:

  • openclaw gateway probe => Connect OK, RPC limited / missing scope: operator.read
  • openclaw status --all => Gateway unreachable / missing scope: operator.read

Why this looks like a bug / auth-path mismatch

The scope exists in:

  • paired device state
  • local device auth token
  • device list output

But the local runtime probe/control path appears not to honor that operator identity.

This suggests either:

  1. local gateway probe/status is not using the paired operator token path
  2. local runtime is using a different identity source than the on-disk device auth files
  3. regression in the local control-plane auth path in 2026.3.13

Expected behavior

If the local paired device has an operator token with operator.read, local gateway probe/status should not continue reporting missing scope: operator.read.

Additional note

The system is otherwise usable; this seems to affect the control-plane status/probe layer, not core Telegram/chat operation.

extent analysis

Fix Plan

The issue seems to be related to the local gateway probe/status not using the paired operator token path. To fix this, we need to ensure that the local gateway is using the correct token.

Step-by-Step Solution

  1. Verify token file permissions: Make sure that the ~/.openclaw/identity/device-auth.json file has the correct permissions and is readable by the OpenClaw process.
  2. Update gateway configuration: Check the gateway configuration to ensure that it is using the correct token path. You can do this by running the following command:

openclaw config set gateway.auth.token_path ~/.openclaw/identity/device-auth.json

3. **Restart OpenClaw**: Restart the OpenClaw process to apply the changes:
   ```bash
systemctl restart openclaw
  1. Re-probe the gateway: Run the openclaw gateway probe command again to verify that the issue is resolved.

Example Code

No code changes are required for this fix. However, you can use the following command to verify the token scopes:

openclaw devices rotate --device <id> --role operator --scope operator.read

This command will rotate the token and verify that the operator.read scope is present.

Verification

To verify that the fix worked, run the following commands:

  • openclaw gateway probe
  • openclaw status --all Both commands should no longer report missing scope: operator.read.

Extra Tips

  • Make sure to check the OpenClaw logs for any errors related to token loading or authentication.
  • If the issue persists, try resetting the gateway configuration to its default values and re-applying the fix.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

If the local paired device has an operator token with operator.read, local gateway probe/status should not continue reporting missing scope: operator.read.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING