<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog do Maguyva</title><description>Análises técnicas aprofundadas sobre inteligência de código MCP, arquitetura de agentes de IA e lições aprendidas ao construir uma plataforma de busca de código multilíngue.</description><link>https://maguyva.ai/pt-br/blog</link><language>pt-br</language><atom:link href="https://maguyva.ai/pt-br/rss.xml" rel="self" type="application/rss+xml"/><item><title>Contexto que viaja com você</title><link>https://maguyva.ai/pt-br/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/context-that-travels</guid><description>O indexador do Cursor é excelente dentro do Cursor. O Maguyva é o mapa MCP hospedado que o mesmo agente pode consultar a partir de outros editores, CLIs e CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;O indexador do Cursor é excelente dentro do Cursor. Autocompletar, edição inline, chat e o agente naquela janela já se apoiam em um índice de projeto que o Cursor opera para o workspace aberto. Se o Cursor é a única superfície em que você escreve, e esse índice já encontra os arquivos certos, fique lá. Esse é o caso honesto de “fique onde está”, e com razão é a primeira frase desta página.&lt;/p&gt;
&lt;p&gt;Este texto trata da outra metade de uma semana comum. O mesmo repositório também é aberto no Claude Code, consultado pelo Codex CLI, revisado em uma segunda máquina, ou consultado por um agente rodando em CI. A pergunta não é “qual indexador é melhor”. A pergunta é se o mapa em que o agente confia em uma janela é o mesmo em que confia na próxima.&lt;/p&gt;
&lt;p&gt;O Maguyva é esse mapa que viaja com você. É uma camada de contexto de código MCP remota. O agente a consulta do mesmo jeito que consulta qualquer outra ferramenta MCP. Os resultados voltam como caminhos ranqueados com números de linha. O Cursor continua sendo o editor. O contexto é o que se move.&lt;/p&gt;
&lt;h2 id=&quot;para-que-serve-o-indexador-do-cursor&quot;&gt;Para que serve o indexador do Cursor&lt;/h2&gt;
&lt;p&gt;A indexação embutida do Cursor existe para que chat, agente e busca dentro do editor possam recuperar código relevante em vez de depender só do que cabe na janela de contexto bruta do modelo. Esse é o design certo para uma IDE. O índice é nativo do Cursor. Não é um servidor MCP e não é acessível por nenhum outro cliente.&lt;/p&gt;
&lt;p&gt;Como funciona, conforme descrito na documentação pública do Cursor e no relato do próprio Cursor no momento em que este texto foi escrito: o caminho de busca principal não é mais um índice de embeddings na nuvem. A equipe do Cursor declarou em seu fórum da comunidade que a busca semântica/baseada em embeddings dedicada está sendo desativada em favor de uma recuperação baseada em grep, porque os modelos atuais já buscam bem o suficiente em uma árvore viva por conta própria. No lugar dela está o Instant Grep, um índice de busca local construído a partir de n-gramas, listas invertidas e filtros de Bloom, mantido em uma tabela de consulta mapeada em memória, de modo que as consultas são resolvidas na própria máquina do desenvolvedor, e não em um servidor.&lt;/p&gt;
&lt;p&gt;O índice em si vive dentro do próprio diretório &lt;code&gt;.git/cursor/&lt;/code&gt; do repositório, ancorado a um commit git específico; mudanças desde esse commit se sobrepõem em vez de disparar uma nova varredura, e o índice só se reconstrói quando o estado local se afastou bastante daquilo contra o que foi construído. Como fica dentro de &lt;code&gt;.git&lt;/code&gt;, nunca é versionado nem enviado — apague a pasta, e o índice some. &lt;code&gt;.gitignore&lt;/code&gt; é respeitado por construção, já que só conteúdo rastreado pelo git é elegível, e &lt;code&gt;.cursorignore&lt;/code&gt; é aplicado no caminho de leitura. Não há mais etapa de embedding no lado do servidor nem banco de dados vetorial remoto nesse caminho. Documentações anteriores descreviam um design assistido pela nuvem — criptografia de blocos, sincronização por árvore de Merkle, reaproveitamento de índice entre colegas de equipe — e a própria equipe do Cursor já afirmou que esse design está sendo desativado, então este texto não o descreve mais como atual.&lt;/p&gt;
&lt;p&gt;Um destaque dentro do editor é o subagente Explore do Cursor. Ele pode disparar várias buscas paralelas em sua própria janela de contexto, em um modelo mais rápido, e retornar só os achados relevantes, para que a conversa principal não fique inchada com resultados de busca. Isso é um ponto forte genuíno dentro do editor. Mantenha-o.&lt;/p&gt;
&lt;p&gt;Workspaces multi-raiz são suportados: o contexto de cada pasta aberta fica disponível para o Agente. Alguns recursos dependentes de git, como worktrees, ficam desativados em configurações multi-raiz, e os Cloud Agents não suportam workspaces multi-raiz de jeito nenhum.&lt;/p&gt;
&lt;p&gt;Nada disso é motivo para abandonar o Cursor. É uma descrição precisa de um mapa que é excelente onde vive.&lt;/p&gt;
&lt;h2 id=&quot;o-que-viajar-com-você-realmente-significa&quot;&gt;O que “viajar com você” realmente significa&lt;/h2&gt;
&lt;p&gt;Um mapa viaja com você quando as mesmas perguntas retornam o mesmo tipo de resposta, com citações que você pode abrir, a partir de mais de um cliente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Cursor: “Onde &lt;code&gt;parseConfig&lt;/code&gt; é definido, e quem o chama?”&lt;/li&gt;
&lt;li&gt;No Claude Code, no mesmo repo: a mesma pergunta.&lt;/li&gt;
&lt;li&gt;No Codex CLI, em uma máquina de revisão que nunca abriu a janela do Cursor: a mesma pergunta.&lt;/li&gt;
&lt;li&gt;Em um agente de CI que fala MCP: a mesma pergunta, contra o mesmo snapshot hospedado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se cada superfície constrói seu próprio índice privado, você não tem um mapa. Você tem vários caches que divergem. O índice do editor pode estar atualizado para a árvore em disco. A sessão da CLI pode estar um dia atrasada. O job de CI pode estar olhando um checkout diferente. O agente vai continuar soando confiante mesmo assim.&lt;/p&gt;
&lt;p&gt;O indexador do Cursor não deveria resolver isso. Como vive dentro do editor, o contexto que ele constrói é para aquele editor. Um leitor que também precisa de uma CLI, de um pipeline de CI ou de um editor diferente precisa de uma ferramenta separada para essas superfícies. Isso é um fato de escopo, não um defeito. O Maguyva é essa ferramenta separada.&lt;/p&gt;
&lt;p&gt;Uma contagem de linguagens publicada para o indexador do Cursor não é informada nas notas que este rascunho pode usar. O Maguyva publica mais de 279 linguagens e tecnologias baseadas em texto. Os preços do Cursor também não são copiados aqui; veja a página de preços deles. O Maguyva cobra por workspace, não por assento, com planos publicados de $0, $19, $49 e $149, dependendo da pegada indexada e do tamanho do workspace.&lt;/p&gt;
&lt;h2 id=&quot;um-mapa-hospedado-todo-cliente-mcp&quot;&gt;Um mapa hospedado, todo cliente MCP&lt;/h2&gt;
&lt;p&gt;O Maguyva é um servidor MCP remoto. Você conecta o GitHub, escolhe os repositórios, e o pipeline na nuvem constrói símbolos, arestas do grafo e um mapa ranqueado. Você adiciona uma chave de API à configuração MCP do cliente que já usa. O Maguyva tem guias de configuração para 24 clientes MCP documentados — incluindo o Cursor — e pode se conectar a outros clientes compatíveis com MCP que suportem a configuração padrão.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://maguyva.ai/pt-br/for-cursor&quot;&gt;página de configuração do Cursor&lt;/a&gt; é o caminho específico do editor, se for onde você trabalha. O mesmo servidor atende Claude Code, VS Code, Windsurf, Codex CLI e o resto. Você não troca de editor. Você dá a cada agente a mesma superfície de ferramentas: 11 ferramentas MCP voltadas ao cliente em busca, símbolos, análise de dependências, recuperação de arquivos, contexto de repositório e workflows utilitários determinísticos. Recuperação semântica, estrutural, por grafo e de texto são fundidas em resultados ranqueados.&lt;/p&gt;
&lt;p&gt;Esse é o benefício da portabilidade. As citações que você avaliou no Cursor de manhã têm a mesma forma das citações que o Codex CLI vai retornar à noite. Caminho do arquivo e número da linha. Abra-as. Se estiverem erradas, você vê. Se estiverem certas, a próxima edição tem um lugar para pousar. A afirmação aprovada é menos edições alucinadas, não a promessa de que toda edição está correta.&lt;/p&gt;
&lt;p&gt;A atualidade é publicada. Snapshots têm carimbo de tempo, então o agente sabe qual versão da árvore está lendo. A cadência de reconstrução é diária no plano gratuito e a cada hora nos planos pagos. O limite honesto é o trabalho local não sincronizado: uma edição que só existe em uma árvore de trabalho ainda não está no mapa hospedado. Esse limite é o mesmo não importa de qual cliente você consulte, e esse é justamente o ponto. A deriva entre clientes deixa de ser um segundo limite escondido.&lt;/p&gt;
&lt;p&gt;Os &lt;a href=&quot;https://maguyva.ai/pt-br/docs&quot;&gt;docs&lt;/a&gt; dão o loop de ativação que se aplica a todo cliente: indexar um repo que você já conhece, conectar o cliente, fazer uma pergunta que você consiga verificar. Faça isso uma vez no Cursor. Faça de novo a partir da CLI que você realmente usa em dias de revisão. Se as duas respostas citarem o mesmo handler, o mapa viajou.&lt;/p&gt;
&lt;h2 id=&quot;como-os-dois-mapas-convivem&quot;&gt;Como os dois mapas convivem&lt;/h2&gt;
&lt;p&gt;Use os dois. Eles não são alternativas no sentido de uma página de comparação.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantenha o indexador do Cursor ativo para o projeto em disco. Deixe o Explore, o Instant Grep e o agente dentro do editor usá-lo. Esse loop é nativo e rápido.&lt;/li&gt;
&lt;li&gt;Adicione o Maguyva como servidor MCP no Cursor para que a mesma sessão também possa consultar o mapa hospedado do workspace. O Cursor é um cliente Maguyva documentado. Você não está escolhendo um índice e apagando o outro.&lt;/li&gt;
&lt;li&gt;Adicione o mesmo servidor Maguyva ao Claude Code, Codex CLI, ou qualquer outro cliente MCP que toque o repo. Uma única forma de chave de API. Um único workspace.&lt;/li&gt;
&lt;li&gt;Se um agente de CI for compatível com MCP, aponte-o para o mesmo servidor. Ele vai ler o mesmo snapshot com carimbo de tempo que o notebook leu.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O índice do editor continua sendo a melhor ferramenta para “o que está em disco nesta janela, agora”. O mapa hospedado é a melhor ferramenta para “como este workspace se parece para todo agente que vai tocá-lo hoje”. Essas frases não competem.&lt;/p&gt;
&lt;p&gt;As cotas de workspace são publicadas na &lt;a href=&quot;https://maguyva.ai/pt-br/pricing&quot;&gt;página de preços&lt;/a&gt;: repos, linhas indexadas e usuários, cobrados por workspace. Agentes e humanos compartilham a mesma contagem de usuários. Comece grátis com um repo que você já sabe avaliar. Aumente o workspace só depois que as citações sobreviverem ao contato com a árvore.&lt;/p&gt;
&lt;h2 id=&quot;o-que-esta-página-não-afirma&quot;&gt;O que esta página não afirma&lt;/h2&gt;
&lt;p&gt;Ela não afirma que o indexador do Cursor é fraco, incompleto, ou um motivo para trocar de editor. A primeira frase deste rascunho é o oposto.&lt;/p&gt;
&lt;p&gt;Ela não afirma que o Maguyva substitui o Instant Grep ou o subagente Explore. Esses são recursos do Cursor. Eles ficam no Cursor.&lt;/p&gt;
&lt;p&gt;Ela não inventa uma contagem de linguagens, um número de latência, nem uma economia de tokens para nenhum dos dois produtos. Números desconhecidos permanecem não publicados.&lt;/p&gt;
&lt;p&gt;Ela não finge que trabalho local não enviado está no mapa hospedado. Snapshots com carimbo de tempo tornam esse limite visível. Eles não o removem.&lt;/p&gt;
&lt;p&gt;O teste é comum. Indexe um repo que você já conhece. Faça uma pergunta que você consiga verificar, primeiro no Cursor, depois em um segundo cliente MCP. Contexto que viaja com você é a mesma citação nos dois lugares.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Primeiro o mapa, depois a revisão</title><link>https://maguyva.ai/pt-br/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/map-first-review-second</guid><description>Ancore o agente de código em um mapa do repo antes de ele escrever. Deixe o Greptile revisar o pull request depois. Uma dupla complementar, não uma troca.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dois trabalhos diferentes ficam de cada lado de um pull request. Antes de o agente escrever, ele precisa de um mapa da árvore que está prestes a mudar. Depois que o agente abre um PR, algo deveria ler essa mudança contra o resto do sistema e deixar comentários sobre os quais um humano possa agir.&lt;/p&gt;
&lt;p&gt;Esses trabalhos parecem semelhantes de longe porque ambos envolvem “entender a base de código”. Não são o mesmo produto. Um responde “onde essa mudança deveria pousar?”. O outro responde “o que esse diff quebrou que um linter linha a linha vai perder?”. Misturá-los produz um primeiro rascunho pior e uma revisão mais barulhenta.&lt;/p&gt;
&lt;p&gt;Este texto é um guia de fluxo de trabalho conjunto. O Maguyva é o mapa que o agente consulta primeiro. O Greptile é o agente de revisão que comenta o PR depois. A dupla é complementar por construção: o Maguyva não revisa pull requests, e o Greptile não substitui a camada de contexto que o agente usou para escrevê-los.&lt;/p&gt;
&lt;h2 id=&quot;por-que-essa-divisão-é-útil&quot;&gt;Por que essa divisão é útil&lt;/h2&gt;
&lt;p&gt;Um agente de código que parte de priors de treinamento mais alguns arquivos colados vai inventar um caminho plausível e editá-lo. Essa é a falha do arquivo errado, e é um problema de recuperação. O Maguyva é uma camada de contexto de código MCP remota: recuperação semântica, estrutural (AST), por grafo/dependência e de texto, fundida em resultados ranqueados, mais busca de símbolos e recuperação de arquivos. Respostas fundamentadas voltam como &lt;code&gt;path/file.ext:line&lt;/code&gt;, então você consegue rejeitar um erro antes que um patch exista. A afirmação continua modesta: menos edições alucinadas. O modelo ainda pode adivinhar. O primeiro passo só deixa de ser um chute.&lt;/p&gt;
&lt;p&gt;O Greptile é um agente de revisão de código com IA. Em suas próprias palavras, ele revisa automaticamente todo pull request com compreensão completa da base de código, e posiciona isso contra linters tradicionais que verificam arquivos isoladamente em vez do sistema inteiro. A configuração consiste em instalar o app do GitHub ou GitLab e selecionar repositórios. Não há índice local para você operar. A hospedagem é o Greptile Cloud (eles declaram conformidade SOC 2 Tipo II, com relatório disponível sob solicitação), com uma opção auto-hospedada oferecida para empresas.&lt;/p&gt;
&lt;p&gt;O fluxo numerado deles é: conectar e construir um grafo de dependências de cada função, classe e dependência; a cada pull request, analisar a mudança usando esse grafo completo do repo e publicar achados como comentários de PR com correções sugeridas, em cerca de três minutos; cada comentário pode passar o problema para um agente de código que a equipe já usa. Eles também declaram ler comentários humanos anteriores em PRs ao longo do tempo para aprender os padrões de código de uma equipe e reduzir sugestões ruidosas. O sistema de aprendizado deles, segundo declaram, precisa de 2 a 3 semanas para se adaptar.&lt;/p&gt;
&lt;p&gt;Isso é revisão, não redação. O ponto forte do Greptile é o contexto de grafo completo do repo sobre a mudança que já pousou em um PR, seguido de um loop fechado que envia o achado para Claude Code, Codex, Conductor, Cursor ou Devin. O ponto forte do Maguyva é o mapa ranqueado que o agente consultou antes de essa mudança ser escrita. Use os dois. Não peça a nenhum dos dois para fazer o trabalho do outro.&lt;/p&gt;
&lt;p&gt;Uma integração de produto de primeira parte Maguyva–Greptile não é declarada. Você não precisa de uma. O Maguyva fala com o agente via MCP. O Greptile fala com o GitHub ou GitLab pelo app deles. Eles se encontram no pull request. Sem script de cola, sem cron que canalize uma ferramenta para a outra. A dupla dispensa bash porque cada produto já ocupa a superfície que lhe pertence.&lt;/p&gt;
&lt;h2 id=&quot;o-que-isso-não-é&quot;&gt;O que isso não é&lt;/h2&gt;
&lt;p&gt;Isso não é uma demolição do Greptile. Não é uma página “troque de revisor”. O Greptile lançou no Hacker News em 5 de março de 2024 como empresa da Y Combinator W24, e aquele tópico é como muita gente conheceu o produto pela primeira vez. Se foi assim que você os encontrou, fique com eles. Esta página é a metade da frente que falta nesse loop: ancorar o agente para que o PR que o Greptile vê já esteja mirando nos arquivos certos.&lt;/p&gt;
&lt;p&gt;Os materiais de marketing do Greptile lideram com afirmações de velocidade de revisão e captura de bugs. Trate-as como afirmações do próprio Greptile, não como números verificados independentemente. Este rascunho não as repete como fatos.&lt;/p&gt;
&lt;p&gt;A cobertura de linguagens é o mesmo tipo de honestidade. O Greptile enquadra o suporte como cobertura de todas as linguagens de programação em vez de uma lista enumerada; um número preciso não é informado. O Maguyva publica mais de 279 linguagens e tecnologias baseadas em texto, com uma divisão técnica (AST apoiado em parser versus só texto) no site quando a pergunta é técnica. São produtos diferentes fazendo afirmações diferentes. Não os misture.&lt;/p&gt;
&lt;p&gt;Os preços do Greptile não são informados nas notas que este rascunho pode usar. Planos pagos existem; veja a página de preços deles. O Maguyva cobra por workspace, não por assento. Os planos começam grátis. A &lt;a href=&quot;https://maguyva.ai/pt-br/pricing&quot;&gt;página de preços&lt;/a&gt; lista os níveis publicados se você precisar dos números de workspace.&lt;/p&gt;
&lt;h2 id=&quot;fluxo-de-trabalho&quot;&gt;Fluxo de trabalho&lt;/h2&gt;
&lt;p&gt;Três etapas nomeadas. Execute-as nessa ordem. Não pule nenhuma na primeira vez que tentar a dupla.&lt;/p&gt;
&lt;h3 id=&quot;1-contexto-do-maguyva&quot;&gt;1. Contexto do Maguyva&lt;/h3&gt;
&lt;p&gt;Indexe um repositório que você já conhece. Conecte o cliente MCP em que você já escreve — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, ou outro cliente compatível com MCP. O Maguyva tem guias de configuração para 24 clientes MCP documentados e pode se conectar a outros clientes que suportem a configuração MCP padrão.&lt;/p&gt;
&lt;p&gt;Faça uma pergunta que você consiga avaliar antes de qualquer um escrever uma linha. “Onde a expiração de sessão é tratada, e o que a chama?” é um primeiro movimento melhor que “conserta a autenticação”. Exija citações. Abra os resultados &lt;code&gt;file.ext:line&lt;/code&gt;. Siga o símbolo. Confirme a dependência que você está prestes a tocar.&lt;/p&gt;
&lt;p&gt;O Maguyva expõe 11 ferramentas MCP voltadas ao cliente em busca, símbolos, análise de dependências, recuperação de arquivos, contexto de repositório e workflows utilitários determinísticos. Quatro modos de recuperação são fundidos em resultados ranqueados; &lt;code&gt;find_symbol&lt;/code&gt; é uma ferramenta separada quando você já conhece o nome. Os &lt;a href=&quot;https://maguyva.ai/pt-br/docs&quot;&gt;docs&lt;/a&gt; descrevem o caminho mais curto: começar grátis, indexar um repo que você já conhece, conectar o cliente, depois fazer uma pergunta que você consiga verificar.&lt;/p&gt;
&lt;p&gt;Snapshots têm carimbo de tempo, então o agente consegue saber qual versão da árvore está lendo. O limite honesto é o trabalho local não sincronizado. Se a edição só existe em uma árvore de trabalho e não foi enviada, o mapa hospedado ainda não a contém. Arquivos de instrução (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) continuam tendo seu lugar aqui, para convenções e o que não deve ser tocado. Não são um mapa vivo. Use-os para comportamento. Use o Maguyva para fatos.&lt;/p&gt;
&lt;p&gt;Não deixe o agente abrir um PR antes que as citações sobrevivam ao contato com o repo. Essa barreira é todo o sentido desta etapa.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-do-agente&quot;&gt;2. PR do agente&lt;/h3&gt;
&lt;p&gt;O mesmo agente agora escreve a mudança no cliente pelo qual você já paga. O Maguyva não é um editor nem um revisor. O agente continua produzindo o diff. Você continua abrindo o pull request no GitHub ou GitLab do jeito que já faz.&lt;/p&gt;
&lt;p&gt;O que deveria ser diferente é o primeiro arquivo. O PR deveria nomear o handler que realmente implementa o comportamento, o chamador que vai quebrar, e o teste que vai falhar se a mudança estiver errada. Se a etapa 1 foi pulada, a etapa 3 vai gastar seus comentários em uma mudança que pousou no pacote errado. O Greptile ainda consegue encontrar problemas sistêmicos. Ele não deveria também ter que se recuperar de um caminho alucinado.&lt;/p&gt;
&lt;p&gt;Mantenha o PR restrito. Um primeiro arquivo fundamentado não é licença para reescrever o módulo. A dupla complementar funciona quando o agente fez um trabalho com um mapa, e então pediu a um revisor que fizesse outro trabalho em um diff delimitado.&lt;/p&gt;
&lt;h3 id=&quot;3-revisão-do-greptile&quot;&gt;3. Revisão do Greptile&lt;/h3&gt;
&lt;p&gt;O Greptile já está conectado ao repositório pelo app do GitHub ou GitLab. No novo pull request, ele analisa a mudança usando o grafo completo do repo que construiu e publica achados como comentários com correções sugeridas. Os próprios materiais deles colocam essa passagem em cerca de três minutos.&lt;/p&gt;
&lt;p&gt;Leia os comentários como você leria um colega de equipe cuidadoso: abra o local citado, decida se o achado é real, depois aja. Onde o Greptile oferece “Fix with your Agent”, ele envia o problema — caminhos de arquivo, números de linha, código sugerido — para Claude Code, Codex, Conductor, Cursor ou Devin. “Fix All” envia todos os problemas da revisão de uma vez. Eles também entregam um MCP do Greptile e um plugin do Claude Code para essa transferência. O Maguyva não está nessa lista nomeada de destinos; essa ausência não é um problema. O Maguyva já fez seu trabalho na etapa 1. O agente de código que escreveu o PR é quem deveria receber o payload de correção.&lt;/p&gt;
&lt;p&gt;Espere ruído nas primeiras 2 a 3 semanas enquanto o sistema de aprendizado do Greptile se adapta aos comentários que sua equipe realmente deixa. Esse é o cronograma declarado deles, não um defeito na dupla. A revisão humana continua no loop. O Greptile é a primeira passagem automatizada, não o botão de merge.&lt;/p&gt;
&lt;p&gt;Se um comentário do Greptile aponta para um arquivo que o agente nunca consultou na etapa 1, esse é um sinal útil. Ou o mapa perdeu um chamador, ou o agente pulou uma citação. Corrija o rascunho contra o comentário. Não desative o revisor.&lt;/p&gt;
&lt;h2 id=&quot;como-manter-o-complemento-honesto&quot;&gt;Como manter o complemento honesto&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva primeiro, sempre. Uma revisão de um PR de arquivo errado ainda é uma revisão do arquivo errado.&lt;/li&gt;
&lt;li&gt;Greptile depois, sempre. Um rascunho bem citado ainda precisa de uma leitura do diff em escala de sistema inteiro.&lt;/li&gt;
&lt;li&gt;Não peça ao Maguyva para postar comentários de PR. Ele não faz isso.&lt;/li&gt;
&lt;li&gt;Não peça ao Greptile para ser a primeira camada de recuperação do agente enquanto ele ainda está escolhendo um caminho. Esse não é o trabalho para o qual o app deles no GitHub ou GitLab foi construído.&lt;/li&gt;
&lt;li&gt;Não invente um pipeline bash que “sincroniza” os dois. O PR é a interface.&lt;/li&gt;
&lt;li&gt;Verifique os dois lados de forma independente. Indexe um repo que você já conhece. Faça uma pergunta que você consiga verificar. Depois abra um PR pequeno e leia o que o Greptile realmente comenta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O loop é comum assim que você o nomeia. Primeiro o mapa. Depois o PR do agente. Depois a revisão. Cada produto fica do lado do pull request em que é bom.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Dar a um agente de IA o contexto de um repositório grande sem indexador local</title><link>https://maguyva.ai/pt-br/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/large-repo-context-without-a-local-indexer</guid><description>Como dar a um agente de código um mapa consultável de um repositório grande a partir da nuvem, sem rodar um indexador local no seu notebook.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Um repositório grande não cabe em uma janela de contexto, e se você já apontou um indexador de notebook para um monorepo de verdade, sabe que ali também não cabe confortavelmente — a RAM dispara, o primeiro índice demora uma hora, e seu agente ainda começa a próxima sessão adivinhando quais arquivos importam.&lt;/p&gt;
&lt;p&gt;A resposta usual é rodar um indexador ao lado do editor, e para um repo que cabe confortavelmente em uma única máquina, é uma boa resposta. Se o seu monorepo já indexa rápido no Cursor e esse é o único lugar onde você precisa do mapa, este texto não tem nada a acrescentar — pule-o.&lt;/p&gt;
&lt;p&gt;Este texto trata do outro caso — quando um agente precisa de um mapa consultável de um repo grande, e você não quer rodar um indexador local para consegui-lo.&lt;/p&gt;
&lt;h2 id=&quot;quando-um-indexador-local-é-a-ferramenta-errada&quot;&gt;Quando um indexador local é a ferramenta errada&lt;/h2&gt;
&lt;p&gt;Um índice local assume que o código vive na máquina que o consulta, e na escala real de um monorepo essa suposição fica tensa até dentro de um único editor. O repo é simplesmente maior do que você quer manter aquecido em um notebook: você trabalha em um pacote enquanto o raio de impacto vive três diretórios adiante, e um primeiro índice a frio de uma árvore de dois milhões de linhas não é algo que você queira encarar duas vezes — nem na sua máquina, nem em um runner de CI que nunca clonou a árvore antes. Ou um colega de equipe deveria conseguir consultar o mesmo mapa que você, sem esperar a própria máquina se arrastar pelo mesmo índice.&lt;/p&gt;
&lt;p&gt;Nada disso é motivo para jogar fora um bom indexador de editor. É motivo para também ter um mapa hospedado que qualquer um dos seus agentes possa consultar via MCP.&lt;/p&gt;
&lt;p&gt;E o problema de escala vai além de “arquivos demais para colar”. Em uma árvore grande, a pergunta interessante quase nunca é “me mostra este arquivo” — é qual arquivo, qual símbolo, quais chamadores, quais testes. Um agente que começa listando &lt;code&gt;src/&lt;/code&gt; e lendo os três primeiros resultados vai alegremente perder o handler em &lt;code&gt;apps/api&lt;/code&gt; e o cliente gerado em &lt;code&gt;packages/sdk&lt;/code&gt;. O que você precisa é de recuperação construída a partir da árvore inteira, depois ranqueada, depois citada.&lt;/p&gt;
&lt;h2 id=&quot;o-que-contexto-de-um-repo-grande-realmente-significa&quot;&gt;O que “contexto de um repo grande” realmente significa&lt;/h2&gt;
&lt;p&gt;Despejar arquivos no prompt não é contexto — é uma cópia menor e pior da árvore. O que seu agente realmente precisa é fazer perguntas e receber respostas citadas de volta: onde esse símbolo é definido e quem o chama, o que depende do módulo que estou prestes a mudar, qual arquivo de teste cobre esse comportamento, e como a árvore se parece &lt;em&gt;agora&lt;/em&gt;, não no trimestre passado.&lt;/p&gt;
&lt;p&gt;Essas respostas têm que vir de um índice construído a partir do seu repo, e não da memória do modelo sobre repos de outras pessoas, e o índice tem que viver em algum lugar diferente da janela de contexto do agente. Para esse problema, ele também deveria viver em algum lugar diferente do seu notebook.&lt;/p&gt;
&lt;p&gt;Mais uma coisa que arquivos de instrução não podem fazer por você: &lt;code&gt;CLAUDE.md&lt;/code&gt; e &lt;code&gt;AGENTS.md&lt;/code&gt; são o lugar certo para convenções e comportamento, mas não são um mapa vivo, ranqueado e consultável de uma árvore de dois milhões de linhas. Use regras para comportamento; use inteligência de repositório para fatos.&lt;/p&gt;
&lt;h2 id=&quot;construir-o-mapa-na-nuvem-consultá-lo-de-qualquer-cliente&quot;&gt;Construir o mapa na nuvem, consultá-lo de qualquer cliente&lt;/h2&gt;
&lt;p&gt;O Maguyva é uma camada de contexto de código MCP remota. Você conecta o GitHub, escolhe seus repositórios, e vai embora enquanto pipelines na nuvem analisam a árvore, constroem os símbolos e as arestas do grafo, e mantêm um mapa ranqueado — sem indexador local, nunca.&lt;/p&gt;
&lt;p&gt;Quando você envia código, arquivos alterados são analisados incrementalmente, e as camadas de grafo e ranqueamento se reconstroem em uma programação: diária no plano gratuito, a cada hora nos pagos. Cada snapshot tem carimbo de tempo, então seu agente consegue saber qual versão da árvore está lendo. O limite honesto aqui é o trabalho local não sincronizado — uma edição que só existe na sua árvore de trabalho, nunca enviada, ainda não está no mapa hospedado.&lt;/p&gt;
&lt;p&gt;Aí você conecta o cliente que já usa adicionando uma chave de API à configuração MCP dele. Há guias de configuração para 24 clientes MCP documentados, e qualquer outro cliente compatível com MCP que suporte configuração padrão também pode se conectar. Se o Cursor é onde você mora, a &lt;a href=&quot;https://maguyva.ai/pt-br/for-cursor&quot;&gt;página do Cursor&lt;/a&gt; percorre esse caminho; o mesmo servidor atende Claude Code, VS Code, Windsurf, Codex CLI e o resto.&lt;/p&gt;
&lt;p&gt;Você não troca de editor. Você dá ao seu agente uma superfície de ferramentas — 11 ferramentas MCP em busca, símbolos, análise de dependências, recuperação de arquivos e contexto de repositório — com cobertura em mais de 279 linguagens e tecnologias baseadas em texto, o que importa mais do que se pensa em um monorepo que deixou de ser uma única linguagem há anos.&lt;/p&gt;
&lt;p&gt;As respostas voltam fundamentadas, como caminhos de arquivo com números de linha. Recuperação semântica, estrutural, por grafo e de texto são fundidas em resultados ranqueados, de modo que uma pergunta como “o que depende de parseConfig” não te dá nem um despejo de grep nem um único trecho semântico, mas o punhado de lugares que realmente importam.&lt;/p&gt;
&lt;h2 id=&quot;um-passo-a-passo-concreto&quot;&gt;Um passo a passo concreto&lt;/h2&gt;
&lt;p&gt;Não comece indexando a empresa inteira. Aqui está o caminho que funciona:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Escolha um repositório que você já conhece bem — um pacote que você consiga avaliar à mão vale mais que a maior árvore que você tem.&lt;/li&gt;
&lt;li&gt;Comece grátis: 3 repos, 50 mil linhas indexadas, todas as 11 ferramentas, sem cota mensal de consultas. Se seu repo representativo for maior que isso, a &lt;a href=&quot;https://maguyva.ai/pt-br/pricing&quot;&gt;página de preços&lt;/a&gt; lista os níveis de workspace ($0, $19, $49, $149) por pegada indexada — não por número de assentos.&lt;/li&gt;
&lt;li&gt;Conecte o GitHub e espere o primeiro índice terminar. Você não está compilando nada localmente.&lt;/li&gt;
&lt;li&gt;Conecte o cliente MCP — algumas linhas de configuração. O Maguyva é um servidor MCP remoto, então não há plugins, nem extensões, nem um segundo editor para adotar.&lt;/li&gt;
&lt;li&gt;Faça uma pergunta que você consiga verificar. “O que depende de parseConfig?” ou “Onde a expiração de sessão de login é tratada?” Depois abra os resultados citados &lt;code&gt;file.ext:line&lt;/code&gt; e confira contra a árvore na sua frente.&lt;/li&gt;
&lt;li&gt;Só depois que as citações sobreviverem a esse contato você deixa o agente editar.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se o primeiro repo encaixar bem e sua árvore for grande, aumente o workspace para acompanhar suas linhas indexadas e a cadência de reconstrução. Humanos e agentes compartilham a mesma contagem de usuários — o Maguyva cobra por workspace, não por assento — então adicionar um terceiro agente ao loop não custa nada.&lt;/p&gt;
&lt;p&gt;O teste de ativação é o mesmo que os &lt;a href=&quot;https://maguyva.ai/pt-br/docs&quot;&gt;docs&lt;/a&gt; recomendam para qualquer primeira execução: indexar um repo que você já conhece, fazer uma pergunta que você consiga verificar. Um repo grande não muda o teste; só torna um primeiro arquivo errado mais caro.&lt;/p&gt;
&lt;h2 id=&quot;o-que-observar-depois-de-conectado&quot;&gt;O que observar depois de conectado&lt;/h2&gt;
&lt;p&gt;Fique de olho em três coisas. Atualidade: planos pagos reconstroem a cada hora, os gratuitos diariamente, e trabalho local não enviado não estará no mapa — essa é a troca que você aceita. Escopo: indexe um conjunto representativo de repos, não cada fork arquivado; o nível gratuito é deliberadamente dimensionado para descobrir se as respostas valem a pena manter. E verificação: um mapa de repo grande que não consegue citar caminhos e números de linha é só um motor de adivinhação mais lento, então faça seu agente mostrar o lugar antes de entregar o patch.&lt;/p&gt;
&lt;p&gt;Depois rode o mesmo teste que rodaria em um repo pequeno. Indexe um repo que você já conhece. Faça uma pergunta que você consiga verificar. Se o mapa for real, seu agente para de começar de uma árvore fria.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Por que seu agente de código com IA alucina caminhos de arquivo</title><link>https://maguyva.ai/pt-br/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Agentes de código com IA inventam caminhos de arquivo quando não têm um mapa real do repo. Aqui está o porquê, e como a fundamentação leva a menos edições alucinadas.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;O sinal revelador não é um corpo de função errado. É uma edição confiante em um arquivo que não existe, ou em um arquivo que existe mas não é o que implementa o comportamento.&lt;/p&gt;
&lt;p&gt;Você pediu uma correção de expiração de sessão. O agente abriu &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Esse caminho é plausível. Também está errado. O handler de verdade vive em &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, renomeado há duas refatorações. O agente não mentiu para você. Ele completou uma string em formato de caminho a partir de priors de treinamento mais o que já estivesse na janela de contexto.&lt;/p&gt;
&lt;p&gt;Esse é o padrão de falha comum em um repositório real. O modelo sabe escrever código. O erro está em escolher o lugar errado para escrevê-lo.&lt;/p&gt;
&lt;h2 id=&quot;por-que-agentes-inventam-caminhos&quot;&gt;Por que agentes inventam caminhos&lt;/h2&gt;
&lt;p&gt;Um agente de código é um modelo de previsão do próximo token com ferramentas. Quando você diz “conserta a expiração de sessão”, ele precisa nomear um arquivo antes de conseguir ler ou aplicar um patch em qualquer coisa. Se ainda não tem um mapa fundamentado, ele constrói um caminho a partir de:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Convenções de nomenclatura que já viu em outros repositórios. &lt;code&gt;src/auth/session.ts&lt;/code&gt; é um formato frequente.&lt;/li&gt;
&lt;li&gt;Arquivos que já estão na conversa, que talvez sejam os que você colou semana passada, não os que importam agora.&lt;/li&gt;
&lt;li&gt;Listagens de diretório que ele acabou executando, incompletas em uma árvore grande.&lt;/li&gt;
&lt;li&gt;Arquivos de instrução. &lt;code&gt;CLAUDE.md&lt;/code&gt; e &lt;code&gt;AGENTS.md&lt;/code&gt; dizem ao agente como se comportar. Não são um índice vivo de símbolos, chamadores ou caminhos atuais.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nenhuma dessas fontes é um mapa deste repo, hoje. O modelo preenche a lacuna do jeito que preenche qualquer lacuna: com uma continuação de alta probabilidade. Essa continuação muitas vezes parece um caminho real. Às vezes o arquivo existe e fica ao lado do certo. Às vezes existiu em uma branch que foi mesclada mês passado. Às vezes nunca existiu.&lt;/p&gt;
&lt;p&gt;O grep não te salva aqui se o agente nunca busca a string certa. O agente chutou um caminho, depois leu o que aquele caminho retornou, depois editou. O primeiro passo errado foi o caminho, não o patch.&lt;/p&gt;
&lt;p&gt;Ler arquivos também não é a mesma coisa que encontrar os certos. Claude Code, Cursor, Codex e ferramentas parecidas conseguem abrir o que você apontar para eles. A pergunta é se conseguem encontrar de forma confiável os arquivos certos, os símbolos importantes, as dependências, os testes e o raio de impacto antes de editar. Acesso a arquivo sem um mapa ainda começa com um chute.&lt;/p&gt;
&lt;h2 id=&quot;a-edição-do-arquivo-errado-é-um-problema-de-recuperação&quot;&gt;A edição do arquivo errado é um problema de recuperação&lt;/h2&gt;
&lt;p&gt;Trate o caminho inventado como um erro de recuperação, não como uma falha de caráter.&lt;/p&gt;
&lt;p&gt;Se o agente tivesse que retornar &lt;code&gt;path/file.ext:line&lt;/code&gt; antes de ter permissão para editar, duas coisas aconteceriam. Primeiro, você conseguiria abrir a citação e rejeitar o trabalho em dez segundos. Segundo, o agente teria que consultar algo que realmente conhece a árvore.&lt;/p&gt;
&lt;p&gt;Esse é o trabalho de uma camada de contexto de código. Busca semântica sozinha não é suficiente. Um trecho que “soa como expiração de sessão” ainda pode pousar em um pacote obsoleto. Você também precisa de texto exato quando conhece a string, busca de símbolos quando conhece o nome, busca estrutural quando conhece a forma, e um grafo de dependências quando precisa de chamadores e raio de impacto.&lt;/p&gt;
&lt;p&gt;O Maguyva é essa camada para agentes de código compatíveis com MCP. Não é um editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf e outros clientes MCP continuam onde estão. O agente consulta um mapa ranqueado antes de tocar em uma linha.&lt;/p&gt;
&lt;p&gt;A afirmação é modesta de propósito: menos edições alucinadas. O Maguyva não tira do modelo a capacidade de chutar. Ele muda o primeiro passo padrão de “inventar um caminho plausível” para “pedir locais ranqueados e citados”.&lt;/p&gt;
&lt;h2 id=&quot;como-é-uma-resposta-fundamentada&quot;&gt;Como é uma resposta fundamentada&lt;/h2&gt;
&lt;p&gt;Uma resposta útil para “onde a expiração de sessão é tratada” não é um parágrafo. É uma lista curta de locais:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - o handler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - o chamador&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - o teste que vai falhar se a mudança estiver errada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você pode abrir essas linhas. Se estiverem erradas, você para. Se estiverem certas, o agente pode editar. A verificação é o ponto, não um slogan.&lt;/p&gt;
&lt;p&gt;O Maguyva expõe 11 ferramentas MCP voltadas ao cliente em busca, símbolos, análise de dependências, recuperação de arquivos, contexto de repositório e workflows utilitários determinísticos. Quatro modos de recuperação (semântico, estrutural, grafo/dependência e texto) são fundidos em resultados ranqueados; busca de símbolos é uma ferramenta MCP separada (&lt;code&gt;find_symbol&lt;/code&gt;). Respostas fundamentadas voltam com caminhos de arquivo e números de linha, então você pode avaliá-las contra a árvore na sua frente.&lt;/p&gt;
&lt;p&gt;Os &lt;a href=&quot;https://maguyva.ai/pt-br/docs&quot;&gt;docs&lt;/a&gt; descrevem o caminho mais curto: começar grátis, indexar um repo que você já conhece, conectar o cliente, depois fazer uma pergunta que você consiga verificar.&lt;/p&gt;
&lt;h2 id=&quot;um-loop-que-muda-a-primeira-edição&quot;&gt;Um loop que muda a primeira edição&lt;/h2&gt;
&lt;p&gt;Você não precisa de uma nova religião de fluxo de trabalho. Precisa de um passo extra antes da primeira escrita.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Faça uma pergunta que você já consiga avaliar. “Que código trata login e expiração de sessão?” é melhor que “conserta a autenticação”.&lt;/li&gt;
&lt;li&gt;Exija citações. Caminho de arquivo e número de linha, não um resumo de “o módulo de autenticação”.&lt;/li&gt;
&lt;li&gt;Abra os arquivos citados. Siga o símbolo. Confirme a dependência que você está prestes a tocar.&lt;/li&gt;
&lt;li&gt;Só então deixe o agente aplicar o patch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se o passo 2 não retorna nada útil, o agente não tem permissão para improvisar um caminho. Ele busca de novo, ou você aponta o caminho. Essa única barreira é o que produz menos edições alucinadas. O modelo é o mesmo modelo. O mapa é o que mudou.&lt;/p&gt;
&lt;p&gt;Arquivos de instrução continuam importando. Mantenha-os. Use-os para convenções, regras de revisão e o que não deve ser tocado. Não peça a eles para serem o índice. Um &lt;code&gt;CLAUDE.md&lt;/code&gt; que lista três diretórios importantes vai ficar desatualizado na semana seguinte a uma divisão de pacote. Um mapa consultável se atualiza quando o repo se atualiza.&lt;/p&gt;
&lt;p&gt;Uma falha relacionada é o arquivo quase-certo: o agente abre &lt;code&gt;auth.ts&lt;/code&gt; quando o comportamento vive em &lt;code&gt;auth-client.ts&lt;/code&gt;, ou aplica patch em um arquivo gerado em vez da fonte, ou edita a cópia em &lt;code&gt;packages/legacy&lt;/code&gt; porque o nome bateu. Citações não tornam esses erros impossíveis. Elas os tornam visíveis antes de o diff pousar.&lt;/p&gt;
&lt;h2 id=&quot;o-que-um-mapa-não-vai-resolver-para-você&quot;&gt;O que um mapa não vai resolver para você&lt;/h2&gt;
&lt;p&gt;Seja realista sobre o que você está ganhando. Um mapa fundamentado não vai tornar toda edição correta — seu agente ainda pode escrever um patch ruim exatamente no arquivo certo. Se sua base de código se apoia em despacho dinâmico, reflexão ou monkey-patching, algumas buscas de símbolos vão voltar mais pobres do que você gostaria, porque é isso que a indireção em tempo de execução faz com qualquer índice estático. E se você está esperando uma porcentagem — “caminhos alucinados reduzidos em X%” — você não vai encontrar isso aqui, porque ninguém consegue medir essa cifra honestamente para o seu repo além de você mesmo.&lt;/p&gt;
&lt;p&gt;O que você pode esperar é mais estreito e mais útil: o agente para de abrir suas edições com um caminho chutado. Esse primeiro passo fica fundamentado em um mapa real, e é daí que vêm as menos edições alucinadas. Tudo depois da citação — ler o diff, julgar o patch — continua sendo seu trabalho, do jeito que sempre foi.&lt;/p&gt;
&lt;p&gt;O teste quase não custa nada: indexe um repo que você já conhece e faça uma pergunta que você consiga verificar. Comece com um caminho que já te queimou antes. Se as citações estiverem erradas, você vai ver na hora. Se estiverem certas, a próxima edição do seu agente tem um lugar melhor para pousar.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Por Que Atualizamos a Busca de Código para o voyage-4-large</title><link>https://maguyva.ai/pt-br/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/upgrading-code-search-to-voyage-4-large</guid><description>Migramos nossos embeddings de código para o voyage-4-large — atualmente no topo do ranking público RTEB de retrieval de código. A versão honesta: o trade-off que fazemos, o que realmente indexamos, e por que pagamos por embeddings premium.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números de benchmark neste post refletem os rankings do RTEB no momento da publicação (junho de 2026). Rankings mudam; trate as classificações como um retrato de um momento, não um fato permanente.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A busca semântica só é tão boa quanto os embeddings por baixo dela.&lt;/p&gt;
&lt;p&gt;Quando um agente pergunta ao Maguyva “onde tratamos retries”, ele não está fazendo grep pela palavra “retry”. Ele está pedindo o &lt;em&gt;significado&lt;/em&gt; — o loop de backoff, o circuit breaker, a coisa que envolve uma chamada instável. Essa pergunta é respondida por um modelo vetorial que transforma código em um ponto no espaço e encontra os vizinhos. Escolha um modelo melhor e cada consulta semântica no produto fica silenciosamente mais precisa.&lt;/p&gt;
&lt;p&gt;Então mudamos o nosso. A partir de junho de 2026, os embeddings de código do Maguyva rodam em &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, substituindo &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;o-benchmark&quot;&gt;O Benchmark&lt;/h2&gt;
&lt;p&gt;Não tomamos essa decisão com base em achismo. O &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; público ranqueia modelos de embedding em tarefas reais de retrieval, e no seu ranking de &lt;strong&gt;Código&lt;/strong&gt; o &lt;code&gt;voyage-4-large&lt;/code&gt; está em &lt;strong&gt;1º lugar geral (90,86)&lt;/strong&gt; — à frente do &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) e, notavelmente, à frente do modelo que já usávamos, o &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, 3º lugar).&lt;/p&gt;
&lt;p&gt;É uma diferença absoluta pequena. Mas é uma diferença na direção certa, em um benchmark público, na tarefa exata com que nos importamos: recuperar código por significado.&lt;/p&gt;
&lt;h2 id=&quot;o-trade-off-que-aceitamos-quantização-binária&quot;&gt;O Trade-off Que Aceitamos: Quantização Binária&lt;/h2&gt;
&lt;p&gt;Aqui está a parte que a maioria dos posts de “atualizamos nosso modelo” deixa de fora.&lt;/p&gt;
&lt;p&gt;O Maguyva não armazena vetores de precisão completa. Armazenamos embeddings &lt;strong&gt;quantizados em binário&lt;/strong&gt;: cada vetor de 2048 dimensões colapsa em uma assinatura de 2048 bits — &lt;strong&gt;256 bytes por vetor&lt;/strong&gt;. Essas assinaturas são buscadas com distância de Hamming, indexadas e particionadas por tenant.&lt;/p&gt;
&lt;p&gt;É um trade-off deliberado. A quantização binária abre mão de um pouco de precisão de retrieval em troca de um armazenamento drasticamente menor e matemática de distância rápida e barata, sem precisar operar um banco de dados vetorial separado. Para um produto que indexa repositórios inteiros por workspace, essa economia importa mais do que espremer a última fração de um ponto de benchmark.&lt;/p&gt;
&lt;p&gt;O &lt;code&gt;voyage-4-large&lt;/code&gt; se encaixa nesse design sem forçar uma migração da camada de armazenamento: ele produz saída de 2048 dimensões, igual ao &lt;code&gt;voyage-code-3&lt;/code&gt;, então nossas colunas &lt;code&gt;bit(2048)&lt;/code&gt; e o caminho de busca por Hamming não mudaram. O modelo melhorou; o schema ficou no lugar.&lt;/p&gt;
&lt;h2 id=&quot;código-foi-só-o-começo&quot;&gt;Código Foi Só o Começo&lt;/h2&gt;
&lt;p&gt;O Maguyva é uma ferramenta de inteligência de código. Mas também somos o cliente zero, e apontamos ele para outra coisa: o markdown que vive nos nossos repositórios ao lado do código. Registros de decisão de arquitetura, runbooks, contratos, documentos financeiros e de política — tudo isso versionado no Git, tudo isso por trás do mesmo servidor MCP, um índice semântico sobre os &lt;em&gt;documentos&lt;/em&gt;, não apenas sobre o código-fonte.&lt;/p&gt;
&lt;p&gt;É exatamente por isso que a amplitude do voyage-4-large importa. Na mesma família de rankings do RTEB, ele é &lt;strong&gt;1º lugar em finanças, 1º lugar em saúde, e 1º lugar em retrieval de texto geral&lt;/strong&gt; — à frente do Gemini Embedding do Google, do Embed v4 da Cohere, e do text-embedding-3-large da OpenAI. (A Voyage é cocriadora do RTEB, então lemos isso como um sinal público forte, mas não como um árbitro perfeitamente neutro — ainda assim, é comparado diretamente com todos os principais modelos comerciais, em conjuntos de dados privados de validação.) O mesmo índice que encontra a função certa para um agente encontra a cláusula certa em um contrato ou a linha certa em uma política — e nesses domínios, o voyage-4-large não é um meio-termo, é o líder.&lt;/p&gt;
&lt;h2 id=&quot;por-que-pagamos-por-embeddings-premium&quot;&gt;Por Que Pagamos por Embeddings Premium&lt;/h2&gt;
&lt;p&gt;Existe uma forma mais barata de fazer busca, e boa parte dela é gratuita. A busca lexical — BM25 e afins — busca correspondências com palavras-chave, roda localmente e não custa nada. Modelos de embedding de código aberto como BGE, Nomic e embeddinggemma oferecem um retrieval semântico genuinamente &lt;em&gt;decente&lt;/em&gt;, e você pode hospedá-los por conta própria pelo preço de uma GPU. O Maguyva também usa o lado gratuito: toda consulta funde busca textual, de AST, de grafo e semântica. Onde não economizamos é na camada semântica.&lt;/p&gt;
&lt;p&gt;Pagamos por token por embeddings premium — &lt;code&gt;voyage-4-large&lt;/code&gt; — em vez de hospedar um modelo gratuito por conta própria, por dois motivos. Primeiro, a busca por palavra-chave sozinha não consegue responder “onde tratamos retries” quando o código diz &lt;code&gt;backoff&lt;/code&gt; e &lt;code&gt;circuit breaker&lt;/code&gt; e nunca diz a palavra “retry” — captar o significado é a razão de ser do embedding, e nos domínios que atendemos, os modelos abertos ficam atrás dos premium: alguns pontos atrás em texto geral, e ainda mais atrás em nichos como código, contratos e finanças. Segundo, na nossa experiência, a qualidade do retrieval molda a resposta final mais do que o modelo do outro lado — um agente forte recebendo o contexto errado ainda responde errado, e nunca vê o documento que nunca lhe foi dado.&lt;/p&gt;
&lt;p&gt;Então embeddings premium são uma conta por token que escala com cada repositório e documento que indexamos — e pagamos essa conta de propósito. Pelo resultado que os nossos usuários obtêm, a função certa ou a cláusula certa, achamos que esse trade-off vale a pena.&lt;/p&gt;
&lt;h2 id=&quot;a-parte-honesta&quot;&gt;A Parte Honesta&lt;/h2&gt;
&lt;p&gt;A própria documentação da Voyage ainda rotula o &lt;code&gt;voyage-code-3&lt;/code&gt; como o modelo otimizado para código. Então por que mudar?&lt;/p&gt;
&lt;p&gt;Porque lemos o benchmark público, não apenas a tabela de modelos do fornecedor, e o benchmark colocou o &lt;code&gt;voyage-4-large&lt;/code&gt; no topo para retrieval de código. Essa foi uma decisão olhando para frente: pegar o modelo mais novo, geralmente mais forte, e validá-lo contra um ranking público nas tarefas que importam. Estamos confortáveis em fazer essa aposta porque a evidência é ampla — o voyage-4-large não vence só em código, ele também lidera em finanças, saúde e retrieval geral.&lt;/p&gt;
&lt;h2 id=&quot;a-base-discreta&quot;&gt;A Base Discreta&lt;/h2&gt;
&lt;p&gt;Toda ferramenta que expomos — busca semântica, coleta de contexto de tarefa, perguntas e respostas fundamentadas — desemboca no retrieval. Quando o retriever melhora, o agente do outro lado obtém evidências melhores, toma menos decisões equivocadas, e fundamenta suas respostas no código certo — ou na cláusula certa, ou na política certa. Um modelo de embedding mais preciso não é um recurso vistoso. É a base de todo o resto, e acabamos de aprimorá-la. Você não vai notar. Esse é o ponto.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Autoaperfeiçoamento Recursivo do Suporte a Linguagens: Aprimorando a Inteligência de Código em ~280 Linguagens</title><link>https://maguyva.ai/pt-br/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/autonomous-quality-loops-language-grind</guid><description>Damos suporte à inteligência de código para ~280 linguagens. Nenhum humano consegue auditar isso manualmente. Por isso construímos um loop de autoaperfeiçoamento recursivo do suporte a linguagens — verificação pontual, LLM como juiz, corrigir uma coisa, revalidar — e o rodamos com uma frota de agentes isolados até que a extração esteja realmente correta, não apenas verde.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (maio de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O Maguyva extrai símbolos, referências e um grafo de dependências a partir de código-fonte em aproximadamente 280 linguagens. Cada linguagem é um handler tree-sitter personalizado — queries, heurísticas, casos extremos — e cada handler pode estar sutilmente errado à sua própria maneira. Uma chamada de método emitida como uma leitura. Uma função atribuída ao escopo delimitador errado. Um relacionamento que simplesmente não existe.&lt;/p&gt;
&lt;p&gt;Você não pode auditar isso manualmente. Nenhuma equipe consegue ler a saída de extração em 280 gramáticas e identificar as arestas ruins. Então a pergunta interessante não é “a nossa extração está correta” — é “como você &lt;em&gt;descobre&lt;/em&gt; que ela está errada, nessa amplitude, sem um humano em cada loop”. Nossa resposta é o autoaperfeiçoamento recursivo do suporte a linguagens: um loop de qualidade guiado por agentes de linguagem, um LLM atuando como juiz, e uma regra que continuamos reaprendendo: verde não é o mesmo que correto.&lt;/p&gt;
&lt;h2 id=&quot;verde-não-é-correto&quot;&gt;Verde não é correto&lt;/h2&gt;
&lt;p&gt;Toda linguagem tem uma suíte de fixtures, e um controle de validação antes da publicação a pontua em cinco dimensões — acurácia, integridade estrutural, completude, qualidade e performance. Uma linguagem só fica &lt;strong&gt;VERDE&lt;/strong&gt; quando, em suas fixtures, a precisão é ≥ 0,95, o recall é ≥ 0,99 e o F1 é ≥ 0,97, com pelo menos 20 arestas esperadas para confiança estatística. Abaixo disso, é AMARELA ou VERMELHA, e não vai para produção.&lt;/p&gt;
&lt;p&gt;Esse controle é necessário, mas não suficiente. Fixtures validam contra fixtures &lt;em&gt;que nós escrevemos&lt;/em&gt;. Elas codificam os casos que já pensamos. Um handler pode ser impecável em suas fixtures e ainda assim estropiar um padrão que só aparece em código real — um padrão idiomático de macros, um método com restrições de tipos genéricos, um recurso de linguagem para o qual ninguém escreveu uma fixture. VERDE significa que as fixtures passam. Não significa que um repositório real seja extraído de forma limpa. Então o loop precisa deixar as fixtures para trás e olhar para o mundo real.&lt;/p&gt;
&lt;h2 id=&quot;o-loop-interno-verificação-pontual-julgamento-correção-prova&quot;&gt;O loop interno: verificação pontual, julgamento, correção, prova&lt;/h2&gt;
&lt;p&gt;O loop central roda uma linguagem por vez:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alguns detalhes fazem isso funcionar em vez de ficar andando em círculos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O juiz é o agente, não uma chamada de API.&lt;/strong&gt; Quando dizemos “LLM como juiz”, queremos dizer que o próprio agente de linguagem lê cada aresta amostrada em comparação com o código-fonte real e a classifica com uma rubrica fixa de cinco categorias: essa aresta está correta, é um falso positivo, é o relacionamento certo com o tipo errado, está anexada ao escopo errado, ou carrega metadados errados? Essa rubrica é o jogo inteiro — “taxa de erro de 23%” não significa nada até você saber se são defeitos reais ou o juiz contando errado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrija uma coisa, depois prove.&lt;/strong&gt; Cada iteração muda exatamente um ativo editável, depois roda novamente contra um harness fixo e mantém a mudança apenas se o F1 melhorar e a reclassificação parecer melhor. Se não melhorar, ela é revertida. Nada de lote de edições especulativas, nada de “deveria estar melhor”. Uma mudança conquista o seu lugar ou desaparece. E quando uma correção se mantém, ela é promovida para a suíte de fixtures — para que o bug que ela corrigiu nunca possa voltar silenciosamente. Essa etapa de promoção é o que torna o loop &lt;em&gt;recursivo&lt;/em&gt;, e não apenas repetitivo: cada passagem fortalece o oráculo usado como referência para a validação seguinte.&lt;/p&gt;
&lt;h2 id=&quot;a-lição-que-continuamos-reaprendendo-as-métricas-superestimam&quot;&gt;A lição que continuamos reaprendendo: as métricas superestimam&lt;/h2&gt;
&lt;p&gt;Eis a armadilha, e caímos direto nela. As métricas secundárias do corpus — com que frequência um alvo extraído não tem símbolo resolvível, quantos símbolos parecem “órfãos”, e assim por diante — superestimam problemas massivamente. Na maioria das vezes, são &lt;em&gt;artefatos de paradigma&lt;/em&gt;, não bugs.&lt;/p&gt;
&lt;p&gt;O exemplo mais claro: &lt;code&gt;llvm&lt;/code&gt; certa vez mostrou uma taxa de 73% de “origem sem símbolo” e foi rotulado como catastrófico. Investigamos. A acurácia real era de &lt;strong&gt;98,5%&lt;/strong&gt;. Os “símbolos ausentes” eram quase todos referências externas legítimas — chamadas para a biblioteca padrão, para frameworks, para código que vive fora do repositório. A métrica estava medindo uma propriedade da linguagem, não um defeito no handler. Linguagens como Zig, COBOL e Odin mostram taxas de “órfãos” de 65–70% e estão inteiramente corretas; COBOL não tinha erros reais.&lt;/p&gt;
&lt;p&gt;Se tivéssemos deixado esses números guiarem o trabalho, teríamos gastado semanas “corrigindo” handlers que já estavam certos e ignorando as linguagens com bugs reais e silenciosos. A conclusão é direta: as métricas agregadas são, na melhor das hipóteses, um sinal aproximado de triagem. &lt;strong&gt;O verdadeiro sinal de qualidade é a verificação pontual com classificação de arestas&lt;/strong&gt; — olhar para arestas reais em repositórios reais e julgá-las uma a uma. Dados acima da intuição, mas só depois que você sabe quais dados estão dizendo a verdade.&lt;/p&gt;
&lt;h2 id=&quot;o-loop-externo-uma-frota-não-uma-maratona&quot;&gt;O loop externo: uma frota, não uma maratona&lt;/h2&gt;
&lt;p&gt;Uma linguagem de cada vez levaria uma eternidade em 280 delas, então o loop interno é envolvido por um loop externo que roda muitas em paralelo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada agente trabalha em um worktree descartável, para que não pisem uns nos outros. O orquestrador integra as correções deles uma de cada vez, cada uma condicionada a uma verificação de regressão de manifesto completo: uma mudança que ajuda a sua própria linguagem, mas silenciosamente quebra três outras, não é integrada. A integração passa por um controle de validação e é confirmada antes de qualquer coisa ser enviada — o controle de regressão decide o que é &lt;em&gt;seguro&lt;/em&gt;, um humano ainda decide o que &lt;em&gt;vai para produção&lt;/em&gt;. Depois o pool gira para o próximo conjunto de linguagens e tudo roda de novo.&lt;/p&gt;
&lt;h2 id=&quot;o-que-ainda-é-imperfeito&quot;&gt;O que ainda é imperfeito&lt;/h2&gt;
&lt;p&gt;O juiz pode errar, e o erro tem uma direção: um agente rodando com contexto insuficiente &lt;em&gt;superestima&lt;/em&gt;. Em um lote, oito linguagens foram sinalizadas com 5–20% de erro; na inspeção, apenas uma dessas linguagens tinha um bug real — o resto eram erros do juiz por não captar a semântica própria da linguagem (uma linha de origem legitimamente emitindo várias arestas, vinculações de parâmetro modeladas como atribuições, linguagens com referência por identificador). É por isso que amostramos com duas seeds e fazemos verificação cruzada, e por que uma discordância entre o juiz e as fixtures é tratada como o sinal &lt;em&gt;mais&lt;/em&gt; interessante, não como um veredito definitivo — às vezes a fixture é o que está errado.&lt;/p&gt;
&lt;p&gt;Também somos honestos sobre a meta. O objetivo é zero erros reais, ponto final — mas “zero” é uma direção rumo à qual refinamos, linguagem por linguagem, não uma caixa que se marca. Sempre há outro repositório com outro padrão idiomático.&lt;/p&gt;
&lt;h2 id=&quot;conquistado-não-afirmado&quot;&gt;Conquistado, Não Afirmado&lt;/h2&gt;
&lt;p&gt;Tudo o que o Maguyva faz por um agente — encontrar um símbolo, rastrear uma dependência, responder a uma pergunta com código citado — depende de a extração por baixo estar certa. Em 280 linguagens, “certo” não pode ser afirmado; precisa ser continuamente &lt;em&gt;conquistado&lt;/em&gt; contra código real. O loop é como conquistamos isso: um ciclo autônomo de verificação pontual e correção que trata as próprias métricas com suspeita, prova cada mudança e transforma cada correção em uma guarda contra a próxima regressão. Não é glamouroso. É o trabalho que nos permite dizer “damos suporte à sua linguagem” e cumprir essa promessa. Verde é fácil. Correto é conquistado.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Busca com Fusão Multimodal: Escolhendo o Retriever Certo Para Cada Consulta</title><link>https://maguyva.ai/pt-br/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/multi-modal-fusion-search</guid><description>Uma consulta como &apos;onde parseConfig é definido&apos; quer um tipo de busca diferente de &apos;como funciona a autenticação&apos;. O Maguyva classifica a intenção, pondera quatro modalidades de retrieval de acordo, e funde os resultados com Reciprocal Rank Fusion ponderada.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Nota sobre o projeto histórico: este artigo de abril de 2026 descreve o projeto de roteamento daquela época, não o comportamento padrão atual. A correção de setembro abaixo trata apenas de uma afirmação sobre medição. Para conhecer o roteamento atual, as predefinições e os controles explícitos de modalidade, veja &lt;a href=&quot;https://maguyva.ai/pt-br/docs/how-it-works&quot;&gt;Como funciona&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Uma consulta de busca não é uma coisa só.&lt;/p&gt;
&lt;p&gt;“onde &lt;code&gt;parseConfig&lt;/code&gt; é definido” quer um símbolo exato — um local preciso, rápido. “como funciona a autenticação” quer significado — o conjunto espalhado de código relacionado que explica um conceito. “o que quebra se eu mudar esta função” quer o grafo de dependências. “encontre a string &lt;code&gt;ECONNREFUSED&lt;/code&gt;” quer uma correspondência literal, nada sofisticado.&lt;/p&gt;
&lt;p&gt;O grep é excelente para correspondências literais e útil para algumas caças a referências, mas não é um grafo de dependências e não entende significado. Embeddings cobrem o lado semântico, mas são a ferramenta errada para strings exatas e análise de impacto. A maioria das ferramentas de busca de código escolhe um único motor e faz toda consulta conviver com essa escolha. O Maguyva não escolhe. Ele descobre que tipo de pergunta você fez, e então combina quatro retrievers na proporção que essa pergunta merece.&lt;/p&gt;
&lt;h2 id=&quot;quatro-modalidades&quot;&gt;Quatro modalidades&lt;/h2&gt;
&lt;p&gt;Internamente, existem quatro formas independentes de encontrar código:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantic&lt;/strong&gt; — busca vetorial sobre embeddings binários da Voyage; encontra código por significado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — correspondência de trigramas; encontra literais, strings de erro, identificadores exatos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;structural&lt;/strong&gt; — queries de AST; encontra definições, assinaturas e construções da linguagem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graph&lt;/strong&gt; — o grafo de dependências; encontra chamadores, chamados e raio de impacto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada um é forte em uma classe diferente de pergunta. O truque é decidir o quanto confiar em cada um para a consulta que está na sua frente.&lt;/p&gt;
&lt;h2 id=&quot;classificação-de-intenção&quot;&gt;Classificação de intenção&lt;/h2&gt;
&lt;p&gt;Antes de qualquer retrieval rodar, um classificador leve classifica a consulta em uma de seis intenções, com uma pontuação de confiança. É deliberadamente barato — heurísticas ordenadas, a primeira correspondência vence — porque roda no caminho crítico e adiciona apenas um ou dois milissegundos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;começa com &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (confiança 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (quem chama, usos de, referências a) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (impacto, raio de impacto, o que depende de) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;uma &lt;code&gt;&quot;string&quot;&lt;/code&gt; entre aspas ou um token de erro como &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;um identificador &lt;code&gt;CamelCase&lt;/code&gt; ou &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (como, por que, explique, arquitetura) → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;nada corresponde → &lt;strong&gt;understand_code&lt;/strong&gt;, baixa confiança (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada intenção carrega um perfil de peso entre as quatro modalidades. Estes são os números reais:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intenção&lt;/th&gt;
&lt;th&gt;semantic&lt;/th&gt;
&lt;th&gt;text&lt;/th&gt;
&lt;th&gt;structural (AST)&lt;/th&gt;
&lt;th&gt;graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,3&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Então “onde &lt;code&gt;parseConfig&lt;/code&gt; é definido” se apoia fortemente em AST (0,6). “como funciona a autenticação” se apoia em vetores semânticos (0,5). “o que depende disso” é quase todo graph (0,7). “encontre &lt;code&gt;ECONNREFUSED&lt;/code&gt;” é quase todo trigrama (0,9), com o modelo de embedding completamente desligado — porque similaridade semântica é exatamente a ferramenta errada para uma string exata.&lt;/p&gt;
&lt;h2 id=&quot;o-caminho-rápido-e-o-caminho-fundido&quot;&gt;O caminho rápido, e o caminho fundido&lt;/h2&gt;
&lt;p&gt;Quando o classificador está confiante — pontuação ≥ 0,85 — e a consulta é normal, o Maguyva pula a fusão por completo e roteia direto para a única modalidade dominante. “onde X é definido” não precisa de quatro retrievers; precisa do índice de AST, agora. Esse caminho direto é reportado de volta como &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tudo que é ambíguo passa pela fusão. As quatro (ou três, no preset padrão) modalidades rodam em paralelo, cada uma retornando sua própria lista ranqueada, e nós as combinamos.&lt;/p&gt;
&lt;h2 id=&quot;reciprocal-rank-fusion-ponderada&quot;&gt;Reciprocal Rank Fusion Ponderada&lt;/h2&gt;
&lt;p&gt;Fundir retrievers heterogêneos é mais difícil do que parece: uma similaridade de cosseno de 0,82, uma pontuação de trigrama de 137 e uma centralidade de grafo de 0,004 não estão na mesma escala, então você não pode simplesmente somá-las. O Reciprocal Rank Fusion contorna o problema descartando as pontuações brutas e mantendo apenas o &lt;strong&gt;rank&lt;/strong&gt; que cada motor atribuiu. A contribuição de um resultado vinda de uma modalidade é:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;onde &lt;code&gt;rank&lt;/code&gt; é a posição dele na lista daquela modalidade e &lt;code&gt;k&lt;/code&gt; é uma constante de suavização. As contribuições são somadas entre modalidades para qualquer resultado que mais de um motor encontrou — a concordância entre retrievers naturalmente sobe ao topo. Usamos &lt;strong&gt;k = 40&lt;/strong&gt; no preset padrão e 60 em &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; roda apenas com semantic, então a fusão nunca entra em ação ali). O trabalho original de RRF chegou a k = 60 para retrieval de propósito geral; nosso padrão enfatiza um pouco mais as primeiras posições, dando mais peso aos resultados que aparecem bem classificados em várias modalidades — e não recomendamos ajustá-lo manualmente.&lt;/p&gt;
&lt;p&gt;Além disso, os resultados carregam um &lt;strong&gt;boost de importância de grafo&lt;/strong&gt;. Um hub — uma função em que todo o codebase se apoia — deve superar em ranking um nó-folha pouco conhecido mesmo com a mesma relevância textual, então multiplicamos cada contribuição por:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A centralidade vem das métricas pré-computadas de PageRank/grau do pipeline, e o boost é limitado a 1,5× para que uma função popular não consiga sepultar completamente uma obscura mais relevante. Por fim, rebaixamos resultados de caminhos de dependências externas, artefatos de build e conteúdo arquivado, e removemos duplicatas mantendo o melhor chunk por arquivo.&lt;/p&gt;
&lt;h2 id=&quot;o-que-ainda-é-imperfeito&quot;&gt;O que ainda é imperfeito&lt;/h2&gt;
&lt;p&gt;O classificador de intenção é uma pilha de regexes, não um modelo aprendido. Ele trata os formatos comuns de consulta com heurísticas, e uma consulta ambígua recorre a &lt;code&gt;understand_code&lt;/code&gt; e a uma combinação com maior peso semântico. Uma versão anterior deste artigo descreveu como alcançada uma redução da taxa de consultas sem resultados de aproximadamente 15% para menos de 5%. Na verdade, a proposta de dezembro de 2025 apresentava uma estimativa inicial e uma meta; não foi fornecido um conjunto de consultas nem um registro de medição que sustentasse essa redução. Retiramos essa afirmação de melhoria alcançada; veja as &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;evidências de origem e a correção (em inglês)&lt;/a&gt;. Não substituímos o classificador por um modelo treinado porque a versão de baixo custo é rápida e boa o suficiente para a função de roteamento pretendida, e porque um classificador errado, mas confiante, é pior do que uma alternativa honesta. Os pesos em si são valores a priori escolhidos manualmente, não aprendidos a partir de dados de cliques que não coletamos.&lt;/p&gt;
&lt;h2 id=&quot;faça-a-pergunta-não-a-ferramenta&quot;&gt;Faça a Pergunta, Não a Ferramenta&lt;/h2&gt;
&lt;p&gt;Um agente não deveria precisar saber se deve recorrer ao grep, a embeddings ou ao call graph — ele deveria fazer a sua pergunta em termos simples e obter a resposta certa. A fusão multimodal é o que permite que &lt;code&gt;find_symbol&lt;/code&gt;, busca semântica e análise de dependências fiquem por trás de uma única interface de consulta: o sistema lê o formato da pergunta e silenciosamente monta o retriever certo para ela. O modelo que pontua os embeddings importa, mas também importa saber quando &lt;em&gt;não&lt;/em&gt; usá-los. Escolher a ferramenta certa para cada consulta é um tipo de qualidade em si, e é algo que preferimos assumir a empurrar para quem chama.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Observabilidade de Agentes: Hooks, Alloy e Grafana</title><link>https://maguyva.ai/pt-br/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/agent-observability-hooks-alloy-grafana</guid><description>Conectamos o Claude Code e o Codex a uma única stack do Grafana com OpenTelemetry e Alloy, e depois usamos traces e logs para encontrar e corrigir problemas de comportamento dos agentes na origem.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sistemas de agentes falham de formas estranhas.&lt;/p&gt;
&lt;p&gt;Às vezes o modelo é o problema. Às vezes a ferramenta é o problema. Às vezes o seu servidor MCP está bem, mas o agente escolheu o especialista errado, ou passou metade da sessão fazendo trabalho de shell que você não esperava, ou consumiu orçamento silenciosamente em um loop que parecia produtivo visto de fora.&lt;/p&gt;
&lt;p&gt;Se você não consegue ver a diferença, não está realmente operando um sistema de agentes. Está apenas chutando.&lt;/p&gt;
&lt;p&gt;Então construímos uma stack de observabilidade para o nosso próprio fluxo de trabalho: Claude Code, Codex, eventos de hook do Claude, eventos de notify do Codex, OpenTelemetry nativo, Grafana Alloy e Grafana Cloud do outro lado.&lt;/p&gt;
&lt;p&gt;A parte interessante não é “fizemos um dashboard”. A parte interessante é que tivemos que dividir a telemetria em dois streams diferentes porque nenhum feed único nos dava o quadro completo.&lt;/p&gt;
&lt;h2 id=&quot;o-problema-a-telemetria-de-agentes-é-fragmentada&quot;&gt;O Problema: a Telemetria de Agentes É Fragmentada&lt;/h2&gt;
&lt;p&gt;Agentes de codificação modernos já emitem alguma telemetria. Isso ajuda, mas não é suficiente.&lt;/p&gt;
&lt;p&gt;O OTEL nativo é bom em responder perguntas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quantas requisições fizemos?&lt;/li&gt;
&lt;li&gt;Quanto custou uma sessão?&lt;/li&gt;
&lt;li&gt;Onde estão os spans e traces?&lt;/li&gt;
&lt;li&gt;A latência teve um pico?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ele é muito pior em responder perguntas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Em qual servidor MCP o agente se apoiou?&lt;/li&gt;
&lt;li&gt;Essa falha foi em &lt;code&gt;Bash&lt;/code&gt;, em uma ferramenta de arquivo nativa ou em uma chamada MCP?&lt;/li&gt;
&lt;li&gt;Qual skill realmente ativou?&lt;/li&gt;
&lt;li&gt;Que tipo de subagente foi despachado?&lt;/li&gt;
&lt;li&gt;A sessão estava fazendo trabalho útil ou apenas se debatendo?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa segunda classe de pergunta vive mais perto dos hooks do que dos traces.&lt;/p&gt;
&lt;p&gt;Mas o inverso também é verdadeiro: algumas das perguntas de performance mais importantes vivem mais perto dos traces do que dos hooks.&lt;/p&gt;
&lt;p&gt;Se você quer saber onde a latência realmente se acumulou, quais spans estavam lentos, ou se a sessão queimou tempo em chamadas de modelo versus execução de ferramentas, você precisa de dados de trace tanto quanto de eventos semânticos.&lt;/p&gt;
&lt;h2 id=&quot;a-arquitetura-a-que-chegamos&quot;&gt;A Arquitetura a Que Chegamos&lt;/h2&gt;
&lt;p&gt;Rodamos dois caminhos de telemetria lado a lado.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Essa divisão é deliberada.&lt;/p&gt;
&lt;p&gt;Ela também é assimétrica. O Claude Code nos dá uma interface de hooks de ciclo de vida muito mais rica. O Codex nos dá OTEL nativo mais uma interface de notify, então normalizamos eventos de conclusão de turno menos detalhados no mesmo schema de log, em vez de fingir que os dois runtimes expõem os mesmos controles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O OTEL nativo&lt;/strong&gt; nos dá o stream de base: logs e traces do próprio runtime, mais métricas onde o runtime realmente as emite.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eventos de hook e notify&lt;/strong&gt; nos dão a camada semântica: coisas como &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, e os metadados classificados com os quais realmente nos importamos ao depurar o comportamento dos agentes. O Claude Code contribui aqui com o stream de eventos mais rico. O Codex contribui com um stream normalizado menos detalhado, mas ainda útil.&lt;/p&gt;
&lt;h2 id=&quot;por-que-os-hooks-existem&quot;&gt;Por Que os Hooks Existem&lt;/h2&gt;
&lt;p&gt;Nosso pipeline de hooks enriquece eventos antes de chegarem ao Loki.&lt;/p&gt;
&lt;p&gt;Em vez de apenas dizer “uma ferramenta rodou”, classificamos o evento em campos como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: qual backend MCP tratou a chamada&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: a família do comando de shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: que tipo de especialista foi despachado&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: se a origem foi o Claude Code ou o Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso significa que podemos fazer perguntas que importam operacionalmente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esses não são campos de vaidade. Eles são a diferença entre “o agente pareceu lento” e “o agente passou os últimos dez minutos em operações de git pesadas em shell com alta taxa de falha de ferramentas”.&lt;/p&gt;
&lt;p&gt;Um detalhe de implementação que parece mais estranho do que é: o stream compartilhado do Loki ainda usa &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; como label mesmo quando o evento vem do Codex. A divisão real entre runtimes acontece em &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;por-que-o-alloy-fica-no-meio&quot;&gt;Por Que o Alloy Fica no Meio&lt;/h2&gt;
&lt;p&gt;O Grafana Alloy não é apenas um encaminhador nesta configuração. Ele é o ponto de aplicação de políticas.&lt;/p&gt;
&lt;p&gt;Apontamos o stream de OTEL nativo do Claude Code e do Codex para um proxy Alloy local em &lt;code&gt;localhost:4318&lt;/code&gt;, e então deixamos o Alloy limpar o payload antes de encaminhá-lo para o Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Isso importa porque a telemetria bruta de agentes está cheia de campos de alta cardinalidade que são úteis para análise, mas terríveis como labels indexados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;contagens de tokens&lt;/li&gt;
&lt;li&gt;durações&lt;/li&gt;
&lt;li&gt;blobs de parâmetros de ferramentas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se você indexar tudo, você tem uma explosão de labels e um dia ruim.&lt;/p&gt;
&lt;p&gt;Então o Alloy faz três coisas por nós:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantém indexado um conjunto muito pequeno de labels de baixa cardinalidade.&lt;/li&gt;
&lt;li&gt;Move campos ruidosos, mas úteis, para metadados estruturados.&lt;/li&gt;
&lt;li&gt;Descarta ruído puro por completo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A ideia importante é simples: &lt;strong&gt;observe mais, indexe menos&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;por-que-o-stream-de-hooks-contorna-o-alloy&quot;&gt;Por Que o Stream de Hooks Contorna o Alloy&lt;/h2&gt;
&lt;p&gt;O stream de hooks já vem formatado para o Loki.&lt;/p&gt;
&lt;p&gt;No momento em que &lt;code&gt;send_event.py&lt;/code&gt; envia um evento, já decidimos quais campos merecem tratamento de label e quais pertencem ao corpo JSON estruturado. Esse stream vai direto para o gateway OTLP do Grafana Cloud, em vez de passar novamente pelo Alloy.&lt;/p&gt;
&lt;p&gt;Então o sistema tem uma divisão de trabalho clara:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;O Alloy&lt;/strong&gt; doma o stream bruto de OTEL nativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O enriquecimento de hooks&lt;/strong&gt; torna os eventos semânticos consultáveis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso mantém a arquitetura mais simples do que tentar forçar tudo por um único caminho.&lt;/p&gt;
&lt;h2 id=&quot;o-que-o-dashboard-realmente-mostra&quot;&gt;O Que o Dashboard Realmente Mostra&lt;/h2&gt;
&lt;p&gt;A captura de tela abaixo é de um dos dashboards de observabilidade por trás do nosso fluxo de trabalho de agentes. Não é um benchmark, e os números são apenas um recorte de um momento específico. O ponto é o formato dos dados: feed de atividade, chamadas de ferramentas, falhas, prompts, e detalhamentos por agente, ferramentas nativas, uso de MCP, comandos de shell e skills.&lt;/p&gt;
&lt;p&gt;A parte útil é que esse dashboard vive na mesma stack do Grafana que o restante da telemetria de agentes. Podemos filtrar por agente de origem e família de ferramenta, e olhar entre runtimes sem inventar uma história de observabilidade diferente para cada sistema.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Abrir a captura de tela do dashboard de observabilidade em resolução completa&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Dashboard do Grafana mostrando um feed de atividade, contagens de chamadas de ferramentas, falhas, prompts e detalhamentos por agentes, ferramentas nativas, uso de MCP, comandos de CLI e skills para um fluxo de trabalho de agentes.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Um dos dashboards ao vivo por trás do nosso fluxo de trabalho de agentes. Esta captura de tela é apenas um recorte de uma stack compartilhada do Grafana que também recebe telemetria dos nossos outros runtimes e sistemas de agentes. Clique na imagem para a versão em resolução completa.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;por-que-os-traces-importam-mais-do-que-parecem-à-primeira-vista&quot;&gt;Por Que os Traces Importam Mais do que Parecem à Primeira Vista&lt;/h2&gt;
&lt;p&gt;Logs nos dizem que categoria de trabalho aconteceu. Traces nos dizem como o trabalho se desenrolou ao longo do tempo.&lt;/p&gt;
&lt;p&gt;Essa distinção importa em sistemas de agentes porque “lento” é grosseiro demais para ser útil.&lt;/p&gt;
&lt;p&gt;Um trace pode nos dizer se a dor veio de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;latência do modelo&lt;/li&gt;
&lt;li&gt;tempo de execução de ferramentas&lt;/li&gt;
&lt;li&gt;retries repetidos&lt;/li&gt;
&lt;li&gt;uma interação MCP especialmente cara&lt;/li&gt;
&lt;li&gt;uma longa cauda de pequenas operações que pareciam inofensivas isoladamente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Na prática, usamos o stream de hooks e os traces do Tempo juntos.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Os logs de hook&lt;/strong&gt; respondem: que tipo de coisa aconteceu?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Os traces&lt;/strong&gt; respondem: para onde foi o tempo?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A combinação é o que transforma a observabilidade de um dashboard em uma explicação.&lt;/p&gt;
&lt;h2 id=&quot;onde-o-codex-se-encaixa&quot;&gt;Onde o Codex se Encaixa&lt;/h2&gt;
&lt;p&gt;O Codex faz parte da mesma stack, mas não é idêntico ao Claude Code.&lt;/p&gt;
&lt;p&gt;Para o Codex, conectamos duas peças:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL nativo do Codex para o Alloy&lt;/li&gt;
&lt;li&gt;Um webhook de notify para &lt;code&gt;codex_notify.py&lt;/code&gt;, que mapeia conclusões de turno para o mesmo schema do Loki que usamos para eventos de hook&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso nos dá um filtro unificado como &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; dentro do mesmo stream de logs.&lt;/p&gt;
&lt;p&gt;A ressalva honesta: o payload de notify do Codex hoje é menos detalhado do que o payload de hook do Claude Code, porque não é o mesmo tipo de interface de integração. Na nossa configuração atual, as conclusões de turno do Codex podem ser normalizadas para o schema compartilhado, mas a extração rica ferramenta por ferramenta ainda é melhor no stream de OTEL nativo do que na bridge de notify.&lt;/p&gt;
&lt;p&gt;Isso não é motivo para evitar o post. É o ponto do post. Sistemas de observabilidade reais são montados a partir de sinais imperfeitos.&lt;/p&gt;
&lt;h2 id=&quot;o-grafana-sobre-mcp-muda-o-jogo&quot;&gt;O Grafana Sobre MCP Muda o Jogo&lt;/h2&gt;
&lt;p&gt;A mudança maior é que o Grafana não é apenas um lugar que humanos visitam em um navegador.&lt;/p&gt;
&lt;p&gt;Neste repositório, também expomos o Grafana via MCP. Isso significa que um agente pode consultar o Loki, o Prometheus e o Tempo diretamente, em vez de esperar que um humano inspecione manualmente os dashboards primeiro.&lt;/p&gt;
&lt;p&gt;Isso transforma a observabilidade em uma entrada ativa do fluxo de trabalho.&lt;/p&gt;
&lt;p&gt;Um agente pode perguntar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quais famílias de ferramentas falharam mais na última hora?&lt;/li&gt;
&lt;li&gt;Qual servidor MCP dominou uma sessão?&lt;/li&gt;
&lt;li&gt;As mudanças recentes reduziram as falhas de ferramentas ou apenas moveram o trabalho para caminhos mais pesados em shell com os mesmos erros?&lt;/li&gt;
&lt;li&gt;Quais traces mostram a maior latência ou retries repetidos?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando você tem isso, está muito perto de um loop de autoaperfeiçoamento.&lt;/p&gt;
&lt;h2 id=&quot;do-dashboard-ao-loop-de-feedback&quot;&gt;Do Dashboard ao Loop de Feedback&lt;/h2&gt;
&lt;p&gt;Esta é a parte que achamos mais interessante.&lt;/p&gt;
&lt;p&gt;Assim que a stack de observabilidade se torna consultável a partir da camada de agentes, a telemetria deixa de ser uma tela passiva de relatórios e se torna um sinal de controle.&lt;/p&gt;
&lt;p&gt;O loop funciona assim:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A atividade dos agentes emite traces, métricas e logs de hook enriquecidos.&lt;/li&gt;
&lt;li&gt;O Grafana armazena a evidência no Loki, no Tempo e no Prometheus, onde existem métricas.&lt;/li&gt;
&lt;li&gt;Os agentes consultam essa evidência através do Grafana MCP.&lt;/li&gt;
&lt;li&gt;O sistema identifica mix ruim de ferramentas, skills frágeis, roteamento fraco ou fluxos de trabalho pesados em shell que continuam produzindo erros evitáveis.&lt;/li&gt;
&lt;li&gt;Agentes ou operadores ajustam prompts, configurações de agente, descrições de skills, regras de roteamento ou acesso a ferramentas.&lt;/li&gt;
&lt;li&gt;A próxima sessão produz um novo formato de telemetria, e o ciclo se repete.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;É assim que você passa de “dashboard interessante” para “sistema de melhoria mensurável”.&lt;/p&gt;
&lt;p&gt;O objetivo não é maximizar uma categoria de ferramenta. É chegar à combinação certa de CLI, ferramentas nativas, chamadas MCP e skills para o trabalho que está realmente sendo feito.&lt;/p&gt;
&lt;h2 id=&quot;o-que-isso-nos-permite-responder&quot;&gt;O Que Isso Nos Permite Responder&lt;/h2&gt;
&lt;p&gt;Assim que os dois runtimes chegam à mesma stack do Grafana, conseguimos responder perguntas operacionais muito mais rápido:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As falhas estão concentradas em uma família de ferramentas?&lt;/li&gt;
&lt;li&gt;Fluxos de trabalho pesados em shell estão criando erros evitáveis onde deveria existir uma ferramenta de nível mais alto?&lt;/li&gt;
&lt;li&gt;Quais servidores MCP estão carregando a maior parte do trabalho?&lt;/li&gt;
&lt;li&gt;Estamos pagando por atividade de agente que não está produzindo progresso significativo?&lt;/li&gt;
&lt;li&gt;Uma sessão apresenta problemas por causa do modelo, das ferramentas ou da camada de orquestração?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isso é especialmente útil em fluxos de trabalho multiagente, em que “o agente estava ocupado” não diz quase nada.&lt;/p&gt;
&lt;p&gt;Se um especialista continua sendo despachado e produzindo altas taxas de falha, isso é um problema de roteamento ou de moldagem de prompt.&lt;/p&gt;
&lt;p&gt;Se um servidor MCP domina todas as chamadas, isso pode ser boa arquitetura ou um sinal de que todo o resto é peso morto.&lt;/p&gt;
&lt;p&gt;Se as falhas de ferramentas disparam enquanto o custo permanece alto, você tem um problema operacional, não um problema de qualidade.&lt;/p&gt;
&lt;p&gt;Se o trabalho de shell continua falhando de formas previsíveis e evitáveis onde deveria existir uma ferramenta de nível mais alto, isso é um sinal de produto.&lt;/p&gt;
&lt;p&gt;Se uma skill ativa constantemente, mas não melhora os resultados, isso é um sinal de prompt ou de roteamento.&lt;/p&gt;
&lt;h2 id=&quot;a-lição-real&quot;&gt;A Lição Real&lt;/h2&gt;
&lt;p&gt;A lição mais profunda aqui é que a observabilidade de agentes precisa tanto de &lt;strong&gt;telemetria de runtime&lt;/strong&gt; quanto de &lt;strong&gt;telemetria de fluxo de trabalho&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A telemetria de runtime diz o que o sistema fez.&lt;/p&gt;
&lt;p&gt;A telemetria de fluxo de trabalho diz o que o agente achava que estava fazendo.&lt;/p&gt;
&lt;p&gt;Precisamos das duas.&lt;/p&gt;
&lt;p&gt;Se você mantém apenas traces e contadores, perde a camada semântica. Se você mantém apenas eventos de hook, perde latência, spans e o panorama mais amplo do runtime.&lt;/p&gt;
&lt;p&gt;E se você mantém os dois, mas nunca os realimenta na camada de agentes, você tem monitoramento, não adaptação.&lt;/p&gt;
&lt;p&gt;A combinação é o que torna o sistema explicável o suficiente para operar e ajustável o suficiente para melhorar.&lt;/p&gt;
&lt;h2 id=&quot;o-que-ainda-é-imperfeito&quot;&gt;O Que Ainda É Imperfeito&lt;/h2&gt;
&lt;p&gt;Ainda há arestas a aparar.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nem todo evento de hook inclui os dados de duração e de tokens que gostaríamos.&lt;/li&gt;
&lt;li&gt;Algumas das melhores visões de tempo ainda vêm dos traces do Tempo, não dos logs de hook.&lt;/li&gt;
&lt;li&gt;O Codex hoje é semanticamente menos rico do que o Claude Code no stream de eventos enriquecido.&lt;/li&gt;
&lt;li&gt;A captura de tela do dashboard é uma tela de operações em tempo real, não uma peça de marketing polida.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esse último ponto é intencional. Preferimos mostrar o painel de instrumentos real a fingir que sistemas de agentes se explicam magicamente.&lt;/p&gt;
&lt;h2 id=&quot;por-que-isso-importa-para-o-maguyva&quot;&gt;Por Que Isso Importa Para o Maguyva&lt;/h2&gt;
&lt;p&gt;O Maguyva é sobre dar aos agentes uma inteligência de código melhor. Mas assim que os agentes realmente começam a fazer trabalho útil, um novo requisito aparece imediatamente: você precisa ver como eles estão se comportando.&lt;/p&gt;
&lt;p&gt;Qualidade de busca, qualidade de roteamento, seleção de ferramentas e eficiência de contexto, tudo isso se torna um problema observável.&lt;/p&gt;
&lt;p&gt;É por isso que achamos que vale a pena escrever sobre isso. A pilha de agentes do futuro não é só prompts e ferramentas. Ela reúne prompts, ferramentas e a camada de instrumentação que diz se tudo isso está funcionando.&lt;/p&gt;
&lt;p&gt;Se você está construindo fluxos de trabalho de agentes sérios, observabilidade não é infraestrutura opcional. É parte do produto.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Minerando o Loop: Como Mudanças Se Tornam Memória Institucional</title><link>https://maguyva.ai/pt-br/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/mining-workflow-closing-the-loop</guid><description>Commits do Git se tornam entradas estruturadas de changelog e registros de decisões arquiteturais, que depois realimentam agentes de IA como memória institucional consultável.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (fevereiro de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Toda equipe de engenharia enfrenta o mesmo desafio: mudanças acontecem o tempo todo, mas o &lt;em&gt;porquê&lt;/em&gt; por trás dessas mudanças desaparece. Seis meses depois, alguém pergunta “por que adotamos o DuckDB para os stages do pipeline?” e a resposta vive apenas na cabeça de quem tomou essa decisão — se essa pessoa ainda estiver por perto.&lt;/p&gt;
&lt;p&gt;Construímos um fluxo de trabalho de mineração que fecha esse loop. As mudanças fluem através de commits do git, são processadas pelo nosso pipeline de mineração, tornam-se entradas estruturadas de changelog e registros de decisões arquiteturais, e depois realimentam nossos agentes de IA através de consultas de CLI. O resultado: memória institucional que tanto humanos quanto IA podem acessar.&lt;/p&gt;
&lt;h2 id=&quot;o-problema-decisões-evaporam&quot;&gt;O Problema: Decisões Evaporam&lt;/h2&gt;
&lt;p&gt;Considere um cenário típico. Um desenvolvedor faz um commit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esse commit representa uma escolha arquitetural significativa. A equipe avaliou opções, considerou trade-offs e chegou ao DuckDB por razões específicas. Mas todo esse contexto vive em:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uma thread do Slack (provavelmente apagada)&lt;/li&gt;
&lt;li&gt;A memória de alguém (definitivamente enfraquecendo)&lt;/li&gt;
&lt;li&gt;Um comentário no código (talvez, se você tiver sorte)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Três meses depois, um novo membro da equipe pergunta: “devo usar DuckDB ou SQLite para esse novo stage?” Sem memória institucional, essa pessoa ou reinventa a roda ou faz escolhas inconsistentes.&lt;/p&gt;
&lt;h2 id=&quot;o-loop-dos-commits-ao-contexto&quot;&gt;O Loop: dos Commits ao Contexto&lt;/h2&gt;
&lt;p&gt;Nosso fluxo de trabalho de mineração transforma o histórico do git em conhecimento consultável:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O insight central: tanto os changelogs quanto as decisões arquiteturais fluem do mesmo histórico do git, processado por um pipeline unificado. Isso garante que nada escape pelas frestas.&lt;/p&gt;
&lt;h2 id=&quot;como-a-mineração-funciona&quot;&gt;Como a Mineração Funciona&lt;/h2&gt;
&lt;h3 id=&quot;etapa-1-sincronizar-o-índice&quot;&gt;Etapa 1: Sincronizar o Índice&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esse comando varre o histórico do git e constrói um índice de todos os commits. Ele extrai sinais estruturados de cada commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipo segundo a convenção Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Escopo (qual pacote ou área)&lt;/li&gt;
&lt;li&gt;Marcadores de breaking change&lt;/li&gt;
&lt;li&gt;Arquivos alterados e métricas de complexidade&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;etapa-2-verificar-o-status-de-cobertura&quot;&gt;Etapa 2: Verificar o Status de Cobertura&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;É assim que o nosso status atual se parece:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15.637 commits processados. 476 se tornaram decisões arquiteturais. 6.799 se tornaram entradas de changelog. Todo commit classificado.&lt;/p&gt;
&lt;h3 id=&quot;etapa-3-obter-candidatos-para-revisão&quot;&gt;Etapa 3: Obter Candidatos para Revisão&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso traz à tona commits que ainda não foram processados, com contexto completo para classificação:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os sinais ajudam a guiar a classificação: &lt;code&gt;is_releasable_type: true&lt;/code&gt; sugere que isso deveria aparecer no changelog. A grande contagem de inserções e os arquivos de infraestrutura sugerem que também pode ser uma decisão arquitetural.&lt;/p&gt;
&lt;h3 id=&quot;etapa-4-classificar-commits&quot;&gt;Etapa 4: Classificar Commits&lt;/h3&gt;
&lt;p&gt;Dois caminhos se separam aqui: entradas de changelog e decisões arquiteturais.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para entradas de changelog:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso registra que o commit &lt;code&gt;abc123&lt;/code&gt; deve aparecer no changelog na categoria “Added”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para decisões arquiteturais:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Primeiro, obtenha um ID de decisão real:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Depois classifique com o ID da decisão:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso vincula o commit a um registro de decisão que será criado ou atualizado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para processamento em lote (o que fazemos na prática):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O formato JSONL suporta ambos os domínios em uma única passagem:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;etapa-5-renderizar-as-saídas&quot;&gt;Etapa 5: Renderizar as Saídas&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso gera arquivos &lt;code&gt;CHANGELOG.md&lt;/code&gt; por pacote a partir do ledger. Os changelogs são artefatos derivados — apague-os e eles se regeneram perfeitamente a partir do ledger de origem.&lt;/p&gt;
&lt;h2 id=&quot;a-estrutura-do-registro-de-decisão&quot;&gt;A Estrutura do Registro de Decisão&lt;/h2&gt;
&lt;p&gt;As decisões extraídas se tornam arquivos YAML com metadados ricos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Toda decisão remete de volta aos seus commits de origem. Toda decisão especifica quais arquivos ela afeta. Os relacionamentos entre decisões são explícitos.&lt;/p&gt;
&lt;h2 id=&quot;integração-com-a-cli-consultando-a-memória-institucional&quot;&gt;Integração com a CLI: Consultando a Memória Institucional&lt;/h2&gt;
&lt;p&gt;É aqui que o loop se fecha. Os agentes podem consultar decisões através da CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Retorna decisões sobre lógica de retry, tratamento de erros, padrões de recuperação.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Retorna o registro de decisão completo com contexto, justificativa e impacto.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mostra quais escolhas arquiteturais foram feitas recentemente.&lt;/p&gt;
&lt;h3 id=&quot;como-os-agentes-usam-isso&quot;&gt;Como os Agentes Usam Isso&lt;/h3&gt;
&lt;p&gt;As instruções de base do nosso orquestrador incluem:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando um agente recebe a tarefa de implementar algo relacionado ao DuckDB, ele pode primeiro checar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E descobrir a DEC-PL-142, aprendendo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por que escolhemos o DuckDB (context)&lt;/li&gt;
&lt;li&gt;Como usá-lo corretamente (agent_guidance)&lt;/li&gt;
&lt;li&gt;Quais arquivos examinar (files)&lt;/li&gt;
&lt;li&gt;Quais decisões relacionadas existem (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O agente não reinventa a roda. Ele constrói sobre padrões já estabelecidos.&lt;/p&gt;
&lt;h2 id=&quot;o-teste-das-três-perguntas&quot;&gt;O Teste das Três Perguntas&lt;/h2&gt;
&lt;p&gt;Nem todo commit merece um registro de decisão. Usamos o Teste das Três Perguntas para filtrar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Isso foi difícil de decidir?&lt;/strong&gt; Exigiu análise significativa, avaliação de trade-offs ou debate?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;É custoso de mudar?&lt;/strong&gt; Reverter essa decisão exigiria retrabalho significativo?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tem impacto em todo o sistema?&lt;/strong&gt; Afeta múltiplos pacotes ou estabelece padrões que outros vão seguir?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se um commit responde “sim” a pelo menos uma dessas perguntas, ele é candidato à extração de decisão. Nossa taxa típica: 1 a 4 decisões a cada 100 commits (cerca de 1–4%).&lt;/p&gt;
&lt;p&gt;Para entradas de changelog, a barra é mais baixa: qualquer mudança visível ao usuário (funcionalidades, correções, melhorias) é registrada. Tarefas internas, atualizações de documentação e refatorações costumam ser ignoradas. Nossa taxa típica: 30 a 50 entradas de changelog a cada 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;armazenamento-de-dados-ledgers-somente-anexação&quot;&gt;Armazenamento de Dados: Ledgers Somente-Anexação&lt;/h2&gt;
&lt;p&gt;O sistema de mineração usa ledgers JSONL somente-anexação para operação multiagente sem conflitos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O formato JSONL com &lt;code&gt;merge=union&lt;/code&gt; em &lt;code&gt;.gitattributes&lt;/code&gt; significa que vários agentes podem classificar commits simultaneamente sem conflitos de merge. Cada linha é independente.&lt;/p&gt;
&lt;h2 id=&quot;controles-de-validação&quot;&gt;Controles de Validação&lt;/h2&gt;
&lt;p&gt;Antes de qualquer sessão de mineração, rodamos validação:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso verifica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validade do formato do SHA&lt;/li&gt;
&lt;li&gt;Conformidade do formato do ID de decisão&lt;/li&gt;
&lt;li&gt;Ausência de entradas duplicadas para o mesmo SHA&lt;/li&gt;
&lt;li&gt;Se as decisões referenciadas realmente existem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Após a classificação, validamos novamente antes de fazer commit das mudanças.&lt;/p&gt;
&lt;h2 id=&quot;por-que-isso-importa&quot;&gt;Por Que Isso Importa&lt;/h2&gt;
&lt;p&gt;O loop de feedback que construímos resolve vários problemas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para novos membros da equipe:&lt;/strong&gt; em vez de perguntar “por que fizemos X?”, eles podem buscar no registro de decisões. O contexto é preservado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para agentes de IA:&lt;/strong&gt; eles não operam no vácuo. Podem consultar conhecimento institucional antes de fazer recomendações. Quando solicitados a adicionar um novo stage de pipeline, podem descobrir o padrão do DuckDB e segui-lo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para consistência arquitetural:&lt;/strong&gt; as decisões são explícitas e pesquisáveis. Quando alguém propõe uma abordagem que contradiz uma decisão existente, o sistema pode revelar o conflito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para a geração de changelog:&lt;/strong&gt; as notas de release não são uma correria de última hora. São um subproduto da classificação contínua durante o desenvolvimento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para onboarding:&lt;/strong&gt; novos agentes herdam o contexto completo do codebase. Eles não veem apenas o código — veem as decisões que o moldaram.&lt;/p&gt;
&lt;h2 id=&quot;estado-atual&quot;&gt;Estado Atual&lt;/h2&gt;
&lt;p&gt;Atualmente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commits&lt;/strong&gt; processados pelo pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 decisões arquiteturais&lt;/strong&gt; extraídas e documentadas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 entradas de changelog&lt;/strong&gt; registradas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% de cobertura&lt;/strong&gt; em ambos os domínios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Todo commit desde que começamos foi classificado. A memória institucional está completa e é consultável.&lt;/p&gt;
&lt;h2 id=&quot;começando&quot;&gt;Começando&lt;/h2&gt;
&lt;p&gt;Se você quer implementar algo parecido:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comece com a convenção Conventional Commits.&lt;/strong&gt; O pipeline de mineração funciona melhor quando os commits têm prefixos estruturados (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Defina os seus domínios.&lt;/strong&gt; Usamos domínios como &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Eles organizam as decisões por área.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Construa o hábito de classificação.&lt;/strong&gt; A mineração funciona quando as equipes classificam commits regularmente. O processamento em lote com assistência de LLM ajuda a escalar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Torne as decisões consultáveis.&lt;/strong&gt; O valor se acumula quando os agentes podem buscar decisões via CLI. Estruture a sua saída para consumo por máquina.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Feche o loop.&lt;/strong&gt; As decisões devem influenciar o trabalho futuro. Inclua referências a decisões nas instruções dos agentes e nas checklists de revisão de código.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O objetivo não é documentação perfeita. É tornar o &lt;em&gt;porquê&lt;/em&gt; por trás das mudanças acessível tanto para humanos quanto para IA, hoje e daqui a seis meses. Quando as mudanças se tornam memória institucional, as equipes constroem sobre padrões estabelecidos em vez de reinventá-los.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;O fluxo de trabalho de mineração é parte do nosso motor de orquestração, especificamente o módulo de motor de contexto no nosso pacote de orquestração.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Mineração de Skills: De 3.500 Candidatas a 466 Capacidades</title><link>https://maguyva.ai/pt-br/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/skill-mining-3500-and-counting</guid><description>Avaliamos 3.500 skills candidatas e adotamos 466. Um loop sistemático de mineração e ingestão para construir uma biblioteca coerente de skills para agentes de IA em escala.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (janeiro de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;o-problema-das-3500-skills&quot;&gt;O Problema das 3.500 Skills&lt;/h2&gt;
&lt;p&gt;Quando começamos a construir um sistema de orquestração de agentes, enfrentamos um desafio interessante: existem milhares de skills potenciais espalhadas pelo ecossistema de IA. Repositórios no GitHub, documentação de fornecedores, projetos de comunidade, padrões internos — skills existem em todo lugar. Mas quais realmente importam? Quais funcionam? E como você mantém uma biblioteca de skills coerente que os agentes conseguem realmente usar?&lt;/p&gt;
&lt;p&gt;Nossa resposta: um loop sistemático de mineração e ingestão.&lt;/p&gt;
&lt;h2 id=&quot;os-números-de-hoje&quot;&gt;Os Números de Hoje&lt;/h2&gt;
&lt;p&gt;Pouco mais de três meses depois de a Anthropic lançar os Agent Skills em 16 de outubro de 2025, aqui está onde estávamos quando este post foi publicado, em 27 de janeiro de 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;Quantidade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Candidatas identificadas&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills adotadas&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills de fornecedores&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills internas&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fornecedores ativos&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens médios por skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ferramentas referenciadas&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tags únicas&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Revisamos mais de 3.500 skills candidatas. Adotamos 466. Isso é uma taxa de adoção de 13% — e essa seletividade é proposital.&lt;/p&gt;
&lt;h2 id=&quot;o-sistema-de-camadas-de-conhecimento&quot;&gt;O Sistema de Camadas de Conhecimento&lt;/h2&gt;
&lt;p&gt;Nem todas as skills são criadas iguais. Nós as organizamos em cinco camadas de conhecimento (K0-K4), cada uma representando um escopo diferente de aplicabilidade:&lt;/p&gt;
&lt;h3 id=&quot;k0-fundamentos-universal&quot;&gt;K0: Fundamentos (Universal)&lt;/h3&gt;
&lt;p&gt;Skills que todo agente deveria ter. Elas representam capacidades de “bom pensador” que funcionam em qualquer lugar.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As skills K0 são portáteis para qualquer projeto, qualquer domínio, qualquer stack. Elas codificam padrões cognitivos universais.&lt;/p&gt;
&lt;h3 id=&quot;k1-identidades-disciplina&quot;&gt;K1: Identidades (Disciplina)&lt;/h3&gt;
&lt;p&gt;Skills de “bom engenheiro” ou “bom pesquisador” que se aplicam entre projetos dentro de uma disciplina.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domínios-expertise-no-assunto&quot;&gt;K2: Domínios (Expertise no Assunto)&lt;/h3&gt;
&lt;p&gt;Skills de “bom especialista em banco de dados” ou “bom engenheiro de segurança” portáteis dentro de um campo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-tecnologia&quot;&gt;K3: Stacks (Tecnologia)&lt;/h3&gt;
&lt;p&gt;Skills de “bom usuário do Supabase” ou “bom desenvolvedor Cloudflare” para stacks de tecnologia específicas.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-projeto-organização&quot;&gt;K4: Projeto (Organização)&lt;/h3&gt;
&lt;p&gt;Skills específicas da nossa organização e dos nossos fluxos de trabalho.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;o-loop-de-mineração&quot;&gt;O Loop de Mineração&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-descoberta&quot;&gt;Fase 1: Descoberta&lt;/h3&gt;
&lt;p&gt;As skills vêm de todo lugar:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repositórios de fornecedores&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase e colaboradores da comunidade publicam coleções de skills. Rastreamos mais de 25 raízes de fornecedores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Projetos de comunidade&lt;/strong&gt;: o GitHub está cheio de templates para Claude Code, padrões de agente e definições de fluxos de trabalho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Padrões internos&lt;/strong&gt;: à medida que a nossa equipe resolve problemas, padrões emergem. Eles são formalizados em skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mineração de documentação&lt;/strong&gt;: a documentação técnica frequentemente contém skills implícitas — procedimentos, checklists, árvores de decisão.&lt;/p&gt;
&lt;p&gt;A descoberta é contínua. Usamos um backlog de skills para rastrear candidatas antes da avaliação formal.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-avaliação&quot;&gt;Fase 2: Avaliação&lt;/h3&gt;
&lt;p&gt;Toda candidata passa pela mesma rubrica:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os cinco critérios de produto precisam ser atendidos. É por isso que 87% das candidatas são rejeitadas.&lt;/p&gt;
&lt;p&gt;Depois, toda candidata passa por uma revisão de confiança separada. Não tratamos um repositório oficial de fornecedor, um mantenedor de comunidade bem conhecido e um repositório aleatório do GitHub como fontes de verdade equivalentes.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fornecedores confiáveis recebem uma revisão de proveniência mais leve, mas não um passe livre. Fontes não confiáveis ou desconhecidas recebem uma auditoria manual mais profunda, e não executamos scripts empacotados até que eles tenham sido lidos, delimitados em escopo e classificados como seguros.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Análise de lacunas&lt;/strong&gt;: antes de adotar, buscamos no nosso registro:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se já temos, não precisamos dela. Se temos algo próximo, podemos mesclar em vez de adotar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pontuação de profundidade e padrões&lt;/strong&gt;: também pontuamos o quão plenamente uma candidata usa o modelo agent-skill. Um único &lt;code&gt;SKILL.md&lt;/code&gt; isolado ainda pode ser útil, mas skills mais profundas são mais valiosas quando separam instruções de referências, scripts e assets da forma que &lt;code&gt;agentskills.io&lt;/code&gt; incentiva.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estrelas no GitHub podem elevar um pouco a pontuação de credibilidade, mas nunca resgatam uma skill rasa ou insegura. Um repositório com muitas estrelas e um único &lt;code&gt;SKILL.md&lt;/code&gt; vago com scripts opacos pontua abaixo de um repositório menor com uma descrição precisa, referências selecionadas em &lt;code&gt;references/&lt;/code&gt;, e helpers atômicos que realmente aproveitam a capacidade completa do modelo de skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Análise estrutural&lt;/strong&gt;: verificamos a qualidade da skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se uma candidata inclui scripts, essa revisão fica mais rigorosa. Uma boa skill não é apenas útil; ela precisa ser legível, delimitada e segura para entregar a um agente. Só esse filtro de segurança já desqualifica uma fatia significativa de candidatas que, de outra forma, seriam interessantes.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-ingestão&quot;&gt;Fase 3: Ingestão&lt;/h3&gt;
&lt;p&gt;Quando uma skill passa na avaliação, ela entra no registro. Mas skills nunca são adotadas sem alterações. Elas são modificadas para se encaixar no nosso sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modificações na adoção&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Normalização de metadados&lt;/strong&gt;: toda skill recebe o nosso schema de frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atribuição de camada K&lt;/strong&gt;: as skills são colocadas na camada de conhecimento apropriada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enriquecimento de tags&lt;/strong&gt;: tags são adicionadas para descoberta&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Declaração de ferramentas&lt;/strong&gt;: as ferramentas permitidas são declaradas explicitamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alinhamento de seções&lt;/strong&gt;: o conteúdo é reestruturado para corresponder ao nosso template&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Um YAML de skill típico após a ingestão:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-4-atribuição-de-escopo&quot;&gt;Fase 4: Atribuição de Escopo&lt;/h3&gt;
&lt;p&gt;As skills são atribuídas a escopos — categorias que determinam quais agentes carregam quais skills:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os agentes declaram seus escopos, e as skills são atribuídas automaticamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-5-materialização&quot;&gt;Fase 5: Materialização&lt;/h3&gt;
&lt;p&gt;As skills não vivem como YAML em produção. Elas são renderizadas em arquivos SKILL.md que o Claude Code consegue carregar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esse comando:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lê todas as definições YAML de skill&lt;/li&gt;
&lt;li&gt;Renderiza-as através de templates Jinja&lt;/li&gt;
&lt;li&gt;Escreve arquivos SKILL.md em &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organiza por camada K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A estrutura de saída final:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;o-padrão-de-escopo-dormente&quot;&gt;O Padrão de Escopo Dormente&lt;/h2&gt;
&lt;p&gt;Um dos nossos padrões mais poderosos são as skills “adotadas mas não carregadas”. Chamamos isso de escopos dormentes.&lt;/p&gt;
&lt;p&gt;Considere as skills de computação científica do repositório k-dense-scientific. Adotamos mais de 120 skills cobrindo bioinformática, química, computação quântica e informática clínica. Mas a maioria dos nossos agentes não precisa de docking molecular ou análise de expressão gênica.&lt;/p&gt;
&lt;p&gt;Em vez de carregar todas as 120 skills em cada agente (inchando as janelas de contexto), nós:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adotamos&lt;/strong&gt; as skills com um escopo específico (por exemplo, &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Mantemos-nas &lt;strong&gt;dormentes&lt;/strong&gt; — registradas, mas não carregadas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habilitamos&lt;/strong&gt; apenas quando um agente declara aquele escopo&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esse padrão nos permite ter 466 skills no registro, enquanto agentes típicos carregam apenas de 40 a 60 relevantes.&lt;/p&gt;
&lt;h2 id=&quot;tipos-de-skill&quot;&gt;Tipos de Skill&lt;/h2&gt;
&lt;p&gt;As skills vêm em três padrões cognitivos:&lt;/p&gt;
&lt;h3 id=&quot;fluxo-de-trabalho&quot;&gt;Fluxo de trabalho&lt;/h3&gt;
&lt;p&gt;Passos procedurais ordenados: “1. Faça X, 2. Depois Y, 3. Por fim Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;disciplina&quot;&gt;Disciplina&lt;/h3&gt;
&lt;p&gt;Barreiras comportamentais: “Sempre X”, “Nunca Y”, “Prefira Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Critérios de verificação: “Confirme X”, “Verifique Y”, “Cheque Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;controles-de-qualidade&quot;&gt;Controles de Qualidade&lt;/h2&gt;
&lt;p&gt;Toda skill precisa passar por validação antes de ir para produção:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As descrições precisam ter de 50 a 400 caracteres com frases de acionamento (“Use quando…”, “Quando você precisar de…”) para que o Claude Code saiba quando sugeri-las.&lt;/p&gt;
&lt;p&gt;Validamos continuamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;o-ecossistema-de-fornecedores&quot;&gt;O Ecossistema de Fornecedores&lt;/h2&gt;
&lt;p&gt;Nossas 373 skills de fornecedores vêm de:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fornecedor&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Domínio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Serviços de nuvem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Geração de documentos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Banco de dados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Computação científica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Ciência de dados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Automação de navegador&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cada raiz de fornecedor é declarada em metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando &lt;code&gt;orkestra sync&lt;/code&gt; roda, as skills de fornecedores são vinculadas por links simbólicos em &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; com o namespace do respectivo fornecedor.&lt;/p&gt;
&lt;h2 id=&quot;o-que-aprendemos&quot;&gt;O Que Aprendemos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Seletividade compensa.&lt;/strong&gt; É tentador adotar tudo que parece útil. Mas cada skill custa tokens. Com uma média de 2.834 tokens por skill, o inchaço dói rápido. Nossa taxa de adoção de 13% mantém os agentes enxutos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estrutura viabiliza a descoberta.&lt;/strong&gt; O sistema de camadas K não é só organização — é sobre portabilidade. Skills K0 podem ser reutilizadas em qualquer lugar. Skills K4 são intencionalmente específicas de projeto. Essa clareza ajuda tanto humanos quanto agentes a encontrar o que precisam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Escopos dormentes escalam.&lt;/strong&gt; Você pode adotar centenas de skills sem carregá-las todas. Escopos permitem construir um registro abrangente mantendo as janelas de contexto de cada agente gerenciáveis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A modificação na adoção é essencial.&lt;/strong&gt; Skills brutas de fornecedores raramente se encaixam no seu sistema. O processo de ingestão — adicionar metadados, atribuir camadas, enriquecer tags — faz skills externas funcionarem internamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A mineração é contínua.&lt;/strong&gt; O número de 3.500 continua crescendo. Novos repositórios de fornecedores aparecem. Padrões de comunidade emergem. Fluxos de trabalho internos se solidificam. O loop nunca para.&lt;/p&gt;
&lt;h2 id=&quot;o-que-vem-a-seguir&quot;&gt;O Que Vem a Seguir&lt;/h2&gt;
&lt;p&gt;Estamos trabalhando em várias melhorias:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Detecção automatizada de lacunas&lt;/strong&gt;: alertar quando falhas comuns de agente poderiam ser resolvidas por uma skill ainda não adotada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fluxos de trabalho de descontinuação de skills&lt;/strong&gt;: processo formal para aposentar skills que foram substituídas ou não são usadas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependências entre skills&lt;/strong&gt;: declaração explícita de pré-requisitos de skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics de uso&lt;/strong&gt;: rastrear quais skills os agentes realmente invocam versus apenas carregam&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O loop de mineração de skills é infraestrutura. Não é glamouroso. Mas é o que faz 41 agentes funcionarem de forma coerente com 466 capacidades, permanecendo dentro dos limites de contexto.&lt;/p&gt;
&lt;p&gt;Essa é a história de como 3.500 se tornam 466. Não ignorando 3.000 — avaliando-as sistematicamente e adotando apenas o que funciona.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Quer ver o sistema de skills em ação? Confira &lt;code&gt;uv run orkestra skills list&lt;/code&gt; para explorar o nosso registro atual.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Divulgação Progressiva: Janelas de CLI para Sistemas de Agentes</title><link>https://maguyva.ai/pt-br/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/progressive-disclosure-cli-into-agents</guid><description>Sistemas de agentes são opacos por padrão. A divulgação progressiva dá aos operadores visões em camadas via CLI, de verificações rápidas de status até os detalhes internos completos dos agentes e o rastreamento de decisões.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (janeiro de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sistemas de agentes são opacos por design. Eles tomam decisões, invocam ferramentas e coordenam trabalho entre dezenas de especialistas. Mas quando algo dá errado — ou quando você simplesmente quer entender o que está acontecendo — para onde você olha?&lt;/p&gt;
&lt;p&gt;A resposta é a divulgação progressiva: uma interface em camadas que revela exatamente a complexidade que você precisa, exatamente quando você precisa dela.&lt;/p&gt;
&lt;h2 id=&quot;o-problema-da-opacidade&quot;&gt;O Problema da Opacidade&lt;/h2&gt;
&lt;p&gt;Um sistema moderno de orquestração de agentes pode ter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ agentes especialistas, cada um com capacidades distintas&lt;/li&gt;
&lt;li&gt;700+ skills abrangendo automação interna e integrações de fornecedores&lt;/li&gt;
&lt;li&gt;470+ decisões arquiteturais moldando o comportamento&lt;/li&gt;
&lt;li&gt;Dezenas de servidores de ferramentas MCP fornecendo capacidades externas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa complexidade é intencional. Os agentes precisam de acesso a contexto rico — conhecimento de domínio, inteligência de código, schemas de banco de dados — para tomar boas decisões. Mas essa mesma riqueza cria um problema de visibilidade.&lt;/p&gt;
&lt;p&gt;Como você sabe qual agente trata de migrações de banco de dados? Quais decisões moldaram o comportamento de ranqueamento do sistema de busca? A quais ferramentas o conselheiro de arquitetura tem acesso?&lt;/p&gt;
&lt;p&gt;Sem acesso estruturado, você fica lendo código-fonte ou torcendo para que a documentação esteja atualizada.&lt;/p&gt;
&lt;h2 id=&quot;divulgação-progressiva-como-arquitetura&quot;&gt;Divulgação Progressiva como Arquitetura&lt;/h2&gt;
&lt;p&gt;Divulgação progressiva não é apenas um padrão de UI. É um princípio arquitetural: organizar a informação em camadas, cada uma mais profunda que a anterior, para que os usuários possam parar no nível que responde à pergunta deles.&lt;/p&gt;
&lt;p&gt;Para sistemas de agentes, isso se traduz em comandos de CLI em profundidades crescentes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nível&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Pergunta Respondida&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Está tudo saudável?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quais agentes existem?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;O que este agente faz?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Por que funciona dessa forma?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Ferramentas MCP do Maguyva&lt;/td&gt;
&lt;td&gt;Me mostre o código.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cada nível responde a uma pergunta de acompanhamento natural. Raramente é preciso pular direto para o nível 5.&lt;/p&gt;
&lt;h2 id=&quot;nível-1-saúde-do-sistema&quot;&gt;Nível 1: Saúde do Sistema&lt;/h2&gt;
&lt;p&gt;A primeira pergunta é sempre: está tudo funcionando?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Um comando. Quatro números. Suficiente para saber que o sistema está configurado e que os registros estão populados.&lt;/p&gt;
&lt;p&gt;Se a contagem de agentes cai inesperadamente ou skills falham ao carregar, você vê isso aqui primeiro. Sem precisar mergulhar em logs.&lt;/p&gt;
&lt;h2 id=&quot;nível-2-inventário-de-agentes&quot;&gt;Nível 2: Inventário de Agentes&lt;/h2&gt;
&lt;p&gt;Uma vez que você sabe que o sistema está saudável, a próxima pergunta é: o que está disponível?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso retorna dados estruturados — nomes de agentes, descrições, preferências de modelo, cobertura de domínio. A saída é JSON por padrão, o que facilita direcioná-la para &lt;code&gt;jq&lt;/code&gt; para filtragem:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quer agentes que lidam com trabalho de banco de dados? O comando de busca reduz o escopo:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso varre nomes, descrições e capacidades. Você encontra o especialista certo sem ler 40 definições de agente.&lt;/p&gt;
&lt;h2 id=&quot;nível-3-análise-detalhada-do-agente&quot;&gt;Nível 3: Análise Detalhada do Agente&lt;/h2&gt;
&lt;p&gt;Encontrou um agente que parece relevante? O comando &lt;code&gt;info&lt;/code&gt; revela tudo:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A saída inclui:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadados&lt;/strong&gt;: nome, categoria, preferência de modelo, descrição&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domínios&lt;/strong&gt;: quais áreas de conhecimento este agente cobre&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identidade&lt;/strong&gt;: traços de caráter (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guias de ferramenta&lt;/strong&gt;: qual documentação de ferramenta é injetada no contexto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ferramentas&lt;/strong&gt;: a lista completa de ferramentas MCP disponíveis para esse agente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aqui está uma amostra do que você vê:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso diz exatamente o que o agente pode fazer. Sem precisar de código-fonte.&lt;/p&gt;
&lt;h2 id=&quot;nível-4-arqueologia-de-decisões&quot;&gt;Nível 4: Arqueologia de Decisões&lt;/h2&gt;
&lt;p&gt;Os agentes se comportam de acordo com decisões documentadas. Quando você precisa entender &lt;em&gt;por que&lt;/em&gt; algo funciona de determinada forma, o registro de decisões é a fonte da verdade.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso retorna as decisões arquiteturais correspondentes:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada decisão tem proveniência completa — quando foi tomada, por quê, quais trade-offs foram considerados, quais commits a implementaram:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Essa é documentação arquitetural que se mantém atualizada porque é minerada a partir de commits, não mantida manualmente.&lt;/p&gt;
&lt;h2 id=&quot;nível-5-inteligência-de-código-direta&quot;&gt;Nível 5: Inteligência de Código Direta&lt;/h2&gt;
&lt;p&gt;Quando você precisa ver a implementação real — não metadados sobre ela — as ferramentas MCP do Maguyva fornecem acesso direto.&lt;/p&gt;
&lt;p&gt;De dentro de uma sessão de agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso roteia automaticamente entre busca semântica, textual e de AST para encontrar o código relevante. Para símbolos específicos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para análise de dependências:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Essas não são apenas substitutas do grep. Elas levam o grafo em conta, são indexadas semanticamente, e integradas com a mesma inteligência de código que move os próprios agentes.&lt;/p&gt;
&lt;h2 id=&quot;busca-unificada-entre-registros&quot;&gt;Busca Unificada Entre Registros&lt;/h2&gt;
&lt;p&gt;Às vezes você não sabe qual registro contém a resposta. A busca unificada abrange tudo:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 correspondências em cinco registros. O resumo diz onde aprofundar. Remova &lt;code&gt;--summary&lt;/code&gt; para resultados detalhados, ou adicione &lt;code&gt;--limit 5&lt;/code&gt; para manter a saída gerenciável.&lt;/p&gt;
&lt;h2 id=&quot;por-que-isso-importa&quot;&gt;Por Que Isso Importa&lt;/h2&gt;
&lt;p&gt;A divulgação progressiva não é só sobre conveniência. Ela muda como você interage com sistemas complexos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A depuração se torna mais simples.&lt;/strong&gt; Quando um agente toma uma decisão inesperada, você não faz grep em logs. Você checa a quais ferramentas ele tem acesso (&lt;code&gt;agents info&lt;/code&gt;), quais decisões moldam o seu comportamento (&lt;code&gt;decisions search&lt;/code&gt;), e rastreia a implementação se necessário (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O onboarding acelera.&lt;/strong&gt; Novos membros da equipe não precisam ler o codebase inteiro. Eles começam com &lt;code&gt;system status&lt;/code&gt;, exploram com &lt;code&gt;agents list&lt;/code&gt;, e vão mais fundo apenas quando encontram algo que não entendem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A documentação se mantém atualizada.&lt;/strong&gt; Como a CLI lê dos mesmos registros que configuram os agentes, a saída sempre é precisa. Não há divergência entre o que a documentação diz e o que o sistema faz.&lt;/p&gt;
&lt;h2 id=&quot;a-cli-como-interface&quot;&gt;A CLI como Interface&lt;/h2&gt;
&lt;p&gt;Poderíamos ter construído um dashboard web. Poderíamos ter escrito documentação extensa. Em vez disso, construímos uma CLI que lê da fonte da verdade.&lt;/p&gt;
&lt;p&gt;A CLI tem vantagens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Composável&lt;/strong&gt;: direcione a saída através de &lt;code&gt;jq&lt;/code&gt;, integre com scripts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatizável&lt;/strong&gt;: automatize verificações, gere relatórios&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rápida&lt;/strong&gt;: sem carregamento de página, sem fluxos de autenticação&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa&lt;/strong&gt;: lê a configuração real, não uma representação em cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para sistemas em que correção importa mais do que estética, a CLI vence.&lt;/p&gt;
&lt;h2 id=&quot;construindo-a-sua-própria-divulgação-progressiva&quot;&gt;Construindo a Sua Própria Divulgação Progressiva&lt;/h2&gt;
&lt;p&gt;Se você está construindo sistemas de agentes, considere como os usuários vão inspecioná-los:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Comece com verificações de saúde.&lt;/strong&gt; Um comando que diz se as coisas estão funcionando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forneça visões de inventário.&lt;/strong&gt; Liste o que existe antes de explicar o que faz.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habilite consultas direcionadas.&lt;/strong&gt; Busca vence navegação em escala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exponha a proveniência.&lt;/strong&gt; Deixe os usuários rastrearem decisões até suas origens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conecte-se à inteligência de código.&lt;/strong&gt; Mais cedo ou mais tarde, os usuários precisam ver a implementação.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada camada responde a uma pergunta de acompanhamento. Construa-as em ordem de frequência — a maioria dos usuários para na camada 2 ou 3. Apenas usuários avançados chegam à camada 5.&lt;/p&gt;
&lt;p&gt;O objetivo não é expor tudo. É expor exatamente o que é necessário, exatamente quando é necessário. Essa é a divulgação progressiva aplicada à arquitetura de agentes.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: Ancorando Agentes de IA à Realidade</title><link>https://maguyva.ai/pt-br/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/ground-truths-anchoring-ai-to-reality</guid><description>Agentes de IA alucinam com confiança. Ground truths são fatos versionados e delimitados por escopo que ancoram o comportamento dos agentes à realidade. Veja como nós os construímos e os aplicamos.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (janeiro de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agentes de IA são notavelmente capazes. Eles conseguem raciocinar, sintetizar e gerar. Mas têm uma fraqueza fundamental: eles inventam coisas. Não de forma maliciosa, mas com confiança. Um agente pode inventar parâmetros de API que não existem, referenciar configurações que nunca foram definidas, ou aplicar padrões dos seus dados de treinamento que contradizem a sua arquitetura real.&lt;/p&gt;
&lt;p&gt;A mitigação padrão é “dar mais contexto ao agente”. Mas o contexto pode ser contraditório. A documentação se distancia da implementação. Comentários mentem. Até o próprio código pode enganar quando lido sem entender a intenção.&lt;/p&gt;
&lt;p&gt;Precisávamos de algo mais explícito. Algo que não pudesse ser ignorado ou mal interpretado. Algo que ancorasse os agentes a uma realidade verificável.&lt;/p&gt;
&lt;p&gt;Chamamos isso de Ground Truths: fatos de referência.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-um-ground-truth&quot;&gt;O que é um Ground Truth?&lt;/h2&gt;
&lt;p&gt;Um ground truth é uma declaração de fato explícita e versionada que os agentes devem respeitar. Não é documentação. Não é um comentário. É uma entidade de primeira classe no sistema, com:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Um identificador único&lt;/strong&gt; (como &lt;code&gt;GT-MAG-015&lt;/code&gt; ou &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um status de ciclo de vida&lt;/strong&gt; (atual, provisório ou obsoleto)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um escopo&lt;/strong&gt; (de toda a plataforma, específico de pacote, ou restrito a um domínio)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidência&lt;/strong&gt; (caminhos de arquivo, URLs ou referências que comprovam a declaração)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orientação para o agente&lt;/strong&gt; (instruções explícitas do que fazer/evitar)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aqui está um exemplo da nossa plataforma de inteligência de código Maguyva:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso não é prosa. É um contrato. Quando um agente encontra esse ground truth, ele sabe:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;O padrão é determinístico (resultados vazios, não chutes aproximados)&lt;/li&gt;
&lt;li&gt;Existem parâmetros específicos (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) com comportamentos definidos&lt;/li&gt;
&lt;li&gt;Existe evidência em arquivos específicos que podem ser verificados&lt;/li&gt;
&lt;li&gt;A declaração foi verificada em uma data específica&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;a-anatomia-de-um-registro-de-ground-truths&quot;&gt;A Anatomia de um Registro de Ground Truths&lt;/h2&gt;
&lt;p&gt;Ground truths vivem em registros YAML sob &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Cada pacote ou domínio pode ter seu próprio registro. A estrutura é:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O registro inclui metadados sobre a própria coleção, configuração de renderização para geração de documentação, e as declarações em si. Cada declaração segue um schema rígido validado por modelos Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;como-os-agentes-acessam-ground-truths&quot;&gt;Como os Agentes Acessam Ground Truths&lt;/h2&gt;
&lt;p&gt;Ground truths são expostos por múltiplos canais:&lt;/p&gt;
&lt;h3 id=&quot;1-documentação-renderizada&quot;&gt;1. Documentação Renderizada&lt;/h3&gt;
&lt;p&gt;O comando &lt;code&gt;orkestra sync&lt;/code&gt; transforma registros YAML em markdown legível:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso gera arquivos &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; que são incluídos no contexto do agente. A saída renderizada agrupa as declarações por status e categoria:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-busca-via-cli&quot;&gt;2. Busca via CLI&lt;/h3&gt;
&lt;p&gt;Agentes com acesso a shell podem buscar ground truths de forma programática:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A função de busca pontua correspondências em vários campos com relevância ponderada:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-composição-de-contexto&quot;&gt;3. Composição de Contexto&lt;/h3&gt;
&lt;p&gt;Quando agentes são renderizados a partir de definições YAML, o contexto deles pode referenciar registros de ground truths:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso garante que os ground truths relevantes sejam carregados antes de o agente começar a trabalhar.&lt;/p&gt;
&lt;h2 id=&quot;categorias-de-ground-truths&quot;&gt;Categorias de Ground Truths&lt;/h2&gt;
&lt;p&gt;Olhando para os nossos registros, os ground truths se agrupam em vários padrões:&lt;/p&gt;
&lt;h3 id=&quot;princípios-do-produto&quot;&gt;Princípios do Produto&lt;/h3&gt;
&lt;p&gt;Restrições sobre o que o produto é e o que não é:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“O Maguyva é somente leitura em relação aos repositórios dos usuários; o único ativo não reconstruível é o cache pago de embeddings.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;limites-de-arquitetura&quot;&gt;Limites de Arquitetura&lt;/h3&gt;
&lt;p&gt;Onde as responsabilidades vivem e por quê:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Os limites entre pipeline e Maguyva são intencionais: o pipeline é reutilizável, o Maguyva contém a lógica específica de código, e o CQRS separa as escritas das etapas do pipeline das leituras de servidor.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;regras-antialucinação&quot;&gt;Regras Antialucinação&lt;/h3&gt;
&lt;p&gt;Mandatos explícitos que mantêm os contratos de ferramentas determinísticos em vez de inferidos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“A correspondência fuzzy de símbolos é opt-in via &lt;code&gt;find_similar=true&lt;/code&gt;. O comportamento padrão retorna resultados vazios para símbolos inexistentes; &lt;code&gt;exact_match=true&lt;/code&gt; força a correspondência estrita e desativa todos os fallbacks fuzzy.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;controles-de-qualidade&quot;&gt;Controles de Qualidade&lt;/h3&gt;
&lt;p&gt;Padrões que precisam ser mantidos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Mudanças em infraestrutura compartilhada (post_filters.py, extratores de relacionamento, handlers compartilhados) DEVEM ser validadas contra TODAS as linguagens suportadas via geração de manifesto completo antes do commit. Uma validação de uma única linguagem é insuficiente para código compartilhado.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;padrões-de-código&quot;&gt;Padrões de Código&lt;/h3&gt;
&lt;p&gt;Requisitos de implementação:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;asyncio.to_thread()&lt;/code&gt; para trabalho limitado por CPU em contextos assíncronos; o padrão obsoleto &lt;code&gt;loop.run_in_executor()&lt;/code&gt; não deve ser usado em código novo.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;o-ciclo-de-vida-de-um-ground-truth&quot;&gt;O Ciclo de Vida de um Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truths não são estáticos. Eles evoluem por um ciclo de vida definido:&lt;/p&gt;
&lt;h3 id=&quot;provisório&quot;&gt;Provisório&lt;/h3&gt;
&lt;p&gt;Uma verdade proposta em avaliação. A declaração é registrada, mas pode mudar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;atual&quot;&gt;Atual&lt;/h3&gt;
&lt;p&gt;Uma verdade verificada que os agentes devem respeitar. A evidência foi validada:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;obsoleto&quot;&gt;Obsoleto&lt;/h3&gt;
&lt;p&gt;Uma verdade que não se aplica mais. Mantida para referência histórica, com um ponteiro para o que a substituiu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;por-que-não-apenas-documentação&quot;&gt;Por Que Não Apenas Documentação?&lt;/h2&gt;
&lt;p&gt;A documentação serve a um propósito diferente. Ela explica. Ela ensina. Pode ser vaga, pode usar qualificadores como “geralmente” ou “tipicamente”.&lt;/p&gt;
&lt;p&gt;Ground truths não podem ser vagos. São afirmações. Ou se aplicam, ou não se aplicam.&lt;/p&gt;
&lt;p&gt;Considere a diferença:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentação:&lt;/strong&gt; “A API geralmente retorna resultados vazios quando um símbolo não é encontrado, embora a correspondência fuzzy possa estar habilitada em algumas configurações.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “O comportamento padrão retorna resultados vazios para símbolos inexistentes; &lt;code&gt;exact_match=true&lt;/code&gt; força a correspondência estrita e desativa todos os fallbacks fuzzy.”&lt;/p&gt;
&lt;p&gt;A primeira é útil para humanos aprendendo o sistema. A segunda é acionável para agentes tomando decisões.&lt;/p&gt;
&lt;h2 id=&quot;orientação-para-o-agente-fazer-e-evitar&quot;&gt;Orientação para o Agente: Fazer e Evitar&lt;/h2&gt;
&lt;p&gt;Alguns ground truths incluem orientação explícita para o agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso remove a ambiguidade. Um agente lendo isso sabe não apenas o que é verdade, mas quais ações essa verdade implica.&lt;/p&gt;
&lt;h2 id=&quot;verificação-e-manutenção&quot;&gt;Verificação e Manutenção&lt;/h2&gt;
&lt;p&gt;Ground truths exigem manutenção. Rastreamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: quando alguém confirmou que a declaração ainda vale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: arquivos que comprovam a declaração (pode-se verificar se existem)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: de onde a verdade se originou (inspeção via CLI, revisão de arquitetura, aprendizado pós-incidente)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um ground truth com datas de verificação desatualizadas ou links de evidência quebrados é um sinal para investigar. Ou a verdade ainda é válida e precisa de reverificação, ou a realidade mudou e a verdade precisa ser atualizada.&lt;/p&gt;
&lt;h2 id=&quot;exemplos-reais-de-produção&quot;&gt;Exemplos Reais de Produção&lt;/h2&gt;
&lt;h3 id=&quot;limite-de-segurança&quot;&gt;Limite de Segurança&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esse ground truth previne uma classe de “melhorias de segurança” mal orientadas que quebrariam o produto.&lt;/p&gt;
&lt;h3 id=&quot;acurácia-no-momento-da-extração&quot;&gt;Acurácia no Momento da Extração&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso veio de uma experiência dolorosa. Agentes corrigiam pacotes de linguagem com falhas adicionando filtros apenas no validador, que faziam o harness de teste parecer mais verde, enquanto o extrator Maguyva ao vivo continuava emitindo as arestas erradas. A regra força as correções de volta para o caminho real: configuração YAML, queries ou handlers.&lt;/p&gt;
&lt;h3 id=&quot;filtragem-em-múltiplos-níveis&quot;&gt;Filtragem em Múltiplos Níveis&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso impede que agentes adicionem filtros no lugar errado, um erro comum que causou regressões de acurácia.&lt;/p&gt;
&lt;h2 id=&quot;integração-com-o-sistema-de-orquestração&quot;&gt;Integração com o Sistema de Orquestração&lt;/h2&gt;
&lt;p&gt;Ground truths são uma camada de um sistema de contexto mais amplo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Decisões Arquiteturais (ADRs)&lt;/strong&gt; - Registram por que escolhemos a abordagem A em vez da B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Declaram o que está estabelecido como verdadeiro neste momento&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Padrões de Domínio&lt;/strong&gt; - Descrevem como fazer as coisas corretamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antipadrões&lt;/strong&gt; - Descrevem o que evitar e por quê&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Um agente trabalhando no sistema tem acesso aos quatro. Os ground truths fornecem a âncora factual, enquanto as decisões explicam a história, os padrões guiam a implementação, e os antipadrões alertam sobre armadilhas.&lt;/p&gt;
&lt;h2 id=&quot;medindo-o-impacto&quot;&gt;Medindo o Impacto&lt;/h2&gt;
&lt;p&gt;Desde que introduzimos os ground truths, observamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menos ciclos de “corrigir a correção alucinada”&lt;/li&gt;
&lt;li&gt;Tomada de decisão mais confiante pelos agentes quando os fatos estão claros&lt;/li&gt;
&lt;li&gt;Revisões de PR melhores, porque as expectativas são explícitas&lt;/li&gt;
&lt;li&gt;Tempo de onboarding reduzido para novos agentes (e humanos)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O investimento em manter os ground truths se paga em menos depuração e limites de sistema mais claros.&lt;/p&gt;
&lt;h2 id=&quot;começando&quot;&gt;Começando&lt;/h2&gt;
&lt;p&gt;Para adicionar um ground truth ao seu sistema:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crie um &lt;code&gt;ground_truths.yaml&lt;/code&gt; no diretório &lt;code&gt;ai_assets/reference/&lt;/code&gt; do seu pacote&lt;/li&gt;
&lt;li&gt;Defina metadados e configuração de renderização&lt;/li&gt;
&lt;li&gt;Adicione declarações seguindo o schema&lt;/li&gt;
&lt;li&gt;Rode &lt;code&gt;uv run orkestra sync&lt;/code&gt; para gerar a documentação&lt;/li&gt;
&lt;li&gt;Inclua o registro na composição de contexto do agente&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Comece pelos fatos que causam mais confusão ou pelas restrições que são violadas com mais frequência. Esses são os seus ground truths de maior valor.&lt;/p&gt;
&lt;h2 id=&quot;conclusão&quot;&gt;Conclusão&lt;/h2&gt;
&lt;p&gt;Agentes de IA vão alucinar. Essa é a natureza deles. Mas podemos criar ambientes em que a alucinação é restringida, em que certos fatos são inegociáveis, em que os agentes podem checar suas suposições contra uma realidade verificada.&lt;/p&gt;
&lt;p&gt;Ground truths não são uma solução completa. Eles exigem manutenção. Podem ficar desatualizados. Adicionam sobrecarga ao processo de desenvolvimento.&lt;/p&gt;
&lt;p&gt;Mas eles fornecem algo valioso: um vocabulário compartilhado de fatos em que tanto humanos quanto agentes podem confiar. Em um mundo em que os agentes participam cada vez mais do desenvolvimento de software, essa base compartilhada se torna essencial.&lt;/p&gt;
&lt;p&gt;A alternativa é um ciclo infinito de agentes cometendo erros com confiança e humanos os corrigindo. Ground truths quebram esse ciclo tornando as correções explícitas e duradouras.&lt;/p&gt;
&lt;p&gt;Seus agentes merecem saber o que é verdade. Diga a eles.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: Orquestrando Agentes de IA em Escala</title><link>https://maguyva.ai/pt-br/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/pt-br/blog/orkestra-agent-orchestration</guid><description>Um orquestrador roteia trabalho para agentes de IA especialistas, cada um com skills e memória distintas. Como o Orkestra coordena 46 agentes e 466 skills em produção.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Os números neste post refletem o sistema no momento da publicação (janeiro de 2026). Consulte nossa &lt;a href=&quot;https://maguyva.ai/pt-br/team&quot;&gt;página da equipe&lt;/a&gt; para números atualizados.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quando começamos a construir com o Claude Code, esbarramos em um problema que toda equipe que usa assistentes de codificação com IA acaba enfrentando: um único agente não consegue fazer tudo bem.&lt;/p&gt;
&lt;p&gt;Você pode instruir um agente a ser um especialista em banco de dados. Ou um auditor de segurança. Ou um engenheiro de frontend. Mas no momento em que você pede que ele seja os três ao mesmo tempo, a qualidade sofre. O contexto se dilui. As instruções entram em conflito. O agente se torna um generalista medíocre em tudo.&lt;/p&gt;
&lt;p&gt;Então construímos o Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;o-que-é-o-orkestra&quot;&gt;O que é o Orkestra?&lt;/h2&gt;
&lt;p&gt;O Orkestra é um sistema de orquestração de agentes para o Claude Code e ferramentas de codificação com IA semelhantes. Ele coordena vários agentes especializados, cada um com expertise distinta, sob um único orquestrador que roteia o trabalho para o especialista certo.&lt;/p&gt;
&lt;p&gt;Pense nele como uma agência de recrutamento para agentes de IA. O orquestrador recebe uma tarefa, identifica qual especialista deveria tratá-la, e delega com o contexto certo. Quando o trabalho termina, os resultados voltam ao orquestrador para síntese.&lt;/p&gt;
&lt;p&gt;Os números contam a história:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Quantidade&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agentes especialistas&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills reutilizáveis&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arquétipos de identidade&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindsets&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estilos de comunicação&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domínios de conhecimento&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;o-sistema-de-personagens-dd-para-agentes&quot;&gt;O Sistema de Personagens: D&amp;amp;D para Agentes&lt;/h2&gt;
&lt;p&gt;O insight central por trás do Orkestra é que o comportamento do agente emerge de três primitivas combináveis:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identidade&lt;/strong&gt; define &lt;em&gt;o que&lt;/em&gt; o agente é. Um arquiteto projeta estruturas de sistema. Um debugger rastreia falhas até a causa raiz. Um guardião garante a conformidade e faz cumprir os limites de segurança. Temos 27 arquétipos de identidade que podem ser combinados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; define &lt;em&gt;como&lt;/em&gt; o agente pensa. Um mindset analítico fundamenta afirmações em evidências e quantifica incerteza. Um mindset cético questiona suposições e busca evidências que contrariem essas suposições. Um mindset exploratório abraça a ambiguidade e tenta múltiplas abordagens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estilo&lt;/strong&gt; define &lt;em&gt;como&lt;/em&gt; o agente se comunica. Um estilo técnico inclui valores exatos e referencia arquivos específicos. Um estilo conciso corta enrolação e começa pela resposta. Um estilo diplomático equilibra honestidade com tato.&lt;/p&gt;
&lt;p&gt;Um agente combina essas primitivas:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Essa composição cria um agente que projeta sistemas (architect), conecta conhecimento entre domínios (knowledge-architect), define direção estratégica (strategist), pensa em evidências e dados (analytical), e se comunica sem enrolação (concise).&lt;/p&gt;
&lt;p&gt;O poder está na explosão combinatória. 27 identidades vezes 11 mindsets vezes 10 estilos rendem quase 3.000 personalidades de agente possíveis. Mas você só define as combinações que importam para o seu trabalho.&lt;/p&gt;
&lt;h2 id=&quot;skills-módulos-de-capacidade-reutilizáveis&quot;&gt;Skills: Módulos de Capacidade Reutilizáveis&lt;/h2&gt;
&lt;p&gt;Skills são o conhecimento e os fluxos de trabalho que os agentes podem invocar. Elas seguem um sistema em camadas baseado em escopo:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Nome&lt;/th&gt;
&lt;th&gt;Escopo&lt;/th&gt;
&lt;th&gt;Exemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Fundamentos&lt;/td&gt;
&lt;td&gt;Metodologia universal&lt;/td&gt;
&lt;td&gt;Disciplina test-first, conclusão baseada em evidências&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identidades&lt;/td&gt;
&lt;td&gt;Fluxos de trabalho baseados em papel&lt;/td&gt;
&lt;td&gt;Padrões de interface de CLI, playbook de performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domínios&lt;/td&gt;
&lt;td&gt;Conhecimento específico de domínio&lt;/td&gt;
&lt;td&gt;Padrões de migração de banco de dados, validação de autenticação&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Específico de tecnologia&lt;/td&gt;
&lt;td&gt;Deploy no Cloudflare, operações no Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Projeto&lt;/td&gt;
&lt;td&gt;Apenas este codebase&lt;/td&gt;
&lt;td&gt;Fluxos de trabalho e convenções específicos do projeto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As skills são carregadas sob demanda (lazy-loaded). Um agente vê os nomes e descrições das skills na inicialização, mas o conteúdo completo da skill só carrega quando acionado. Isso mantém o contexto enxuto, ao mesmo tempo em que torna centenas de skills descobríveis.&lt;/p&gt;
&lt;p&gt;Cada skill inclui:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Condições de acionamento claras (“Use ao migrar schemas de banco de dados”)&lt;/li&gt;
&lt;li&gt;Orientação passo a passo&lt;/li&gt;
&lt;li&gt;Ferramentas permitidas para o fluxo de trabalho&lt;/li&gt;
&lt;li&gt;Critérios de sucesso e caminhos de recuperação de falha&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As 466 skills no nosso registro cobrem desde isolamento de worktree do git até fluxos de trabalho de pesquisa web e validação de saúde de deploy.&lt;/p&gt;
&lt;h2 id=&quot;por-que-a-orquestração-importa&quot;&gt;Por Que a Orquestração Importa&lt;/h2&gt;
&lt;p&gt;Arquiteturas de agente único esbarram em paredes rapidamente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diluição de contexto.&lt;/strong&gt; Uma janela de contexto de 200 mil tokens parece grande até você carregar schemas de banco de dados, docs de API, fixtures de teste e conhecimento de domínio. Especialistas conseguem trabalhar com contexto direcionado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conflitos de instrução.&lt;/strong&gt; Dizer a um agente para “ser minucioso mas rápido” e “verificar tudo mas não complicar além do necessário” cria tensão. Especialistas resolvem isso tendo escopo claro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profundidade de expertise.&lt;/strong&gt; Um agente generalista sabe um pouco de tudo. Um agente especialista, composto com a identidade e as skills certas, conhece o seu domínio profundamente.&lt;/p&gt;
&lt;p&gt;O Orkestra implementa orquestração plana: um orquestrador coordena vários especialistas. Especialistas não podem gerar subespecialistas. Isso evita a explosão de complexidade, ao mesmo tempo em que viabiliza trabalho paralelo.&lt;/p&gt;
&lt;p&gt;O orquestrador tem acesso a 2,2 milhões de tokens de capacidade efetiva: a sua própria janela de 200 mil mais 10 subagentes concorrentes com 200 mil cada. Um trabalho que esgotaria um único agente roda confortavelmente em toda a frota.&lt;/p&gt;
&lt;h2 id=&quot;o-pipeline-de-renderização&quot;&gt;O Pipeline de Renderização&lt;/h2&gt;
&lt;p&gt;As definições de agente vivem em YAML. O Claude Code lê Markdown. O Orkestra faz essa ponte com um pipeline de renderização determinístico:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os operadores editam a fonte YAML. Rodam &lt;code&gt;orkestra sync&lt;/code&gt;. O Markdown renderizado aparece em &lt;code&gt;.claude/agents/&lt;/code&gt;. O Claude Code capta as mudanças.&lt;/p&gt;
&lt;p&gt;Essa separação atende a públicos diferentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A fonte YAML&lt;/strong&gt; inclui metadados de ciclo de vida, tags, regras de validação e notas de descontinuação para ferramentas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O Markdown renderizado&lt;/strong&gt; inclui apenas o que o modelo precisa: descrição, ferramentas, skills e orientação comportamental&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O pipeline compõe identidades, mindsets, estilos e skills em um único prompt coerente. Um agente architect-analytical-concise recebe um system prompt muito diferente de um agente debugger-skeptical-technical, mesmo que compartilhem algumas skills subjacentes.&lt;/p&gt;
&lt;h2 id=&quot;conhecimento-de-domínio-o-padrão-de-quatro-arquivos&quot;&gt;Conhecimento de Domínio: O Padrão de Quatro Arquivos&lt;/h2&gt;
&lt;p&gt;Cada domínio de conhecimento segue uma estrutura consistente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Essa estrutura serve ao carregamento de contexto do agente. Um agente trabalhando em autenticação carrega &lt;code&gt;authentication/patterns.md&lt;/code&gt; para orientação e &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; para evitar armadilhas conhecidas. Os arquivos têm tamanho pensado para carregamento eficiente de contexto: focados o suficiente para serem úteis, abrangentes o suficiente para serem autoritativos.&lt;/p&gt;
&lt;p&gt;Mantemos 21 domínios de nível superior, incluindo analytics, autenticação, ciência de dados, infraestrutura, machine learning, performance, segurança e mais. Cada domínio pode ter subdomínios para granularidade mais fina.&lt;/p&gt;
&lt;h2 id=&quot;valores-o-sistema-operacional&quot;&gt;Valores: O Sistema Operacional&lt;/h2&gt;
&lt;p&gt;Todos os agentes compartilham uma camada base de valores que define como eles operam:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simplicidade primeiro.&lt;/strong&gt; Use a solução mais simples que funcione. Adicione complexidade apenas quando justificado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrija causas raiz.&lt;/strong&gt; Nunca contorne falhas sem resolver suas causas. Se um pipeline falha, depure o pipeline. Se um teste falha, corrija o código ou o teste.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Baseado em evidências.&lt;/strong&gt; Rotule afirmações como “verificado” (com benchmarks) ou “estimado” (com suposições). Padrão detectado não é o mesmo que problema confirmado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Economia de contexto.&lt;/strong&gt; Ferramentas MCP custam 0,1% do contexto. Leituras de arquivo custam 2% cada. Aplique expertise de domínio antes de explorar código.&lt;/p&gt;
&lt;p&gt;Esses valores se propagam para cada especialista através do pipeline de renderização. Um agente não pode contorná-los por composição.&lt;/p&gt;
&lt;h2 id=&quot;cli-o-plano-de-controle&quot;&gt;CLI: O Plano de Controle&lt;/h2&gt;
&lt;p&gt;O Orkestra vem com uma CLI para gerenciar o ecossistema de agentes:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A CLI é a fonte da verdade para quais agentes existem, quais skills eles têm, e se o sistema está saudável. Ela roda validação antes da sincronização para pegar problemas cedo.&lt;/p&gt;
&lt;h2 id=&quot;considerações-sobre-código-aberto&quot;&gt;Considerações Sobre Código Aberto&lt;/h2&gt;
&lt;p&gt;Construímos o Orkestra para resolver o nosso próprio problema: coordenar agentes de IA em escala para um codebase complexo. Os padrões que descobrimos não são específicos do nosso domínio.&lt;/p&gt;
&lt;p&gt;O sistema de composição de personagem (identidade + mindset + estilo) se aplica a qualquer equipe que defina personalidades de agente.&lt;/p&gt;
&lt;p&gt;O sistema de camadas de skill (K0-K4) fornece um modelo mental para organizar capacidades reutilizáveis por escopo.&lt;/p&gt;
&lt;p&gt;O padrão de pipeline de renderização (fonte YAML + templates + artefatos gerados) separa responsabilidades entre ferramentas e consumo pelo modelo.&lt;/p&gt;
&lt;p&gt;O modelo de orquestração plana (um coordenador, muitos especialistas) evita complexidade, ao mesmo tempo em que viabiliza paralelismo.&lt;/p&gt;
&lt;p&gt;Se o Orkestra vai se tornar código aberto depende de se esses padrões têm valor para outras pessoas construindo com o Claude Code. Se você está esbarrando nas paredes que descrevemos, a arquitetura pode ajudar.&lt;/p&gt;
&lt;h2 id=&quot;o-que-aprendemos&quot;&gt;O Que Aprendemos&lt;/h2&gt;
&lt;p&gt;Construir o Orkestra nos ensinou que orquestração não é sobre tornar os agentes mais inteligentes. É sobre torná-los mais focados.&lt;/p&gt;
&lt;p&gt;Um único agente com instruções perfeitas ainda fica sem contexto. Um único agente com todas as skills ainda fica confuso sobre qual aplicar. Um único agente tentando ser tudo produz resultados medíocres em tudo.&lt;/p&gt;
&lt;p&gt;Quarenta especialistas, cada um excelente em seu domínio, coordenados por um orquestrador que sabe quando delegar: é assim que entregamos.&lt;/p&gt;
&lt;p&gt;Os números importam menos do que a arquitetura. Você pode precisar de cinco agentes ou de cinquenta. O princípio permanece: composição acima de capacidade, especialização acima de generalização, coordenação acima de heroísmo individual.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;O Orkestra move o ecossistema de agentes por trás do Maguyva, a nossa plataforma de inteligência de código. Quer saber mais? Entre em contato com a equipe.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>