Skip to content

memory_search: index built with different embedding provider/model/settings — retrieval disabled #21

Description

@patelmm79

Summary

memory_search is currently returning the disabled response in agent sessions. The memory index was built with a different embedding provider/model/settings than the current configuration, so retrieval is paused.

Observed behavior

In the current session (Sat 2026-06-13 18:52 UTC), calling memory_search returns:

{
  "results": [],
  "disabled": true,
  "unavailable": true,
  "error": "index metadata is missing",
  "warning": "Tell the user: memory search is paused because the memory index was built with a different embedding provider/model/settings.",
  "action": "Tell the user to run: openclaw memory status --index or openclaw memory index --force.",
  "debug": {
    "warning": "Tell the user: memory search is paused because the memory index was built with a different embedding provider/model/settings.",
    "action": "Tell the user to run: openclaw memory status --index or openclaw memory index --force.",
    "error": "index metadata is missing"
  }
}

Specifically: error: "index metadata is missing" — the index file is on disk but its .meta sidecar is not, or the sidecar was written by a different indexer version. Retrieval is hard-disabled in this state (it cannot fall back to keyword search), so all memory_search calls return empty results and no corpus=memory content is available to the agent.

Steps to reproduce

  1. Start an agent session on the prod bot (@coder) or any other environment.
  2. Call memory_search with any query — e.g. memory_search(query: "linux-desktop-setup h2 layered architecture split").
  3. Observe the disabled response above.

The exact same query was working in prior sessions (e.g. 2026-06-09 and earlier), so this is a recent regression, not a long-standing configuration gap.

Probable cause

One of:

  1. Embedding provider/model change. A model swap in the gateway config (or upstream OpenRouter routing) caused the active embedding model to differ from the one used to build the index. The indexer's metadata check fails closed.
  2. Index metadata lost. The on-disk index exists but the .meta file is missing or was written by a different indexer version. Possible causes: incomplete openclaw memory index run, manual cleanup, or storage drop-in that strips dotfiles.
  3. Storage path change. The configured memory storage path now points to a different volume where the previous index is not present, so the loader sees an empty index directory and produces the "metadata is missing" diagnostic.

The hint text in the error explicitly says to run openclaw memory status --index or openclaw memory index --force, which is the documented recovery path.

Suggested fix

Short-term: run openclaw memory index --force on the affected VM(s) to rebuild the index with the current embedding provider/model. Verify with openclaw memory status --index that metadata is present and consistent. Validate by re-running the prior memory_search query and confirming a non-empty result.

Medium-term: prevent the regression from recurring:

  • Detect the provider/model mismatch in the gateway config-validation path and either (a) auto-reindex, (b) refuse to start, or (c) emit a clear warning at startup. Right now the failure mode is silent — the search tool just returns empty.
  • Persist the active embedding provider/model into the index metadata at build time so a future config change can be detected, not just a missing sidecar.
  • Consider falling back to keyword/BM25 search when embeddings are unavailable, rather than hard-disabling retrieval. The hard-disable mode means an agent in a session immediately after a model change cannot recall any prior work — exactly the failure shape that hurts most in incident response.

Environment

  • Host: prod bot VM (host: ubuntu-8gb-hel1-1)
  • Agent: linux_desktop_seed
  • First observed: 2026-06-13 18:52 UTC
  • Active gateway version: 2026.6.5 (per current linux-desktop-seed pin; verify in /usr/lib/node_modules/openclaw/package.json)
  • OpenRouter key: OPENROUTER_API_KEY (single repo secret, used for both chat and embeddings — verify in the embedding path that the same key is accepted by the active embedding provider)

Workaround

Until the index is rebuilt, agents cannot use memory_search for recall. Session-startup behavior (which AGENTS.md lists as: read IDENTITY.md, SOUL.md, USER.md, MEMORY.md, latest memory/YYYY-MM-DD.md) is unaffected because those are file reads, not search.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions