If agent:main:main has no deliveryContext and no lastChannel/lastTo, and switching session.dmScope didn’t change anything, then this is almost certainly not “main session delivery routing”.
At that point, the consistent explanation for “every Telegram DM gets two bot replies” is:
1) You have two OpenClaw instances consuming the same Telegram bot token
Common ways this happens on macOS:
- Gateway is running as a LaunchAgent service and you also have a second gateway running somewhere else (old laptop/VPS).
- Config mismatch: you edited the config your CLI uses, but the service is running with a different
OPENCLAW_STATE_DIR / config file (so your dmScope change didn’t actually affect the instance that’s replying).
What to check (these 3 outputs will usually reveal it):
- Service vs CLI config mismatch
openclaw gateway status
Look specifically for lines like “Config (cli)” vs “Config (service)” (paths).
If they differ, your changes are going to the wrong place. Fix is usually: