Skip to content

[Bug]: openclaw status loads memory plugins locally and can report false vector state #62599

@shawnpetros

Description

@shawnpetros

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

openclaw status on 2026.4.2 initializes the active memory plugin in the CLI process, which can trigger plugin startup side effects and report false memory/vector state that disagrees with the live launchd-managed gateway.

Steps to reproduce

  1. Install/run OpenClaw 2026.4.2 on macOS with a custom memory plugin in plugins.slots.memory (openclaw-memory-openbrain in my case).
  2. Ensure the live launchd-managed gateway is running and check ~/.openclaw/logs/gateway.log.
  3. Run openclaw status.
  4. Observe that the status command locally loads the memory plugin and reports memory/vector state from the CLI process instead of the live gateway.

Expected behavior

openclaw status should be read-only and should not initialize plugin startup paths that mutate state or trigger heavyweight side effects. If it reports memory/vector state, that state should reflect the live gateway runtime rather than a separate CLI-local plugin runtime.

Actual behavior

Observed on 2026.4.2:

  • openclaw status loads the memory plugin locally and executes register(api) in the CLI/status process.
  • Before a local containment patch, the status path triggered embedder/backfill/vector startup work and reported:
    • sqlite-vec load failed: Error: out of memory
    • vector off
  • At the same time, the actual launchd-managed gateway log showed successful vec load:
    • [openclaw-memory] sqlite-vec loaded via OpenClaw SDK: /opt/homebrew/lib/node_modules/openclaw/node_modules/sqlite-vec-darwin-arm64/vec0.dylib
  • After adding a plugin-local passive-status guard, openclaw status stopped triggering vec/embedder work and stopped reporting the false vector failure.

OpenClaw version

2026.4.2 (d74a122)

Operating system

macOS 15 / Darwin 25.2.0 (arm64)

Install method

npm global / launchd-managed gateway

Model

N/A (status command path; not model-dependent)

Provider / routing chain

N/A for reproduction. The bug is in CLI status/runtime/plugin initialization, not model routing.

Additional provider/model setup details

NOT_ENOUGH_INFO

Logs, screenshots, and evidence

# Current 2026.4.2 status path reaches local plugin code:
[plugins] memory-openbrain: local store opened at /Users/shawnpetros/.openclaw/memory/memory.db (117 thoughts)
[plugins] memory-openbrain: status context detected — skipping embedder/backfill init
[plugins] memory-openbrain v3: backend=local, autoCapture=true, autoRecall=true, injectContext=true
[plugins] memory-openbrain: already registered in this process, skipping duplicate init
│ Memory               │ 0 files · 117 chunks · sources memory · plugin openclaw-memory-openbrain                      │

# Before the plugin-local containment patch, the same `openclaw status` path reported:
[plugins] memory-openbrain: local store opened at /Users/shawnpetros/.openclaw/memory/memory.db (117 thoughts)
[plugins] memory-openbrain v3: backend=local, autoCapture=true, autoRecall=true, injectContext=true
[plugins] memory-openbrain: already registered in this process, skipping duplicate init
│ Memory               │ 0 files · 117 chunks · sources memory · plugin openclaw-memory-openbrain · vector off         │
[plugins] memory-openbrain: embedder ready (ollama/nomic-embed-text), vec will lazy-load on first use
[openclaw-memory] sqlite-vec load failed: Error: out of memory

# At the same time, the live launchd gateway log showed vec loading successfully:
2026-04-07T08:59:20.383-07:00 [plugins] memory-openbrain: local store opened at /Users/shawnpetros/.openclaw/memory/memory.db (117 thoughts)
2026-04-07T08:59:20.787-07:00 [plugins] memory-openbrain: embedder ready (ollama/nomic-embed-text), vec will lazy-load on first use
2026-04-07T08:59:20.798-07:00 [openclaw-memory] sqlite-vec loaded via OpenClaw SDK: /opt/homebrew/lib/node_modules/openclaw/node_modules/sqlite-vec-darwin-arm64/vec0.dylib

Observed call path in installed dist:

  • status.scanresolveMemoryStatusSnapshot(...)
  • resolveSharedMemoryStatusSnapshot(...)
  • getMemorySearchManager(...)
  • getActiveMemorySearchManager(...)
  • ensureMemoryRuntime(...)
  • resolveRuntimePluginRegistry(...)
  • plugin register(api) executes in the CLI process

Impact and severity

Affected: users of memory plugins with non-trivial startup side effects (embedder init, vector probes, backfill, network/DB work)
Severity: medium to high (status becomes misleading, can trigger unexpected plugin work, and can report false failures)
Frequency: reproduced consistently in this environment
Consequence: openclaw status can disagree with the real gateway runtime and may cause plugin-local side effects during what should be a read-only inspection path

Additional information

  • A plugin-local containment patch proved the blast radius can be reduced: when the plugin detects status context and skips heavyweight startup, the false vec/OOM report disappears.
  • Based on the installed 2026.4.2 dist code, the status command currently instantiates the memory runtime locally instead of asking the live gateway for memory/vector truth.
  • I have not opened a PR yet. I wanted to file the issue first with grounded evidence.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions