Bug Description
When starting OpenClaw with the memos-local-openclaw-plugin, the Memory Viewer service is initialized twice, causing a port conflict.
Observed Behavior
-
First startup (when OpenClaw gateway starts):
07:41:15 [plugins] MemOS Memory Viewer → http://127.0.0.1:18799
07:41:15 [plugins] memos-local: password reset token: bd6c755f...
-
Second startup (when sending the first message/conversation):
07:42:16 [plugins] memos-local: service.start() not called by host, self-starting viewer...
07:42:16 [plugins] Viewer port 18799 in use, trying 18800
07:42:17 [plugins] MemOS Memory Viewer → http://127.0.0.1:18800
Impact
- Does not break functionality: The plugin correctly falls back to port 18800, so memory features still work.
- Confusing logs: Users see two different Viewer URLs and two different password reset tokens.
- Resource waste: Two instances of the Viewer server are running unnecessarily.
Expected Behavior
The Memory Viewer should only start once during OpenClaw initialization. The second initialization triggered by the first conversation should be skipped if the service is already running.
Environment
- OpenClaw version: 2026.4.2
- memos-local-openclaw-plugin version: 1.0.8
- OS: Windows
- Configuration:
plugins.slots.memory + plugins.allow both include the plugin
Possible Cause
The plugin might be registered/loaded twice due to overlapping configuration triggers (plugins.allow + plugins.slots.memory), or the service.start() lifecycle hook is not properly checking if the viewer is already running before attempting to start it again.
Bug Description
When starting OpenClaw with the
memos-local-openclaw-plugin, the Memory Viewer service is initialized twice, causing a port conflict.Observed Behavior
First startup (when OpenClaw gateway starts):
Second startup (when sending the first message/conversation):
Impact
Expected Behavior
The Memory Viewer should only start once during OpenClaw initialization. The second initialization triggered by the first conversation should be skipped if the service is already running.
Environment
plugins.slots.memory+plugins.allowboth include the pluginPossible Cause
The plugin might be registered/loaded twice due to overlapping configuration triggers (
plugins.allow+plugins.slots.memory), or theservice.start()lifecycle hook is not properly checking if the viewer is already running before attempting to start it again.