#cant get extra path for qmd memory to work

104 messages · Page 1 of 1 (latest)

unique sky
#

im on the april 11 version. I cant get qmd to actually index a extra path. help

autumn mothBOT
molten flaxBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> âś… Mark Solution

autumn mothBOT
somber topazBOT
#

Let me check the current docs + code path for QMD, then I’ll give you the shortest fix path.

#

Yep. First, can you paste the exact output of:

openclaw --version

“April 11” narrows it down, but the exact build matters here.

For QMD extra paths, the valid config shapes are either:

{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["/absolute/path/to/docs"]
#
      }
    }
  },
  memory: { backend: "qmd" }
}

or:

{
  memory: {
    backend: "qmd",
    qmd: {
      paths: [{ name: "docs", path: "/absolute/path/to/docs", pattern: "**/*.md" }]
#
    }
  }
}

A few gotchas that bite people a lot:

  • memory.qmd.extraPaths is not a real key.
  • Relative paths resolve from the agent workspace, not your shell cwd. Use an absolute path first.
  • If you set memory.qmd.paths[].name, do not add the agent suffix yourself, use docs, not docs-main.
  • If the target dir is a symlink, try the real path first.
  • After changing config, force a reindex:
openclaw memory index --agent main --force
unique sky
#

can you give ne the commands to paste for you to get all the infor you need

somber topazBOT
#

Yep, paste this whole bundle. If you need to redact private paths, that’s fine, just keep whether they’re absolute or relative.

echo '=== openclaw version ==='
openclaw --version

echo
echo '=== gateway status ==='
openclaw gateway status

echo
echo '=== memory config ==='
openclaw config get memory

echo
echo '=== default memorySearch config ==='
#
openclaw config get agents.defaults.memorySearch

echo
echo '=== agents list ==='
openclaw config get agents.list

echo
echo '=== qmd binary ==='
which qmd || command -v qmd
qmd --version

echo
echo '=== memory status ==='
openclaw memory status --deep --index --verbose
#

If your agent is not main, also run this and paste it too:

openclaw memory status --agent <your-agent-id> --deep --index --verbose

That should give me basically everything I need.

unique sky
#

lets go one by one. since its too much to paste in one message

somber topazBOT
#

Yep, that’s easier.

First one:

openclaw --version

Paste the output, then I’ll give you the next one.

unique sky
#

totaluser@Total-Hardware:~$ openclaw --version
OpenClaw 2026.4.11 (769908e)

somber topazBOT
#

Nice, thanks.

Next one:

openclaw config get memory

Paste that, then I’ll do the next step.

unique sky
#

totaluser@Total-Hardware:~$ openclaw config get memory

🦞 OpenClaw 2026.4.11 (769908e)
Automation with claws: minimal fuss, maximal pinch.

{
"backend": "qmd",
"qmd": {
"paths": [
{
"path": "/home/totaluser/.openclaw/yr-knowledge",
"name": "yr-knowledge",
"pattern": "**/*.md"
}
],
"sessions": {
"enabled": true
},
"scope": {
"default": "deny",
"rules": [
{
"action": "allow",
"match": {
"chatType": "direct"
}
},
{
"action": "allow",
"match": {
"chatType": "channel"
}
}
]
}
}
}

somber topazBOT
#

That config shape looks fine, good sign.

Next one:

openclaw config get agents.list

I want to see the agent id + workspace before we hit memory status.

unique sky
#

totaluser@Total-Hardware:~$ openclaw config get agents.list

🦞 OpenClaw 2026.4.11 (769908e)
Automation with claws: minimal fuss, maximal pinch.

[
{
"id": "main",
"heartbeat": {},
"subagents": {
"allowAgents": [
"forge",
"scout",
"vital",
"sentinel",
"alfred"
]
}
},
{
"id": "forge",
"name": "Forge",
"workspace": "/home/totaluser/.openclaw/forge",
"agentDir": "/home/totaluser/.openclaw/agents/forge/agent",
"heartbeat": {}
},
{
"id": "scout",
"name": "Scout",
"workspace": "/home/totaluser/.openclaw/scout",
"agentDir": "/home/totaluser/.openclaw/agents/scout/agent",
"heartbeat": {}
},
{
"id": "vital",
"name": "vital",
"workspace": "/home/totaluser/.openclaw/vital",
"agentDir": "/home/totaluser/.openclaw/agents/vital/agent",
"heartbeat": {}
},
{
"id": "sentinel",
"name": "sentinel",
"workspace": "/home/totaluser/.openclaw/sentinel",
"agentDir": "/home/totaluser/.openclaw/agents/sentinel/agent",
"heartbeat": {}
},
{
"id": "alfred",
"name": "Alfred",
"workspace": "/home/totaluser/.openclaw/alfred",
"agentDir": "/home/totaluser/.openclaw/agents/alfred/agent",
"heartbeat": {
"every": "15m",
"target": "telegram",
"accountId": "forge"
}
},
{
"id": "rush",
"name": "rush",
"workspace": "/home/totaluser/.openclaw/rush",
"agentDir": "/home/totaluser/.openclaw/agents/rush/agent",
"memorySearch": {
"qmd": {
"extraCollections": []
}
}
},
{
"id": "cipher",
"name": "Cipher",
"workspace": "/home/totaluser/.openclaw/cipher",
"agentDir": "/home/totaluser/.openclaw/agents/cipher/agent"
}
]
totaluser@Total-Hardware:~$
so i have been troubleshooting with rush which is one of the agents that i need to have this set up on, but main also needsto get set up on it too so whichever one we trouble shoot, i dont mind

somber topazBOT
#

Perfect. Since memory.qmd.paths is global, it should apply to both main and rush, so let’s debug rush first.

Next one:

openclaw memory status --agent rush --deep --index --verbose

Paste that output. That should show whether OpenClaw is actually seeing the extra path/collection or skipping it.

unique sky
#

totaluser@Total-Hardware:~$ openclaw memory status --agent rush --deep --index --verbose
17:49:49-07:00 [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: lossless-claw (/home/totaluser/.openclaw/extensions/lossless-claw/dist/index.js). Set plugins.allow to explicit trusted ids.

🦞 OpenClaw 2026.4.11 (769908e)
Shell yeah—I'm here to pinch the toil and leave you the glory.

17:49:53-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

│
17:49:53-07:00 [bedrock-mantle-discovery] Mantle IAM token generation unavailable
â—‡
Memory index complete.
Memory Search (rush)
Provider: qmd (requested: qmd)
Model: qmd
Sources: memory, sessions
Indexed: 157/8 files · 157 chunks
Dirty: no
Store: ~/.openclaw/agents/rush/qmd/xdg-cache/qmd/index.sqlite
Workspace: ~/.openclaw/rush
Dreaming: off
Embeddings: ready
By source:
memory · 151/5 files · 151 chunks
sessions · 6/3 files · 6 chunks
Vector: ready
Batch: disabled (failures 0/0)
Recall store: 4 entries · 0 promoted · 4 concept-tagged · 0 spaced · scripts=3 latin, 1 other
Recall path: ~/.openclaw/rush/memory/.dreams/short-term-recall.json
Recall updated: 2026-04-12T21:50:48.770Z
QMD audit: ~/.openclaw/agents/rush/qmd/xdg-cache/qmd/index.sqlite · 7335936 bytes · 5 collections

somber topazBOT
#

This is useful. QMD itself is alive and indexing, so we’re past the “QMD is broken entirely” stage.

Next, let’s verify the extra path actually has Markdown files that match **/*.md:

echo '=== all files ==='
find /home/totaluser/.openclaw/yr-knowledge -type f | sed -n '1,20p'

echo
echo '=== markdown count ==='
find /home/totaluser/.openclaw/yr-knowledge -type f -name '*.md' | wc -l

Paste that output, then I’ll narrow it down further.

unique sky
#

totaluser@Total-Hardware:~$ echo '=== all files ==='
find /home/totaluser/.openclaw/yr-knowledge -type f | sed -n '1,20p'

echo
echo '=== markdown count ==='
find /home/totaluser/.openclaw/yr-knowledge -type f -name '*.md' | wc -l
=== all files ===
/home/totaluser/.openclaw/yr-knowledge/index.md
/home/totaluser/.openclaw/yr-knowledge/2026/glossary.md
/home/totaluser/.openclaw/yr-knowledge/2026/decisions.md
/home/totaluser/.openclaw/yr-knowledge/2026/overview.md
/home/totaluser/.openclaw/yr-knowledge/2026/facts.md
/home/totaluser/.openclaw/yr-knowledge/2026/stakeholders.md
/home/totaluser/.openclaw/yr-knowledge/2026/timeline.md
/home/totaluser/.openclaw/yr-knowledge/contacts/satellite-location-pastors.md
/home/totaluser/.openclaw/yr-knowledge/contacts/education-az-conference.md
/home/totaluser/.openclaw/yr-knowledge/contacts/thunderbird-adventist-academy.md
/home/totaluser/.openclaw/yr-knowledge/contacts/conference-administration.md
/home/totaluser/.openclaw/yr-knowledge/contacts/additional-phoenix-churches.md
/home/totaluser/.openclaw/yr-knowledge/contacts/phoenix-central-valley-spanish.md
/home/totaluser/.openclaw/yr-knowledge/contacts/glendale-sda-church.md
/home/totaluser/.openclaw/yr-knowledge/contacts/youth-ministries-az-conference.md
/home/totaluser/.openclaw/yr-knowledge/contacts/phoenix-camelback-sda.md
/home/totaluser/.openclaw/yr-knowledge/contacts/glenview-adventist-academy.md
/home/totaluser/.openclaw/yr-knowledge/contacts/phoenix-paradise-valley-sda.md
/home/totaluser/.openclaw/yr-knowledge/contacts/thunderbird-christian-elementary.md
/home/totaluser/.openclaw/yr-knowledge/past/master-schedule-2025.md

=== markdown count ===
38
totaluser@Total-Hardware:~$

somber topazBOT
#

Nice, that rules out the obvious file-pattern problem. QMD should be able to index that tree.

Next, let’s test whether rush can actually retrieve from it. Try this:

openclaw memory search --agent rush --query "Thunderbird Adventist Academy" --max-results 5 --json

Paste the output. If that comes back empty, we’re very close to the real bug.

unique sky
#

18:09:34-07:00 [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: lossless-claw (/home/totaluser/.openclaw/extensions/lossless-claw/dist/index.js). Set plugins.allow to explicit trusted ids.
18:09:38-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

18:09:45-07:00 [memory] qmd search failed because a managed collection is missing; repairing collections and retrying once
18:09:47-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

18:09:48-07:00 [memory] qmd search failed: Error: qmd search Thunderbird Adventist Academy --json -n 5 -c memory-alt-rush failed (code 1): Collection not found: memory-alt-rush

there is another half to this i will send it right after

somber topazBOT
#

Yep, send the second half.

But I already see the likely bug: OpenClaw is trying to search memory-alt-rush, but QMD only has memory-root-rush. So this looks like stale/legacy collection state, not “your extra path config is wrong”.

unique sky
#

18:09:48-07:00 [memory] qmd memory failed; switching to builtin index: qmd search Thunderbird Adventist Academy --json -n 5 -c memory-alt-rush failed (code 1): Collection not found: memory-alt-rush

{
"results": [
{
"id": "5bfc4f6c9550b2335309f58ae146cb26967875ec7d4e9a05c9fc8db549588f9b",
"path": "memory/2026-03-16.md",
"startLine": 1,
"endLine": 33,
"score": 0.6630591909393899,
"textScore": 0.6630591909393899,
"snippet": "March 16, 2026 - Recruiting Churches Research\n\nTask\nResearched pastors and phone numbers for AZ Conference recruiting churches (English and Spanish).\n\n Churches Identified\n\nEnglish Churches\n1. Tempe SDA - Pastor: Michael A Soto, Phone: xxx-xxx-xxxxn2. Glendale SDA - Pastor: Gary Venden, Associates: Myles Reiner, Zack Surovec, Eddie Turner, Phones:(website), \n3. Phoenix Paradise Valley - Pastor: Paul Blake, Assoc: Hugh Barton, Phones: \n4. Chandler SDA - Pastor: Edward Anderson Jr, Phone: \n5. Chandler Fil-Am - P",
"source": "memory"
}
]
}
18:09:48-07:00 [memory] chunks written for memory/2026-03-16.md without vector embeddings — chunks_vec not updated (sqlite-vec unavailable). Vector recall degraded for this file.
totaluser@Total-Hardware:~$

i have deleted phone numbers but they were there.

it seems like its pulling info from teh memory folder

somber topazBOT
#

Yep, exactly. It’s falling back to the builtin index because one of rush’s managed QMD collections is stale/mismatched.

Next one, let’s inspect the actual QMD collections for rush:

XDG_CONFIG_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config \
XDG_CACHE_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-cache \
QMD_CONFIG_DIR=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config/qmd \
qmd collection list --json

Paste that output. After that I should be able to give you the cleanup command directly.

unique sky
#

totaluser@Total-Hardware:~$ XDG_CONFIG_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config
XDG_CACHE_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-cache
QMD_CONFIG_DIR=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config/qmd
qmd collection list --json
Collections (4):

memory-dir-rush (qmd://memory-dir-rush/)
Pattern: **/*.md
Files: 5
Updated: 7h ago

yr-knowledge (qmd://yr-knowledge/)
Pattern: **/*.md
Files: 38
Updated: 4h ago

sessions-rush (qmd://sessions-rush/)
Pattern: **/*.md
Files: 7
Updated: 1m ago

memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md
Files: 108
Updated: 6h ago

totaluser@Total-Hardware:~$

somber topazBOT
#

Aha, there it is.

yr-knowledge is indexed, 38 files. The real problem is that memory-root-rush is wrong, it has **/*.md on the workspace root, so OpenClaw can’t create the expected memory-alt-rush collection and then QMD search blows up and falls back to builtin.

Next step, remove just that broken collection for rush. This does not delete your markdown files, only the bad QMD collection entry:

XDG_CONFIG_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config \
XDG_CACHE_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-cache \
QMD_CONFIG_DIR=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config/qmd \
qmd collection remove memory-root-rush

Paste the output, then I’ll give you the reindex command.

unique sky
#

totaluser@Total-Hardware:~$ XDG_CONFIG_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config
XDG_CACHE_HOME=/home/totaluser/.openclaw/agents/rush/qmd/xdg-cache
QMD_CONFIG_DIR=/home/totaluser/.openclaw/agents/rush/qmd/xdg-config/qmd
qmd collection remove memory-root-rush
âś“ Removed collection 'memory-root-rush'
Deleted 458 documents
Cleaned up 103 orphaned content hashes
totaluser@Total-Hardware:~$

somber topazBOT
#

Nice. That’s the broken piece gone.

Next one, rebuild rush’s managed QMD collections cleanly:

openclaw memory index --agent rush --force --verbose

Paste that output, then we’ll do one search check.

unique sky
#

totaluser@Total-Hardware:~$ openclaw memory index --agent rush --force --verbose
19:36:41-07:00 [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: lossless-claw (/home/totaluser/.openclaw/extensions/lossless-claw/dist/index.js). Set plugins.allow to explicit trusted ids.

🦞 OpenClaw 2026.4.11 (769908e)
I don't have opinions about tabs vs spaces. I have opinions about everything else.

19:36:45-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

Memory Index (rush)
Provider: qmd (requested: qmd)
Model: qmd
Sources: memory (MEMORY.md + ~/.openclaw/rush/memory/.md), sessions (~/.openclaw/agents/rush/sessions/.jsonl)

19:36:46-07:00 [bedrock-mantle-discovery] Mantle IAM token generation unavailable
QMD index: ~/.openclaw/agents/rush/qmd/xdg-cache/qmd/index.sqlite (7733248 bytes)
Memory index updated (rush).
totaluser@Total-Hardware:~$

#

?

somber topazBOT
#

Sorry, just this command next:

qmd --version

Paste the output. I’m checking whether the QMD CLI itself is the mismatch here.

unique sky
#

totaluser@Total-Hardware:~$ qmd --version
Usage:
qmd collection add [path] --name <name> --mask <pattern> - Create/index collection
qmd collection list - List all collections with details
qmd collection remove <name> - Remove a collection by name
qmd collection rename <old> <new> - Rename a collection
qmd ls [collection[/path]] - List collections or files in a collection
qmd context add [path] "text" - Add context for path (defaults to current dir)
qmd context list - List all contexts
qmd context rm <path> - Remove context

this is the first half

#

qmd get <file>[:line] [-l N] [--from N] - Get document (optionally from line, max N lines)
qmd multi-get <pattern> [-l N] [--max-bytes N] - Get multiple docs by glob or comma-separated list
qmd status - Show index status and collections
qmd update [--pull] - Re-index all collections (--pull: git pull first)
qmd embed [-f] - Create vector embeddings (800 tokens/chunk, 15% overlap)
qmd cleanup - Remove cache and orphaned data, vacuum DB
qmd search <query> - Full-text search (BM25)
qmd vsearch <query> - Vector similarity search
qmd query <query> - Combined search with query expansion + reranking
qmd mcp - Start MCP server (stdio transport)
qmd mcp --http [--port N] - Start MCP server (HTTP transport, default port 8181)
qmd mcp --http --daemon - Start MCP server as background daemon
qmd mcp stop - Stop background MCP daemon

Global options:
--index <name> - Use custom index name (default: index)

Search options:
-n <num> - Number of results (default: 5, or 20 for --files)
--all - Return all matches (use with --min-score to filter)
--min-score <num> - Minimum similarity score
--full - Output full document instead of snippet
--line-numbers - Add line numbers to output
--files - Output docid,score,filepath,context (default: 20 results)
--json - JSON output with snippets (default: 20 results)
--csv - CSV output with snippets
--md - Markdown output
--xml - XML output
-c, --collection <name> - Filter results to a specific collection

sorry there is one more section

#

Multi-get options:
-l <num> - Maximum lines per file
--max-bytes <num> - Skip files larger than N bytes (default: 10240)
--json/--csv/--md/--xml/--files - Output format (same as search)

Models (auto-downloaded from HuggingFace):
Embedding: embeddinggemma-300M-Q8_0
Reranking: qwen3-reranker-0.6b-q8_0
Generation: Qwen3-0.6B-Q8_0

Index: /home/totaluser/.cache/qmd/index.sqlite
totaluser@Total-Hardware:~$

ok thats the entire ouput

somber topazBOT
#

Yep, that basically confirms it. Your qmd is old enough that it’s printing usage instead of a real version, and that matches the collection weirdness we’re seeing.

Next step, update QMD:

pnpm add -g @tobilu/qmd@latest

Paste the output, then we’ll re-check qmd --version and rebuild rush cleanly.

#

That’s enough, no need for the last section 👍

Please run this next:

pnpm add -g @tobilu/qmd@latest

Then paste the output. After that we’ll re-check qmd --version and rebuild rush cleanly.

#

Yep, perfect, that confirms it.

Your current qmd is definitely on the older CLI behavior. Let’s actually update it now:

pnpm add -g @tobilu/qmd@latest

Paste the output from that command. Then I’ll have you run qmd --version right after.

unique sky
#

totaluser@Total-Hardware:~$ pnpm add -g @tobilu/qmd@latest
 ERR_PNPM_NO_GLOBAL_BIN_DIR  Unable to find the global bin directory

Run "pnpm setup" to create it automatically, or set the global-bin-dir setting, or the PNPM_HOME env variable. The global bin directory should be in the PATH.
totaluser@Total-Hardware:~$

somber topazBOT
#

Yep, that’s just pnpm not being set up globally on this machine yet.

Next one:

pnpm setup

Paste the output. If it asks you to restart the shell, I’ll give you the exact next command after that.

unique sky
#

totaluser@Total-Hardware:~$ pnpm setup
Appended new lines to /home/totaluser/.bashrc

Next configuration changes were made:
export PNPM_HOME="/home/totaluser/.local/share/pnpm"
case ":$PATH:" in
":$PNPM_HOME:") ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac

To start using pnpm, run:
source /home/totaluser/.bashrc
totaluser@Total-Hardware:~$

somber topazBOT
#

Perfect.

Next one:

source /home/totaluser/.bashrc && pnpm add -g @tobilu/qmd@latest

Paste the output, then we’ll verify the new qmd version.

unique sky
#

totaluser@Total-Hardware:~$ source /home/totaluser/.bashrc && pnpm add -g @tobilu/qmd@latest

╭──────────────────────────────────────────╮
│ │
│ Update available! 10.30.2 → 10.33.0. │
│ Changelog: https://pnpm.io/v/10.33.0 │
│ To update, run: pnpm self-update │
│ │
╰──────────────────────────────────────────╯

Downloading @node-llama-cpp/linux-x64@3.18.1: 7.73 MB/7.73 MB, done
Downloading @node-llama-cpp/linux-x64-vulkan@3.18.1: 24.69 MB/24.69 MB, done
 WARN  1 deprecated subdependencies found: prebuild-install@7.1.3
Packages: +258
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Downloading node-llama-cpp@3.18.1: 28.99 MB/28.99 MB, done
Downloading @node-llama-cpp/linux-x64-cuda@3.18.1: 125.19 MB/125.19 MB, done
Downloading @node-llama-cpp/linux-x64-cuda-ext@3.18.1: 194.62 MB/194.62 MB, done
Progress: resolved 276, reused 0, downloaded 258, added 258, done

/home/totaluser/.local/share/pnpm/global/5:

  • @tobilu/qmd 2.1.0

╭ Warning ─────────────────────────────────────────────────────────────────────╮
│ │
│ Ignored build scripts: better-sqlite3@12.8.0, node-llama-cpp@3.18.1, │
│ tree-sitter-go@0.23.4, tree-sitter-javascript@0.23.1, │
│ tree-sitter-python@0.23.4, tree-sitter-rust@0.24.0, │
│ tree-sitter-typescript@0.23.2. │
│ Run "pnpm approve-builds -g" to pick which dependencies should be │
│ allowed to run scripts. │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
Done in 20.2s using pnpm v10.30.2
totaluser@Total-Hardware:~$

somber topazBOT
#

Nice, you’ve got QMD 2.1.0 installed now.

Next one, let’s make sure your shell is actually using the new binary:

source /home/totaluser/.bashrc && which qmd && qmd --version

Paste that output. After that we’ll reset rush cleanly against the new QMD.

unique sky
#

totaluser@Total-Hardware:~$ source /home/totaluser/.bashrc && which qmd && qmd --version
/home/totaluser/.bun/bin/qmd
Usage:
qmd collection add [path] --name <name> --mask <pattern> - Create/index collection
qmd collection list - List all collections with details
qmd collection remove <name> - Remove a collection by name
qmd collection rename <old> <new> - Rename a collection
qmd ls [collection[/path]] - List collections or files in a collection
qmd context add [path] "text" - Add context for path (defaults to current dir)
qmd context list - List all contexts
qmd context rm <path> - Remove context
qmd get <file>[:line] [-l N] [--from N] - Get document (optionally from line, max N lines)
qmd multi-get <pattern> [-l N] [--max-bytes N] - Get multiple docs by glob or comma-separated list
qmd status - Show index status and collections
qmd update [--pull] - Re-index all collections (--pull: git pull first)
qmd embed [-f] - Create vector embeddings (800 tokens/chunk, 15% overlap)
qmd cleanup - Remove cache and orphaned data, vacuum DB
qmd search <query> - Full-text search (BM25)
qmd vsearch <query> - Vector similarity search
qmd query <query> - Combined search with query expansion + reranking
qmd mcp - Start MCP server (stdio transport)
qmd mcp --http [--port N] - Start MCP server (HTTP transport, default port 8181)
qmd mcp --http --daemon - Start MCP server as background daemon
qmd mcp stop - Stop background MCP daemon

Global options:
--index <name> - Use custom index name (default: index)

in two halves this is the first half

#

Search options:
-n <num> - Number of results (default: 5, or 20 for --files)
--all - Return all matches (use with --min-score to filter)
--min-score <num> - Minimum similarity score
--full - Output full document instead of snippet
--line-numbers - Add line numbers to output
--files - Output docid,score,filepath,context (default: 20 results)
--json - JSON output with snippets (default: 20 results)
--csv - CSV output with snippets
--md - Markdown output
--xml - XML output
-c, --collection <name> - Filter results to a specific collection

Multi-get options:
-l <num> - Maximum lines per file
--max-bytes <num> - Skip files larger than N bytes (default: 10240)
--json/--csv/--md/--xml/--files - Output format (same as search)

Models (auto-downloaded from HuggingFace):
Embedding: embeddinggemma-300M-Q8_0
Reranking: qwen3-reranker-0.6b-q8_0
Generation: Qwen3-0.6B-Q8_0

Index: /home/totaluser/.cache/qmd/index.sqlite
totaluser@Total-Hardware:~$

second half

somber topazBOT
#

That’s the bug. Your shell is still picking the old Bun qmd here:

/home/totaluser/.bun/bin/qmd

So the new install is not what OpenClaw is using yet.

No need for the second half. Next one:

/home/totaluser/.local/share/pnpm/qmd --version

Paste that output. If that works, we’ll point OpenClaw directly at that binary so it stops using the old Bun one.

#

All good, ignore that old second half.

Please run this exact command now:

/home/totaluser/.local/share/pnpm/qmd --version

That checks the new QMD binary directly, instead of the old Bun one. Paste that output.

unique sky
#

totaluser@Total-Hardware:~$ /home/totaluser/.local/share/pnpm/qmd --version
qmd 2.1.0
totaluser@Total-Hardware:~$

somber topazBOT
#

Perfect. That’s the good binary.

Next, point OpenClaw at it explicitly so it stops using the old Bun one:

openclaw config set memory.qmd.command /home/totaluser/.local/share/pnpm/qmd

Paste the output, then we’ll reindex rush again using the correct QMD.

unique sky
#

totaluser@Total-Hardware:~$ openclaw config set memory.qmd.command /home/totaluser/.local/share/pnpm/qmd

🦞 OpenClaw 2026.4.11 (769908e)
I'm basically a Swiss Army knife, but with more opinions and fewer sharp edges.

Config overwrite: /home/totaluser/.openclaw/openclaw.json (sha256 90aee0e8f48560b2e81f4acf52ccbd9af6d32b8c9ffafc81d2704e833cb238fc -> 18116df3598db9ad33c518e17b7bd95f04dfbc6e47580634e48bbbbcec041bc5, backup=/home/totaluser/.openclaw/openclaw.json.bak)
Updated memory.qmd.command. Restart the gateway to apply.
totaluser@Total-Hardware:~$

somber topazBOT
#

Nice. Now let’s make the gateway pick up that new QMD path.

Next one:

openclaw gateway restart

Paste the output, then we’ll reindex rush one more time.

unique sky
#

can i also make it so that my system uses the new qmd when i type in like "qmd" into the cli?

somber topazBOT
#

Yep. Right now ~/.bun/bin is winning in PATH, so your shell keeps hitting the old one.

We can fix that too, but I’d finish the OpenClaw side first so we don’t mix two changes at once.

Next one:

openclaw gateway restart

Paste that output, then I’ll give you:

  1. the reindex check, and
  2. the clean shell fix so plain qmd uses the new binary too.
unique sky
#

ok it restarted cleanly

somber topazBOT
#

Nice. Next one, reindex rush again with the new QMD binary wired in:

openclaw memory index --agent rush --force --verbose

Paste that output. If that looks clean, we’ll do one search check right after.

unique sky
#

There are multiple parts. Here is one part wait until i tell you "im done sending them"
totaluser@Total-Hardware:~$ openclaw memory index --agent rush --force --verbose
19:49:34-07:00 [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: lossless-claw (/home/totaluser/.openclaw/extensions/lossless-claw/dist/index.js). Set plugins.allow to explicit trusted ids.

🦞 OpenClaw 2026.4.11 (769908e)
Your task has been queued; your dignity has been deprecated.

19:49:38-07:00 [memory] qmd collection add skipped for memory-root-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-root-rush --glob MEMORY.md failed (code 1): Collection 'memory-root-rush' already exists.
Use a different name with --name <n>

19:49:39-07:00 [bedrock-mantle-discovery] Mantle IAM token generation unavailable
19:49:43-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

19:49:46-07:00 [memory] qmd collection add skipped for memory-dir-rush: qmd collection add /home/totaluser/.openclaw/rush/memory --name memory-dir-rush --glob **/*.md failed (code 1): Collection 'memory-dir-rush' already exists.
Use a different name with --name <n>

19:49:47-07:00 [memory] qmd collection add skipped for yr-knowledge: qmd collection add /home/totaluser/.openclaw/yr-knowledge --name yr-knowledge --glob **/*.md failed (code 1): Collection 'yr-knowledge' already exists.
Use a different name with --name <n>

19:49:47-07:00 [memory] qmd collection add skipped for sessions-rush: qmd collection add /home/totaluser/.openclaw/agents/rush/qmd/sessions --name sessions-rush --glob **/*.md failed (code 1): Collection 'sessions-rush' already exists.

somber topazBOT
#

Got it, I’ll wait. Send the rest, and I won’t diagnose until you say “im done sending them”.

unique sky
#

Use a different name with --name <n>

Memory Index (rush)
Provider: qmd (requested: qmd)
Model: qmd
Sources: memory (MEMORY.md + ~/.openclaw/rush/memory/.md), sessions (~/.openclaw/agents/rush/sessions/.jsonl)

19:49:48-07:00 [memory] qmd boot update failed: Error: qmd update failed (code 1): /home/totaluser/.local/share/pnpm/global/5/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126
err = new Error(
^

Error: Could not locate the bindings file. Tried:
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/default/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/compiled/25.6.1/linux/x64/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node

#

→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/binding/node-v141-linux-x64/better_sqlite3.node
at bindings (/home/totaluser/.local/share/pnpm/global/5/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126:9)
at new Database (/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/database.js:48:64)
at openDatabase (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/db.js:58:12)
at createStore (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/store.js:1175:16)
at getStore (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:25:17)
at getDb (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:45:12)
at updateCollections (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:414:16)
at file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:2665:19 {
tries: [
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Debug/better_sqlite3.node',

#

'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Debug/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Debug/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Release/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Release/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/default/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/compiled/25.6.1/linux/x64/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/binding/node-v141-linux-x64/better_sqlite3.node'
]
}

Node.js v25.6.1

Memory index failed (rush): qmd update failed (code 1): /home/totaluser/.local/share/pnpm/global/5/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126
err = new Error(
^

Error: Could not locate the bindings file. Tried:

somber topazBOT
#

Got it, still waiting. Send the rest, and I’ll hold off until you say “im done sending them”.

unique sky
#

→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Debug/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Release/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/default/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/compiled/25.6.1/linux/x64/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node
→ /home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/binding/node-v141-linux-x64/better_sqlite3.node
at bindings (/home/totaluser/.local/share/pnpm/global/5/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126:9)

somber topazBOT
#

Still with you, send the rest. I’m waiting for “im done sending them” before I diagnose.

#

Still waiting, send any remaining part and then say “im done sending them”. After that I’ll summarize the fix cleanly.

unique sky
#

at new Database (/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/database.js:48:64)
at openDatabase (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/db.js:58:12)
at createStore (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/store.js:1175:16)
at getStore (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:25:17)
at getDb (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:45:12)
at updateCollections (file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:414:16)
at file:///home/totaluser/.local/share/pnpm/global/5/.pnpm/@tobilu+qmd@2.1.0_typescript@5.9.3/node_modules/@tobilu/qmd/dist/cli/qmd.js:2665:19 {
tries: [
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Debug/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Debug/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Debug/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/out/Release/better_sqlite3.node',

somber topazBOT
#

Still waiting for the last bit. When you’re done, send “im done sending them” and I’ll wrap it up cleanly.

#

Still waiting for the final chunk. When you’re done, send “im done sending them” and I’ll give you the fix.

unique sky
#

'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/Release/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/build/default/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/compiled/25.6.1/linux/x64/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node',
'/home/totaluser/.local/share/pnpm/global/5/.pnpm/better-sqlite3@12.8.0/node_modules/better-sqlite3/lib/binding/node-v141-linux-x64/better_sqlite3.node'
]
}

Node.js v25.6.1

totaluser@Total-Hardware:~$

im done sending them

somber topazBOT
#

Nice, we found it.

You actually had two separate problems:

  1. OpenClaw was using the old Bun qmd.
  2. The new pnpm qmd is installed, but pnpm blocked its native build scripts, so better-sqlite3 is missing.

So the current blocker is the second one.

Next step:

pnpm approve-builds -g

When it opens, approve at least:

#
  • better-sqlite3
  • node-llama-cpp

If it also shows the tree-sitter-* ones, approving those is fine too.

Paste what happens after that, and then I’ll give you the rebuild command.

unique sky
#

ok i approved all build

somber topazBOT
#

Perfect.

Next one:

pnpm rebuild -g

Paste the output. If that finishes cleanly, we’ll do one quick QMD sanity check and then reset rush cleanly.

unique sky
#

totaluser@Total-Hardware:~$ pnpm rebuild -g
 ERROR  Unknown option: 'global'
For help, run: pnpm help rebuild
totaluser@Total-Hardware:~$

somber topazBOT
#

Ah, pnpm is being annoying with flag order.

Use this exact one instead:

pnpm --global rebuild

Paste the output.

unique sky
#

totaluser@Total-Hardware:~$ pnpm --global rebuild
 ERROR  Unknown option: 'global'
For help, run: pnpm help rebuild
totaluser@Total-Hardware:~$

somber topazBOT
#

Yep, let’s sidestep pnpm’s global flag weirdness.

Run this exact command:

cd /home/totaluser/.local/share/pnpm/global/5 && pnpm rebuild better-sqlite3 node-llama-cpp

Paste the output.

unique sky
#

totaluser@Total-Hardware:~$ cd /home/totaluser/.local/share/pnpm/global/5 && pnpm rebuild better-sqlite3 node-llama-cpp
totaluser@Total-Hardware:~/.local/share/pnpm/global/5$

somber topazBOT
#

Nice, no error there, good sign.

Quick sanity check on the new QMD binary itself:

/home/totaluser/.local/share/pnpm/qmd status

Paste the output. If that works, we’ll do the final cleanup/reset for rush.

unique sky
#

totaluser@Total-Hardware:~/.local/share/pnpm/global/5$ /home/totaluser/.local/share/pnpm/qmd status
QMD Status

Index: /home/totaluser/.cache/qmd/index.sqlite
Size: 36.1 MB

Documents
Total: 1604 files indexed
Vectors: 3298 embedded
Updated: 3h ago

AST Chunking
Status: active
Languages: typescript, tsx, javascript, python, go, rust

Collections
total-shared (qmd://total-shared/)
Pattern: **/.md
Files: 875 (updated 3h ago)
research (qmd://research/)
Pattern: **/
.md
Files: 296 (updated 13h ago)
memory (qmd://memory/)
Pattern: .md
Files: 44 (updated 3h ago)
vital-research (qmd://vital-research/)
Pattern: **/
.md
Files: 389 (updated 17d ago)

Examples
List files in a collection
qmd ls total-shared
Get a document
qmd get qmd://total-shared/path/to/file.md
Search within a collection
qmd search "query" -c total-shared

Models
Embedding: https://huggingface.co/ggml-org/embeddinggemma-300M-GGUF
Reranking: https://huggingface.co/ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF
Generation: https://huggingface.co/tobil/qmd-query-expansion-1.7B-gguf

Device
GPU: vulkan (offloading: yes)
Devices: NVIDIA RTX A4000
VRAM: 14.9 GB free / 15.2 GB total
CPU: 4 math cores

Tips
Add context to collections for better search results: total-shared, research, memory +1 more
qmd context add qmd://<name>/ "What this collection contains"
qmd context add qmd://<name>/meeting-notes "Weekly team meeting notes"
Add update commands to keep collections fresh: total-shared, research, memory +1 more
qmd collection update-cmd <name> 'git stash && git pull --rebase --ff-only && git stash pop'
totaluser@Total-Hardware:~/.local/share/pnpm/global/5$

somber topazBOT
#

Beautiful. The new QMD binary is healthy now.

What’s left is the stale rush QMD state that the old Bun binary created. We’re going to back that up and let OpenClaw rebuild it cleanly.

Next one:

openclaw gateway stop

Paste the output, then I’ll give you the backup/reset command.

unique sky
#

ok i stopped it

somber topazBOT
#

Nice.

Next one, back up the broken rush QMD state directory so the gateway can recreate it fresh:

mv /home/totaluser/.openclaw/agents/rush/qmd /home/totaluser/.openclaw/agents/rush/qmd.bak.$(date +%s)

Paste the output, then we’ll start the gateway again.

unique sky
#

ok i did that one

somber topazBOT
#

Perfect.

Next one:

openclaw gateway start

Paste the output, then we’ll rebuild rush from scratch.

unique sky
#

ok its restarted

somber topazBOT
#

Nice. Now the real test.

Next one:

openclaw memory index --agent rush --force --verbose

Paste the output. If this comes back clean, we’re almost done.

unique sky
#

totaluser@Total-Hardware:~$ openclaw memory index --agent rush --force --verbose
20:02:59-07:00 [plugins] plugins.allow is empty; discovered non-bundled plugins may auto-load: lossless-claw (/home/totaluser/.openclaw/extensions/lossless-claw/dist/index.js). Set plugins.allow to explicit trusted ids.

🦞 OpenClaw 2026.4.11 (769908e)
Self-hosted, self-updating, self-aware (just kidding... unless?).

20:03:01-07:00 [memory] symlinked qmd models: /home/totaluser/.cache/qmd/models → /home/totaluser/.openclaw/agents/rush/qmd/xdg-cache/qmd/models
20:03:03-07:00 [memory] qmd collection add skipped for memory-alt-rush: qmd collection add /home/totaluser/.openclaw/rush --name memory-alt-rush --glob memory.md failed (code 1): A collection already exists for this path and pattern:
Name: memory-root-rush (qmd://memory-root-rush/)
Pattern: **/*.md

Use 'qmd update' to re-index it, or remove it first with 'qmd collection remove memory-root-rush'

20:03:03-07:00 [bedrock-mantle-discovery] Mantle IAM token generation unavailable
Memory Index (rush)
Provider: qmd (requested: qmd)
Model: qmd
Sources: memory (MEMORY.md + ~/.openclaw/rush/memory/.md), sessions (~/.openclaw/agents/rush/sessions/.jsonl)

QMD index: ~/.openclaw/agents/rush/qmd/xdg-cache/qmd/index.sqlite (6135808 bytes)
Memory index updated (rush).
totaluser@Total-Hardware:~$

somber topazBOT
#

Okay, we found the real boundary.

Even with:

  • the new QMD 2.1.0
  • the correct memory.qmd.command
  • a fresh rush QMD state

OpenClaw 2026.4.11 is still recreating the bad memory-root-rush collection shape. So at this point it looks like a version-specific OpenClaw/QMD compatibility bug, not your yr-knowledge path.

Two paths from here:

  1. Clean fix: update OpenClaw past 2026.4.11
  2. Fast workaround now, recommended: disable default QMD memory collections on this version, then add only the paths you actually want

I’d do the workaround now.

#

Next one:

openclaw config set memory.qmd.includeDefaultMemory false

Paste the output, then I’ll give you the per-agent path command for rush.

unique sky
#

im not gonna disable default memory

somber topazBOT
#

Fair, I wouldn’t disable default memory either.

At this point I think the honest answer is: this is a 2026.4.11 bug/compat issue, not you misconfiguring yr-knowledge.

So the clean path now is to update OpenClaw.

If you want to preview first:

openclaw update --dry-run

If you just want to do it:

openclaw update
#

I’d recommend the real update. After that, rerun:

openclaw memory index --agent rush --force --verbose

If the latest version still recreates that bad memory-root-rush shape, then it’s GitHub-issue-worthy: https://github.com/openclaw/openclaw/issues

unique sky
#

do i need to manually initiate qmd on the folder before i use it with openclaw?

somber topazBOT
#

No, you should not need to manually initialize QMD for OpenClaw.

OpenClaw is supposed to:

  • create the QMD collections
  • manage the per-agent QMD home
  • run qmd update / qmd embed
  • search those collections for you

So for your setup, manual QMD init is not the expected fix, and it would not solve the memory-root-rush / memory-alt-rush mismatch we hit.

Your extra path config shape was basically fine. The thing that broke was the OpenClaw 2026.4.11 + QMD behavior around default memory collections.

Docs:

#

If you want, I can help you do the least painful update path next.

unique sky
#

ok i updated openclaw to the latest

somber topazBOT
#

Nice. First let’s confirm what you landed on:

openclaw --version

Paste that, then we’ll retry the rush index.

unique sky
#

totaluser@Total-Hardware:~$ openclaw --version
OpenClaw 2026.4.11 (769908e)

it didnt actually update anythng cause i was already on it

somber topazBOT
#

Yep, that means stable/latest is still 2026.4.11 for your install path, so openclaw update had nothing newer to give you.

If you want to try a newer build for this fix, the next sensible check is the dev channel preview:

openclaw update --channel dev --dry-run

Paste that output.

If you do not want dev builds, then we’re basically down to:

  1. the config workaround, or
  2. filing a bug: https://github.com/openclaw/openclaw/issues

Docs: https://docs.openclaw.ai/install/updating