openclaw - 💡(How to fix) Fix npm memory-lancedb plugin: tools not visible to active-memory sub-agent

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…

The npm-installed @openclaw/memory-lancedb plugin (v2026.5.7) registers agent tools (memory_recall, memory_store, memory_forget) that are not visible to the active-memory plugin's embedded sub-agent. The sub-agent fails with No callable tools remain for memory_recall, memory_search, memory_get.

The bundled memory-core plugin works correctly with active-memory in the same configuration.

Root Cause

The memory-lancedb plugin uses the external npm plugin SDK (openclaw/plugin-sdk/plugin-entrydefinePluginEntry), while memory-core is bundled and uses direct internal API imports. The npm plugin SDK's api.registerTool() appears to register tools in a scope that is not visible to embedded sub-agents (like active-memory's sub-agent), even though the tools might be available to the main agent.

This affects:

  • memory_recall (LanceDB) — not found
  • memory_search (memory-core) — found when memory-core is the active slot
  • memory_get (memory-core) — found when memory-core is the active slot

Fix Action

Workaround

Use bundled memory-core as the memory slot instead of npm memory-lancedb:

{
  plugins: {
    slots: { memory: "memory-core" }
  }
}

Code Example

[tools] No callable tools remain after resolving explicit tool allowlist 
(runtime toolsAllow: memory_recall, memory_search, memory_get); 
no registered tools matched. Fix the allowlist or enable the plugin 
that registers the requested tool.

---

http server listening (11 plugins: active-memory, ..., memory-lancedb, ...)
memory-lancedb: initialized (db: ~/.openclaw/memory/lancedb, model: qwen2.5-coder:7b)

---

$ curl http://127.0.0.1:11434/api/embed -d '{"model":"qwen2.5-coder:7b","input":"test"}'
# Returns valid 3584-dimension embeddings in ~4.4s

---

$ openclaw ltm stats    # works
$ openclaw ltm search "query"  # works
$ openclaw ltm list     # works

---

api.registerTool({
    name: "memory_recall",
    ...
}, { name: "memory_recall" });

---

// memory-core registers tools via:
api.registerTool(
    (ctx) => createLazyMemorySearchTool(resolveMemoryToolOptions(ctx)), 
    { names: ["memory_search"] }
);

---

active-memory: done status=empty elapsedMs=7728

---

{
  plugins: {
    slots: { memory: "memory-core" }
  }
}
RAW_BUFFERClick to expand / collapse

Bug Report: npm memory-lancedb plugin tools not visible to active-memory sub-agent

Summary

The npm-installed @openclaw/memory-lancedb plugin (v2026.5.7) registers agent tools (memory_recall, memory_store, memory_forget) that are not visible to the active-memory plugin's embedded sub-agent. The sub-agent fails with No callable tools remain for memory_recall, memory_search, memory_get.

The bundled memory-core plugin works correctly with active-memory in the same configuration.

Environment

  • OpenClaw version: 2026.5.7 (eeef486)
  • Platform: CachyOS (Arch-based Linux), x86_64
  • Node.js: v26.1.0
  • memory-lancedb: npm-installed @openclaw/[email protected]
  • Embedding: Ollama qwen2.5-coder:7b (3584 dims, confirmed working via curl)
  • Model: opencode-go/deepseek-v4-pro

Steps to Reproduce

  1. Install @openclaw/memory-lancedb via npm
  2. Configure plugins.slots.memory = "memory-lancedb" with valid embedding config (Ollama or OpenAI)
  3. Enable active-memory plugin with config.agents: ["main"]
  4. Restart gateway
  5. Send any message that triggers active-memory

Expected Behavior

Active-memory's sub-agent finds memory_recall (registered by LanceDB) and uses it to search memories.

Actual Behavior

Active-memory sub-agent fails:

[tools] No callable tools remain after resolving explicit tool allowlist 
(runtime toolsAllow: memory_recall, memory_search, memory_get); 
no registered tools matched. Fix the allowlist or enable the plugin 
that registers the requested tool.

Result: active-memory: done status=empty elapsedMs=7049 summaryChars=0

Evidence

Plugin loads and initializes correctly

http server listening (11 plugins: active-memory, ..., memory-lancedb, ...)
memory-lancedb: initialized (db: ~/.openclaw/memory/lancedb, model: qwen2.5-coder:7b)

Embedding pipeline works (standalone)

$ curl http://127.0.0.1:11434/api/embed -d '{"model":"qwen2.5-coder:7b","input":"test"}'
# Returns valid 3584-dimension embeddings in ~4.4s

LanceDB CLI tools work

$ openclaw ltm stats    # works
$ openclaw ltm search "query"  # works
$ openclaw ltm list     # works

registerTool IS called in plugin code (dist/index.js:388-546)

api.registerTool({
    name: "memory_recall",
    ...
}, { name: "memory_recall" });

Attempted fixes (none worked)

  1. Changed { name: "memory_recall" }{ names: ["memory_recall"] } (plural, array) — no change
  2. Wrapped tool in factory function: api.registerTool((ctx) => ({...}), { names: [...] }) — no change
  3. Added hooks.allowConversationAccess: true at plugin entry level — no change
  4. Removed plugins.allow restriction — no change
  5. Deleted and recreated LanceDB — no change
  6. Increased timeout to 60s — no change

Comparison: memory-core (bundled) works fine

// memory-core registers tools via:
api.registerTool(
    (ctx) => createLazyMemorySearchTool(resolveMemoryToolOptions(ctx)), 
    { names: ["memory_search"] }
);

With identical active-memory config, memory-core tools are found and active-memory completes cleanly:

active-memory: done status=empty elapsedMs=7728

Root Cause Analysis

The memory-lancedb plugin uses the external npm plugin SDK (openclaw/plugin-sdk/plugin-entrydefinePluginEntry), while memory-core is bundled and uses direct internal API imports. The npm plugin SDK's api.registerTool() appears to register tools in a scope that is not visible to embedded sub-agents (like active-memory's sub-agent), even though the tools might be available to the main agent.

This affects:

  • memory_recall (LanceDB) — not found
  • memory_search (memory-core) — found when memory-core is the active slot
  • memory_get (memory-core) — found when memory-core is the active slot

Workaround

Use bundled memory-core as the memory slot instead of npm memory-lancedb:

{
  plugins: {
    slots: { memory: "memory-core" }
  }
}

Related

  • Active memory docs: /docs/concepts/active-memory.md
  • LanceDB docs: /docs/plugins/memory-lancedb.md
  • The active-memory sub-agent hardcodes toolsAllow: [memory_recall, memory_search, memory_get]

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…

Still need to ship something?

×6

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

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix npm memory-lancedb plugin: tools not visible to active-memory sub-agent