Skip to content

Roadmap: vector memory for OpenClaw (memory-lancedb now, fleet vector store later?) #1300

Open

Description

@dezren39

Roadmap: vector memory for OpenClaw — and possibly the fleet

Drew approved enabling memory-lancedb for the laptop OpenClaw (2026-10-26), and raised the open design question this issue tracks: does vector memory stay an OpenClaw-only store, or do we eventually incorporate our own vector store as an additional data source the agent can use more broadly?

Phase 1 (do now, small)

  • Enable the memory-lancedb runtime plugin in plugins.slots.memory for the laptop gateway, with a local embedding endpoint (the fleet already runs local llama.cpp embedding servers for OpenCode; check for a stable endpoint or stand one up — avoid per-instance dynamic ports).
  • Verify the official npm package name before wiring (two candidates surfaced in research: @openclaw/memory-lancedb vs a third-party scope; the nix-openclaw catalog entry memoryLancedb is the authority for what the module builds).
  • Confirm recall quality improves over the current degraded state (gateway logs vector-recall fallback warnings today).

Phase 2 (decide later, this issue)

  • Should OpenCode sessions, OpenChamber, and other fleet agents share one vector store (e.g. the same LanceDB, or a served store) instead of each keeping their own?
  • Data sources worth indexing beyond chat memory: the zettelkasten/Emanote notes, repo docs, prior research reports.
  • Access pattern: MCP server vs per-tool native stores.

Notes

  • Oh My OpenClaw's "Graphiti memory" was reviewed and not adopted (no such config exists in its reference; its persona/model-routing defaults also clash with fleet quota discipline). Cherry-picks only.
  • Keep phase 1 reversible: memory slot swap is one config line.

Acceptance criteria

  • Phase 1: memory-lancedb is enabled for the laptop OpenClaw gateway (plugins.slots.memory) using the verified official package (the nix-openclaw catalog entry memoryLancedb is the authority) and a stable local embedding endpoint — no per-instance dynamic ports.
  • Phase 1 is verified live: the gateway starts, the memory plugin loads, and a store/recall round-trip works.
  • The fleet question is answered on this issue with a recorded decision: OpenClaw-only store, or a fleet vector store as an additional agent data source — with the follow-up implementation issue filed if the fleet option is chosen.

Activity

  1. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Recon 2026-10-27 (amd): no Ollama installed and no fixed-port embedding endpoint exists today. The embedding servers are per-OpenCode-process llama.cpp children on dynamic ports (OpenChamber serve currently on 127.0.0.1:37621). So phase 1 needs one of: (a) a small dedicated fixed-port llama.cpp embedding service (Nix-managed user unit), or (b) endpoint discovery from the shared opencode serve once it stands up with a fixed port. Sequencing: after the shared-serve work in #1243.

  3. added
    kind/questionQuestion or design decision to resolve
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    user/reviewNeeds a user-look: Muse reviews first and handles what it can
    on Oct 27, 2026
  4. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Intake review

    Fleet monitor intake pass (protocol §5), 2026-10-27.

    Still live: verified this run — issue is OPEN, no merged PR references or closes it (0 closing-PR references), and it was filed within the last day, so nothing has had time to supersede it.

    Related: No linked implementation issue yet; the nix-openclaw catalog entry memoryLancedb is the package authority named in the body.

    Notes / risks: This is Drew's open design question, so it lands in the user/review discussion lane alongside the Phase 1 enablement. Phase 1 itself is small; the effort/l covers the fleet-store decision tail. Risk: wiring the wrong npm package (two candidates surfaced) — verify against the nix catalog before any config change.

    Suggested approach: Suggested approach: enable Phase 1 behind the verified package + stable embedding endpoint, verify recall, then bring the fleet-store question to Drew with the Phase 1 experience as evidence.

    Labels normalized this pass; acceptance criteria appended to the body (original text preserved verbatim above it).

  5. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed on Nov 1, 2026
  6. 171 remaining items

  7. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 3, 2026
  8. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: parked
    task: 5001 (repo-health-code-pilot; worker repo-worker-code; OpenChamber scheduled lane 8ac61616-3815-4e7b-b33d-840a3829154a)
    state: parked until 2026-11-03T10:35:08Z.
    blocker: Laptop load 40.03/31.90/23.93 on 16 cores (heavy rustc builds in fleet worktrees 5874 + probe-laneB-scan16); openclaw-gateway and openclaw-embedding inactive. Unsafe window for gateway memory round-trip.
    resume: In a low-load window, retry authenticated memory.status and explicit memory store/recall round-trip; then document final evidence and rollback on #1300 without closing it. Full HM activation separately noted blocked by pre-existing opencode-node_modules FOD hash mismatch.
    labels: queue/parked + status/parked; work/assigned retained.
    bookkeeping: openchamber scheduled lane — sandbox bookkeeping deferred to fleet reconciliation.

  9. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  10. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  11. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up → done (triage)

    Verdict — phase 1 is implemented in config; live round-trip is the only open verification; phase 2 is Drew's decision

    Phase 1 (config) — landed, on main in this repo. home/openclaw/default.nix enables the memory-lancedb runtime plugin, makes it own plugins.slots.memory (slots.memory = "memory-lancedb"), and configures a fixed loopback embedding endpoint — a dedicated llama-server over the Qwen3-Embedding-0.6B GGUF with ConditionPathExists so a cleared cache fails loudly instead of silently losing recall. The plugin comes from the nix-openclaw catalog, which the issue names as the authority for the package, so the npm-name ambiguity is moot. Rollback remains one line, as intended.

    Live state today. openclaw-gateway and openclaw-embedding are both active. Host load is 28.58 / 38.83 / 39.90 on 16 cores. The last 400 journal lines for the gateway contain no memory/lancedb/vector/embed entries, so there is no evidence here of a store/recall round-trip — the gate that task 5001 parked on (load) has improved but is still ~2× core count, and the authenticated memory.status + store/recall check has still not been run and recorded.

    Phase 2 — genuinely Drew's. Whether the fleet shares one vector store (and which data sources — zettelkasten/Emanote, repo docs, prior research — plus MCP-server vs native-store access) is a roadmap architecture decision, not worker-discoverable from the codebase. Escalating that half to user/escalated; my read is attached here.

    Ordering for the next packet. One small, live-smoke small_fix limited to: authenticated memory.status (plugin loaded, slot = memory-lancedb) and one explicit store→recall round-trip against the running gateway, recorded on this issue — no config changes, no fleet-store work. Phase 2 implementation must not start before that record exists and before Drew answers the fleet question.

    Labels. Removed the stale queue/parked, status/parked, queue/queued, work/assigned and task/triage left by the parked run; user/review → user/escalated for the phase-2 decision. Issue stays open.

  12. added
    user/escalatedQueue or user escalation state
    and removed
    task/triageQueue packet kind: verify, reproduce, and route this item
    status/parkedDeliberately paused with a recorded resume condition
    user/reviewNeeds a user-look: Muse reviews first and handles what it can
    queue/queuedHas a queued task in the Supabase agent queue
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    work/assignedQueue worker lifecycle state
    on Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

effort/lLarge: multi-day or open-ended; expect staged check-inskind/questionQuestion or design decision to resolvemeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a humanuser/escalatedQueue or user escalation state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions