# zhutov-qmd-grep-dead-claude-code-memory-recall-2026-03-01

## Veille

Motore di ricerca locale QMD per vault Obsidian, skill /recall per la memoria persistente in Claude Code, ricerca BM25 + semantica + ibrida vs grep

## Titre Article

Grep Is Dead: How I Made Claude Code Actually Remember Things

## Date

2026-03-01

## URL

https://github.com/tobi/qmd

## Keywords

QMD, motore di ricerca locale, memoria persistente, BM25, ricerca semantica, ricerca ibrida, Obsidian, Claude Code, skill recall, indicizzazione del vault, context engineering, grep, embedding, base di conoscenza, sessioni, ricostruzione del contesto, Tobias Lütke, Shopify

## Authors

Artem Zhutov (article/vidéo démonstration), Tobias Lütke (créateur QMD)

## Ton

**Profilo**: prospettiva del praticante-dimostratore, registro accessibile ed entusiasta, livello da intermedio ad avanzato

**Descrizione**: Artem Zhutov adotta il tono di un early adopter appassionato che condivide le proprie scoperte in tempo reale. Lo stile è quello del live coding narrato — esclamazioni spontanee ("È incredibile!", "Questo è quello che mi ha sorpreso"), confronti prima/dopo (grep 3 minuti vs QMD istantaneo) e metriche concrete (700 sessioni, 39 sessioni in un solo giorno). L'autore si muove tra tutorial tecnico (comandi CLI, architettura) e narrazione personale (dottorato, pattern della felicità, idee dimenticate). Dimostrare la ricerca semantica sulle proprie note personali (sonno, frustrazione, idee non realizzate) rende l'argomentazione viscerale e credibile. Il pubblico di riferimento è costituito da utenti intensivi di Claude Code e Obsidian che avvertono il problema del "cold start" a ogni sessione.

## Pense-betes

- **Problema centrale**: ogni conversazione con Claude Code riparte da zero. 700 sessioni in 3 settimane, incapacità di recuperare il contesto, perdita di decisioni durante la compattazione al 60% del contesto. Il grep nativo di Claude Code (tramite un sub-agente Haiku) impiega 3 minuti, restituisce 300 file di rumore e consuma molti token.
- **QMD**: motore di ricerca locale creato da Tobias Lütke (CEO di Shopify). Indicizza i file markdown in collezioni. 11.482 stelle su GitHub. Licenza MIT. Tre modalità di ricerca:
- **BM25** (`qmd search`): ricerca full-text deterministica. Come grep ma con punteggio TF-IDF — un file breve che menziona "sleep" 5 volte ottiene un punteggio più alto di un file di 10.000 parole con una sola menzione. Nessuna IA, nessun embedding, solo matematica. Risultati in 2 secondi.
- **Semantica** (`qmd vsearch`): usa embedding per trovare il significato anche senza parole chiave esatte. "insonnia" non restituisce nulla in BM25 ma "non riuscivo a dormire, brutta nottata" recupera note sulla disciplina dell'orario del sonno. 4 risultati su 5 non contengono le parole cercate.
- **Ibrida** (`qmd query`): combina BM25 + semantica + espansione della query + re-ranking tramite LLM. Miglior ordinamento ma ~30 secondi. Usa la Reciprocal Rank Fusion.
- **Modelli locali**: tutto gira sulla macchina, nessuna API esterna. Tre modelli GGUF: embedding Gemma 300M, reranker Qwen3 0.6B, espansione query 1.7B. ~2 GB in totale.
- **Integrazione con gli agenti**: server MCP integrato, plugin nel marketplace Claude Code (`claude marketplace add tobi/qmd`), output JSON/CSV/MD/XML ottimizzato per gli LLM.
- **Skill /recall**: una skill Claude Code costruita sopra QMD. Tre modalità:
- **Temporale** (`/recall yesterday`): ricostruisce la timeline delle sessioni per data. 39 sessioni in un solo giorno con orario, numero di messaggi, riepilogo.
- **Per argomento** (`/recall topic graph`): ricerca BM25 cross-collezione, recupera tutti i file relativi a un soggetto in meno di un minuto.
- **Grafo** (`/recall graph last week`): visualizzazione HTML interattiva — sessioni come blob colorati, file raggruppati per tipo, connessioni tracciabili.
- **Pipeline delle sessioni**: alla chiusura del terminale, un hook esporta e indicizza automaticamente la sessione Claude Code in QMD. Analizza il markdown semplice (messaggi dell'utente), filtrando gli usi degli strumenti e i prompt di sistema. L'indice è sempre aggiornato.
- **Benchmark grep vs QMD**: ricerca su "sleep" → grep restituisce 200 file incluso `sleep()` (comando di sistema), BM25 restituisce riflessioni pertinenti sulla qualità del sonno, la semantica recupera note correlate senza le parole chiave, l'ibrida produce il miglior ordinamento.
- **Intuizione sorprendente**: ricerca su "trova le idee su cui non ho mai agito" → Claude adatta la query in più ricerche semantiche e recupera idee dimenticate da mesi (dashboard del dottorato, registrazione schermo Obsidian). Ricerca "giorni in cui ero felice" → pattern: i giorni più felici = rilascio di lavoro + buon recupero (sauna, 9 ore di sonno).
- **Raccomandazione pratica**: iniziare con BM25 (80% delle ricerche, veloce, strutturato). Aggiungere la ricerca semantica per trascrizioni e braindump (testo libero, senza parole chiave precise).
- **Filosofia**: "Gli strumenti cambiano. Il tuo contesto resta." — gli strumenti evolvono (Claude Code, Codex, Gemini CLI) ma il contesto personale persiste. Le note smettono di essere passive — diventano actionable.
- **Forte collegamento con la copertura precedente**: affronta direttamente il problema del "cold start" identificato da Debois ("ogni sessione è un nuovo dipendente") e da Vasilopoulos (architettura a 3 livelli). QMD è un'implementazione concreta del Tier 3 (Cold Memory) con la skill /recall come meccanismo di caricamento. La pipeline automatica delle sessioni implementa il Context Flywheel di Debois.

## RésuméDe400mots

Artem Zhutov presenta una soluzione a un problema fondamentale nello sviluppo assistito da agenti IA: **la perdita di contesto tra le sessioni**. Con 700 sessioni Claude Code in 3 settimane, osserva che ogni conversazione riparte da zero, che la compattazione al 60% del contesto fa perdere decisioni, e che il grep nativo (tramite un sub-agente Haiku) impiega 3 minuti per restituire 300 file di rumore.

La soluzione si basa su **QMD**, un motore di ricerca locale creato da Tobias Lütke (CEO di Shopify), che indicizza i file markdown in collezioni interrogabili. QMD offre tre modalità di ricerca. **BM25** esegue una ricerca full-text con punteggio di rilevanza — a differenza di grep, che restituisce ogni corrispondenza di stringa (incluso `sleep()` per una ricerca su sleep), BM25 pesa in base alla frequenza e rarità dei termini, fornendo risultati pertinenti in 2 secondi. La **ricerca semantica** utilizza embedding locali per trovare il significato al di là delle parole chiave: una ricerca su "non riuscivo a dormire, brutta nottata" recupera una nota sulla disciplina dell'orario del sonno pur non corrispondendo alcun termine. La **ricerca ibrida** combina entrambe con espansione della query e re-ranking tramite LLM per il miglior ordinamento possibile.

Tutto gira in locale attraverso tre modelli GGUF (~2 GB): embedding Gemma 300M, un reranker Qwen3 0.6B e un modello di espansione query da 1.7B. QMD si integra con gli agenti tramite un server MCP o un plugin Claude Code.

Sopra QMD, Zhutov ha costruito la **skill /recall**, una skill Claude Code che carica automaticamente il contesto pertinente prima di ogni sessione. Tre modalità di accesso: **temporale** (ricostruzione della timeline delle sessioni per data), **per argomento** (ricerca BM25 cross-collezione su un soggetto) e **grafo** (visualizzazione HTML interattiva di sessioni e file). Un hook alla chiusura del terminale esporta e indicizza automaticamente ogni sessione in QMD, mantenendo l'indice sempre aggiornato.

Le dimostrazioni rivelano usi inattesi. Una ricerca semantica su "trova le idee su cui non ho mai agito" fa emergere progetti dimenticati da mesi. "Giorni in cui ero felice" fa emergere un pattern: i giorni migliori correlano il rilascio di lavoro con il recupero fisico. La ricerca semantica trasforma un vault passivo in **memoria attiva**, capace di far emergere connessioni invisibili alle parole chiave.

La filosofia sottostante risuona con il context engineering: gli strumenti cambiano, il contesto rimane. Un vault ben indicizzato sopravvive ai cambi di modello e di strumento. Zhutov dimostra concretamente ciò che Debois teorizza con il Context Flywheel: documentare il contesto → risultato migliore → arricchire il contesto → accelerare.

## GrapheDeConnaissance

- Tobias Lütke —a_créé→ QMD (TECHNOLOGIE, 0.98)
- Artem Zhutov —a_créé→ skill /recall (TECHNOLOGIE, 0.97)
- QMD —utilise→ BM25 (CONCEPT, 0.98)
- QMD —utilise→ recherche sémantique par embeddings (CONCEPT, 0.98)
- QMD —utilise→ Reciprocal Rank Fusion (CONCEPT, 0.95)
- QMD —remplace→ grep pour recherche vault (TECHNOLOGIE, 0.92)
- QMD —utilise→ Model Context Protocol (TECHNOLOGIE, 0.97)
- skill /recall —est_basé_sur→ QMD (TECHNOLOGIE, 0.98)
- skill /recall —améliore→ reconstruction contexte Claude Code (CONCEPT, 0.95)
- Artem Zhutov —affirme_que→ grep ne passe pas à l'échelle pour agents IA (AFFIRMATION, 0.93)
- recherche sémantique —permet→ transformation du vault passif en mémoire active (CONCEPT, 0.9)
- Tobias Lütke —dirige→ Shopify (ORGANISATION, 0.99)
- QMD —fait_partie_de→ architecture mémoire agents IA (CONCEPT, 0.88)

---
Canonical: https://www.thekb.eu/it/fiches/zhutov-qmd-grep-dead-claude-code-memory-recall-2026-03-01/
