Qué añade sobre el integrado
- Reranking y expansión de consultas para mejorar la recuperación.
- Indexa directorios adicionales: documentación del proyecto, notas del equipo, cualquier cosa en disco.
- Indexa transcripciones de sesiones: recupera conversaciones anteriores.
- Totalmente local: se ejecuta con el plugin de proveedor oficial de llama.cpp y descarga automáticamente modelos GGUF.
- Fallback automático: si QMD no está disponible, OpenClaw vuelve al motor integrado sin interrupciones.
Primeros pasos
Requisitos previos
- Instala QMD:
npm install -g @tobilu/qmdobun install -g @tobilu/qmd - Compilación de SQLite que permita extensiones (
brew install sqliteen macOS). - QMD debe estar en el
PATHdel Gateway. - macOS y Linux funcionan directamente. Windows tiene mejor soporte mediante WSL2.
Habilitar
~/.openclaw/agents/<agentId>/qmd/ y gestiona automáticamente el ciclo de vida
del sidecar: las colecciones, actualizaciones y ejecuciones de embeddings se gestionan por ti.
Prefiere las formas actuales de colección de QMD y consulta MCP, pero vuelve a
flags alternativos de patrón de colección y nombres de herramientas MCP más antiguos cuando es necesario.
La reconciliación de inicio también vuelve a crear colecciones gestionadas obsoletas con sus
patrones canónicos cuando una colección QMD más antigua con el mismo nombre sigue
presente.
Cómo funciona el sidecar
- OpenClaw crea colecciones a partir de los archivos de memoria de tu espacio de trabajo y cualquier
memory.qmd.pathsconfigurado, y luego ejecutaqmd updatecuando se abre el gestor de QMD y periódicamente después (memory.qmd.update.interval, valor predeterminado5m). Las actualizaciones se ejecutan mediante subprocesos de QMD, no con un rastreo del sistema de archivos dentro del proceso. Los modos de búsqueda semántica también ejecutanqmd embed(memory.qmd.update.embedInterval, valor predeterminado60m). - La colección predeterminada del espacio de trabajo rastrea
MEMORY.mdmás el árbolmemory/.memory.mden minúsculas no se indexa como archivo raíz de memoria. - El escáner propio de QMD ignora rutas ocultas y directorios comunes de dependencias/compilación
como
.git,.cache,node_modules,vendor,distybuild. El inicio del Gateway no inicializa QMD de forma predeterminada (memory.qmd.update.startuptieneoffcomo valor predeterminado), por lo que un arranque en frío evita importar el runtime de memoria o crear el observador de larga duración antes de que se use memoria por primera vez. - Establece
memory.qmd.update.startupenidleoimmediatepara inicializar QMD al iniciar el Gateway de todos modos.memory.qmd.update.onBoottienetruecomo valor predeterminado y ejecuta la actualización inicial al inicio; establécelo enfalsepara omitir esa actualización inmediata (el gestor de larga duración se sigue abriendo cuando se configuran intervalos de actualización o embedding, por lo que QMD conserva la propiedad de su observador/temporizadores regulares). - Las búsquedas usan el
searchModeconfigurado (valor predeterminado:search; también admitevsearchyquery).searches solo BM25, por lo que OpenClaw omite las comprobaciones de preparación vectorial semántica y el mantenimiento de embeddings en ese modo. Si un modo falla, OpenClaw reintenta conqmd query. - Cuando
searchModeesquery, establecememory.qmd.rerankenfalsepara usar la ruta de consulta híbrida de QMD sin el reranker (requiere QMD 2.1 o posterior). OpenClaw pasa--no-reranka la ruta directa de la CLI de QMD yrerank: falsea la herramienta de consulta MCP de QMD. - Con versiones de QMD que anuncian filtros de múltiples colecciones, OpenClaw agrupa colecciones de la misma fuente en una sola invocación de búsqueda de QMD. Las versiones más antiguas de QMD conservan el fallback compatible por colección.
- Si QMD falla por completo, OpenClaw vuelve al motor SQLite integrado.
Los intentos repetidos en turnos de chat aplican una pausa breve tras un fallo de apertura para que un
binario ausente o una dependencia rota del sidecar no genere una tormenta de reintentos;
openclaw memory statusy las comprobaciones puntuales de CLI siguen volviendo a comprobar QMD directamente.
La primera búsqueda puede ser lenta: QMD descarga automáticamente modelos GGUF (~2 GB) para
reranking y expansión de consultas en la primera ejecución de
qmd query.Rendimiento de búsqueda y compatibilidad
OpenClaw mantiene la ruta de búsqueda de QMD compatible tanto con instalaciones actuales como antiguas de QMD. Al iniciar, OpenClaw comprueba una vez por gestor el texto de ayuda de QMD instalado. Si el binario anuncia compatibilidad con múltiples filtros de colección, OpenClaw busca en todas las colecciones de la misma fuente con un solo comando:memory + sessions siguen dando al diversificador de resultados entrada de
ambas fuentes.
Las compilaciones antiguas de QMD solo aceptan un filtro de colección. Cuando OpenClaw detecta una
de esas compilaciones, conserva la ruta de compatibilidad y busca en cada colección
por separado antes de fusionar y deduplicar resultados.
Para inspeccionar manualmente el contrato instalado, ejecuta:
Sobrescrituras de modelo
Las variables de entorno de modelo de QMD pasan sin cambios desde el proceso del Gateway, por lo que puedes ajustar QMD globalmente sin añadir nueva configuración de OpenClaw:Indexar rutas adicionales
Apunta QMD a directorios adicionales para hacerlos buscables:qmd/<collection>/<relative-path> en los
resultados de búsqueda. memory_get entiende este prefijo y lee desde la
raíz de colección correcta.
Indexar transcripciones de sesiones
Habilita la indexación de sesiones para recuperar conversaciones anteriores. QMD necesita tanto la fuente general de sesiónmemorySearch como el exportador de transcripciones de QMD:
~/.openclaw/agents/<id>/qmd/sessions/. Establecer solo
memorySearch.experimental.sessionMemory no exporta transcripciones a
QMD.
Las coincidencias de sesiones siguen filtrándose por
tools.sessions.visibility. La visibilidad
predeterminada tree no expone sesiones no relacionadas del mismo agente. Si una
sesión despachada por Gateway debe poder recuperarse desde una sesión de DM separada,
establece tools.sessions.visibility: "agent" de forma intencional.
Alcance de búsqueda
De forma predeterminada, los resultados de búsqueda de QMD se muestran solo en sesiones directas (no en chats de grupo o canal). Configuramemory.qmd.scope para cambiar esto:
Citas
Cuandomemory.citations es auto u on, los fragmentos de búsqueda reciben un
pie Source: <path>#L<line> (o #L<start>-L<end>) añadido. En modo auto
el pie solo se añade para sesiones de chat directo. Establece
memory.citations = "off" para omitir el pie y seguir pasando la ruta al
agente internamente.
Cuándo usarlo
Elige QMD cuando necesites:- Reranking para resultados de mayor calidad.
- Buscar documentación o notas del proyecto fuera del espacio de trabajo.
- Recuperar conversaciones de sesiones pasadas.
- Búsqueda totalmente local sin claves de API.
Solución de problemas
¿No se encuentra QMD? Asegúrate de que el binario esté en elPATH del Gateway. Si OpenClaw
se ejecuta como servicio, crea un symlink:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd.
Si qmd --version funciona en tu shell pero OpenClaw sigue informando
spawn qmd ENOENT, es probable que el proceso del Gateway tenga un PATH diferente al de
tu shell interactivo. Fija el binario explícitamente:
command -v qmd en el entorno donde QMD está instalado, y luego vuelve a comprobar
con openclaw memory status --deep.
¿La primera búsqueda es muy lenta? QMD descarga modelos GGUF en el primer uso. Precalienta
con qmd query "test" usando los mismos directorios XDG que usa OpenClaw.
¿Muchos subprocesos de QMD durante la búsqueda? Actualiza QMD si es posible. OpenClaw
usa un proceso para búsquedas de múltiples colecciones de la misma fuente solo cuando el
QMD instalado anuncia compatibilidad con múltiples filtros -c; de lo contrario,
conserva el fallback antiguo por colección para mantener la corrección.
¿QMD solo BM25 sigue intentando compilar llama.cpp? Establece
memory.qmd.searchMode = "search". OpenClaw trata ese modo como
solo léxico, omite las comprobaciones de estado vectorial de QMD y el mantenimiento de embeddings, y
deja las comprobaciones de preparación semántica a configuraciones vsearch o query.
¿La búsqueda agota el tiempo de espera? Aumenta memory.qmd.limits.timeoutMs (valor predeterminado:
4000ms). Establécelo más alto, por ejemplo 120000, para hardware más lento.
¿Resultados vacíos en chats de grupo o canal? Esto es lo esperado con el
memory.qmd.scope predeterminado, que solo permite sesiones directas. Añade una regla
allow para tipos de chat group o channel si quieres resultados de QMD
allí.
¿La búsqueda de memoria raíz se volvió demasiado amplia de repente? Reinicia el Gateway o espera
la próxima reconciliación de inicio. OpenClaw vuelve a crear colecciones gestionadas obsoletas
con los patrones canónicos MEMORY.md y memory/ cuando
detecta un conflicto con el mismo nombre.
¿Repos temporales visibles desde el espacio de trabajo causan ENAMETOOLONG o indexación rota?
El recorrido de QMD sigue el escáner QMD subyacente en lugar de las
reglas de symlink integradas de OpenClaw. Mantén los checkouts temporales de monorepos bajo
directorios ocultos como .tmp/ o fuera de las raíces QMD indexadas hasta que QMD exponga
recorrido seguro frente a ciclos o controles de exclusión explícitos.
Configuración
Para la superficie completa de configuración (memory.qmd.*), modos de búsqueda, intervalos de actualización,
reglas de alcance y todos los demás controles, consulta la
referencia de configuración de memoria.