{"id":36,"date":"2026-04-04T21:47:38","date_gmt":"2026-04-05T00:47:38","guid":{"rendered":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-lo-que-grep-no-muestra\/"},"modified":"2026-04-04T21:47:38","modified_gmt":"2026-04-05T00:47:38","slug":"knowledge-graph-codebase-lo-que-grep-no-muestra","status":"publish","type":"post","link":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/","title":{"rendered":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Los desarrolladores gastan <a href=\"https:\/\/thivalente.com.br\/clean-code-efficiency\/\">70% del tiempo leyendo c\u00f3digo, no escribi\u00e9ndolo<\/a>. Y la mayor parte de ese tiempo se va buscando cosas. No buscando una funci\u00f3n espec\u00edfica \u2014 eso lo resuelve grep en 2 segundos. El problema es buscar lo que <strong>ni siquiera sab\u00e9s que existe<\/strong>: dependencias ocultas, c\u00f3digo muerto que parece vivo, m\u00f3dulos acoplados que nadie not\u00f3, workflows enteros que nada referencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nosotros construimos un knowledge graph de nuestro codebase y, en la primera query, descubrimos 229 artefactos hu\u00e9rfanos, 2 workflows completamente desconectados del sistema, y que cambiar un \u00fanico agente impacta 31 otros artefactos en cadena. Todo eso era invisible \u2014 por a\u00f1os.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Neste artigo<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabela de conte\u00fado\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #555;color:#555\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #555;color:#555\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Lo_que_grep_encuentra_vs_lo_que_grep_nunca_va_a_encontrar\" >Lo que grep encuentra vs. lo que grep nunca va a encontrar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#La_capa_invisible_que_nadie_ve\" >La capa invisible que nadie ve<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Lo_que_hicimos_dos_grafos_un_codebase\" >Lo que hicimos: dos grafos, un codebase<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#1_code-review-graph_%E2%80%94_Para_codigo\" >1. code-review-graph \u2014 Para c\u00f3digo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#2_aios-graph_%E2%80%94_Para_artefactos_no-codigo\" >2. aios-graph \u2014 Para artefactos no-c\u00f3digo<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Lo_que_descubrimos_el_primer_dia\" >Lo que descubrimos el primer d\u00eda<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#229_artefactos_huerfanos\" >229 artefactos hu\u00e9rfanos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Blast_radius_de_31_para_el_dev\" >Blast radius de 31 para el @dev<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#2_workflows_fantasma\" >2 workflows fantasma<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#983_de_las_minds_sin_frameworks_extraidos\" >98.3% de las minds sin frameworks extra\u00eddos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Duplicados_invisibles\" >Duplicados invisibles<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#La_economia_de_tokens_%E2%80%94_calculadora_de_panadero\" >La econom\u00eda de tokens \u2014 calculadora de panadero<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Por_que_CLI_y_no_MCP\" >Por qu\u00e9 CLI y no MCP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#Como_construir_el_tuyo\" >C\u00f3mo construir el tuyo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#El_futuro_todo_workspace_de_AI_deberia_tener_un_grafo\" >El futuro: todo workspace de AI deber\u00eda tener un grafo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#FAQ\" >FAQ<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#%C2%BFQue_es_un_knowledge_graph_de_codebase\" >\u00bfQu\u00e9 es un knowledge graph de codebase?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#%C2%BFNecesito_Neo4j_o_alguna_base_de_datos_de_grafos_para_esto\" >\u00bfNecesito Neo4j o alguna base de datos de grafos para esto?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#%C2%BFCuanto_codigo_muerto_probablemente_tiene_mi_codebase\" >\u00bfCu\u00e1nto c\u00f3digo muerto probablemente tiene mi codebase?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#%C2%BFMCP_o_CLI_para_servir_el_grafo_al_AI_agent\" >\u00bfMCP o CLI para servir el grafo al AI agent?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#%C2%BFEsto_funciona_solo_para_codigo_o_para_otros_artefactos_tambien\" >\u00bfEsto funciona solo para c\u00f3digo o para otros artefactos tambi\u00e9n?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"grep-vs-graph\"><span class=\"ez-toc-section\" id=\"Lo_que_grep_encuentra_vs_lo_que_grep_nunca_va_a_encontrar\"><\/span>Lo que grep encuentra vs. lo que grep nunca va a encontrar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grep es una herramienta de presencia. Busc\u00e1s &#8220;parseConfig&#8221; y te muestra los 5 archivos que mencionan ese string. Perfecto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero grep no responde ninguna de estas preguntas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u00bfQu\u00e9 pasa si cambio parseConfig?<\/strong> \u2014 Grep encuentra los 5 callers directos. Pero esos 5 llaman a otros 23 m\u00f3dulos que dependen transitivamente. El blast radius real es 28, no 5.<\/li>\n<li><strong>\u00bfQu\u00e9 funciones existen pero nadie llama?<\/strong> \u2014 Grep encuentra presencia. Los hu\u00e9rfanos se definen por la <em>ausencia<\/em> de referencia. Tendr\u00edas que chequear cada funci\u00f3n contra todas las dem\u00e1s \u2014 combinaci\u00f3n explosiva.<\/li>\n<li><strong>\u00bfCu\u00e1ntos m\u00f3dulos dependen de este?<\/strong> \u2014 Cuando le\u00e9s <code>auth.js<\/code>, ves sus imports (lo que \u00e9l consume). Pero no ves qui\u00e9n lo importa a \u00e9l (qui\u00e9n depende de \u00e9l). El fan-in es invisible en el archivo individual.<\/li>\n<li><strong>\u00bfHay dependencia circular?<\/strong> \u2014 A\u2192B\u2192C\u2192A. Cada archivo muestra un edge. El ciclo solo aparece cuando arm\u00e1s el grafo completo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un estudio de Microsoft Research (<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/mining-metrics-to-predict-component-failures\/\">Nagappan et al., ICSE 2006<\/a>) mostr\u00f3 que las m\u00e9tricas basadas en grafo de dependencia predicen el 73% de los defectos post-cambio. Los desarrolladores que chequeaban solo callers directos (el enfoque grep) se perd\u00edan el 60% de las roturas que pasaban en dependientes transitivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O sea: grep te da una foto. El grafo te da el mapa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"camada-invisivel\"><span class=\"ez-toc-section\" id=\"La_capa_invisible_que_nadie_ve\"><\/span>La capa invisible que nadie ve<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Todo codebase tiene 3 capas de entendimiento:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Micro<\/strong> (legible) \u2014 Funciones individuales, clases, archivos. Los abr\u00eds y los le\u00e9s.<\/li>\n<li><strong>Macro<\/strong> (documentada) \u2014 Arquitectura del sistema, diagramas, READMEs.<\/li>\n<li><strong>Meso<\/strong> (invisible) \u2014 Las conexiones reales entre los archivos. Qui\u00e9n llama a qui\u00e9n, qui\u00e9n depende de qui\u00e9n, qu\u00e9 se rompe si toc\u00e1s ac\u00e1.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">La capa meso est\u00e1 distribuida: cada archivo contiene un pedazo (sus imports), pero la foto completa exige agregarlos todos. Es cognitivamente imposible mantener eso en la cabeza con cientos de archivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fowler y Whitehead documentan un caso en el libro <em>Building Evolutionary Architectures<\/em> que lo ilustra perfectamente:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>&#8220;Proyectamos el grafo de dependencias en la pared. El CTO dijo: &#8216;Esa no es nuestra arquitectura.&#8217; Dijimos: &#8216;Esa ES su arquitectura.&#8217; El sistema que cre\u00edan tener con 8 m\u00f3dulos era, en la pr\u00e1ctica, 2 mega-clusters con un cuello de botella enrutando el 67% del tr\u00e1fico.&#8221;<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Llevaban 5 a\u00f1os leyendo el c\u00f3digo y no sab\u00edan eso. Porque es imposible verlo sin el grafo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dois-grafos\"><span class=\"ez-toc-section\" id=\"Lo_que_hicimos_dos_grafos_un_codebase\"><\/span>Lo que hicimos: dos grafos, un codebase<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nosotros trabajamos con el <a href=\"https:\/\/github.com\/murilloimparavel\">AIOS<\/a> \u2014 un sistema de orquestaci\u00f3n de agentes IA para desarrollo full stack. Tiene agentes (@dev, @qa, @architect), tasks (qa-gate, dev-develop-story), workflows (story-development-cycle, epic-orchestration), squads de especialistas, y minds (clones cognitivos de thought leaders como Alex Hormozi, Paul Graham, Seth Godin).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El problema: cada vez que Claude Code necesitaba entender la relaci\u00f3n entre esos artefactos, volv\u00eda a leer los archivos. 12 agentes \u00d7 5.000 tokens cada uno = 60.000 tokens quemados solo para responder &#8220;\u00bfqu\u00e9 hace el @dev?&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces construimos <strong>dos knowledge graphs complementarios<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"crg\"><span class=\"ez-toc-section\" id=\"1_code-review-graph_%E2%80%94_Para_codigo\"><\/span>1. code-review-graph \u2014 Para c\u00f3digo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">code-review-graph<\/a> (fork del proyecto original de <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\">tirth8205<\/a>) usa Tree-sitter para parsear c\u00f3digo fuente en AST y construir un grafo SQLite con funciones, clases, imports y llamadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resultado promedio: <a href=\"https:\/\/topaiproduct.com\/2026\/03\/18\/from-739k-to-15k-tokens-how-code-review-graph-slashes-claude-code-costs-with-a-local-knowledge-graph\/\">8.2x menos tokens<\/a> por operaci\u00f3n de review. En un monorepo con 27.000 archivos, el grafo filtra a ~15 archivos relevantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En nuestro fork, contribuimos con el <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\/pull\/95\">PR #95<\/a> que agrega 10 subcomandos CLI y parsing de CommonJS require().<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"aios-graph\"><span class=\"ez-toc-section\" id=\"2_aios-graph_%E2%80%94_Para_artefactos_no-codigo\"><\/span>2. aios-graph \u2014 Para artefactos no-c\u00f3digo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pero el c\u00f3digo es solo la mitad de la historia. Nuestro sistema tiene 206 tasks, 14 workflows, 13 agentes, 93 squads y 115 minds \u2014 todo definido en YAML y Markdown, fuera del alcance del code-review-graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces construimos el <strong>aios-graph<\/strong>: un knowledge graph local (Python + SQLite + PyYAML) que parsea esos artefactos y mapea relaciones como DEPENDS_ON_TASK, ASSIGNED_TO, MIND_IN_SQUAD, DELEGATES_TO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ning\u00fan otro tool en el mercado hace esto. El <a href=\"https:\/\/www.augmentcode.com\/product\/context-engine-mcp\">Augment Code<\/a>, <a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a>, GitHub Stack Graphs \u2014 todos se enfocan en entidades de c\u00f3digo. Grafar agentes, tasks y workflows es una categor\u00eda nueva.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aios-graph query agent dev          # \u00bfQu\u00e9 hace el @dev?\naios-graph impact agent:dev         # Blast radius si cambi\u00e1s el @dev\naios-graph who-uses qa-gate         # \u00bfQui\u00e9n depende del qa-gate?\naios-graph mind-search --tier S     # Minds listas para producci\u00f3n\naios-graph dead                     # Artefactos que nadie referencia<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">200 tokens por query. Antes eran 60.000.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"descobertas\"><span class=\"ez-toc-section\" id=\"Lo_que_descubrimos_el_primer_dia\"><\/span>Lo que descubrimos el primer d\u00eda<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Corrimos <code>aios-graph build<\/code> y las queries revelaron cosas que ning\u00fan grep jam\u00e1s hubiera mostrado:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"229_artefactos_huerfanos\"><\/span>229 artefactos hu\u00e9rfanos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">48 tasks (23.5% del total) exist\u00edan en el repositorio pero ning\u00fan agente las declaraba en las dependencias. Eran tasks de orquestaci\u00f3n, seguridad y build que funcionaban en la pr\u00e1ctica \u2014 pero el sistema no sab\u00eda que exist\u00edan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto importa porque si alguien borraba una pensando que era &#8220;c\u00f3digo muerto&#8221;, romper\u00eda workflows que depend\u00edan impl\u00edcitamente de ella.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seguime en Instagram <a href=\"https:\/\/instagram.com\/murilloimparavel\">@murilloimparavel<\/a> \u2014 ah\u00ed muestro los detr\u00e1s de escena de c\u00f3mo uso IA en el d\u00eda a d\u00eda, sin filtro.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Blast_radius_de_31_para_el_dev\"><\/span>Blast radius de 31 para el @dev<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El agente @dev (nuestro implementador principal) tiene 43 dependencias y 24 dependientes. Cambiar su interfaz \u2014 un comando, un formato de input \u2014 impacta <strong>31 artefactos<\/strong> en 2 niveles de profundidad: 8 workflows, 6 rules, 10 agentes, 7 workflows indirectos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin el grafo, alguien editar\u00eda el @dev creyendo que es &#8220;solo un archivo&#8221;. En realidad, es el nodo m\u00e1s acoplado de todo el sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_workflows_fantasma\"><\/span>2 workflows fantasma<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>epic-orchestration<\/code> y <code>development-cycle<\/code> exist\u00edan como archivos YAML completos, bien escritos, con fases y agentes definidos. Pero el grafo mostr\u00f3 0 edges \u2014 nada los referenciaba, nada los conectaba al resto del sistema. Eran workflows que alguien cre\u00f3, hizo commit, y olvid\u00f3 conectar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descubrimos que el parser no entend\u00eda el formato YAML de ellos (usaban <code>phases<\/code> como dict en vez de <code>sequence<\/code> como lista). Corregimos el parser y de repente: 12 nuevos edges aparecieron. Los workflows volvieron a la vida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"983_de_las_minds_sin_frameworks_extraidos\"><\/span>98.3% de las minds sin frameworks extra\u00eddos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">De las 115 minds (clones cognitivos de thought leaders), solo 2 ten\u00edan frameworks operacionales extra\u00eddos (Gary Vaynerchuk y Pedro Sobral). Las otras 113 eran bibliotecas brutas \u2014 el agente ten\u00eda que releer todo el material fuente cada vez para derivar principios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es como tener un libro de recetas con 115 libros pero solo 2 con el \u00edndice listo. Los dem\u00e1s, ten\u00e9s que leerlos enteros para encontrar lo que necesit\u00e1s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Duplicados_invisibles\"><\/span>Duplicados invisibles<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>squads\/copy\/<\/code> y <code>squads\/copy-squad\/<\/code> ten\u00edan agentes id\u00e9nticos byte a byte. Sin el grafo, ser\u00edan 2 squads aparentemente diferentes (nombres distintos, directorios distintos). La comparaci\u00f3n de edges CONTAINS_AGENT revel\u00f3 que eran lo mismo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"economia-tokens\"><span class=\"ez-toc-section\" id=\"La_economia_de_tokens_%E2%80%94_calculadora_de_panadero\"><\/span>La econom\u00eda de tokens \u2014 calculadora de panadero<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Seg\u00fan el <a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">paper Codebase-Memory<\/a>, una graph query retorna resultado en ~200 tokens. Leer los mismos archivos manualmente cuesta 8.000-60.000 tokens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hagamos la cuenta con la calculadora de panadero:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Operaci\u00f3n<\/th><th>Leyendo archivos<\/th><th>Graph query<\/th><th>Ahorro<\/th><\/tr><\/thead><tbody><tr><td>&#8220;\u00bfQu\u00e9 hace el @dev?&#8221;<\/td><td>60.000 tokens (12 agents)<\/td><td>200 tokens<\/td><td><strong>300x<\/strong><\/td><\/tr><tr><td>&#8220;\u00bfQui\u00e9n usa qa-gate?&#8221;<\/td><td>15.000 tokens (b\u00fasqueda en tasks\/agents\/rules)<\/td><td>200 tokens<\/td><td><strong>75x<\/strong><\/td><\/tr><tr><td>&#8220;Blast radius del @dev&#8221;<\/td><td>100.000+ tokens (BFS manual)<\/td><td>200 tokens<\/td><td><strong>500x<\/strong><\/td><\/tr><tr><td>&#8220;Minds Tier S&#8221;<\/td><td>50.000 tokens (leer 115 minds)<\/td><td>200 tokens<\/td><td><strong>250x<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con Claude Opus 4.6 a $9\/1M input tokens, una sesi\u00f3n pesada de exploraci\u00f3n que consume 500K tokens cuesta $4.50. Con graph queries, la misma sesi\u00f3n cuesta $0.45. En un mes con 50 sesiones, son $225 vs $22.50. <strong>$200 ahorrados por mes<\/strong> solo cambiando de grep a graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y eso sin contar el beneficio cualitativo: el modelo performa mejor con menos contexto. <a href=\"https:\/\/factory.ai\/news\/context-window-problem\">Factory.ai<\/a> mostr\u00f3 que el contexto irrelevante <strong>degrada<\/strong> la performance \u2014 no solo es m\u00e1s caro, hace que el modelo parezca peor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cli-vs-mcp\"><span class=\"ez-toc-section\" id=\"Por_que_CLI_y_no_MCP\"><\/span>Por qu\u00e9 CLI y no MCP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a delirar un poco ac\u00e1. Todo el ecosistema est\u00e1 empujando MCP (Model Context Protocol) como la forma de conectar AI agents a herramientas. Nosotros construimos el aios-graph inicialmente con MCP server (FastMCP). Despu\u00e9s lo borramos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los datos son claros:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Dimensi\u00f3n<\/th><th>CLI (<code>--json<\/code>)<\/th><th>MCP Server<\/th><\/tr><\/thead><tbody><tr><td>Tokens por llamada<\/td><td>~200 (stdout only)<\/td><td>~6.500+ (schema overhead)<\/td><\/tr><tr><td>Costo por task<\/td><td>1x<\/td><td><a href=\"https:\/\/www.scalekit.com\/blog\/mcp-vs-cli-use\">32x (ScaleKit 2026)<\/a><\/td><\/tr><tr><td>Reliability<\/td><td>100%<\/td><td><a href=\"https:\/\/www.scalekit.com\/blog\/mcp-vs-cli-use\">72% (ScaleKit)<\/a><\/td><\/tr><tr><td>Procesos corriendo<\/td><td>0 (spawn on demand)<\/td><td>1 persistente<\/td><\/tr><tr><td>Config necesaria<\/td><td>Ninguna<\/td><td>settings.json + env vars<\/td><\/tr><tr><td>Crash recovery<\/td><td>Cada call es independiente<\/td><td>Server crash = todo falla<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El aios-graph hace queries stateless contra SQLite. No tiene connection pooling, no tiene streaming, no tiene comunicaci\u00f3n bidireccional \u2014 los \u00fanicos escenarios donde MCP agrega valor real. Para todo lo dem\u00e1s, un CLI con <code>--json<\/code> lo resuelve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El <a href=\"https:\/\/nx.dev\/blog\/why-we-deleted-most-of-our-mcp-tools\">Nx borr\u00f3 la mayor\u00eda de sus MCP tools<\/a> por la misma raz\u00f3n. El CTO de Perplexity <a href=\"https:\/\/blogs.versalence.ai\/mcp-model-context-protocol-evolution-2026\">abandon\u00f3 MCP internamente<\/a>. La tendencia es clara: CLI para herramientas de desarrollo, MCP solo para integraciones externas que necesitan auth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"como-construir\"><span class=\"ez-toc-section\" id=\"Como_construir_el_tuyo\"><\/span>C\u00f3mo construir el tuyo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El aios-graph fue construido en ~2 horas con esta arquitectura:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aios_graph\/\n  graph.py    \u2014 SQLite store (WAL mode, parameterized queries)\n  parser.py   \u2014 7 parsers (agent, task, workflow, squad, mind, rule, framework)\n  tools.py    \u2014 Core functions (stateless queries)\n  cli.py      \u2014 Entry point com --json global flag<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dependencias: <code>pyyaml<\/code>. Solo eso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El pipeline es simple:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Descubrir<\/strong> \u2014 <code>rglob<\/code> en los directorios de artefactos<\/li>\n<li><strong>Parsear<\/strong> \u2014 Extraer YAML blocks de markdown, cargar YAML puro<\/li>\n<li><strong>Indexar<\/strong> \u2014 Upsert nodes + edges en SQLite con SHA-256 para change detection<\/li>\n<li><strong>Consultar<\/strong> \u2014 BFS para impact, in-degree=0 para hu\u00e9rfanos, LIKE para search<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Build completo: 420 nodos, 993 edges, &lt;15 segundos. Update incremental: &lt;2 segundos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El c\u00f3digo es open source. El <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">fork del code-review-graph<\/a> est\u00e1 en mi GitHub con el PR #95 que agrega CLI-first expansion. El aios-graph est\u00e1 en el <a href=\"https:\/\/github.com\/murilloimparavel\/mvp-system\/tree\/master\/aios-graph\">mvp-system<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"futuro\"><span class=\"ez-toc-section\" id=\"El_futuro_todo_workspace_de_AI_deberia_tener_un_grafo\"><\/span>El futuro: todo workspace de AI deber\u00eda tener un grafo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La investigaci\u00f3n acad\u00e9mica est\u00e1 convergiendo hacia esto. En 2024-2026, se publicaron al menos 7 papers sobre grafos + AI agents:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/aclanthology.org\/2025.naacl-long.7\/\">CodeXGraph<\/a> (NAACL 2025) \u2014 agentes LLM escriben queries Cypher contra grafos de c\u00f3digo<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2504.10046\">GraphCodeAgent<\/a> \u2014 +43.8% pass rate con GPT-4o usando dual graph<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">Codebase-Memory<\/a> \u2014 83% de la calidad con 10x menos tokens<\/li>\n<li><a href=\"https:\/\/www.augmentcode.com\/product\/context-engine-mcp\">Augment Code<\/a> \u2014 +70% quality improvement con graph context<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El patr\u00f3n que est\u00e1 emergiendo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Nivel<\/th><th>Tool<\/th><th>Qu\u00e9 captura<\/th><\/tr><\/thead><tbody><tr><td>L0: Nada<\/td><td>Claude Code vanilla<\/td><td>Grep\/Read por sesi\u00f3n<\/td><\/tr><tr><td>L1: Resumen<\/td><td>Aider repo-map<\/td><td>S\u00edmbolos por archivo, PageRank<\/td><\/tr><tr><td>L2: Embeddings<\/td><td>Cursor<\/td><td>Similitud sem\u00e1ntica<\/td><\/tr><tr><td><strong>L3: Grafo estructural<\/strong><\/td><td><strong>code-review-graph, aios-graph<\/strong><\/td><td><strong>Relaciones reales entre entidades<\/strong><\/td><\/tr><tr><td>L4: Sem\u00e1ntico + estructural<\/td><td>Augment Context Engine<\/td><td>Grafo + embeddings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nosotros estamos en L3 con una inversi\u00f3n de $0 en infra. Cero servidor, cero embedding model, cero API key. SQLite + Tree-sitter + PyYAML.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Si este contenido te hizo sentido, compartilo con alguien que necesite escucharlo. Y si quer\u00e9s intercambiar ideas sobre knowledge graphs, AI agents, o c\u00f3mo orquestar todo esto, escribime en <a href=\"https:\/\/instagram.com\/murilloimparavel\">Instagram<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\"><span class=\"ez-toc-section\" id=\"FAQ\"><\/span>FAQ<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFQue_es_un_knowledge_graph_de_codebase\"><\/span>\u00bfQu\u00e9 es un knowledge graph de codebase?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Es una base de datos de grafos (nodos + aristas) que mapea entidades de tu c\u00f3digo (funciones, clases, m\u00f3dulos) y las relaciones entre ellas (qui\u00e9n llama a qui\u00e9n, qui\u00e9n importa a qui\u00e9n, qui\u00e9n testea a qui\u00e9n). A diferencia de un \u00edndice de b\u00fasqueda, permite queries de relacionamiento: &#8220;\u00bfqu\u00e9 se rompe si cambio X?&#8221; o &#8220;\u00bfqu\u00e9 funciones nadie usa?&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFNecesito_Neo4j_o_alguna_base_de_datos_de_grafos_para_esto\"><\/span>\u00bfNecesito Neo4j o alguna base de datos de grafos para esto?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. El code-review-graph y el aios-graph usan SQLite puro. Dos tablas (nodes y edges) con \u00edndices son suficientes para la mayor\u00eda de los casos. Neo4j tiene sentido si necesit\u00e1s queries Cypher complejas o escala de millones de nodos. Para un codebase t\u00edpico (&lt;100K archivos), SQLite lo resuelve.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFCuanto_codigo_muerto_probablemente_tiene_mi_codebase\"><\/span>\u00bfCu\u00e1nto c\u00f3digo muerto probablemente tiene mi codebase?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Seg\u00fan <a href=\"https:\/\/flagshark.com\/blog\/dead-code-detection-codebase-more-than-you-think\/\">FlagShark<\/a>, los repositorios t\u00edpicos tienen 10-30% de c\u00f3digo muerto. Codebases enterprise con 5+ a\u00f1os llegan a 20-35%. Post-adquisici\u00f3n, puede llegar al 50%. Una empresa SaaS <a href=\"https:\/\/www.azul.com\/blog\/how-one-saas-giant-solved-dead-and-unused-code\/\">descubri\u00f3 que ~50% del c\u00f3digo no se usaba<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFMCP_o_CLI_para_servir_el_grafo_al_AI_agent\"><\/span>\u00bfMCP o CLI para servir el grafo al AI agent?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CLI con <code>--json<\/code>. Los benchmarks muestran que <a href=\"https:\/\/www.scalekit.com\/blog\/mcp-vs-cli-use\">MCP cuesta 32x m\u00e1s tokens<\/a> y tiene 72% de reliability vs 100% del CLI. MCP tiene sentido para database connections (connection pooling), browser automation (estado persistente) y OAuth delegation. Para queries stateless contra SQLite, CLI es estrictamente superior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%C2%BFEsto_funciona_solo_para_codigo_o_para_otros_artefactos_tambien\"><\/span>\u00bfEsto funciona solo para c\u00f3digo o para otros artefactos tambi\u00e9n?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Funciona para cualquier cosa que tenga relaciones estructuradas. El aios-graph parsea YAML y Markdown \u2014 agentes, tasks, workflows, squads, minds. El mismo patr\u00f3n sirve para Terraform modules, Kubernetes manifests, GitHub Actions workflows, o cualquier configuraci\u00f3n declarativa que referencia otras configuraciones.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>El 70% del tiempo de desarrollo se gasta entendiendo c\u00f3digo. Un knowledge graph revela dependencias ocultas, c\u00f3digo muerto y acoplamiento invisible que grep nunca encuentra.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-36","post","type-post","status-publish","format-standard","hentry","category-tecnologia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves\" \/>\n<meta property=\"og:description\" content=\"El 70% del tiempo de desarrollo se gasta entendiendo c\u00f3digo. Un knowledge graph revela dependencias ocultas, c\u00f3digo muerto y acoplamiento invisible que grep nunca encuentra.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\" \/>\n<meta property=\"og:site_name\" content=\"Murillo Alves\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T00:47:38+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"headline\":\"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra\",\"datePublished\":\"2026-04-05T00:47:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\"},\"wordCount\":2027,\"articleSection\":[\"Tecnologia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\",\"url\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\",\"name\":\"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#website\"},\"datePublished\":\"2026-04-05T00:47:38+00:00\",\"author\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"breadcrumb\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/murilloalves.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#website\",\"url\":\"https:\/\/murilloalves.com.br\/blog\/\",\"name\":\"Murillo Alves\",\"description\":\"Builder, Tech Entrepreneur &amp; AI-First Developer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/murilloalves.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/murilloalves.com.br\/blog\"],\"url\":\"https:\/\/murilloalves.com.br\/blog\/author\/murilloadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/","og_locale":"pt_BR","og_type":"article","og_title":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves","og_description":"El 70% del tiempo de desarrollo se gasta entendiendo c\u00f3digo. Un knowledge graph revela dependencias ocultas, c\u00f3digo muerto y acoplamiento invisible que grep nunca encuentra.","og_url":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/","og_site_name":"Murillo Alves","article_published_time":"2026-04-05T00:47:38+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Est. tempo de leitura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#article","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/"},"author":{"name":"admin","@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"headline":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra","datePublished":"2026-04-05T00:47:38+00:00","mainEntityOfPage":{"@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/"},"wordCount":2027,"articleSection":["Tecnologia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/","url":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/","name":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra - Murillo Alves","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/#website"},"datePublished":"2026-04-05T00:47:38+00:00","author":{"@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"breadcrumb":{"@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/murilloalves.com.br\/blog\/es\/knowledge-graph-codebase-lo-que-grep-no-muestra\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/murilloalves.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Tu codebase tiene problemas que no puedes ver \u2014 c\u00f3mo un knowledge graph revela lo que grep no muestra"}]},{"@type":"WebSite","@id":"https:\/\/murilloalves.com.br\/blog\/#website","url":"https:\/\/murilloalves.com.br\/blog\/","name":"Murillo Alves","description":"Builder, Tech Entrepreneur &amp; AI-First Developer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/murilloalves.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302","name":"admin","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/33214b118ee9e4d2898e089694b4c4ef577fc09702242f61e76b5c9b84b8deb1?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/murilloalves.com.br\/blog"],"url":"https:\/\/murilloalves.com.br\/blog\/author\/murilloadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts\/36","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/comments?post=36"}],"version-history":[{"count":0,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts\/36\/revisions"}],"wp:attachment":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/media?parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/categories?post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/tags?post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}