Mecanismo de Memória QMD
QMD é um sidecar de busca local-first que roda ao lado do OpenClaw. Ele combina BM25, busca vetorial e reranqueamento em um único binário, e pode indexar conteúdo além dos arquivos de memória do seu workspace.O que ele adiciona em relação ao mecanismo builtin
- Reranqueamento e expansão de consulta para melhor recall.
- Indexa diretórios extras — docs do projeto, notas da equipe, qualquer coisa no disco.
- Indexa transcrições de sessão — relembra conversas anteriores.
- Totalmente local — roda via Bun + node-llama-cpp, baixa automaticamente modelos GGUF.
- Fallback automático — se o QMD não estiver disponível, o OpenClaw volta para o mecanismo builtin sem interrupções.
Primeiros passos
Pré-requisitos
- Instale o QMD:
npm install -g @tobilu/qmdoubun install -g @tobilu/qmd - Build do SQLite que permita extensões (
brew install sqliteno macOS). - O QMD deve estar no
PATHdo gateway. - macOS e Linux funcionam imediatamente. O Windows é melhor suportado via WSL2.
Habilitar
~/.openclaw/agents/<agentId>/qmd/ e gerencia automaticamente o ciclo de vida do sidecar
— coleções, atualizações e execuções de embedding são tratadas para você.
Ele prefere os formatos atuais de coleção do QMD e de consulta MCP, mas ainda recorre a
flags legadas de coleção --mask e nomes antigos de ferramentas MCP quando necessário.
Como o sidecar funciona
- O OpenClaw cria coleções a partir dos seus arquivos de memória do workspace e de quaisquer
memory.qmd.pathsconfigurados, depois executaqmd update+qmd embedna inicialização e periodicamente (o padrão é a cada 5 minutos). - A coleção padrão do workspace acompanha
MEMORY.mdmais a árvorememory/.memory.mdem minúsculas continua sendo um fallback de bootstrap, não uma coleção QMD separada. - A atualização na inicialização roda em segundo plano para que o início do chat não seja bloqueado.
- As buscas usam o
searchModeconfigurado (padrão:search; também suportavsearchequery). Se um modo falhar, o OpenClaw tenta novamente comqmd query. - Se o QMD falhar completamente, o OpenClaw volta para o mecanismo SQLite builtin.
A primeira busca pode ser lenta — o QMD baixa automaticamente modelos GGUF (~2 GB) para
reranqueamento e expansão de consulta na primeira execução de
qmd query.Sobrescritas de modelo
As variáveis de ambiente de modelo do QMD são repassadas sem alterações a partir do processo do gateway, então você pode ajustar o QMD globalmente sem adicionar nova configuração do OpenClaw:Indexando caminhos extras
Aponte o QMD para diretórios adicionais para torná-los pesquisáveis:qmd/<collection>/<relative-path> nos
resultados de busca. memory_get entende esse prefixo e lê a partir da raiz correta
da coleção.
Indexando transcrições de sessão
Habilite a indexação de sessão para relembrar conversas anteriores:~/.openclaw/agents/<id>/qmd/sessions/.
Escopo de busca
Por padrão, os resultados de busca do QMD são exibidos em sessões diretas e de canal (não em grupos). Configurememory.qmd.scope para mudar isso:
Citações
Quandomemory.citations é auto ou on, os trechos de busca incluem um rodapé
Source: <path#line>. Defina memory.citations = "off" para omitir o rodapé
enquanto ainda passa o caminho internamente para o agente.
Quando usar
Escolha o QMD quando você precisar de:- Reranqueamento para resultados de maior qualidade.
- Buscar docs de projeto ou notas fora do workspace.
- Relembrar conversas de sessões passadas.
- Busca totalmente local sem chaves de API.
Solução de problemas
QMD não encontrado? Certifique-se de que o binário está noPATH do gateway. Se o OpenClaw
rodar como um serviço, crie um link simbólico:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd.
Primeira busca muito lenta? O QMD baixa modelos GGUF no primeiro uso. Faça um pré-aquecimento
com qmd query "test" usando os mesmos diretórios XDG que o OpenClaw usa.
A busca expira? Aumente memory.qmd.limits.timeoutMs (padrão: 4000ms).
Defina como 120000 para hardware mais lento.
Resultados vazios em chats de grupo? Verifique memory.qmd.scope — o padrão só
permite sessões diretas e de canal.
Repositórios temporários visíveis no workspace causando ENAMETOOLONG ou indexação quebrada?
A travessia do QMD atualmente segue o comportamento subjacente do scanner do QMD, em vez das
regras de symlink builtin do OpenClaw. Mantenha checkouts temporários de monorepo em
diretórios ocultos como .tmp/ ou fora das raízes QMD indexadas até que o QMD exponha
travessia segura contra ciclos ou controles explícitos de exclusão.
Configuração
Para toda a superfície de configuração (memory.qmd.*), modos de busca, intervalos de atualização,
regras de escopo e todos os outros ajustes, consulte a
referência de configuração de memória.