{"id":31,"date":"2026-04-04T21:24:11","date_gmt":"2026-04-05T00:24:11","guid":{"rendered":"https:\/\/murilloalves.com.br\/blog\/?p=31"},"modified":"2026-04-04T21:35:11","modified_gmt":"2026-04-05T00:35:11","slug":"knowledge-graph-codebase-o-que-grep-nao-mostra","status":"publish","type":"post","link":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/","title":{"rendered":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Desenvolvedores gastam <a href=\"https:\/\/thivalente.com.br\/clean-code-efficiency\/\">70% do tempo lendo c\u00f3digo, n\u00e3o escrevendo<\/a>. E a maior parte desse tempo \u00e9 gasto procurando coisas. N\u00e3o procurando uma fun\u00e7\u00e3o espec\u00edfica \u2014 isso o grep resolve em 2 segundos. O problema \u00e9 procurar o que voc\u00ea <strong>nem sabe que existe<\/strong>: depend\u00eancias ocultas, c\u00f3digo morto que parece vivo, m\u00f3dulos acoplados que ningu\u00e9m percebeu, workflows inteiros que nada referencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A gente construiu um knowledge graph do nosso codebase e, na primeira query, descobriu 229 artefatos \u00f3rf\u00e3os, 2 workflows completamente desconectados do sistema, e que mudar um \u00fanico agente impacta 31 outros artefatos em cadeia. Tudo isso era invis\u00edvel \u2014 por anos.<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#O_que_grep_encontra_vs_o_que_grep_nunca_vai_encontrar\" >O que grep encontra vs. o que grep nunca vai 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#A_camada_invisivel_que_ninguem_ve\" >A camada invis\u00edvel que ningu\u00e9m v\u00ea<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#O_que_fizemos_dois_grafos_um_codebase\" >O que fizemos: dois grafos, um 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#2_aios-graph_%E2%80%94_Para_artefatos_nao-codigo\" >2. aios-graph \u2014 Para artefatos n\u00e3o-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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#O_que_descobrimos_no_primeiro_dia\" >O que descobrimos no primeiro dia<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#229_artefatos_orfaos\" >229 artefatos \u00f3rf\u00e3os<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Blast_radius_de_31_para_o_dev\" >Blast radius de 31 para o @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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#983_das_minds_sem_frameworks_extraidos\" >98.3% das minds sem 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Duplicatas_invisiveis\" >Duplicatas invis\u00edveis<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#A_economia_de_tokens_%E2%80%94_calculadora_de_padeiro\" >A economia de tokens \u2014 calculadora de padeiro<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Por_que_CLI_e_nao_MCP\" >Por que CLI e n\u00e3o 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Como_construir_o_seu\" >Como construir o seu<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#O_futuro_todo_workspace_de_AI_deveria_ter_um_grafo\" >O futuro: todo workspace de AI deveria ter um 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#O_que_e_um_knowledge_graph_de_codebase\" >O que \u00e9 um 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Preciso_de_Neo4j_ou_algum_banco_de_grafos_pra_isso\" >Preciso de Neo4j ou algum banco de grafos pra isso?<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Quanto_codigo_morto_o_meu_codebase_provavelmente_tem\" >Quanto c\u00f3digo morto o meu codebase provavelmente tem?<\/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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#MCP_ou_CLI_pra_servir_o_grafo_pro_AI_agent\" >MCP ou CLI pra servir o grafo pro 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#Isso_funciona_so_pra_codigo_ou_pra_outros_artefatos_tambem\" >Isso funciona s\u00f3 pra c\u00f3digo ou pra outros artefatos tamb\u00e9m?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"grep-vs-graph\"><span class=\"ez-toc-section\" id=\"O_que_grep_encontra_vs_o_que_grep_nunca_vai_encontrar\"><\/span>O que grep encontra vs. o que grep nunca vai encontrar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grep \u00e9 uma ferramenta de presen\u00e7a. Voc\u00ea procura &#8220;parseConfig&#8221; e ele te mostra os 5 arquivos que mencionam essa string. Perfeito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas grep n\u00e3o responde nenhuma dessas perguntas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>O que acontece se eu mudar parseConfig?<\/strong> \u2014 Grep acha os 5 callers diretos. Mas esses 5 chamam outros 23 m\u00f3dulos que dependem transitivamente. O blast radius real \u00e9 28, n\u00e3o 5.<\/li>\n<li><strong>Quais fun\u00e7\u00f5es existem mas ningu\u00e9m chama?<\/strong> \u2014 Grep acha presen\u00e7a. \u00d3rf\u00e3os s\u00e3o definidos pela <em>aus\u00eancia<\/em> de refer\u00eancia. Voc\u00ea precisaria checar cada fun\u00e7\u00e3o contra todas as outras \u2014 combina\u00e7\u00e3o explosiva.<\/li>\n<li><strong>Quantos m\u00f3dulos dependem desse aqui?<\/strong> \u2014 Quando voc\u00ea l\u00ea <code>auth.js<\/code>, voc\u00ea v\u00ea os imports dele (o que ele consome). Mas n\u00e3o v\u00ea quem importa ele (quem depende dele). O fan-in \u00e9 invis\u00edvel no arquivo individual.<\/li>\n<li><strong>Tem depend\u00eancia circular?<\/strong> \u2014 A\u2192B\u2192C\u2192A. Cada arquivo mostra um edge. O ciclo s\u00f3 aparece quando voc\u00ea monta o grafo completo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Um estudo da Microsoft Research (<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/mining-metrics-to-predict-component-failures\/\">Nagappan et al., ICSE 2006<\/a>) mostrou que m\u00e9tricas baseadas em grafo de depend\u00eancia preveem 73% dos defeitos p\u00f3s-mudan\u00e7a. Desenvolvedores que checavam s\u00f3 callers diretos (a abordagem grep) perdiam 60% das quebras que aconteciam em dependentes transitivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ou seja: grep te d\u00e1 uma foto. O grafo te d\u00e1 o mapa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"camada-invisivel\"><span class=\"ez-toc-section\" id=\"A_camada_invisivel_que_ninguem_ve\"><\/span>A camada invis\u00edvel que ningu\u00e9m v\u00ea<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Todo codebase tem 3 camadas de entendimento:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Micro<\/strong> (leg\u00edvel) \u2014 Fun\u00e7\u00f5es individuais, classes, arquivos. Voc\u00ea abre e l\u00ea.<\/li>\n<li><strong>Macro<\/strong> (documentada) \u2014 Arquitetura do sistema, diagramas, READMEs.<\/li>\n<li><strong>Meso<\/strong> (invis\u00edvel) \u2014 As conex\u00f5es reais entre os arquivos. Quem chama quem, quem depende de quem, o que quebra se eu mexer aqui.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A camada meso \u00e9 distribu\u00edda: cada arquivo cont\u00e9m um peda\u00e7o (seus imports), mas a foto completa exige agregar todos eles. \u00c9 cognitivamente imposs\u00edvel manter isso na cabe\u00e7a com centenas de arquivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fowler e Whitehead documentam um caso no livro <em>Building Evolutionary Architectures<\/em> que ilustra perfeitamente:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>&#8220;Projetamos o grafo de depend\u00eancias na parede. O CTO disse: &#8216;Essa n\u00e3o \u00e9 nossa arquitetura.&#8217; Dissemos: &#8216;Essa \u00c9 sua arquitetura.&#8217; O sistema que eles achavam ter 8 m\u00f3dulos era, na pr\u00e1tica, 2 mega-clusters com um gargalo roteando 67% do tr\u00e1fego.&#8221;<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Eles liam o c\u00f3digo h\u00e1 5 anos e n\u00e3o sabiam disso. Porque \u00e9 imposs\u00edvel ver sem o grafo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dois-grafos\"><span class=\"ez-toc-section\" id=\"O_que_fizemos_dois_grafos_um_codebase\"><\/span>O que fizemos: dois grafos, um codebase<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A gente trabalha com o <a href=\"https:\/\/github.com\/murilloimparavel\">AIOS<\/a> \u2014 um sistema de orquestra\u00e7\u00e3o de agentes IA para desenvolvimento full stack. Tem agentes (@dev, @qa, @architect), tasks (qa-gate, dev-develop-story), workflows (story-development-cycle, epic-orchestration), squads de especialistas, e minds (clones cognitivos de thought leaders como Alex Hormozi, Paul Graham, Seth Godin).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O problema: toda vez que o Claude Code precisava entender a rela\u00e7\u00e3o entre esses artefatos, ele relia os arquivos. 12 agentes \u00d7 5.000 tokens cada = 60.000 tokens queimados s\u00f3 pra responder &#8220;o que o @dev faz?&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ent\u00e3o constru\u00edmos <strong>dois knowledge graphs complementares<\/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\">O <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">code-review-graph<\/a> (fork do projeto original do <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\">tirth8205<\/a>) usa Tree-sitter pra parsear c\u00f3digo-fonte em AST e construir um grafo SQLite com fun\u00e7\u00f5es, classes, imports e chamadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Resultado m\u00e9dio: <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 opera\u00e7\u00e3o de review. Num monorepo com 27.000 arquivos, o grafo filtra pra ~15 arquivos relevantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No nosso fork, contribu\u00edmos com o <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\/pull\/95\">PR #95<\/a> que adiciona 10 subcomandos CLI e 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_artefatos_nao-codigo\"><\/span>2. aios-graph \u2014 Para artefatos n\u00e3o-c\u00f3digo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mas c\u00f3digo \u00e9 s\u00f3 metade da hist\u00f3ria. Nosso sistema tem 206 tasks, 14 workflows, 13 agentes, 93 squads e 115 minds \u2014 tudo definido em YAML e Markdown, fora do escopo do code-review-graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ent\u00e3o constru\u00edmos o <strong>aios-graph<\/strong>: um knowledge graph local (Python + SQLite + PyYAML) que parseia esses artefatos e mapeia rela\u00e7\u00f5es como DEPENDS_ON_TASK, ASSIGNED_TO, MIND_IN_SQUAD, DELEGATES_TO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nenhum outro tool no mercado faz isso. O <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 focam em entidades de c\u00f3digo. Grafar agentes, tasks e workflows \u00e9 uma categoria nova.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aios-graph query agent dev          # O que o @dev faz?\naios-graph impact agent:dev         # Blast radius se mudar o @dev\naios-graph who-uses qa-gate         # Quem depende do qa-gate?\naios-graph mind-search --tier S     # Minds prontas pra produ\u00e7\u00e3o\naios-graph dead                     # Artefatos que ningu\u00e9m referencia<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">200 tokens por query. Antes eram 60.000.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"descobertas\"><span class=\"ez-toc-section\" id=\"O_que_descobrimos_no_primeiro_dia\"><\/span>O que descobrimos no primeiro dia<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rodamos <code>aios-graph build<\/code> e as queries revelaram coisas que nenhum grep jamais mostraria:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"229_artefatos_orfaos\"><\/span>229 artefatos \u00f3rf\u00e3os<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">48 tasks (23.5% do total) existiam no reposit\u00f3rio mas nenhum agente as declarava nas depend\u00eancias. Eram tasks de orquestra\u00e7\u00e3o, seguran\u00e7a e build que funcionavam na pr\u00e1tica \u2014 mas o sistema n\u00e3o sabia que elas existiam.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso \u00e9 importante porque se algu\u00e9m deletasse uma delas achando que era &#8220;c\u00f3digo morto&#8221;, quebraria workflows que dependiam implicitamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me segue no Instagram <a href=\"https:\/\/instagram.com\/murilloimparavel\">@murilloimparavel<\/a> \u2014 l\u00e1 eu mostro os bastidores de como uso IA no dia a dia, sem filtro.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Blast_radius_de_31_para_o_dev\"><\/span>Blast radius de 31 para o @dev<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O agente @dev (nosso implementador principal) tem 43 depend\u00eancias e 24 dependentes. Mudar a interface dele \u2014 um comando, um formato de input \u2014 impacta <strong>31 artefatos<\/strong> em 2 n\u00edveis de profundidade: 8 workflows, 6 rules, 10 agentes, 7 workflows indiretos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sem o grafo, algu\u00e9m editaria o @dev achando que \u00e9 &#8220;s\u00f3 um arquivo&#8221;. Na real, \u00e9 o n\u00f3 mais acoplado de todo o 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> e <code>development-cycle<\/code> existiam como arquivos YAML completos, bem escritos, com fases e agentes definidos. Mas o grafo mostrou 0 edges \u2014 nada os referenciava, nada os conectava ao resto do sistema. Eram workflows que algu\u00e9m criou, commitou, e esqueceu de plugar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Descobrimos que o parser n\u00e3o entendia o formato YAML deles (usavam <code>phases<\/code> como dict em vez de <code>sequence<\/code> como lista). Corrigimos o parser e de repente: 12 novas edges apareceram. Os workflows voltaram \u00e0 vida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"983_das_minds_sem_frameworks_extraidos\"><\/span>98.3% das minds sem frameworks extra\u00eddos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Das 115 minds (clones cognitivos de thought leaders), apenas 2 tinham frameworks operacionais extra\u00eddos (Gary Vaynerchuk e Pedro Sobral). As outras 113 eram bibliotecas brutas \u2014 o agente precisava reler todo o material fonte toda vez pra derivar princ\u00edpios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso \u00e9 como ter um livro de receitas com 115 livros mas s\u00f3 2 com o \u00edndice pronto. Os outros, voc\u00ea tem que ler inteiro pra achar o que precisa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Duplicatas_invisiveis\"><\/span>Duplicatas invis\u00edveis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>squads\/copy\/<\/code> e <code>squads\/copy-squad\/<\/code> tinham agentes id\u00eanticos byte a byte. Sem o grafo, seriam 2 squads aparentemente diferentes (nomes diferentes, diret\u00f3rios diferentes). A compara\u00e7\u00e3o de edges CONTAINS_AGENT revelou que eram a mesma coisa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"economia-tokens\"><span class=\"ez-toc-section\" id=\"A_economia_de_tokens_%E2%80%94_calculadora_de_padeiro\"><\/span>A economia de tokens \u2014 calculadora de padeiro<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo o <a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">paper Codebase-Memory<\/a>, um graph query retorna resultado em ~200 tokens. Ler os mesmos arquivos manualmente custa 8.000-60.000 tokens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos fazer a conta com a calculadora de padeiro:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Opera\u00e7\u00e3o<\/th><th>Lendo arquivos<\/th><th>Graph query<\/th><th>Economia<\/th><\/tr><\/thead><tbody><tr><td>&#8220;O que o @dev faz?&#8221;<\/td><td>60.000 tokens (12 agents)<\/td><td>200 tokens<\/td><td><strong>300x<\/strong><\/td><\/tr><tr><td>&#8220;Quem usa qa-gate?&#8221;<\/td><td>15.000 tokens (busca em tasks\/agents\/rules)<\/td><td>200 tokens<\/td><td><strong>75x<\/strong><\/td><\/tr><tr><td>&#8220;Blast radius do @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 (ler 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\">Com Claude Opus 4.6 a $9\/1M input tokens, uma sess\u00e3o pesada de explora\u00e7\u00e3o que consome 500K tokens custa $4.50. Com graph queries, a mesma sess\u00e3o custa $0.45. Em um m\u00eas com 50 sess\u00f5es, s\u00e3o $225 vs $22.50. <strong>$200 economizados por m\u00eas<\/strong> s\u00f3 mudando de grep pra graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">E isso sem contar o benef\u00edcio qualitativo: o modelo performa melhor com menos contexto. <a href=\"https:\/\/factory.ai\/news\/context-window-problem\">Factory.ai<\/a> mostrou que contexto irrelevante <strong>degrada<\/strong> a performance \u2014 n\u00e3o \u00e9 s\u00f3 mais caro, faz o modelo parecer pior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cli-vs-mcp\"><span class=\"ez-toc-section\" id=\"Por_que_CLI_e_nao_MCP\"><\/span>Por que CLI e n\u00e3o MCP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos delirar aqui um pouco. O ecossistema inteiro est\u00e1 empurrando MCP (Model Context Protocol) como a forma de conectar AI agents a ferramentas. A gente construiu o aios-graph inicialmente com MCP server (FastMCP). Depois deletamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os dados s\u00e3o claros:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Dimens\u00e3o<\/th><th>CLI (<code>--json<\/code>)<\/th><th>MCP Server<\/th><\/tr><\/thead><tbody><tr><td>Tokens por chamada<\/td><td>~200 (stdout only)<\/td><td>~6.500+ (schema overhead)<\/td><\/tr><tr><td>Custo 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>Processos rodando<\/td><td>0 (spawn on demand)<\/td><td>1 persistente<\/td><\/tr><tr><td>Config necess\u00e1ria<\/td><td>Nenhuma<\/td><td>settings.json + env vars<\/td><\/tr><tr><td>Crash recovery<\/td><td>Cada call \u00e9 independente<\/td><td>Server crash = tudo falha<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">O aios-graph faz queries stateless contra SQLite. N\u00e3o tem connection pooling, n\u00e3o tem streaming, n\u00e3o tem comunica\u00e7\u00e3o bidirecional \u2014 os \u00fanicos cen\u00e1rios onde MCP agrega valor real. Pra tudo mais, um CLI com <code>--json<\/code> resolve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O <a href=\"https:\/\/nx.dev\/blog\/why-we-deleted-most-of-our-mcp-tools\">Nx deletou a maioria dos seus MCP tools<\/a> pela mesma raz\u00e3o. O CTO da Perplexity <a href=\"https:\/\/blogs.versalence.ai\/mcp-model-context-protocol-evolution-2026\">abandonou MCP internamente<\/a>. A tend\u00eancia \u00e9 clara: CLI pra ferramentas de desenvolvimento, MCP s\u00f3 pra integra\u00e7\u00f5es externas que precisam de auth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"como-construir\"><span class=\"ez-toc-section\" id=\"Como_construir_o_seu\"><\/span>Como construir o seu<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O aios-graph foi constru\u00eddo em ~2 horas com esta arquitetura:<\/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\">Depend\u00eancias: <code>pyyaml<\/code>. S\u00f3 isso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O pipeline \u00e9 simples:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Descobrir<\/strong> \u2014 <code>rglob<\/code> nos diret\u00f3rios de artefatos<\/li>\n<li><strong>Parsear<\/strong> \u2014 Extrair YAML blocks de markdown, carregar YAML puro<\/li>\n<li><strong>Indexar<\/strong> \u2014 Upsert nodes + edges no SQLite com SHA-256 pra change detection<\/li>\n<li><strong>Consultar<\/strong> \u2014 BFS pra impact, in-degree=0 pra \u00f3rf\u00e3os, LIKE pra search<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Build completo: 420 n\u00f3s, 993 edges, &lt;15 segundos. Update incremental: &lt;2 segundos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O c\u00f3digo \u00e9 open source. O <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">fork do code-review-graph<\/a> est\u00e1 no meu GitHub com o PR #95 que adiciona CLI-first expansion. O aios-graph est\u00e1 no <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=\"O_futuro_todo_workspace_de_AI_deveria_ter_um_grafo\"><\/span>O futuro: todo workspace de AI deveria ter um grafo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A pesquisa acad\u00eamica est\u00e1 convergindo pra isso. Em 2024-2026, foram publicados pelo 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 escrevem 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 com GPT-4o usando dual graph<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">Codebase-Memory<\/a> \u2014 83% da qualidade com 10x menos tokens<\/li>\n<li><a href=\"https:\/\/www.augmentcode.com\/product\/context-engine-mcp\">Augment Code<\/a> \u2014 +70% quality improvement com graph context<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O padr\u00e3o que est\u00e1 emergindo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>N\u00edvel<\/th><th>Tool<\/th><th>O que captura<\/th><\/tr><\/thead><tbody><tr><td>L0: Nada<\/td><td>Claude Code vanilla<\/td><td>Grep\/Read por sess\u00e3o<\/td><\/tr><tr><td>L1: Resumo<\/td><td>Aider repo-map<\/td><td>S\u00edmbolos por arquivo, PageRank<\/td><\/tr><tr><td>L2: Embeddings<\/td><td>Cursor<\/td><td>Similaridade sem\u00e2ntica<\/td><\/tr><tr><td><strong>L3: Grafo estrutural<\/strong><\/td><td><strong>code-review-graph, aios-graph<\/strong><\/td><td><strong>Rela\u00e7\u00f5es reais entre entidades<\/strong><\/td><\/tr><tr><td>L4: Sem\u00e2ntico + estrutural<\/td><td>Augment Context Engine<\/td><td>Grafo + embeddings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A gente est\u00e1 no L3 com investimento de $0 em infra. Zero servidor, zero embedding model, zero 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\">Se esse conte\u00fado fez sentido pra voc\u00ea, compartilha com algu\u00e9m que precisa ouvir isso. E se quiser trocar uma ideia sobre knowledge graphs, AI agents, ou como orquestrar isso tudo, me chama no <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=\"O_que_e_um_knowledge_graph_de_codebase\"><\/span>O que \u00e9 um knowledge graph de codebase?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 um banco de dados de grafos (n\u00f3s + arestas) que mapeia entidades do seu c\u00f3digo (fun\u00e7\u00f5es, classes, m\u00f3dulos) e as rela\u00e7\u00f5es entre elas (quem chama quem, quem importa quem, quem testa quem). Diferente de um index de busca, ele permite queries de relacionamento: &#8220;o que quebra se eu mudar X?&#8221; ou &#8220;quais fun\u00e7\u00f5es ningu\u00e9m usa?&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Preciso_de_Neo4j_ou_algum_banco_de_grafos_pra_isso\"><\/span>Preciso de Neo4j ou algum banco de grafos pra isso?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. O code-review-graph e o aios-graph usam SQLite puro. Duas tabelas (nodes e edges) com indexes s\u00e3o suficientes pra a maioria dos casos. Neo4j faz sentido se voc\u00ea precisa de queries Cypher complexas ou escala de milh\u00f5es de n\u00f3s. Pra um codebase t\u00edpico (&lt;100K arquivos), SQLite resolve.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Quanto_codigo_morto_o_meu_codebase_provavelmente_tem\"><\/span>Quanto c\u00f3digo morto o meu codebase provavelmente tem?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo a <a href=\"https:\/\/flagshark.com\/blog\/dead-code-detection-codebase-more-than-you-think\/\">FlagShark<\/a>, reposit\u00f3rios t\u00edpicos t\u00eam 10-30% de c\u00f3digo morto. Codebases enterprise com 5+ anos chegam a 20-35%. P\u00f3s-aquisi\u00e7\u00e3o, pode bater 50%. Uma empresa SaaS <a href=\"https:\/\/www.azul.com\/blog\/how-one-saas-giant-solved-dead-and-unused-code\/\">descobriu que ~50% do c\u00f3digo era n\u00e3o utilizado<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MCP_ou_CLI_pra_servir_o_grafo_pro_AI_agent\"><\/span>MCP ou CLI pra servir o grafo pro AI agent?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CLI com <code>--json<\/code>. Os benchmarks mostram que <a href=\"https:\/\/www.scalekit.com\/blog\/mcp-vs-cli-use\">MCP custa 32x mais tokens<\/a> e tem 72% de reliability vs 100% do CLI. MCP faz sentido pra database connections (connection pooling), browser automation (estado persistente) e OAuth delegation. Pra queries stateless contra SQLite, CLI \u00e9 estritamente superior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Isso_funciona_so_pra_codigo_ou_pra_outros_artefatos_tambem\"><\/span>Isso funciona s\u00f3 pra c\u00f3digo ou pra outros artefatos tamb\u00e9m?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Funciona pra qualquer coisa que tenha rela\u00e7\u00f5es estruturadas. O aios-graph parseia YAML e Markdown \u2014 agentes, tasks, workflows, squads, minds. O mesmo padr\u00e3o serve pra Terraform modules, Kubernetes manifests, GitHub Actions workflows, ou qualquer configura\u00e7\u00e3o declarativa que referencia outras configura\u00e7\u00f5es.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>70% do tempo de dev \u00e9 gasto entendendo c\u00f3digo. Um knowledge graph revela depend\u00eancias ocultas, c\u00f3digo morto e acoplamento invis\u00edvel que grep nunca encontra.<\/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-31","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>Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - Murillo Alves\" \/>\n<meta property=\"og:description\" content=\"70% do tempo de dev \u00e9 gasto entendendo c\u00f3digo. Um knowledge graph revela depend\u00eancias ocultas, c\u00f3digo morto e acoplamento invis\u00edvel que grep nunca encontra.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\" \/>\n<meta property=\"og:site_name\" content=\"Murillo Alves\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T00:24:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-05T00:35:11+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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"headline\":\"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra\",\"datePublished\":\"2026-04-05T00:24:11+00:00\",\"dateModified\":\"2026-04-05T00:35:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\"},\"wordCount\":1992,\"articleSection\":[\"Tecnologia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\",\"url\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\",\"name\":\"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - Murillo Alves\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#website\"},\"datePublished\":\"2026-04-05T00:24:11+00:00\",\"dateModified\":\"2026-04-05T00:35:11+00:00\",\"author\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"breadcrumb\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/murilloalves.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra\"}]},{\"@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":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - 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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/","og_locale":"pt_BR","og_type":"article","og_title":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - Murillo Alves","og_description":"70% do tempo de dev \u00e9 gasto entendendo c\u00f3digo. Um knowledge graph revela depend\u00eancias ocultas, c\u00f3digo morto e acoplamento invis\u00edvel que grep nunca encontra.","og_url":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/","og_site_name":"Murillo Alves","article_published_time":"2026-04-05T00:24:11+00:00","article_modified_time":"2026-04-05T00:35:11+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\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#article","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/"},"author":{"name":"admin","@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"headline":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra","datePublished":"2026-04-05T00:24:11+00:00","dateModified":"2026-04-05T00:35:11+00:00","mainEntityOfPage":{"@id":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/"},"wordCount":1992,"articleSection":["Tecnologia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/","url":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/","name":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra - Murillo Alves","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/#website"},"datePublished":"2026-04-05T00:24:11+00:00","dateModified":"2026-04-05T00:35:11+00:00","author":{"@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"breadcrumb":{"@id":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-o-que-grep-nao-mostra\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/murilloalves.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Seu codebase tem problemas que voc\u00ea n\u00e3o consegue ver \u2014 como um knowledge graph revela o que grep n\u00e3o mostra"}]},{"@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\/31","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=31"}],"version-history":[{"count":3,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"predecessor-version":[{"id":34,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts\/31\/revisions\/34"}],"wp:attachment":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}