Comparativas

Graph Indexer vs grep para agentes de IA

Graph Indexer vs grep: una búsqueda por nombre acierta un 12,8 % en nestjs, Graph Indexer un 99,7 %. Comparativa y cuándo grep sigue siendo útil.

Actualizado Graph Indexer 3.0.0 Ver en Markdown

Graph Indexer responde “¿quién usa de verdad esta función?” con un 99,7 % de precisión frente al compilador de TypeScript en nestjs, mientras que grep por los mismos nombres devuelve solo un 12,8 % de referencias reales. Grep es exacto con el texto pero ciego al significado, así que un agente de IA que busca un nombre con grep tiene que leer las coincidencias falsas para descartarlas. Graph Indexer enlaza cada referencia con la definición a la que apunta, de modo que la respuesta es corta y el agente conserva su contexto para trabajar.

¿Por qué grep inunda de falsas coincidencias a un agente de IA?

Grep compara los caracteres de un nombre, no el símbolo que hay detrás. Un método llamado find o parse aparece en comentarios, cadenas de log, documentación, tests y clases sin relación, y todas esas líneas vuelven. En 400 símbolos de nestjs, el 12,8 % de las líneas que devolvió grep eran referencias reales: unas siete falsas por cada real. En el monorepo Twenty (2,3 millones de líneas) la proporción fue del 0,9 %.

Cada falsa coincidencia le cuesta tokens al agente dos veces: al recibir la línea y al abrir el archivo para comprobarla. Comprobar es lo caro, porque se repite por cada coincidencia, y el modelo vuelve a leer toda la conversación en cada llamada posterior.

¿Qué pinta tiene una falsa coincidencia?

Imagina una clase UserService con un método myFunc, y pregunta por sus llamadores. Grep por myFunc devuelve todo esto:

src/user/user.service.ts:41:  myFunc(id: string) {                 // la definición
src/user/user.controller.ts:18:  return this.users.myFunc(id);      // llamada real
src/user/user.service.ts:12:  // myFunc se llama tras el login       // comentario
src/user/audit.ts:33:  log("myFunc failed for", id);                  // cadena
docs/users.md:57:  Llama a `myFunc` para refrescar la sesión.        // documentación
src/team/team.service.ts:29:  this.teams.myFunc(slug);             // método de otra clase

Solo la línea del controlador llama a UserService.myFunc. find_references sobre ese método devuelve la línea del controlador e indica qué llamadas homónimas no pudo enlazar con una definición. El comentario, la cadena, la documentación y la llamada a TeamService no están en la respuesta. En un repositorio real el patrón se repite decenas de veces, y así una búsqueda por nombre se convierte en miles de tokens de ruido.

¿Cómo se comparan Graph Indexer y grep lado a lado?

grep (búsqueda por nombre)Graph Indexer
Precisión (referencias reales entre los resultados)12,8 % en nestjs, 0,9 % en Twenty99,7 % en nestjs, 99,9 % en Twenty
Recallcerca del 99 % (toda coincidencia de texto)96,2 % en nestjs, 92,4 % en Twenty
Tamaño de la respuestacada línea coincidente, señuelos incluidosnormalmente 400 a 1.500 tokens, ordenada, con las llamadas sin enlazar indicadas
Entiende sobrescrituras e interfacesnosí, con el oráculo de dispatch
Desactualizaciónninguna, lee los archivosninguna visible: el índice se resincroniza antes de cada respuesta
Busca cadenas, config, docssísí, con search_text
Configuraciónningunanpx graph-indexer init, Node.js 22.5+
Coste para el agentereferencia33 % más barato y 32 % menos tiempo en 25 preguntas de código

La precisión y el recall se miden contra el compilador de TypeScript; la tabla completa por repositorio está en la página de benchmarks. La desactualización no es un problema en la práctica: Graph Indexer resincroniza con el disco los archivos cambiados antes de cada respuesta, así que incluye las ediciones que el agente hizo hace un segundo.

¿Cuándo sigue siendo grep la herramienta correcta?

Grep es la herramienta correcta siempre que la pregunta es sobre texto y no sobre un símbolo. Buscar un mensaje de error, una clave de configuración, el nombre de una variable de entorno, un TODO, una URL o una cadena en una plantilla son preguntas de texto, y grep es exacto y completo para ellas. Además grep no necesita configuración ni índice, y tiene más recall: nunca se pierde una coincidencia textual, mientras que Graph Indexer puede perder referencias que dependen de genéricos, reflexión, valores any o tokens de inyección de dependencias, porque no es un comprobador de tipos.

El reparto honesto es simple. Usa grep o search_text para texto. Usa find_references, call_graph y change_impact cuando la pregunta sea “qué usa este símbolo” o “qué se rompe si lo cambio”.

¿El agente conserva grep con Graph Indexer instalado?

Sí. Graph Indexer no quita ni oculta ninguna herramienta. El agente conserva su grep, sus lecturas de archivos y sus ediciones, y gana ocho herramientas MCP de solo lectura. Una de ellas, search_text, hace grep de cualquier texto del repositorio y añade la definición que contiene cada coincidencia, así que incluso las búsquedas de texto vuelven con más contexto. En los benchmarks la mejor combinación fue grep más Graph Indexer, no Graph Indexer solo.

El efecto medido en agentes, en sesiones reales de Claude Code: preguntas de código un 16 % más baratas y refactors un 14 % más baratos que sin índice, y 12 de 12 respuestas exactas frente a 9 de 12. Frente a grep solo, en rondas con subagentes, las preguntas de código fueron un 33 % más baratas y un 32 % más rápidas en 25 tareas. Al arreglar incidencias reales no hubo ahorro medible. Los detalles y límites están en la página de benchmarks y en las preguntas frecuentes.

¿Cómo lo pruebo?

Ejecuta un comando en tu repositorio y luego hazle a tu agente una pregunta sobre llamadores.

npx graph-indexer init

Configura los clientes de agentes que encuentre. Para Claude Code también hay un plugin, explicado en la guía de instalación. Graph Indexer en sí no hace llamadas de red ni envía telemetría; el agente sigue enviando a su proveedor de modelo lo que lee.

Preguntas frecuentes

¿Graph Indexer sustituye a grep?

No. El agente conserva grep y sus herramientas de archivos. Graph Indexer añade find_references, call_graph y change_impact para las preguntas donde la búsqueda por nombre falla, y su herramienta search_text sigue buscando cualquier texto, incluidos config y documentación.

¿Por qué grep es impreciso para buscar referencias de código?

Grep compara texto, no significado. Buscar el nombre de un método devuelve también comentarios, cadenas, documentación y métodos homónimos de otras clases. En nestjs solo el 12,8 % de las líneas que devolvió grep para un símbolo eran referencias reales.

¿Graph Indexer es menos completo que grep?

Un poco. Grep devuelve toda coincidencia textual, así que su recall ronda el 99 %. El de Graph Indexer fue del 96,2 % en nestjs, y lista las llamadas homónimas que no pudo enlazar para que el agente las revise.

Pruébalo en tu repo.

npx graph-indexer init
¿Usas Claude Code? Instala el plugin