{"notes":[{"id":"retrieval-augmented-generation/is-grep-all-you-need","category":"retrieval-augmented-generation","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Is Grep All You Need","subtitle":"Grep suffit-il ?","author":"Z. Yuan","paperDate":"2026-05-14","publishedOn":"2026-08-29","paperTitle":"Is Grep All You Need? How Agent Harnesses Reshape Agentic Search","paperUrl":"https://arxiv.org/abs/2605.15184","bibliography":{"title":"Is Grep All You Need? How Agent Harnesses Reshape Agentic Search","authors":["Sahil Sen","Akhil Kasturi","Elias Lumer","Anmol Gulati","Vamse Kumar Subbiah"],"url":"https://arxiv.org/abs/2605.15184","pdfUrl":"https://arxiv.org/pdf/2605.15184v1","codeUrl":null,"preprint":{"id":"2605.15184","submittedOn":"2026-05-14","url":"https://arxiv.org/abs/2605.15184"},"publication":null,"citation":"@misc{retrievalaugmentedgenerationisgrepallyouneed2026,\n  title = {{Is Grep All You Need? How Agent Harnesses Reshape Agentic Search}},\n  author = {Sahil Sen and Akhil Kasturi and Elias Lumer and Anmol Gulati and Vamse Kumar Subbiah},\n  year = {2026},\n  eprint = {2605.15184},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2605.15184}\n}\n","citationPath":"/content/papers/citations/retrieval-augmented-generation/is-grep-all-you-need.4ebb3c804df8.bib"},"thumbnail":{"src":"/content/papers/assets/7388f9c6a8dfcf342dfed65f8f8c3d27d2ffbbf3d5dfb51aeb45005be29a2c00.png","width":944,"height":422},"locale":"fr","path":"/content/papers/fr/retrieval-augmented-generation/is-grep-all-you-need.aae34e5573f9.md","headings":[{"id":"définir-le-problème","text":"Définir le problème","depth":2},{"id":"résoudre-le-problème","text":"Résoudre le problème","depth":2},{"id":"la-tâche--retrouver-un-souvenir-dans-de-longues-conversations","text":"La tâche : retrouver un souvenir dans de longues conversations","depth":3},{"id":"deux-outils-de-recherche","text":"Deux outils de recherche","depth":3},{"id":"quatre-harness","text":"Quatre harness","depth":3},{"id":"deux-modes-de-transmission-des-résultats","text":"Deux modes de transmission des résultats","depth":3},{"id":"modèles-et-notation","text":"Modèles et notation","depth":3},{"id":"discussion","text":"Discussion","depth":2},{"id":"expérience-1--grep-harness-et-transmission","text":"Expérience 1 : grep, harness et transmission","depth":3},{"id":"expérience-2--que-se-passe-t-il-avec-plus-de-distracteurs-","text":"Expérience 2 : que se passe-t-il avec plus de distracteurs ?","depth":3},{"id":"les-chiffres-des-deux-expériences-divergent","text":"Les chiffres des deux expériences divergent","depth":3},{"id":"le-périmètre-défini-par-les-auteurs","text":"Le périmètre défini par les auteurs","depth":3},{"id":"conclusion","text":"Conclusion","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[]}],"text":"Quiconque a utilisé Claude Code, Codex ou Gemini CLI ces deux dernières années connaît probablement la scène : vous posez une question sur le code, l'agent lance plusieurs `grep`, lit quelques fichiers, puis revient avec sa réponse.\n\nCela diffère de la recette RAG dominante des années précédentes : découper les documents, les convertir en vecteurs, les stocker dans une base vectorielle, puis rechercher par similarité sémantique.\n\nD'où la question : si l'agent sait utiliser grep, a-t-on encore besoin de recherche vectorielle ?\n\nCette prépublication de PwC aux États-Unis est parue sur arXiv en mai 2026. Son titre demande si grep suffit. Mais la lecture révèle surtout une autre observation : **le même outil de recherche peut produire des résultats très différents selon l'environnement qui orchestre l'agent.**\n\n\n> [!TIP]\n> \n> **Qu'est-ce qu'un harness ?**\n> \n> L'**agent harness**, omniprésent dans l'article, est la couche logicielle qui entoure le modèle. Elle définit les outils disponibles, le prompt système, le format de retour des outils et les conditions d'arrêt.\n> \n> Utiliser Claude Opus 4.6 dans Claude Code ou dans un agent écrit soi-même avec LangChain revient à choisir deux harness différents. Le modèle reste identique ; les prompts, descriptions d'outils et formats de résultats changent.\n\n\n## Définir le problème\n\nSelon les auteurs, les comparaisons antérieures de méthodes de recherche supposent généralement un pipeline fixe : le moteur récupère des documents, on les insère dans le prompt, puis le modèle répond.\n\nUn agent utilise les résultats autrement. Il décide quoi chercher, combien de fois, et si les preuves suffisent. Sinon, il change les mots-clés et recommence. Le harness influence tous ces comportements.\n\nLes auteurs posent donc trois questions :\n\n1. **Entre grep et recherche vectorielle, lequel fonctionne le mieux selon le harness ?**\n2. **Insérer les résultats directement dans la conversation ou les écrire dans un fichier à lire ensuite change-t-il le résultat ?**\n3. **Comment les deux méthodes évoluent-elles quand les données sans rapport se multiplient ?**\n\n## Résoudre le problème\n\n### La tâche : retrouver un souvenir dans de longues conversations\n\nL'évaluation utilise un sous-ensemble de 116 questions de LongMemEval.\n\nLongMemEval mesure la mémoire conversationnelle à long terme. Chaque question est accompagnée de nombreuses sessions de dialogue. Une ou plusieurs contiennent la réponse ; les autres sont des distracteurs. Les questions se répartissent en six catégories :\n\n| Catégorie | Capacité évaluée |\n| --- | --- |\n| knowledge-update | Suivre l'évolution d'un état dans le temps |\n| multi-session | Rassembler des informations de plusieurs conversations |\n| single-session-assistant | Se souvenir de ce que l'assistant a dit |\n| single-session-preference | Retrouver les préférences personnelles de l'utilisateur |\n| single-session-user | Retrouver des faits énoncés par l'utilisateur |\n| temporal-reasoning | Calculer des durées, ordonner des événements et déduire des dates |\n\nPrenons un exemple inventé pour cette note : « Il y a combien de mois ai-je changé d'emploi pour la dernière fois ? » La réponse peut être cachée dans une seule phrase parmi des dizaines de conversations.\n\nLes auteurs appliquent aussi le prétraitement Chronos de leurs travaux antérieurs : les dates et intervalles de temps deviennent des événements structurés, enregistrés avec les conversations brutes dans des fichiers propres à chaque question. Ils veulent mesurer la capacité à retrouver les preuves, en isolant autant que possible le travail de reconstruction des dates à partir de dialogues fragmentaires.\n\n### Deux outils de recherche\n\n**grep** charge en mémoire les conversations et événements de chaque question, applique des expressions régulières au texte brut, puis classe les résultats par nombre de correspondances. Il n'exige ni modèle d'embedding, ni index vectoriel, ni service externe.\n\n**La recherche vectorielle** encode à l'avance chaque tour de dialogue et chaque événement, puis les stocke dans un index distinct par question. À la recherche, elle encode la requête, récupère des candidats par recherche approximative de plus proches voisins, les reclasse avec un reranker et renvoie les $k$ premiers. L'agent choisit lui-même $k$.\n\nL'article ne donne pas le nom du modèle d'embedding ni celui du reranker.\n\n### Quatre harness\n\n- **Chronos** : l'agent des auteurs, construit avec LangChain. Il possède quatre outils de recherche : grep et recherche vectorielle, chacun pour les dialogues et pour les événements, activés selon l'expérience. Le prompt système varie dynamiquement avec la catégorie de question ; une question temporelle et une question de préférence reçoivent par exemple des instructions différentes.\n- **Claude Code**, **Codex CLI** et **Gemini CLI** : les agents en ligne de commande des trois fournisseurs. Les auteurs leur donnent la question et une stratégie de recherche générée dynamiquement. Ils appellent, via bash, des scripts qui encapsulent grep ou la recherche vectorielle.\n\n\n> [!NOTE]\n> \n> **Un détail du protocole à garder en tête**\n> \n> D'après la section 3.3.1, Chronos reçoit au début de chaque question un contexte initial constitué des 15 premiers résultats d'une recherche vectorielle, avant d'entrer dans la boucle d'appels d'outils. L'article ne précise pas si cette étape est supprimée dans la configuration grep-only. Cette ambiguïté compte pour interpréter les scores grep de Chronos.\n\n\n### Deux modes de transmission des résultats\n\n- **Inline, le mode standard** : les résultats sont imprimés sur la sortie standard ou insérés dans la conversation comme réponse d'outil. Le modèle les voit immédiatement, mais un grand volume occupe beaucoup de contexte.\n- **Programmatic, par fichier** : les résultats sont écrits dans un fichier. Le modèle ne reçoit que son chemin et doit appeler un autre outil pour le lire ou y lancer grep. Cela évite de remplir le contexte avec tous les résultats, au prix d'une étape supplémentaire.\n\n### Modèles et notation\n\nCinq modèles sont testés : Claude Opus 4.6, Claude Haiku 4.5, GPT-5.4, Gemini 3.1 Pro et Gemini 3.1 Flash-Lite.\n\nComme dans LongMemEval, GPT-4o sert de juge. Il lit la question, la référence et la réponse de l'agent, puis décide si cette dernière est correcte.\n\n## Discussion\n\n### Expérience 1 : grep, harness et transmission\n\n[![Table 1 de l'article : exactitude de cinq modèles dans Chronos et leurs CLI, avec grep ou recherche vectorielle et transmission inline ou programmatic](/content/papers/assets/7388f9c6a8dfcf342dfed65f8f8c3d27d2ffbbf3d5dfb51aeb45005be29a2c00.png)](/content/papers/assets/7388f9c6a8dfcf342dfed65f8f8c3d27d2ffbbf3d5dfb51aeb45005be29a2c00.png)\n\n*Table 1 de l'article, extraite de la [**page 5 du PDF v1**](https://arxiv.org/pdf/2605.15184v1#page=5), CC BY 4.0. Les 116 questions utilisent tous les distracteurs. Les deux premières colonnes sont inline, les deux dernières programmatic.*\n\nChaque ligne fixe un couple modèle-harness. Les quatre colonnes croisent deux méthodes de recherche et deux modes de transmission.\n\n**Regardons d'abord les deux colonnes inline.** Grep dépasse la recherche vectorielle dans les dix configurations. L'écart maximal apparaît avec Chronos et Gemini 3.1 Flash-Lite : 86,2 % contre 62,9 %. Le plus faible concerne Claude Code et Claude Opus 4.6 : 76,7 % contre 75,0 %.\n\n**Comparons ensuite le même modèle entre harness.** Avec grep inline, Claude Opus 4.6 atteint 93,1 % dans Chronos, contre 76,7 % dans Claude Code : 16,4 points d'écart. Dans Chronos, l'écart entre grep et recherche vectorielle n'est que de 9,5 points. Changer de harness peut donc avoir un effet comparable, voire supérieur, au changement de méthode de recherche.\n\n**Passons enfin aux colonnes programmatic.** Avec des résultats transmis par fichier, la recherche vectorielle passe devant grep dans cinq configurations sur dix. Le cas le plus spectaculaire est Codex CLI avec GPT-5.4 : grep inline atteint 93,1 %, à égalité avec le meilleur résultat ; par fichier, grep tombe à 55,2 % et la recherche vectorielle à seulement 67,2 %.\n\nLes auteurs proposent deux explications :\n\n1. **LongMemEval favorise les preuves littérales.** Dates exactes, nombres d'occurrences, préférences et formulations originales sont des chaînes stables à travers la tokenisation. Grep peut les retrouver directement, sans passage par un embedding.\n2. **Le passage par fichier ajoute une difficulté.** Au lieu de lire un retour d'outil, il faut localiser un fichier, l'ouvrir et intégrer son contenu. Si cette étape manque de fiabilité, l'exactitude peut s'effondrer indépendamment de la qualité des résultats récupérés.\n\n\n> [!TIP]\n> \n> **Sur 116 questions, combien vaut une seule réponse ?**\n> \n> Une question pèse $1/116\\approx0.86$ point de pourcentage.\n> \n> Les 76,7 % contre 75,0 % de Claude Code avec Opus correspondent à 89 contre 87 bonnes réponses : seulement deux questions. Chaque configuration semble avoir été exécutée une seule fois, sans intervalle de variation rapporté. Les écarts de quelques questions méritent donc une lecture prudente.\n\n\n### Expérience 2 : que se passe-t-il avec plus de distracteurs ?\n\nLa deuxième expérience fait varier le nombre de sessions accessibles : 5, 10, 20, 30, puis l'ensemble complet de 39 à 66 sessions. Les sessions contenant la réponse sont toujours conservées ; les places restantes sont remplies avec des distracteurs de la même question.\n\nUne intuition fréquente veut que grep suffise sur peu de données, tandis que la recherche sémantique deviendrait nécessaire à plus grande échelle.\n\nLes résultats sont plus compliqués :\n\n- **Les courbes ne sont pas monotones.** Avec Chronos et Opus, grep passe par exemple de 90,5 % à s20 à 85,3 % à s30, puis remonte à 89,7 % avec les données complètes.\n- **La recherche vectorielle est souvent meilleure sur peu de données.** À s5, grep dans Chronos se situe entre 83,2 % et 89,7 %, contre 87,9 % à 94,0 % pour la recherche vectorielle.\n- **Le gagnant dépend du harness.** Dans Claude Code, Opus et Haiku favorisent grep à chaque taille. Dans Gemini CLI, Gemini 3.1 Pro favorise toujours la recherche vectorielle, jusqu'à 89,7 % contre 78,5 % sur les données complètes. Dans Chronos, les deux méthodes alternent en tête selon la configuration.\n\nLes auteurs rappellent aussi que les distracteurs sont rééchantillonnés à chaque plafond de sessions. Un résultat meilleur à 30 qu'à 20 peut venir du tirage particulier de distracteurs plus faciles. Il faut interpréter ces courbes en tenant compte des effets de chaque échantillonnage aléatoire.\n\n### Les chiffres des deux expériences divergent\n\nUn point demande une attention particulière.\n\nLes configurations « données complètes » des expériences 1 et 2 semblent utiliser les mêmes 116 questions, les mêmes distracteurs et la même transmission inline. Pourtant, leurs résultats divergent fortement :\n\n| Modèle et harness | Recherche | Expérience 1, Table 1 | Expérience 2 full, Tables 2 et 3 |\n| --- | --- | ---: | ---: |\n| Opus + Claude Code | grep | 76,7 | 94,0 |\n| Haiku + Claude Code | grep | 55,2 | 81,9 |\n| Opus + Chronos | Vectorielle | 83,6 | 92,2 |\n| Gemini 3.1 Pro + Gemini CLI | grep / vectorielle | 81,9 / 75,0 | 78,5 / 89,7 |\n\nLa dernière ligne inverse même le gagnant : grep arrive en tête dans la première expérience, la recherche vectorielle dans la deuxième. L'article n'explique pas la différence de configuration entre les deux. Les lignes Codex de l'expérience 2 manquent également ; les auteurs les signalent comme restant à compléter.\n\nL'affirmation finale selon laquelle grep serait systématiquement plus précis que la recherche vectorielle s'applique donc, strictement, au mode inline de l'expérience 1.\n\n### Le périmètre défini par les auteurs\n\nLa section des limites rattache clairement ces résultats aux questions-réponses sur une mémoire conversationnelle à long terme. Les preuves y sont souvent des phrases présentes telles quelles dans les dialogues, ce qui favorise fortement les correspondances littérales. Des synthèses reformulées d'articles scientifiques, des documents riches en images ou la sémantique du code, où les preuves apparaissent rarement mot pour mot, pourraient donner d'autres résultats.\n\nLes auteurs limitent explicitement leur conclusion : sur les tâches et corpus étudiés, grep peut gagner dans une comparaison de bout en bout. Ils ne revendiquent aucune supériorité universelle sur la recherche vectorielle.\n\n## Conclusion\n\nLe titre demande si grep suffit. La réponse est : **souvent, pour cette tâche et ces configurations, à condition de regarder quel agent l'utilise et comment.**\n\n1. **En inline, grep gagne les dix comparaisons.** Les preuves de mémoire conversationnelle sont souvent des chaînes retrouvables à l'identique, son terrain de prédilection.\n2. **Le harness compte autant que la méthode de recherche.** Avec le même Claude Opus 4.6, le harness maison et Claude Code présentent 16,4 points d'écart.\n3. **La transmission par fichier redistribue les résultats.** Grep dans Codex avec GPT-5.4 passe de 93,1 % à 55,2 %. Cinq configurations sur dix basculent en faveur de la recherche vectorielle.\n4. **L'ajout de distracteurs ne produit aucun gagnant constant.** L'avantage varie selon le harness, le modèle et l'échantillonnage.\n\nCes résultats proviennent de 116 questions, d'une seule exécution et d'un modèle vectoriel non nommé. Des chiffres divergent encore entre les deux expériences. Ils offrent des pistes à vérifier soi-même, avec une portée encore provisoire.\n\nLa conclusion des auteurs contient un conseil pratique : mécanisme de recherche, orchestration du harness et chemin de transmission des résultats doivent être évalués ensemble, comme un système.\n\nPour comparer grep et recherche vectorielle, mieux vaut donc le faire dans votre propre agent.\n","imageSizes":{"/content/papers/assets/7388f9c6a8dfcf342dfed65f8f8c3d27d2ffbbf3d5dfb51aeb45005be29a2c00.png":{"width":944,"height":422}}}
