{"id":35,"date":"2026-04-04T21:47:23","date_gmt":"2026-04-05T00:47:23","guid":{"rendered":"https:\/\/murilloalves.com.br\/blog\/knowledge-graph-codebase-what-grep-misses\/"},"modified":"2026-04-04T21:47:23","modified_gmt":"2026-04-05T00:47:23","slug":"knowledge-graph-codebase-what-grep-misses","status":"publish","type":"post","link":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/","title":{"rendered":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Developers spend <a href=\"https:\/\/thivalente.com.br\/clean-code-efficiency\/\">70% of their time reading code, not writing it<\/a>. And most of that time is spent looking for things. Not looking for a specific function \u2014 grep handles that in 2 seconds. The problem is looking for what you <strong>don&#8217;t even know exists<\/strong>: hidden dependencies, dead code that looks alive, coupled modules nobody noticed, entire workflows that nothing references.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We built a knowledge graph of our codebase and on the very first query, discovered 229 orphaned artifacts, 2 workflows completely disconnected from the system, and that changing a single agent impacts 31 other artifacts in a chain. All of this was invisible \u2014 for years.<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#What_grep_finds_vs_what_grep_will_never_find\" >What grep finds vs. what grep will never find<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#The_invisible_layer_nobody_sees\" >The invisible layer nobody sees<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#What_we_did_two_graphs_one_codebase\" >What we did: two graphs, one 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\/en\/knowledge-graph-codebase-what-grep-misses\/#1_code-review-graph_%E2%80%94_For_code\" >1. code-review-graph \u2014 For code<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#2_aios-graph_%E2%80%94_For_non-code_artifacts\" >2. aios-graph \u2014 For non-code artifacts<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#What_we_found_on_day_one\" >What we found on day one<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#229_orphaned_artifacts\" >229 orphaned artifacts<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#Blast_radius_of_31_for_dev\" >Blast radius of 31 for @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\/en\/knowledge-graph-codebase-what-grep-misses\/#2_ghost_workflows\" >2 ghost workflows<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#983_of_minds_without_extracted_frameworks\" >98.3% of minds without extracted frameworks<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#Invisible_duplicates\" >Invisible duplicates<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#The_token_economics_%E2%80%94_back-of-napkin_math\" >The token economics \u2014 back-of-napkin math<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#Why_CLI_and_not_MCP\" >Why CLI and not 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\/en\/knowledge-graph-codebase-what-grep-misses\/#How_to_build_your_own\" >How to build your own<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#The_future_every_AI_workspace_should_have_a_graph\" >The future: every AI workspace should have a graph<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#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\/en\/knowledge-graph-codebase-what-grep-misses\/#What_is_a_codebase_knowledge_graph\" >What is a codebase knowledge graph?<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#Do_I_need_Neo4j_or_some_graph_database_for_this\" >Do I need Neo4j or some graph database for this?<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#How_much_dead_code_does_my_codebase_probably_have\" >How much dead code does my codebase probably have?<\/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\/en\/knowledge-graph-codebase-what-grep-misses\/#MCP_or_CLI_to_serve_the_graph_to_the_AI_agent\" >MCP or CLI to serve the graph to the 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\/en\/knowledge-graph-codebase-what-grep-misses\/#Does_this_work_only_for_code_or_for_other_artifacts_too\" >Does this work only for code or for other artifacts too?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"grep-vs-graph\"><span class=\"ez-toc-section\" id=\"What_grep_finds_vs_what_grep_will_never_find\"><\/span>What grep finds vs. what grep will never find<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grep is a presence tool. You search for &#8220;parseConfig&#8221; and it shows you the 5 files that mention that string. Perfect.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But grep can&#8217;t answer any of these questions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What happens if I change parseConfig?<\/strong> \u2014 Grep finds the 5 direct callers. But those 5 call 23 other modules that depend on it transitively. The real blast radius is 28, not 5.<\/li>\n<li><strong>Which functions exist but nobody calls?<\/strong> \u2014 Grep finds presence. Orphans are defined by the <em>absence<\/em> of a reference. You&#8217;d have to check every function against every other \u2014 an explosive combination.<\/li>\n<li><strong>How many modules depend on this one?<\/strong> \u2014 When you read <code>auth.js<\/code>, you see its imports (what it consumes). But you don&#8217;t see who imports it (who depends on it). Fan-in is invisible at the individual file level.<\/li>\n<li><strong>Is there a circular dependency?<\/strong> \u2014 A\u2192B\u2192C\u2192A. Each file shows one edge. The cycle only appears when you assemble the full graph.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A Microsoft Research study (<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/mining-metrics-to-predict-component-failures\/\">Nagappan et al., ICSE 2006<\/a>) showed that dependency graph-based metrics predict 73% of post-change defects. Developers who only checked direct callers (the grep approach) missed 60% of the breaks that happened in transitive dependents.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So: grep gives you a photo. The graph gives you the map.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"camada-invisivel\"><span class=\"ez-toc-section\" id=\"The_invisible_layer_nobody_sees\"><\/span>The invisible layer nobody sees<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every codebase has 3 layers of understanding:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Micro<\/strong> (readable) \u2014 Individual functions, classes, files. You open and read them.<\/li>\n<li><strong>Macro<\/strong> (documented) \u2014 System architecture, diagrams, READMEs.<\/li>\n<li><strong>Meso<\/strong> (invisible) \u2014 The actual connections between files. Who calls who, who depends on who, what breaks if I touch this.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The meso layer is distributed: each file holds a piece (its imports), but the full picture requires aggregating all of them. It&#8217;s cognitively impossible to keep this in your head with hundreds of files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fowler and Whitehead document a case in the book <em>Building Evolutionary Architectures<\/em> that illustrates this perfectly:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>&#8220;We projected the dependency graph on the wall. The CTO said: &#8216;That&#8217;s not our architecture.&#8217; We said: &#8216;That IS your architecture.&#8217; The system they thought had 8 modules was, in practice, 2 mega-clusters with a bottleneck routing 67% of the traffic.&#8221;<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">They had been reading that code for 5 years and didn&#8217;t know this. Because it&#8217;s impossible to see without the graph.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dois-grafos\"><span class=\"ez-toc-section\" id=\"What_we_did_two_graphs_one_codebase\"><\/span>What we did: two graphs, one codebase<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We work with <a href=\"https:\/\/github.com\/murilloimparavel\">AIOS<\/a> \u2014 an AI agent orchestration system for full stack development. It has agents (@dev, @qa, @architect), tasks (qa-gate, dev-develop-story), workflows (story-development-cycle, epic-orchestration), specialist squads, and minds (cognitive clones of thought leaders like Alex Hormozi, Paul Graham, Seth Godin).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem: every time Claude Code needed to understand the relationship between these artifacts, it re-read the files. 12 agents \u00d7 5,000 tokens each = 60,000 tokens burned just to answer &#8220;what does @dev do?&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So we built <strong>two complementary knowledge graphs<\/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_For_code\"><\/span>1. code-review-graph \u2014 For code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">code-review-graph<\/a> (fork of the original project by <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\">tirth8205<\/a>) uses Tree-sitter to parse source code into AST and build a SQLite graph with functions, classes, imports, and calls.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Average result: <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 fewer tokens<\/a> per review operation. In a monorepo with 27,000 files, the graph filters down to ~15 relevant files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In our fork, we contributed <a href=\"https:\/\/github.com\/tirth8205\/code-review-graph\/pull\/95\">PR #95<\/a> which adds 10 CLI subcommands and CommonJS require() parsing.<\/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_For_non-code_artifacts\"><\/span>2. aios-graph \u2014 For non-code artifacts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">But code is only half the story. Our system has 206 tasks, 14 workflows, 13 agents, 93 squads and 115 minds \u2014 all defined in YAML and Markdown, outside the scope of code-review-graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So we built <strong>aios-graph<\/strong>: a local knowledge graph (Python + SQLite + PyYAML) that parses these artifacts and maps relationships like DEPENDS_ON_TASK, ASSIGNED_TO, MIND_IN_SQUAD, DELEGATES_TO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No other tool on the market does this. <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 they all focus on code entities. Graphing agents, tasks and workflows is a new category.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aios-graph query agent dev          # What does @dev do?\naios-graph impact agent:dev         # Blast radius if you change @dev\naios-graph who-uses qa-gate         # Who depends on qa-gate?\naios-graph mind-search --tier S     # Minds ready for production\naios-graph dead                     # Artifacts nobody references<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">200 tokens per query. Before it was 60,000.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"descobertas\"><span class=\"ez-toc-section\" id=\"What_we_found_on_day_one\"><\/span>What we found on day one<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We ran <code>aios-graph build<\/code> and the queries revealed things no grep would ever show:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"229_orphaned_artifacts\"><\/span>229 orphaned artifacts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">48 tasks (23.5% of the total) existed in the repository but no agent declared them in its dependencies. These were orchestration, security, and build tasks that worked in practice \u2014 but the system didn&#8217;t know they existed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This matters because if someone deleted one thinking it was &#8220;dead code&#8221;, it would break workflows that depended on it implicitly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Follow me on Instagram <a href=\"https:\/\/instagram.com\/murilloimparavel\">@murilloimparavel<\/a> \u2014 I show behind-the-scenes of how I use AI day-to-day, no filter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Blast_radius_of_31_for_dev\"><\/span>Blast radius of 31 for @dev<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The @dev agent (our main implementer) has 43 dependencies and 24 dependents. Changing its interface \u2014 one command, one input format \u2014 impacts <strong>31 artifacts<\/strong> at 2 levels of depth: 8 workflows, 6 rules, 10 agents, 7 indirect workflows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without the graph, someone would edit @dev thinking it&#8217;s &#8220;just a file&#8221;. In reality, it&#8217;s the most coupled node in the entire system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_ghost_workflows\"><\/span>2 ghost workflows<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>epic-orchestration<\/code> and <code>development-cycle<\/code> existed as complete, well-written YAML files with phases and agents defined. But the graph showed 0 edges \u2014 nothing referenced them, nothing connected them to the rest of the system. They were workflows someone created, committed, and forgot to wire up.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We discovered the parser didn&#8217;t understand their YAML format (they used <code>phases<\/code> as a dict instead of <code>sequence<\/code> as a list). We fixed the parser and suddenly: 12 new edges appeared. The workflows came back to life.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"983_of_minds_without_extracted_frameworks\"><\/span>98.3% of minds without extracted frameworks<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Of the 115 minds (cognitive clones of thought leaders), only 2 had operational frameworks extracted (Gary Vaynerchuk and Pedro Sobral). The other 113 were raw libraries \u2014 the agent had to re-read all the source material every time to derive principles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s like having a cookbook library with 115 books but only 2 with the index ready. The rest, you have to read cover to cover to find what you need.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Invisible_duplicates\"><\/span>Invisible duplicates<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>squads\/copy\/<\/code> and <code>squads\/copy-squad\/<\/code> had byte-for-byte identical agents. Without the graph, they&#8217;d look like 2 seemingly different squads (different names, different directories). The CONTAINS_AGENT edge comparison revealed they were the same thing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"economia-tokens\"><span class=\"ez-toc-section\" id=\"The_token_economics_%E2%80%94_back-of-napkin_math\"><\/span>The token economics \u2014 back-of-napkin math<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">According to the <a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">Codebase-Memory paper<\/a>, a graph query returns results in ~200 tokens. Reading the same files manually costs 8,000-60,000 tokens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s do the math:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Operation<\/th><th>Reading files<\/th><th>Graph query<\/th><th>Savings<\/th><\/tr><\/thead><tbody><tr><td>&#8220;What does @dev do?&#8221;<\/td><td>60,000 tokens (12 agents)<\/td><td>200 tokens<\/td><td><strong>300x<\/strong><\/td><\/tr><tr><td>&#8220;Who uses qa-gate?&#8221;<\/td><td>15,000 tokens (search across tasks\/agents\/rules)<\/td><td>200 tokens<\/td><td><strong>75x<\/strong><\/td><\/tr><tr><td>&#8220;Blast radius of @dev&#8221;<\/td><td>100,000+ tokens (manual BFS)<\/td><td>200 tokens<\/td><td><strong>500x<\/strong><\/td><\/tr><tr><td>&#8220;Tier S minds&#8221;<\/td><td>50,000 tokens (read 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\">With Claude Opus 4.6 at $9\/1M input tokens, a heavy exploration session consuming 500K tokens costs $4.50. With graph queries, that same session costs $0.45. Over a month with 50 sessions, that&#8217;s $225 vs $22.50. <strong>$200 saved per month<\/strong> just by switching from grep to graph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that&#8217;s without counting the qualitative benefit: the model performs better with less context. <a href=\"https:\/\/factory.ai\/news\/context-window-problem\">Factory.ai<\/a> showed that irrelevant context <strong>degrades<\/strong> performance \u2014 it&#8217;s not just more expensive, it makes the model seem worse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cli-vs-mcp\"><span class=\"ez-toc-section\" id=\"Why_CLI_and_not_MCP\"><\/span>Why CLI and not MCP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s go a bit contrarian here. The entire ecosystem is pushing MCP (Model Context Protocol) as the way to connect AI agents to tools. We built aios-graph initially with an MCP server (FastMCP). Then we deleted it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The data is clear:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Dimension<\/th><th>CLI (<code>--json<\/code>)<\/th><th>MCP Server<\/th><\/tr><\/thead><tbody><tr><td>Tokens per call<\/td><td>~200 (stdout only)<\/td><td>~6,500+ (schema overhead)<\/td><\/tr><tr><td>Cost per 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>Processes running<\/td><td>0 (spawn on demand)<\/td><td>1 persistent<\/td><\/tr><tr><td>Config required<\/td><td>None<\/td><td>settings.json + env vars<\/td><\/tr><tr><td>Crash recovery<\/td><td>Each call is independent<\/td><td>Server crash = everything fails<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">aios-graph makes stateless queries against SQLite. There&#8217;s no connection pooling, no streaming, no bidirectional communication \u2014 the only scenarios where MCP adds real value. For everything else, a CLI with <code>--json<\/code> gets the job done.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/nx.dev\/blog\/why-we-deleted-most-of-our-mcp-tools\">Nx deleted most of its MCP tools<\/a> for the same reason. The Perplexity CTO <a href=\"https:\/\/blogs.versalence.ai\/mcp-model-context-protocol-evolution-2026\">dropped MCP internally<\/a>. The trend is clear: CLI for development tools, MCP only for external integrations that need auth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"como-construir\"><span class=\"ez-toc-section\" id=\"How_to_build_your_own\"><\/span>How to build your own<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">aios-graph was built in ~2 hours with this architecture:<\/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 with --json global flag<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dependencies: <code>pyyaml<\/code>. That&#8217;s it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The pipeline is simple:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Discover<\/strong> \u2014 <code>rglob<\/code> across artifact directories<\/li>\n<li><strong>Parse<\/strong> \u2014 Extract YAML blocks from markdown, load pure YAML<\/li>\n<li><strong>Index<\/strong> \u2014 Upsert nodes + edges into SQLite with SHA-256 for change detection<\/li>\n<li><strong>Query<\/strong> \u2014 BFS for impact, in-degree=0 for orphans, LIKE for search<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Full build: 420 nodes, 993 edges, &lt;15 seconds. Incremental update: &lt;2 seconds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The code is open source. The <a href=\"https:\/\/github.com\/murilloimparavel\/code-review-graph\">code-review-graph fork<\/a> is on my GitHub with PR #95 that adds the CLI-first expansion. aios-graph is in <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=\"The_future_every_AI_workspace_should_have_a_graph\"><\/span>The future: every AI workspace should have a graph<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Academic research is converging on this. Between 2024-2026, at least 7 papers were published on graphs + 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 LLM agents write Cypher queries against code graphs<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2504.10046\">GraphCodeAgent<\/a> \u2014 +43.8% pass rate with GPT-4o using dual graph<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">Codebase-Memory<\/a> \u2014 83% of quality with 10x fewer tokens<\/li>\n<li><a href=\"https:\/\/www.augmentcode.com\/product\/context-engine-mcp\">Augment Code<\/a> \u2014 +70% quality improvement with graph context<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The pattern that&#8217;s emerging:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Level<\/th><th>Tool<\/th><th>What it captures<\/th><\/tr><\/thead><tbody><tr><td>L0: Nothing<\/td><td>Claude Code vanilla<\/td><td>Grep\/Read per session<\/td><\/tr><tr><td>L1: Summary<\/td><td>Aider repo-map<\/td><td>Symbols per file, PageRank<\/td><\/tr><tr><td>L2: Embeddings<\/td><td>Cursor<\/td><td>Semantic similarity<\/td><\/tr><tr><td><strong>L3: Structural graph<\/strong><\/td><td><strong>code-review-graph, aios-graph<\/strong><\/td><td><strong>Real relationships between entities<\/strong><\/td><\/tr><tr><td>L4: Semantic + structural<\/td><td>Augment Context Engine<\/td><td>Graph + embeddings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re at L3 with $0 in infra investment. Zero server, 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\">If this content made sense to you, share it with someone who needs to hear it. And if you want to talk knowledge graphs, AI agents, or how to orchestrate all of this, hit me up on <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=\"What_is_a_codebase_knowledge_graph\"><\/span>What is a codebase knowledge graph?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s a graph database (nodes + edges) that maps entities in your code (functions, classes, modules) and the relationships between them (who calls who, who imports who, who tests who). Unlike a search index, it allows relationship queries: &#8220;what breaks if I change X?&#8221; or &#8220;which functions nobody calls?&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Do_I_need_Neo4j_or_some_graph_database_for_this\"><\/span>Do I need Neo4j or some graph database for this?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. code-review-graph and aios-graph use plain SQLite. Two tables (nodes and edges) with indexes are enough for most cases. Neo4j makes sense if you need complex Cypher queries or scale to millions of nodes. For a typical codebase (&lt;100K files), SQLite handles it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_much_dead_code_does_my_codebase_probably_have\"><\/span>How much dead code does my codebase probably have?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">According to <a href=\"https:\/\/flagshark.com\/blog\/dead-code-detection-codebase-more-than-you-think\/\">FlagShark<\/a>, typical repositories have 10-30% dead code. Enterprise codebases with 5+ years reach 20-35%. Post-acquisition, it can hit 50%. One SaaS company <a href=\"https:\/\/www.azul.com\/blog\/how-one-saas-giant-solved-dead-and-unused-code\/\">discovered ~50% of its code was unused<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"MCP_or_CLI_to_serve_the_graph_to_the_AI_agent\"><\/span>MCP or CLI to serve the graph to the AI agent?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CLI with <code>--json<\/code>. The benchmarks show that <a href=\"https:\/\/www.scalekit.com\/blog\/mcp-vs-cli-use\">MCP costs 32x more tokens<\/a> and has 72% reliability vs 100% for CLI. MCP makes sense for database connections (connection pooling), browser automation (persistent state), and OAuth delegation. For stateless queries against SQLite, CLI is strictly superior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Does_this_work_only_for_code_or_for_other_artifacts_too\"><\/span>Does this work only for code or for other artifacts too?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It works for anything with structured relationships. aios-graph parses YAML and Markdown \u2014 agents, tasks, workflows, squads, minds. The same pattern works for Terraform modules, Kubernetes manifests, GitHub Actions workflows, or any declarative configuration that references other configurations.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>70% of dev time is spent understanding code. A knowledge graph reveals hidden dependencies, dead code, and invisible coupling that grep can never find.<\/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-35","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>Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - 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\/en\/knowledge-graph-codebase-what-grep-misses\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - Murillo Alves\" \/>\n<meta property=\"og:description\" content=\"70% of dev time is spent understanding code. A knowledge graph reveals hidden dependencies, dead code, and invisible coupling that grep can never find.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\" \/>\n<meta property=\"og:site_name\" content=\"Murillo Alves\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T00:47:23+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=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"headline\":\"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses\",\"datePublished\":\"2026-04-05T00:47:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\"},\"wordCount\":1861,\"articleSection\":[\"Tecnologia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\",\"url\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\",\"name\":\"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - Murillo Alves\",\"isPartOf\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#website\"},\"datePublished\":\"2026-04-05T00:47:23+00:00\",\"author\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302\"},\"breadcrumb\":{\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/murilloalves.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses\"}]},{\"@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":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - 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\/en\/knowledge-graph-codebase-what-grep-misses\/","og_locale":"pt_BR","og_type":"article","og_title":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - Murillo Alves","og_description":"70% of dev time is spent understanding code. A knowledge graph reveals hidden dependencies, dead code, and invisible coupling that grep can never find.","og_url":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/","og_site_name":"Murillo Alves","article_published_time":"2026-04-05T00:47:23+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#article","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/"},"author":{"name":"admin","@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"headline":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses","datePublished":"2026-04-05T00:47:23+00:00","mainEntityOfPage":{"@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/"},"wordCount":1861,"articleSection":["Tecnologia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/","url":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/","name":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses - Murillo Alves","isPartOf":{"@id":"https:\/\/murilloalves.com.br\/blog\/#website"},"datePublished":"2026-04-05T00:47:23+00:00","author":{"@id":"https:\/\/murilloalves.com.br\/blog\/#\/schema\/person\/9f5c11ffe2f45c79a94dd7209ae69302"},"breadcrumb":{"@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/murilloalves.com.br\/blog\/en\/knowledge-graph-codebase-what-grep-misses\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/murilloalves.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Your codebase has problems you cannot see \u2014 how a knowledge graph reveals what grep misses"}]},{"@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\/35","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=35"}],"version-history":[{"count":0,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/posts\/35\/revisions"}],"wp:attachment":[{"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/media?parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/categories?post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/murilloalves.com.br\/blog\/wp-json\/wp\/v2\/tags?post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}