Environment
- OpenClaw: 2026.5.22 (also 2026.5.20)
- Plugin: @tencent-weixin/openclaw-weixin v2.4.4
- Node.js: v23.11.1
- OS: Windows 11 + WSL2 (Ubuntu, kernel 6.6.114.1)
- Gateway: local mode, systemd user service
Symptoms
- openclaw channels login --channel openclaw-weixin: QR code shows, scans successfully
- Auth saved to ~/.openclaw/openclaw-weixin/accounts/ correctly
- CLI sends channels.start via WebSocket after login
- Gateway responds: errorCode=INVALID_REQUEST errorMessage=invalid channels.start channel
- Gateway startup log: http server listening (7 plugins: browser, canvas, device-pair, file-transfer, memory-core, phone-control, talk-voice) - no weixin channel, no error about being skipped
Root Cause
The gateway runtime channel registry does not contain openclaw-weixin. The channel register() function (which calls api.registerChannel()) is never invoked because the gateway does not load non-stock channel plugins at startup.
The full call chain:
channels.start handler ? normalizeChannelId("openclaw-weixin") ? normalizeAnyChannelId ? findRegisteredChannelPluginEntry ? buildRegisteredChannelPluginLookup().byKey.get("openclaw-weixin") ? returns undefined ? null ? "invalid channels.start channel" error
The CLI can load the plugin on-the-fly via resolveInstallableChannelPlugin() ? loadScopedChannelPlugin() and the QR login flow works perfectly. But the gateway startup never loads non-stock channel plugins, so channels.start fails.
Steps to Reproduce
- Install OpenClaw 2026.5.20+ on WSL2 (Windows 11)
- openclaw plugins install @tencent-weixin/openclaw-weixin
- openclaw config set channels.openclaw-weixin.enabled true
- openclaw gateway restart
- openclaw channels login --channel openclaw-weixin
- Scan QR code with WeChat ? observe error
Workarounds Tried (10+, all failed)
- Remove plugins.allow for auto-discovery
- Add openclaw-weixin to plugins.allow
- openclaw doctor --fix
- openclaw plugins registry --refresh
- Copy plugin to ~/.openclaw/extensions/openclaw-weixin/
- Symlink to stock extensions dir (causes different error)
- Reinstall with --force
- Downgrade to 2026.5.20 then re-upgrade
- Toggle bundledDiscovery between compat and allowlist
- openclaw channels add guided setup
Expected Behavior
After QR scan, gateway should recognize openclaw-weixin, start it via plugin.gateway.startAccount(), and begin long-polling for WeChat messages.
Additional Notes
- Plugin openclaw.plugin.json correctly declares channels: ["openclaw-weixin"]
- Plugin dist/index.js correctly exports register() with api.registerChannel()
- Account auth data (token, userId) correctly saved after QR scan
- openclaw channels capabilities shows accounts with Probe: "unavailable"
- This appears to be a gap in how non-stock channel plugins are loaded at gateway startup vs discovered by CLI
Environment
Symptoms
Root Cause
The gateway runtime channel registry does not contain openclaw-weixin. The channel register() function (which calls api.registerChannel()) is never invoked because the gateway does not load non-stock channel plugins at startup.
The full call chain:
channels.start handler ? normalizeChannelId("openclaw-weixin") ? normalizeAnyChannelId ? findRegisteredChannelPluginEntry ? buildRegisteredChannelPluginLookup().byKey.get("openclaw-weixin") ? returns undefined ? null ? "invalid channels.start channel" error
The CLI can load the plugin on-the-fly via resolveInstallableChannelPlugin() ? loadScopedChannelPlugin() and the QR login flow works perfectly. But the gateway startup never loads non-stock channel plugins, so channels.start fails.
Steps to Reproduce
Workarounds Tried (10+, all failed)
Expected Behavior
After QR scan, gateway should recognize openclaw-weixin, start it via plugin.gateway.startAccount(), and begin long-polling for WeChat messages.
Additional Notes