Claudeclaw add-qmd
Add QMD (Query Markup Documents) as an advanced memory search backend. Upgrades the built-in grep-based memory_search with hybrid BM25 + vector semantic search + LLM re-ranking. Fully local, no API keys needed. Triggers on "add qmd", "qmd memory", "semantic memory search", "upgrade memory".
git clone https://github.com/sbusso/claudeclaw
T=$(mktemp -d) && git clone --depth=1 https://github.com/sbusso/claudeclaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/add-qmd" ~/.claude/skills/sbusso-claudeclaw-add-qmd && rm -rf "$T"
skills/add-qmd/SKILL.mdAdd QMD Memory Backend
QMD (https://github.com/tobi/qmd) is a local search engine for markdown files. It combines BM25 keyword search, vector semantic search, and LLM re-ranking — all running on-device via node-llama-cpp with GGUF models.
This skill upgrades ClaudeClaw's built-in grep-based
memory_search MCP tool with QMD's hybrid search, giving agents much better recall across large memory collections.
Prerequisites
- ClaudeClaw with memory tools already working (memory_search, memory_save, memory_get)
- ~2GB disk space for GGUF embedding + reranking models (downloaded on first run)
- Node.js 20+
What This Skill Does
- Installs QMD as an MCP server dependency
- Configures QMD to index all group memory directories (
,groups/*/memory/
,groups/*/CLAUDE.md
)groups/*/conversations/ - Replaces the grep-based
inmemory_search
with QMD's APIagent/runner/src/ipc-mcp-stdio.ts - Adds QMD indexing to the agent startup flow (incremental re-index on each run)
Implementation Notes
QMD MCP Server
QMD exposes its search as an MCP server. Add to the agent runner's
mcpServers config:
qmd: { command: 'npx', args: ['qmd', 'mcp', '--collection', collectionPath], env: {}, }
Indexing
QMD indexes markdown files into a local SQLite database. The collection should be configured per-group:
# Index a group's memory qmd index --collection groups/{folder}/.qmd groups/{folder}/memory/ groups/{folder}/CLAUDE.md groups/{folder}/conversations/
Search Integration
Replace the grep-based
memory_search tool body with a call to QMD's MCP:
// Before (grep-based): const results = grepFiles(args.query, allFiles); // After (QMD): // Use the qmd MCP server's search tool // Returns semantically ranked results with relevance scores
Fallback
If QMD is not installed or indexing fails, fall back to the built-in grep-based search. This ensures memory tools always work even without QMD.
Not Implemented Yet
This skill is a specification for future implementation. The built-in grep-based memory tools work without QMD. Run this skill when you want to upgrade to semantic search.