<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcos Filipe</title>
    <description>The latest articles on DEV Community by Marcos Filipe (@mffdeo).</description>
    <link>https://dev.to/mffdeo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3844879%2F21f3266c-a7b0-4748-b36c-5609f28ca749.jpeg</url>
      <title>DEV Community: Marcos Filipe</title>
      <link>https://dev.to/mffdeo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mffdeo"/>
    <language>en</language>
    <item>
      <title>Concluí o Volume 1 da Stackovia Learning Series: 13 capítulos gratuitos + projeto integrador</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Fri, 29 May 2026 21:22:23 +0000</pubDate>
      <link>https://dev.to/mffdeo/conclui-o-volume-1-da-stackovia-learning-series-13-capitulos-gratuitos-projeto-integrador-5ga1</link>
      <guid>https://dev.to/mffdeo/conclui-o-volume-1-da-stackovia-learning-series-13-capitulos-gratuitos-projeto-integrador-5ga1</guid>
      <description>&lt;p&gt;Há pouco tempo eu publiquei o início de um projeto open source que comecei a construir: a &lt;strong&gt;Stackovia Learning Series&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A ideia era simples, mas ambiciosa: criar uma série gratuita de estudos em desenvolvimento moderno, começando pelos fundamentos e evoluindo, aos poucos, para frontend, backend, full stack, DevOps, arquitetura, IA, agentes e segurança.&lt;/p&gt;

&lt;p&gt;Agora tenho um marco importante para compartilhar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;o Volume 1 está completo em preview.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;São &lt;strong&gt;13 capítulos publicados&lt;/strong&gt; e um &lt;strong&gt;projeto integrador completo para download&lt;/strong&gt;, para o aluno desenvolver ao longo do curso.&lt;/p&gt;

&lt;p&gt;Hub da série:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-learning/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-learning/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Volume 1:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Projeto integrador:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que esse projeto existe?
&lt;/h2&gt;

&lt;p&gt;Nem sempre as pessoas têm dinheiro para pagar cursos.&lt;/p&gt;

&lt;p&gt;Muita gente quer aprender tecnologia, construir projetos e evoluir profissionalmente, mas encontra alguns obstáculos comuns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conteúdo espalhado;&lt;/li&gt;
&lt;li&gt;excesso de teoria sem prática;&lt;/li&gt;
&lt;li&gt;projetos que não geram portfólio;&lt;/li&gt;
&lt;li&gt;falta de progressão;&lt;/li&gt;
&lt;li&gt;falta de clareza sobre o que estudar primeiro;&lt;/li&gt;
&lt;li&gt;pouca explicação sobre como transformar estudo em evidência real.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Stackovia nasceu para tentar atacar esse problema de forma aberta.&lt;/p&gt;

&lt;p&gt;Não como uma promessa milagrosa, nem como “o curso definitivo”, mas como uma trilha prática, gratuita e em construção pública.&lt;/p&gt;

&lt;p&gt;A ideia é que cada volume ajude o aluno a aprender um conjunto de fundamentos, construir algo concreto e sair com evidências no GitHub, no LinkedIn e no próprio portfólio.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é a Stackovia Learning Series?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Stackovia Learning Series&lt;/strong&gt; é uma série open source organizada em volumes.&lt;/p&gt;

&lt;p&gt;A proposta geral é sair dos fundamentos e evoluir para temas modernos de desenvolvimento de software:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fundamentos do Desenvolvedor Moderno&lt;/li&gt;
&lt;li&gt;Frontend Profissional com React e Next.js&lt;/li&gt;
&lt;li&gt;Backend Profissional com FastAPI&lt;/li&gt;
&lt;li&gt;Full Stack: Produto Real de Ponta a Ponta&lt;/li&gt;
&lt;li&gt;System Design, Software Architecture e Aplicações Robustas&lt;/li&gt;
&lt;li&gt;Docker, AWS e DevOps Foundation&lt;/li&gt;
&lt;li&gt;Kubernetes e Platform Engineering&lt;/li&gt;
&lt;li&gt;Prompt Engineering e Fundamentos de LLMs&lt;/li&gt;
&lt;li&gt;AI Engineer: Embeddings, Vector DB, RAG e Multimodal&lt;/li&gt;
&lt;li&gt;AI Agents em Produção&lt;/li&gt;
&lt;li&gt;AI Red Teaming, Governança e Tech Lead Capstone&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O Volume 1 é a base dessa jornada.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que tem no Volume 1?
&lt;/h2&gt;

&lt;p&gt;O Volume 1 se chama:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fundamentos do Desenvolvedor Moderno&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ele foi pensado para quem está começando ou quer reorganizar a base.&lt;/p&gt;

&lt;p&gt;Não é um volume sobre frameworks. Não começa com React, Next.js, FastAPI, Docker ou IA.&lt;/p&gt;

&lt;p&gt;Ele começa antes disso.&lt;/p&gt;

&lt;p&gt;Começa com o que muita gente pula:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;como a internet funciona na prática;&lt;/li&gt;
&lt;li&gt;terminal, pastas e arquivos;&lt;/li&gt;
&lt;li&gt;Git;&lt;/li&gt;
&lt;li&gt;GitHub;&lt;/li&gt;
&lt;li&gt;README;&lt;/li&gt;
&lt;li&gt;Pull Request;&lt;/li&gt;
&lt;li&gt;HTML semântico;&lt;/li&gt;
&lt;li&gt;CSS responsivo;&lt;/li&gt;
&lt;li&gt;JavaScript básico;&lt;/li&gt;
&lt;li&gt;HTTP e &lt;code&gt;fetch&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;formulários;&lt;/li&gt;
&lt;li&gt;segurança básica;&lt;/li&gt;
&lt;li&gt;publicação estática;&lt;/li&gt;
&lt;li&gt;portfólio;&lt;/li&gt;
&lt;li&gt;release e divulgação honesta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O objetivo é criar uma base profissional antes de acelerar para ferramentas mais avançadas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os 13 capítulos publicados
&lt;/h2&gt;

&lt;p&gt;O Volume 1 está organizado em 13 capítulos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Entrada na Stackovia e setup da jornada&lt;/li&gt;
&lt;li&gt;Como a internet funciona na prática&lt;/li&gt;
&lt;li&gt;Terminal, pastas, arquivos e ambiente&lt;/li&gt;
&lt;li&gt;Git como memória do aprendizado&lt;/li&gt;
&lt;li&gt;GitHub, README e Pull Request&lt;/li&gt;
&lt;li&gt;HTML semântico para a primeira página&lt;/li&gt;
&lt;li&gt;CSS moderno e layout responsivo&lt;/li&gt;
&lt;li&gt;JavaScript básico aplicado ao IntraStack&lt;/li&gt;
&lt;li&gt;HTTP, request/response e dados mockados&lt;/li&gt;
&lt;li&gt;Formulário, validação simples e erros comuns&lt;/li&gt;
&lt;li&gt;Segurança básica desde cedo&lt;/li&gt;
&lt;li&gt;Publicação estática e checklist de portfólio&lt;/li&gt;
&lt;li&gt;Fechamento: release, LinkedIn e próximos passos&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Todos estão publicados no site do Volume 1:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O projeto integrador: IntraStack Básico
&lt;/h2&gt;

&lt;p&gt;Além dos capítulos, o Volume 1 tem um projeto integrador completo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IntraStack Básico&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ele é um portal interno fictício da Stackovia, criado com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML;&lt;/li&gt;
&lt;li&gt;CSS;&lt;/li&gt;
&lt;li&gt;JavaScript;&lt;/li&gt;
&lt;li&gt;dados mockados;&lt;/li&gt;
&lt;li&gt;documentação;&lt;/li&gt;
&lt;li&gt;checklist;&lt;/li&gt;
&lt;li&gt;runbook;&lt;/li&gt;
&lt;li&gt;smoke-check;&lt;/li&gt;
&lt;li&gt;estrutura de projeto;&lt;/li&gt;
&lt;li&gt;README;&lt;/li&gt;
&lt;li&gt;assets;&lt;/li&gt;
&lt;li&gt;páginas estáticas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A proposta é que o aluno desenvolva esse projeto ao longo do volume, capítulo por capítulo.&lt;/p&gt;

&lt;p&gt;A página do projeto integrador tem instruções para baixar, rodar localmente e explorar a estrutura:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O aluno pode baixar via Git ou ZIP, rodar localmente e estudar o projeto como referência.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que chamar de “preview completo”?
&lt;/h2&gt;

&lt;p&gt;Porque o Volume 1 já está completo em conteúdo navegável, mas ainda pode evoluir.&lt;/p&gt;

&lt;p&gt;Ainda pretendo melhorar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;revisão editorial fina;&lt;/li&gt;
&lt;li&gt;diagramação futura em PDF;&lt;/li&gt;
&lt;li&gt;exemplos adicionais;&lt;/li&gt;
&lt;li&gt;correções sugeridas pela comunidade;&lt;/li&gt;
&lt;li&gt;pequenos ajustes de clareza;&lt;/li&gt;
&lt;li&gt;melhorias no projeto integrador.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então prefiro chamar de &lt;strong&gt;preview completo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso comunica melhor o estado real do projeto: já dá para estudar, ler e usar, mas ainda está aberto a melhoria.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu aprendi construindo esse volume?
&lt;/h2&gt;

&lt;p&gt;Aprendi que criar material didático exige muito mais do que escrever texto.&lt;/p&gt;

&lt;p&gt;Foi necessário pensar em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;progressão pedagógica;&lt;/li&gt;
&lt;li&gt;escopo;&lt;/li&gt;
&lt;li&gt;ordem de aprendizagem;&lt;/li&gt;
&lt;li&gt;exemplos antes da teoria;&lt;/li&gt;
&lt;li&gt;projeto integrador;&lt;/li&gt;
&lt;li&gt;consistência entre capítulos;&lt;/li&gt;
&lt;li&gt;revisão;&lt;/li&gt;
&lt;li&gt;publicação;&lt;/li&gt;
&lt;li&gt;GitHub Pages;&lt;/li&gt;
&lt;li&gt;VitePress;&lt;/li&gt;
&lt;li&gt;open source;&lt;/li&gt;
&lt;li&gt;documentação;&lt;/li&gt;
&lt;li&gt;licença;&lt;/li&gt;
&lt;li&gt;portfólio;&lt;/li&gt;
&lt;li&gt;segurança básica;&lt;/li&gt;
&lt;li&gt;feedback público.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também aprendi que ensinar, mesmo enquanto ainda estou aprendendo, força uma postura diferente.&lt;/p&gt;

&lt;p&gt;Quando você escreve para outra pessoa entender, você percebe rapidamente onde seu próprio entendimento ainda está frágil.&lt;/p&gt;

&lt;h2&gt;
  
  
  O papel da IA no processo
&lt;/h2&gt;

&lt;p&gt;Tenho estudado bastante o uso de IA no desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Neste projeto, a IA foi usada como apoio para organizar ideias, revisar estrutura, sugerir melhorias, validar consistência e acelerar algumas etapas do fluxo.&lt;/p&gt;

&lt;p&gt;Mas a Stackovia não é “texto jogado por IA”.&lt;/p&gt;

&lt;p&gt;O projeto tem revisão humana, controle de escopo, decisões registradas, preocupação com segurança, progressão e qualidade.&lt;/p&gt;

&lt;p&gt;Meu interesse em IA no desenvolvimento não é substituir fundamentos. É entender como ela pode ajudar em fluxos reais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentação;&lt;/li&gt;
&lt;li&gt;revisão;&lt;/li&gt;
&lt;li&gt;organização de contexto;&lt;/li&gt;
&lt;li&gt;planejamento;&lt;/li&gt;
&lt;li&gt;testes;&lt;/li&gt;
&lt;li&gt;avaliação;&lt;/li&gt;
&lt;li&gt;produtividade;&lt;/li&gt;
&lt;li&gt;rastreabilidade;&lt;/li&gt;
&lt;li&gt;segurança.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IA ajuda bastante, mas não elimina responsabilidade técnica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para quem esse Volume 1 pode ajudar?
&lt;/h2&gt;

&lt;p&gt;Acredito que pode ser útil para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quem está começando em desenvolvimento web;&lt;/li&gt;
&lt;li&gt;quem quer revisar fundamentos;&lt;/li&gt;
&lt;li&gt;quem quer organizar melhor o próprio aprendizado;&lt;/li&gt;
&lt;li&gt;quem quer transformar estudo em portfólio;&lt;/li&gt;
&lt;li&gt;quem quer aprender Git/GitHub com contexto;&lt;/li&gt;
&lt;li&gt;quem sente que pulou etapas importantes;&lt;/li&gt;
&lt;li&gt;quem quer material gratuito em português.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é um atalho. É uma trilha.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links do projeto
&lt;/h2&gt;

&lt;p&gt;Hub da Stackovia Learning Series:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-learning/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-learning/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Volume 1 — Fundamentos do Desenvolvedor Moderno:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Projeto integrador — IntraStack Básico:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/projeto-integrador.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositório hub:&lt;br&gt;
&lt;a href="https://github.com/mffdeo/stackovia-learning" rel="noopener noreferrer"&gt;https://github.com/mffdeo/stackovia-learning&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositório do Volume 1:&lt;br&gt;
&lt;a href="https://github.com/mffdeo/stackovia-vol01-fundamentos-dev-moderno" rel="noopener noreferrer"&gt;https://github.com/mffdeo/stackovia-vol01-fundamentos-dev-moderno&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Como você pode ajudar
&lt;/h2&gt;

&lt;p&gt;Se você puder acessar, ler algum capítulo e mandar feedback, já vai ajudar muito.&lt;/p&gt;

&lt;p&gt;Alguns tipos de feedback que seriam muito úteis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicação confusa;&lt;/li&gt;
&lt;li&gt;erro de digitação;&lt;/li&gt;
&lt;li&gt;capítulo longo demais;&lt;/li&gt;
&lt;li&gt;capítulo raso demais;&lt;/li&gt;
&lt;li&gt;sugestão de exemplo;&lt;/li&gt;
&lt;li&gt;melhoria no projeto integrador;&lt;/li&gt;
&lt;li&gt;problema no site;&lt;/li&gt;
&lt;li&gt;sugestão para próximos volumes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se a proposta fizer sentido, também agradeço quem puder dar uma estrela no GitHub e compartilhar com alguém que esteja estudando tecnologia.&lt;/p&gt;

&lt;p&gt;A Stackovia é um projeto em construção, mas agora o primeiro volume já existe de verdade.&lt;/p&gt;

&lt;p&gt;E isso, para mim, é um marco importante.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Design de sistemas não é sobre parecer sofisticado: é sobre resolver o problema certo</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Fri, 29 May 2026 02:58:03 +0000</pubDate>
      <link>https://dev.to/mffdeo/design-de-sistemas-nao-e-sobre-parecer-sofisticado-e-sobre-resolver-o-problema-certo-4c7</link>
      <guid>https://dev.to/mffdeo/design-de-sistemas-nao-e-sobre-parecer-sofisticado-e-sobre-resolver-o-problema-certo-4c7</guid>
      <description>&lt;p&gt;Recentemente assisti a uma entrevista com Bassem Dghaidi, engenheiro de software sênior no GitHub, falando sobre design de sistemas. O tema me chamou muita atenção porque, quanto mais estudo engenharia de software, arquitetura, backend e IA aplicada ao desenvolvimento, mais percebo uma coisa: a parte difícil não é apenas conhecer tecnologias. A parte difícil é saber &lt;strong&gt;quando usar&lt;/strong&gt;, &lt;strong&gt;por que usar&lt;/strong&gt; e &lt;strong&gt;qual problema real aquela decisão resolve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Muita gente olha para empresas como GitHub, Google, Netflix, Uber ou Amazon e pensa: “se eles usam arquitetura distribuída, Kubernetes, filas, cache, NoSQL, sharding, feature flags e observabilidade avançada, então eu também preciso usar tudo isso no meu projeto”.&lt;/p&gt;

&lt;p&gt;Mas talvez essa seja uma das maiores armadilhas do aprendizado em tecnologia.&lt;/p&gt;

&lt;p&gt;O ponto mais forte da entrevista, para mim, foi este: &lt;strong&gt;design de sistemas não é uma competição para ver quem desenha a arquitetura mais sofisticada. É uma disciplina para tomar decisões técnicas compatíveis com o problema, a escala, o risco e o momento do negócio.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A armadilha da arquitetura por status
&lt;/h2&gt;

&lt;p&gt;Uma parte da conversa fala sobre empresas que migram para Kubernetes, microsserviços ou arquiteturas cloud native não porque realmente precisam, mas porque aquilo parece moderno, bonito ou valorizado no mercado.&lt;/p&gt;

&lt;p&gt;Isso acontece muito.&lt;/p&gt;

&lt;p&gt;Às vezes a empresa ainda não tem escala. Às vezes o produto ainda nem validou mercado. Às vezes o time é pequeno. Às vezes o problema caberia muito bem em uma aplicação monolítica bem organizada, rodando em uma VM simples, com um banco relacional bem configurado.&lt;/p&gt;

&lt;p&gt;Mesmo assim, a equipe decide montar uma arquitetura complexa demais.&lt;/p&gt;

&lt;p&gt;O resultado pode ser perigoso: aumento de custo, mais pontos de falha, mais dificuldade de deploy, mais carga cognitiva para o time, mais tempo gasto mantendo infraestrutura e menos tempo entregando valor.&lt;/p&gt;

&lt;p&gt;Existe uma frase que ficou forte para mim: &lt;strong&gt;o simples já é complicado o suficiente, especialmente em escala&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Essa frase resume muita coisa.&lt;/p&gt;

&lt;p&gt;Simplicidade não é falta de conhecimento. Muitas vezes, simplicidade é justamente o resultado de maturidade. É saber que uma decisão técnica não deve ser tomada apenas porque “todo mundo está falando disso”, mas porque existe uma necessidade concreta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escalar antes da hora também é uma forma de desperdício
&lt;/h2&gt;

&lt;p&gt;Um dos aprendizados mais importantes da entrevista foi a ideia de não projetar para uma escala imaginária de 10 anos no futuro.&lt;/p&gt;

&lt;p&gt;É claro que precisamos pensar em evolução. Ninguém está defendendo código bagunçado, gambiarra sem critério ou ausência de arquitetura. Mas existe uma diferença enorme entre preparar um sistema para evoluir e construir hoje uma arquitetura para uma escala que talvez nunca chegue.&lt;/p&gt;

&lt;p&gt;Muitas vezes, uma aplicação simples pode ir muito mais longe do que imaginamos. Escala vertical, uma boa modelagem de dados, bons índices, cache apenas quando necessário, observabilidade mínima e deploy bem feito já resolvem muitos problemas reais.&lt;/p&gt;

&lt;p&gt;Antes de falar em sharding, múltiplos bancos, event streaming, microsserviços e infraestrutura distribuída, talvez a pergunta deveria ser:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;qual é o gargalo real que temos hoje?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se não existe métrica, talvez ainda não exista justificativa.&lt;/p&gt;

&lt;p&gt;E isso muda completamente a conversa.&lt;/p&gt;

&lt;p&gt;Em vez de “acho que precisamos de Kafka”, a discussão madura seria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;qual problema de negócio estamos tentando resolver?&lt;/li&gt;
&lt;li&gt;qual volume atual?&lt;/li&gt;
&lt;li&gt;qual volume esperado?&lt;/li&gt;
&lt;li&gt;qual limite da arquitetura atual?&lt;/li&gt;
&lt;li&gt;qual o custo de manter a solução atual?&lt;/li&gt;
&lt;li&gt;qual o custo de migrar?&lt;/li&gt;
&lt;li&gt;qual risco operacional estamos aceitando?&lt;/li&gt;
&lt;li&gt;qual métrica prova que chegou a hora de mudar?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sem esse tipo de pergunta, a arquitetura vira opinião. E opinião técnica sem contexto pode custar caro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software não é construído uma vez; software evolui
&lt;/h2&gt;

&lt;p&gt;Outro ponto muito forte é a ideia de que software não é algo que você compra, entrega uma vez e esquece.&lt;/p&gt;

&lt;p&gt;Muitas empresas ainda tratam software como obra fechada: paga-se uma vez, entrega-se o sistema e espera-se que ele dure anos sem investimento relevante. Mas software vive em um ambiente que muda: usuários mudam, regras mudam, mercado muda, infraestrutura muda, ameaças de segurança mudam, volume muda, dependências mudam.&lt;/p&gt;

&lt;p&gt;Por isso, arquitetura precisa ser pensada como evolução contínua.&lt;/p&gt;

&lt;p&gt;Não significa reescrever tudo a cada ano. Também não significa aceitar complexidade infinita. Significa revisar decisões, observar sinais, medir limites e planejar a próxima ordem de magnitude.&lt;/p&gt;

&lt;p&gt;Essa ideia me marcou bastante: talvez a pergunta não seja “como faço uma arquitetura para durar 10 anos?”, mas sim:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;qual arquitetura me leva com segurança até o próximo estágio?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando esse próximo estágio chegar, fazemos uma nova rodada de decisões com mais dados, mais aprendizado e mais clareza.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolver problema específico antes de criar solução genérica
&lt;/h2&gt;

&lt;p&gt;Também gostei muito da crítica contra soluções genéricas demais.&lt;/p&gt;

&lt;p&gt;Como desenvolvedores, é tentador criar abstrações, frameworks internos e componentes flexíveis para cenários que talvez nunca aconteçam. A intenção geralmente é boa: queremos deixar o sistema preparado para o futuro.&lt;/p&gt;

&lt;p&gt;Mas existe um risco: quanto mais genérica uma solução fica, mais difícil pode ser entendê-la, testá-la, mantê-la e explicar suas decisões.&lt;/p&gt;

&lt;p&gt;Resolver um problema específico primeiro tem uma vantagem enorme: você conhece melhor as restrições.&lt;/p&gt;

&lt;p&gt;Você sabe o que importa.&lt;br&gt;
Você sabe o que pode ser sacrificado.&lt;br&gt;
Você sabe quais trade-offs está fazendo.&lt;br&gt;
Você sabe quem é o usuário real.&lt;br&gt;
Você sabe qual dor está resolvendo.&lt;/p&gt;

&lt;p&gt;Depois, se padrões reais começarem a aparecer, aí sim pode fazer sentido extrair uma abstração.&lt;/p&gt;

&lt;p&gt;Mas abstrair cedo demais pode virar apenas complexidade disfarçada de elegância.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impacto de negócio importa
&lt;/h2&gt;

&lt;p&gt;Outro aprendizado importante: engenharia de software profissional não é hobby.&lt;/p&gt;

&lt;p&gt;Isso não significa abandonar o cuidado técnico. Pelo contrário. Significa entender que qualidade técnica precisa conversar com impacto real.&lt;/p&gt;

&lt;p&gt;Não basta dizer:&lt;/p&gt;

&lt;p&gt;“Melhorei a arquitetura.”&lt;br&gt;
“Deixei o código mais limpo.”&lt;br&gt;
“Criei uma infraestrutura moderna.”&lt;br&gt;
“Implantei Kubernetes.”&lt;br&gt;
“Adicionei cache.”&lt;br&gt;
“Migrei para microsserviços.”&lt;/p&gt;

&lt;p&gt;A pergunta mais madura é:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;qual impacto isso teve?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reduziu custo?&lt;br&gt;
Aumentou confiabilidade?&lt;br&gt;
Diminuiu tempo de resposta?&lt;br&gt;
Reduziu incidentes?&lt;br&gt;
Melhorou a experiência do usuário?&lt;br&gt;
Acelerou entrega?&lt;br&gt;
Reduziu risco?&lt;br&gt;
Ajudou o negócio a operar melhor?&lt;/p&gt;

&lt;p&gt;Essa parte me conecta muito com minha própria trajetória. Venho de uma área operacional, de ambiente crítico, onde decisão errada pode custar caro. Em uma operação real, não adianta ter o equipamento mais sofisticado se ele não resolve o problema no momento certo. Tecnologia, no fim, precisa servir à missão.&lt;/p&gt;

&lt;p&gt;Na engenharia de software é parecido.&lt;/p&gt;

&lt;p&gt;A solução mais bonita nem sempre é a solução mais adequada. Às vezes, o melhor sistema é aquele que resolve bem o problema de hoje, com segurança, clareza e espaço para evoluir.&lt;/p&gt;

&lt;h2&gt;
  
  
  E onde entra a IA nisso?
&lt;/h2&gt;

&lt;p&gt;Esse ponto ficou ainda mais importante para mim por causa do momento atual da IA.&lt;/p&gt;

&lt;p&gt;Com agentes de código, copilots e ferramentas cada vez mais poderosas, ficou mais fácil produzir código em grande volume. Mas isso também aumenta o risco de produzir complexidade em grande volume.&lt;/p&gt;

&lt;p&gt;Se antes um desenvolvedor podia criar um sistema confuso em semanas, agora talvez consiga criar em horas.&lt;/p&gt;

&lt;p&gt;Por isso, design de sistemas tende a ficar ainda mais importante. A habilidade principal não será apenas escrever código. Será saber orientar a construção, revisar decisões, entender requisitos, avaliar riscos, medir impacto e impedir que a velocidade da IA gere uma dívida técnica que ninguém consegue sustentar depois.&lt;/p&gt;

&lt;p&gt;A IA pode acelerar muito a implementação. Mas ela não substitui responsabilidade arquitetural.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meu principal aprendizado
&lt;/h2&gt;

&lt;p&gt;Depois de assistir a essa entrevista, fiquei com uma reflexão:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;um bom engenheiro não é aquele que usa a arquitetura mais avançada. É aquele que entende o problema o suficiente para escolher a solução mais apropriada.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Às vezes isso será um monólito.&lt;br&gt;
Às vezes será uma VM.&lt;br&gt;
Às vezes será um banco relacional.&lt;br&gt;
Às vezes será cache.&lt;br&gt;
Às vezes será fila.&lt;br&gt;
Às vezes será microsserviço.&lt;br&gt;
Às vezes será Kubernetes.&lt;br&gt;
Às vezes será uma arquitetura distribuída complexa.&lt;/p&gt;

&lt;p&gt;Mas a ordem importa.&lt;/p&gt;

&lt;p&gt;Primeiro vem o problema.&lt;br&gt;
Depois vêm as restrições.&lt;br&gt;
Depois vêm as métricas.&lt;br&gt;
Depois vêm os trade-offs.&lt;br&gt;
Só então vem a tecnologia.&lt;/p&gt;

&lt;p&gt;Esse é um aprendizado que quero carregar nos meus estudos e projetos: buscar fundamentos, entender contexto, evitar modismo e lembrar que software bom não é necessariamente o mais sofisticado.&lt;/p&gt;

&lt;p&gt;Software bom é aquele que resolve o problema certo, no momento certo, com o nível certo de complexidade.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>discuss</category>
      <category>softwareengineering</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Tentei criar uma CLI para governar código gerado por IA — e descobri que o problema era outro</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Sat, 23 May 2026 20:43:24 +0000</pubDate>
      <link>https://dev.to/mffdeo/tentei-criar-uma-cli-para-governar-codigo-gerado-por-ia-e-descobri-que-o-problema-era-outro-2n1f</link>
      <guid>https://dev.to/mffdeo/tentei-criar-uma-cli-para-governar-codigo-gerado-por-ia-e-descobri-que-o-problema-era-outro-2n1f</guid>
      <description>&lt;p&gt;Nos últimos tempos eu venho estudando bastante desenvolvimento assistido por IA, agentes de código, SPECs, policy gates, revisão humana, evidências e fluxos de trabalho mais seguros antes de abrir um pull request.&lt;/p&gt;

&lt;p&gt;Como parte desse estudo, criei um projeto pessoal chamado &lt;strong&gt;DevForge CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A ideia inicial era ambiciosa:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E se existisse uma CLI local-first capaz de ajudar a governar mudanças feitas com IA antes do merge?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O fluxo que eu queria era mais ou menos este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;init -&amp;gt; scan -&amp;gt; specify -&amp;gt; plan -&amp;gt; implement -&amp;gt; policy check -&amp;gt; review -&amp;gt; evidence -&amp;gt; pr-ready
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;inicializar uma estrutura local de governança;&lt;/li&gt;
&lt;li&gt;escanear o projeto;&lt;/li&gt;
&lt;li&gt;transformar uma ideia em SPEC;&lt;/li&gt;
&lt;li&gt;gerar um plano;&lt;/li&gt;
&lt;li&gt;entregar um briefing para um agente de IA implementar;&lt;/li&gt;
&lt;li&gt;rodar um policy check no diff;&lt;/li&gt;
&lt;li&gt;registrar revisão humana quando necessário;&lt;/li&gt;
&lt;li&gt;gerar um pacote de evidências;&lt;/li&gt;
&lt;li&gt;preparar orientação de commit e pull request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Na minha cabeça, isso parecia um fluxo bem lógico.&lt;/p&gt;

&lt;p&gt;Mas, testando na prática, descobri que o problema real era mais difícil.&lt;/p&gt;




&lt;h2&gt;
  
  
  A ideia original
&lt;/h2&gt;

&lt;p&gt;O DevForge CLI nasceu como uma tentativa de organizar o caos do desenvolvimento assistido por IA.&lt;/p&gt;

&lt;p&gt;Hoje é muito fácil pedir para uma IA implementar uma feature. O problema começa depois:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que exatamente ela deveria implementar?&lt;/li&gt;
&lt;li&gt;Qual era o escopo?&lt;/li&gt;
&lt;li&gt;Ela tocou arquivos sensíveis?&lt;/li&gt;
&lt;li&gt;Ela inventou coisa fora da SPEC?&lt;/li&gt;
&lt;li&gt;Existe evidência de teste?&lt;/li&gt;
&lt;li&gt;Alguém revisou?&lt;/li&gt;
&lt;li&gt;O pull request está minimamente explicável?&lt;/li&gt;
&lt;li&gt;O que deve ou não entrar no commit?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eu queria uma CLI que criasse uma trilha local, simples e auditável.&lt;/p&gt;

&lt;p&gt;A ideia não era substituir Cursor, Copilot, Codex, Claude Code ou qualquer agente de código. A ideia era criar um “cinto de segurança” ao redor deles.&lt;/p&gt;

&lt;p&gt;Algo como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agentes executam. DevForge governa.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pelo menos essa era a ideia inicial.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que funcionou bem
&lt;/h2&gt;

&lt;p&gt;Algumas partes funcionaram melhor do que eu esperava.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SPECs e briefs ajudam muito
&lt;/h3&gt;

&lt;p&gt;Uma das melhores descobertas foi que o valor não estava apenas no comando em si, mas nos artefatos gerados.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specification Brief;&lt;/li&gt;
&lt;li&gt;SPEC;&lt;/li&gt;
&lt;li&gt;Plan Pack;&lt;/li&gt;
&lt;li&gt;Context Pack;&lt;/li&gt;
&lt;li&gt;Implementation Brief;&lt;/li&gt;
&lt;li&gt;Agent Instructions;&lt;/li&gt;
&lt;li&gt;Policy Decision;&lt;/li&gt;
&lt;li&gt;Human Review;&lt;/li&gt;
&lt;li&gt;Evidence Pack;&lt;/li&gt;
&lt;li&gt;PR Ready guidance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses arquivos em Markdown e JSON ajudam a tornar o processo mais explícito.&lt;/p&gt;

&lt;p&gt;Em vez de simplesmente dizer para a IA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;implemente essa feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o fluxo passa a gerar algo mais estruturado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;implemente a feature usando este briefing, dentro deste escopo, respeitando estas restrições, e depois rode policy check.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso já melhora bastante a qualidade do handoff entre humano e agente.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. O Evidence Pack foi útil
&lt;/h3&gt;

&lt;p&gt;Outra parte que fez sentido foi o pacote de evidências.&lt;/p&gt;

&lt;p&gt;A ideia era simples: antes de abrir ou mergear um PR, gerar um resumo local com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diff analisado;&lt;/li&gt;
&lt;li&gt;policy decision;&lt;/li&gt;
&lt;li&gt;test report;&lt;/li&gt;
&lt;li&gt;revisão humana, se exigida;&lt;/li&gt;
&lt;li&gt;rollback plan, se exigido;&lt;/li&gt;
&lt;li&gt;audit log;&lt;/li&gt;
&lt;li&gt;decisão final.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso não prova que a mudança está perfeita, mas ajuda a responder:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O que foi feito, quais riscos foram identificados e quais evidências existem?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para um projeto pessoal, isso já foi um aprendizado importante.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. O PR Ready também fez sentido
&lt;/h3&gt;

&lt;p&gt;Outra parte útil foi o comando que prepara orientação para commit e pull request.&lt;/p&gt;

&lt;p&gt;Em vez de simplesmente mandar o usuário fazer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o DevForge passou a sugerir quais arquivos deveriam entrar e quais deveriam ficar fora.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Required files to commit:
- app.py
- db_create.py
- templates/index.html
- specs/SPEC-...
- docs/rollback/...
- .devforge/evidence/...

Do not commit:
- .venv/
- *.db
- *.sqlite
- __pycache__/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso parece pequeno, mas ajuda muito quando agentes de IA geram vários arquivos e artefatos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Onde começou a quebrar
&lt;/h2&gt;

&lt;p&gt;O problema apareceu quando tentei fazer o DevForge entender projetos diferentes de forma determinística.&lt;/p&gt;

&lt;p&gt;No primeiro teste, usei um Todo App com Flask e SQLite.&lt;/p&gt;

&lt;p&gt;A feature era simples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Adicionar prioridade às tarefas: Baixa, Média e Alta.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nesse caso, o DevForge até fazia sentido. A feature tocava formulário, template, código Python e banco SQLite. Então fazia sentido falar de schema, rollback plan, test report e revisão humana.&lt;/p&gt;

&lt;p&gt;Mas depois testei em outro projeto: uma calculadora CLI simples em Python.&lt;/p&gt;

&lt;p&gt;A nova feature era:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Adicionar histórico de cálculos durante a sessão.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse projeto não tinha:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;banco;&lt;/li&gt;
&lt;li&gt;autenticação;&lt;/li&gt;
&lt;li&gt;cloud;&lt;/li&gt;
&lt;li&gt;dados pessoais;&lt;/li&gt;
&lt;li&gt;schema;&lt;/li&gt;
&lt;li&gt;login;&lt;/li&gt;
&lt;li&gt;permissões.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Era apenas uma CLI local.&lt;/p&gt;

&lt;p&gt;E aí os problemas apareceram.&lt;/p&gt;




&lt;h2&gt;
  
  
  O problema das heurísticas
&lt;/h2&gt;

&lt;p&gt;O scanner e o planner começaram a confundir palavras.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;input()&lt;/code&gt; parecia dado de usuário;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;user&lt;/code&gt; parecia dado pessoal;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;session&lt;/code&gt; parecia autenticação;&lt;/li&gt;
&lt;li&gt;“no database” ainda continha a palavra &lt;code&gt;database&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;“sem banco” ainda continha a palavra &lt;code&gt;banco&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja: o código estava tentando interpretar intenção usando heurísticas simples.&lt;/p&gt;

&lt;p&gt;E isso é frágil.&lt;/p&gt;

&lt;p&gt;A palavra “session” pode significar uma sessão autenticada em um sistema web, mas também pode significar apenas “sessão local de uso” em uma calculadora CLI.&lt;/p&gt;

&lt;p&gt;A palavra “user” pode significar um usuário cadastrado, com dados pessoais e permissões, mas também pode significar apenas “a pessoa usando o terminal”.&lt;/p&gt;

&lt;p&gt;A frase “no database” fala justamente que não tem banco, mas um scanner ingênuo pode ver a palavra “database” e classificar risco errado.&lt;/p&gt;

&lt;p&gt;Esse foi o ponto em que ficou claro:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O problema não era só corrigir keywords. O problema era arquitetural.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A grande descoberta
&lt;/h2&gt;

&lt;p&gt;A principal descoberta foi esta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O DevForge não deveria tentar ser um scanner universal que entende qualquer projeto sozinho.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ele deveria ser um &lt;strong&gt;harness de governança&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ou seja, em vez de fingir que sabe tudo, ele deveria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;coletar sinais determinísticos;&lt;/li&gt;
&lt;li&gt;gerar um Project Profile preliminar;&lt;/li&gt;
&lt;li&gt;expor assumptions e gray areas;&lt;/li&gt;
&lt;li&gt;permitir revisão ou refinamento por IA externa;&lt;/li&gt;
&lt;li&gt;exigir aprovação humana do perfil;&lt;/li&gt;
&lt;li&gt;gerar SPECs e planos como drafts revisáveis;&lt;/li&gt;
&lt;li&gt;registrar evidências e decisões.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A diferença é sutil, mas importante.&lt;/p&gt;

&lt;p&gt;Antes eu pensava:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DevForge entende o projeto -&amp;gt; decide o risco -&amp;gt; gera o plano
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois dos testes, passei a enxergar melhor assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DevForge coleta sinais -&amp;gt; gera artefatos revisáveis -&amp;gt; guia IA e humano -&amp;gt; registra decisões
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é muito mais realista.&lt;/p&gt;




&lt;h2&gt;
  
  
  O scanner não deve decidir sozinho
&lt;/h2&gt;

&lt;p&gt;Um scanner determinístico é útil para coisas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;listar extensões;&lt;/li&gt;
&lt;li&gt;detectar arquivos &lt;code&gt;.py&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;pyproject.toml&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;encontrar migrations;&lt;/li&gt;
&lt;li&gt;detectar arquivos &lt;code&gt;.env&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;detectar bancos locais;&lt;/li&gt;
&lt;li&gt;calcular diff;&lt;/li&gt;
&lt;li&gt;identificar arquivos gerados;&lt;/li&gt;
&lt;li&gt;registrar audit trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas ele não deveria concluir sozinho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;este projeto lida com dados pessoais
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;esta feature é autenticação
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;essa mudança exige aprovação humana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sem considerar contexto, SPEC e revisão.&lt;/p&gt;

&lt;p&gt;A melhor função do scanner é gerar um draft.&lt;/p&gt;

&lt;p&gt;Um draft pode estar errado.&lt;/p&gt;

&lt;p&gt;E tudo bem — desde que o fluxo deixe isso claro.&lt;/p&gt;




&lt;h2&gt;
  
  
  O papel da IA nesse fluxo
&lt;/h2&gt;

&lt;p&gt;Curiosamente, eu comecei tentando criar uma ferramenta para governar IA, mas acabei percebendo que a própria IA também pode ajudar no processo de governança.&lt;/p&gt;

&lt;p&gt;Só que não como mágica escondida.&lt;/p&gt;

&lt;p&gt;O uso mais interessante da IA aqui seria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;revisar um Project Profile;&lt;/li&gt;
&lt;li&gt;identificar gray areas;&lt;/li&gt;
&lt;li&gt;melhorar uma SPEC;&lt;/li&gt;
&lt;li&gt;revisar um Implementation Brief;&lt;/li&gt;
&lt;li&gt;apontar riscos em um diff;&lt;/li&gt;
&lt;li&gt;sugerir evidências necessárias.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas sempre com uma regra:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A IA pode ajudar a raciocinar, mas a decisão importante precisa ser explícita, revisável e aprovada por humano.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No DevForge, isso levou à ideia de separar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deterministic signals
agent-assisted reasoning
human-confirmed governance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse modelo é muito mais forte do que tentar fazer tudo com regras fixas.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que eu aprendi com o projeto
&lt;/h2&gt;

&lt;p&gt;Algumas lições ficaram bem claras.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Heurísticas são boas para sinais, não para verdade final
&lt;/h3&gt;

&lt;p&gt;O scan pode dizer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;encontrei arquivos Python
encontrei SQLite
encontrei migrations
encontrei arquivos alterados
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas não deveria dizer com confiança absoluta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;essa feature é de alto risco
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sem contexto suficiente.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. SPEC é mais importante do que parece
&lt;/h3&gt;

&lt;p&gt;A SPEC virou o contrato da mudança.&lt;/p&gt;

&lt;p&gt;Quando a SPEC era fraca, o plano ficava ruim.&lt;/p&gt;

&lt;p&gt;Quando a SPEC tinha objetivo, fora de escopo, riscos, critérios de aceite e gray areas, o fluxo melhorava.&lt;/p&gt;

&lt;p&gt;Isso me fez perceber que, em desenvolvimento com IA, especificar bem é quase tão importante quanto codar.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. “Handoff” é uma palavra-chave
&lt;/h3&gt;

&lt;p&gt;O maior valor do DevForge não foi automatizar tudo.&lt;/p&gt;

&lt;p&gt;Foi criar handoffs melhores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;da ideia para a SPEC;&lt;/li&gt;
&lt;li&gt;da SPEC para o plano;&lt;/li&gt;
&lt;li&gt;do plano para o agente;&lt;/li&gt;
&lt;li&gt;da implementação para o policy check;&lt;/li&gt;
&lt;li&gt;do policy check para a revisão;&lt;/li&gt;
&lt;li&gt;da revisão para o Evidence Pack;&lt;/li&gt;
&lt;li&gt;do Evidence Pack para o PR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses handoffs tornam o processo mais rastreável.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Governança não é bloquear tudo
&lt;/h3&gt;

&lt;p&gt;No começo, o fluxo tendia a exigir revisão humana e rollback plan em excesso.&lt;/p&gt;

&lt;p&gt;Mas isso também é ruim.&lt;/p&gt;

&lt;p&gt;Uma mudança local, simples, sem banco, sem auth e sem dados pessoais não deveria ter o mesmo peso de uma mudança em login, pagamento ou dados sensíveis.&lt;/p&gt;

&lt;p&gt;Governança boa precisa ser proporcional.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Projeto experimental precisa dizer que é experimental
&lt;/h3&gt;

&lt;p&gt;Esse talvez seja o ponto mais importante para um projeto público.&lt;/p&gt;

&lt;p&gt;Depois dos testes, reposicionei o DevForge CLI como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A local-first experiment for AI-assisted software governance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E deixei claro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;não é ferramenta de compliance;&lt;/li&gt;
&lt;li&gt;não é produto de produção;&lt;/li&gt;
&lt;li&gt;não é scanner universal;&lt;/li&gt;
&lt;li&gt;não garante segurança;&lt;/li&gt;
&lt;li&gt;outputs são drafts revisáveis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso é mais honesto e, para mim, mais útil como projeto de aprendizado.&lt;/p&gt;




&lt;h2&gt;
  
  
  O estado atual do DevForge CLI
&lt;/h2&gt;

&lt;p&gt;Hoje eu vejo o DevForge CLI como um laboratório pessoal.&lt;/p&gt;

&lt;p&gt;Ele ainda tem comandos funcionais como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;devforge init
devforge scan
devforge profile approve
devforge specify &lt;span class="nt"&gt;--idea&lt;/span&gt; &lt;span class="s2"&gt;"Describe your feature idea"&lt;/span&gt;
devforge plan &lt;span class="nt"&gt;--spec&lt;/span&gt; specs/SPEC-ID.md
devforge implement &lt;span class="nt"&gt;--spec&lt;/span&gt; specs/SPEC-ID.md &lt;span class="nt"&gt;--agent&lt;/span&gt; custom &lt;span class="nt"&gt;--command&lt;/span&gt; &lt;span class="s2"&gt;"echo"&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
devforge policy check &lt;span class="nt"&gt;--diff&lt;/span&gt;
devforge review &lt;span class="nt"&gt;--issue&lt;/span&gt; SPEC-ID
devforge evidence &lt;span class="nt"&gt;--issue&lt;/span&gt; SPEC-ID
devforge pr-ready &lt;span class="nt"&gt;--issue&lt;/span&gt; SPEC-ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas tudo isso deve ser tratado como experimento.&lt;/p&gt;

&lt;p&gt;Não é para confiar cegamente.&lt;/p&gt;

&lt;p&gt;É para estudar o fluxo.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que eu faria diferente se começasse de novo
&lt;/h2&gt;

&lt;p&gt;Se eu fosse recomeçar do zero, eu faria diferente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;começaria pelo modelo de artefatos, não pelo scanner;&lt;/li&gt;
&lt;li&gt;trataria todo scan como evidência bruta;&lt;/li&gt;
&lt;li&gt;colocaria Project Profile como etapa aprovada pelo usuário;&lt;/li&gt;
&lt;li&gt;usaria IA externa para refinar briefs e gray areas;&lt;/li&gt;
&lt;li&gt;manteria as decisões importantes sempre editáveis e auditáveis;&lt;/li&gt;
&lt;li&gt;evitaria qualquer promessa de produto antes de testar em muitos projetos reais.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Em resumo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eu não tentaria construir um scanner mágico. Eu construiria primeiro um sistema de handoffs.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O DevForge CLI não provou que uma CLI consegue governar automaticamente qualquer repositório.&lt;/p&gt;

&lt;p&gt;Mas ele mostrou algo mais útil:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Desenvolvimento assistido por IA precisa de contexto, contratos, evidências, revisão humana e handoffs estruturados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No fim, o valor não estava em fazer a ferramenta “entender tudo”.&lt;/p&gt;

&lt;p&gt;O valor estava em organizar melhor a conversa entre humano, projeto, agente de IA e pull request.&lt;/p&gt;

&lt;p&gt;E, para mim, isso já fez o projeto valer a pena.&lt;/p&gt;




&lt;p&gt;Repositório: &lt;a href="https://github.com/mffdeo/devforge-ai-cli" rel="noopener noreferrer"&gt;https://github.com/mffdeo/devforge-ai-cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Landing page: &lt;a href="https://mffdeo.github.io/devforge-ai-cli/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/devforge-ai-cli/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cli</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>O fim do “modelo que faz tudo”? Conheça o Conductor, a IA que orquestra outras IAs</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Fri, 22 May 2026 16:03:08 +0000</pubDate>
      <link>https://dev.to/mffdeo/o-fim-do-modelo-que-faz-tudo-conheca-o-conductor-a-ia-que-orquestra-outras-ias-12m4</link>
      <guid>https://dev.to/mffdeo/o-fim-do-modelo-que-faz-tudo-conheca-o-conductor-a-ia-que-orquestra-outras-ias-12m4</guid>
      <description>&lt;h3&gt;
  
  
  OpenClaw, Hermes e Conductor mostram que o futuro da IA pode estar menos em chatbots isolados e mais em sistemas de agentes coordenados.
&lt;/h3&gt;

&lt;p&gt;Sabe quando você usa um LLM para uma tarefa complexa e percebe que ele vai bem em uma parte, mas tropeça em outra?&lt;/p&gt;

&lt;p&gt;Ele entende a ideia geral, mas erra o cálculo.&lt;br&gt;&lt;br&gt;
Gera código razoável, mas falha na arquitetura.&lt;br&gt;&lt;br&gt;
Explica bem, mas não sabe executar.&lt;br&gt;&lt;br&gt;
Tem bom raciocínio, mas não conhece o seu contexto.&lt;/p&gt;

&lt;p&gt;Durante muito tempo, a solução mais comum foi tentar encontrar “o melhor modelo para tudo”.&lt;/p&gt;

&lt;p&gt;Mas talvez a pergunta certa não seja:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qual é o melhor modelo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Talvez a pergunta mais importante seja:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quem deve coordenar vários modelos, ferramentas e agentes para resolver uma tarefa complexa?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;É nesse ponto que entra o &lt;strong&gt;Conductor&lt;/strong&gt;, apresentado no artigo &lt;strong&gt;“Learning to Orchestrate Agents in Natural Language with the Conductor”&lt;/strong&gt;, da Sakana AI.&lt;/p&gt;

&lt;p&gt;Link do artigo:&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2512.04388" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2512.04388&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E a ideia é muito interessante: em vez de criar mais um modelo gigante para tentar fazer tudo sozinho, os pesquisadores treinaram um modelo menor, de 7B parâmetros, para atuar como um &lt;strong&gt;maestro&lt;/strong&gt; de outros LLMs.&lt;/p&gt;

&lt;p&gt;Ele não é apenas mais um agente.&lt;/p&gt;

&lt;p&gt;Ele é um &lt;strong&gt;orquestrador&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  O que é o Conductor?
&lt;/h2&gt;

&lt;p&gt;O Conductor é um modelo treinado com &lt;strong&gt;aprendizado por reforço&lt;/strong&gt;, ou Reinforcement Learning, para coordenar outros modelos de linguagem.&lt;/p&gt;

&lt;p&gt;Na prática, ele recebe uma tarefa complexa e decide como distribuir o trabalho entre diferentes “agentes trabalhadores”.&lt;/p&gt;

&lt;p&gt;Esses trabalhadores podem ser modelos com capacidades diferentes: um melhor em código, outro melhor em raciocínio, outro melhor em análise, outro melhor em linguagem natural, e assim por diante.&lt;/p&gt;

&lt;p&gt;O Conductor faz principalmente quatro coisas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decompõe o problema em partes menores.&lt;/li&gt;
&lt;li&gt;Decide qual agente ou modelo deve resolver cada parte.&lt;/li&gt;
&lt;li&gt;Escreve instruções específicas para cada trabalhador.&lt;/li&gt;
&lt;li&gt;Define como esses trabalhadores podem trocar informações entre si.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esse último ponto é muito importante.&lt;/p&gt;

&lt;p&gt;O Conductor não apenas envia uma pergunta para vários modelos e escolhe a melhor resposta. Ele aprende a montar uma &lt;strong&gt;topologia de comunicação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ou seja: ele decide quem conversa com quem, em que ordem, com qual contexto e com qual objetivo.&lt;/p&gt;


&lt;h2&gt;
  
  
  Uma metáfora simples: o maestro e a orquestra
&lt;/h2&gt;

&lt;p&gt;Imagine uma orquestra.&lt;/p&gt;

&lt;p&gt;O violinista toca muito bem violino.&lt;br&gt;&lt;br&gt;
O pianista toca muito bem piano.&lt;br&gt;&lt;br&gt;
O percussionista entende ritmo.&lt;br&gt;&lt;br&gt;
O maestro talvez nem toque todos os instrumentos melhor do que cada músico.&lt;/p&gt;

&lt;p&gt;Mas ele sabe algo essencial:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;como coordenar todos eles para produzir uma música melhor do que qualquer músico sozinho conseguiria produzir.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa é a ideia do Conductor.&lt;/p&gt;

&lt;p&gt;Ele não precisa ser o melhor modelo em tudo.&lt;/p&gt;

&lt;p&gt;Ele precisa saber:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;qual modelo chamar;&lt;/li&gt;
&lt;li&gt;quando chamar;&lt;/li&gt;
&lt;li&gt;com qual instrução;&lt;/li&gt;
&lt;li&gt;com qual contexto;&lt;/li&gt;
&lt;li&gt;e como combinar as respostas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de pensar em IA como “um grande cérebro único”, começamos a pensar em IA como uma &lt;strong&gt;sinfonia de inteligências especializadas&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Diagrama conceitual
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27nlsthqdt91kpijohj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27nlsthqdt91kpijohj2.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O ponto central não é apenas chamar vários modelos.&lt;/p&gt;

&lt;p&gt;O ponto central é &lt;strong&gt;aprender a coordená-los&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Por que isso é diferente de um roteador simples?
&lt;/h2&gt;

&lt;p&gt;Um roteador simples poderia fazer algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Se for tarefa de código -&amp;gt; mande para o modelo X
Se for tarefa de texto -&amp;gt; mande para o modelo Y
Se for tarefa matemática -&amp;gt; mande para o modelo Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é útil, mas ainda é limitado.&lt;/p&gt;

&lt;p&gt;O Conductor vai além porque aprende estratégias mais dinâmicas.&lt;/p&gt;

&lt;p&gt;Ele pode perceber que uma tarefa de código exige:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;um agente planejador;&lt;/li&gt;
&lt;li&gt;um agente implementador;&lt;/li&gt;
&lt;li&gt;um agente revisor;&lt;/li&gt;
&lt;li&gt;um agente verificador;&lt;/li&gt;
&lt;li&gt;e talvez uma nova rodada de correção.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ou seja, ele não apenas escolhe um modelo.&lt;/p&gt;

&lt;p&gt;Ele monta um pequeno fluxo de trabalho.&lt;/p&gt;

&lt;p&gt;E o mais interessante: segundo o artigo, o Conductor também pode ser chamado como um dos trabalhadores, criando estruturas recursivas. Em outras palavras, o maestro pode, em certos momentos, participar da própria execução.&lt;/p&gt;

&lt;p&gt;Isso aponta para algo muito importante no futuro dos agentes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a inteligência pode emergir não apenas do tamanho do modelo, mas da qualidade da coordenação entre modelos.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  E onde entram OpenClaw e Hermes Agent?
&lt;/h2&gt;

&lt;p&gt;Quando li sobre o Conductor, uma pergunta veio naturalmente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ele competiria com ferramentas como OpenClaw e Hermes Agent?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Depois de analisar melhor, a resposta mais honesta é:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sim, mas não diretamente.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A resposta mais completa é:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;eles atuam em camadas diferentes de um mesmo futuro.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Conductor está mais próximo da camada de &lt;strong&gt;orquestração cognitiva&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;OpenClaw e Hermes Agent estão mais próximos da camada de &lt;strong&gt;execução, autonomia, memória e operação prática&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Não é exatamente uma competição “ferramenta contra ferramenta”.&lt;/p&gt;

&lt;p&gt;É mais uma convergência de funções.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparando as camadas
&lt;/h2&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimensão&lt;/th&gt;
&lt;th&gt;Conductor&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;th&gt;Hermes Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Papel principal&lt;/td&gt;
&lt;td&gt;Orquestrar modelos/agentes&lt;/td&gt;
&lt;td&gt;Executar tarefas no ambiente do usuário&lt;/td&gt;
&lt;td&gt;Aprender com o uso e manter continuidade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analogia&lt;/td&gt;
&lt;td&gt;Maestro&lt;/td&gt;
&lt;td&gt;Assistente operacional / canivete suíço&lt;/td&gt;
&lt;td&gt;Assistente persistente com memória&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foco&lt;/td&gt;
&lt;td&gt;Delegação inteligente&lt;/td&gt;
&lt;td&gt;Automação real de tarefas&lt;/td&gt;
&lt;td&gt;Aprendizado contínuo e personalização&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pergunta que responde&lt;/td&gt;
&lt;td&gt;“Quem deve resolver cada parte?”&lt;/td&gt;
&lt;td&gt;“Como executar essa tarefa no mundo real?”&lt;/td&gt;
&lt;td&gt;“Como melhorar com base no histórico?”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Camada&lt;/td&gt;
&lt;td&gt;Coordenação&lt;/td&gt;
&lt;td&gt;Execução&lt;/td&gt;
&lt;td&gt;Memória + evolução&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Melhor uso&lt;/td&gt;
&lt;td&gt;Problemas complexos com múltiplas etapas&lt;/td&gt;
&lt;td&gt;Tarefas práticas com ferramentas, arquivos, web e sistema&lt;/td&gt;
&lt;td&gt;Assistente de longo prazo que aprende com você&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Uma analogia de escritório
&lt;/h2&gt;

&lt;p&gt;Imagine uma equipe trabalhando em um projeto complexo.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;OpenClaw&lt;/strong&gt; seria aquele profissional operacional que consegue mexer em várias ferramentas: navegador, arquivos, terminal, automações, APIs e integrações. Ele tem “mãos”.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Hermes Agent&lt;/strong&gt; seria aquele assistente que vai aprendendo com o tempo. Ele lembra preferências, cria habilidades, evolui com base nas experiências anteriores e tenta se tornar mais útil a cada interação. Ele tem “memória”.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Conductor&lt;/strong&gt; seria o coordenador técnico que olha para o problema e diz:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Essa parte vai para o agente de pesquisa.&lt;br&gt;&lt;br&gt;
Essa outra vai para o agente de código.&lt;br&gt;&lt;br&gt;
Depois o revisor confere.&lt;br&gt;&lt;br&gt;
Em seguida o verificador testa.&lt;br&gt;&lt;br&gt;
Só então eu combino tudo em uma resposta final.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ele tem “coordenação”.&lt;/p&gt;

&lt;p&gt;Essas três capacidades são diferentes, mas complementares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mãos;&lt;/li&gt;
&lt;li&gt;memória;&lt;/li&gt;
&lt;li&gt;coordenação.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E talvez o futuro da IA esteja justamente na fusão dessas três camadas.&lt;/p&gt;




&lt;h2&gt;
  
  
  A competição real ainda está se formando
&lt;/h2&gt;

&lt;p&gt;Hoje, eu não vejo o Conductor como um substituto direto de OpenClaw ou Hermes.&lt;/p&gt;

&lt;p&gt;Vejo como uma peça de uma camada superior.&lt;/p&gt;

&lt;p&gt;Um sistema como OpenClaw pode ganhar muito se tiver um orquestrador melhor decidindo quais habilidades usar, em qual ordem e com quais permissões.&lt;/p&gt;

&lt;p&gt;Um sistema como Hermes pode ganhar muito se tiver uma camada de coordenação mais sofisticada para organizar múltiplos perfis, subtarefas e agentes especializados.&lt;/p&gt;

&lt;p&gt;E um Conductor, sozinho, também precisaria de ferramentas de execução, memória, permissões, ambiente, segurança e interface para virar um produto completo.&lt;/p&gt;

&lt;p&gt;Então a pergunta não é:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qual deles vence?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A pergunta mais interessante é:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como essas capacidades vão se juntar?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  O que isso ensina para quem desenvolve software?
&lt;/h2&gt;

&lt;p&gt;Para mim, esse artigo reforça uma mudança importante no desenvolvimento com IA.&lt;/p&gt;

&lt;p&gt;A primeira fase foi usar chatbots.&lt;/p&gt;

&lt;p&gt;A segunda fase foi usar copilotos.&lt;/p&gt;

&lt;p&gt;A terceira fase foi criar agentes com ferramentas.&lt;/p&gt;

&lt;p&gt;Agora estamos entrando em uma fase em que a habilidade principal passa a ser &lt;strong&gt;orquestrar sistemas de agentes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso muda o papel do desenvolvedor.&lt;/p&gt;

&lt;p&gt;O desenvolvedor deixa de apenas pedir código para uma IA e passa a pensar em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;decomposição de tarefas;&lt;/li&gt;
&lt;li&gt;escolha de modelos;&lt;/li&gt;
&lt;li&gt;roteamento de contexto;&lt;/li&gt;
&lt;li&gt;memória;&lt;/li&gt;
&lt;li&gt;permissões;&lt;/li&gt;
&lt;li&gt;segurança;&lt;/li&gt;
&lt;li&gt;avaliação;&lt;/li&gt;
&lt;li&gt;logs;&lt;/li&gt;
&lt;li&gt;custo;&lt;/li&gt;
&lt;li&gt;qualidade;&lt;/li&gt;
&lt;li&gt;revisão humana;&lt;/li&gt;
&lt;li&gt;e governança.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja, o problema deixa de ser apenas “gerar código”.&lt;/p&gt;

&lt;p&gt;O problema passa a ser construir um &lt;strong&gt;sistema confiável de trabalho assistido por IA&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  O risco: autonomia sem governança
&lt;/h2&gt;

&lt;p&gt;Existe também um lado perigoso nessa evolução.&lt;/p&gt;

&lt;p&gt;Quanto mais agentes ganham ferramentas, memória e capacidade de agir, maior fica a superfície de risco.&lt;/p&gt;

&lt;p&gt;Um agente com acesso a arquivos, e-mail, terminal, navegador, banco de dados e APIs não é apenas um chatbot.&lt;/p&gt;

&lt;p&gt;Ele é uma entidade operacional.&lt;/p&gt;

&lt;p&gt;Se esse agente for mal instruído, mal isolado ou mal monitorado, ele pode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;executar comandos errados;&lt;/li&gt;
&lt;li&gt;vazar informações;&lt;/li&gt;
&lt;li&gt;acessar dados sensíveis;&lt;/li&gt;
&lt;li&gt;tomar decisões sem aprovação;&lt;/li&gt;
&lt;li&gt;criar automações perigosas;&lt;/li&gt;
&lt;li&gt;ou simplesmente gerar caos em escala.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por isso, a próxima geração de IA não pode ser apenas mais poderosa.&lt;/p&gt;

&lt;p&gt;Ela precisa ser mais governável.&lt;/p&gt;

&lt;p&gt;O futuro não será apenas sobre agentes autônomos.&lt;/p&gt;

&lt;p&gt;Será sobre agentes autônomos com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;limites claros;&lt;/li&gt;
&lt;li&gt;permissões explícitas;&lt;/li&gt;
&lt;li&gt;trilhas de auditoria;&lt;/li&gt;
&lt;li&gt;revisão humana;&lt;/li&gt;
&lt;li&gt;avaliação contínua;&lt;/li&gt;
&lt;li&gt;e mecanismos de segurança.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Para onde estamos convergindo?
&lt;/h2&gt;

&lt;p&gt;Na minha visão, estamos convergindo para uma arquitetura com três grandes camadas.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Camada de orquestração
&lt;/h3&gt;

&lt;p&gt;É onde entra algo como o Conductor.&lt;/p&gt;

&lt;p&gt;Essa camada decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;qual agente chamar;&lt;/li&gt;
&lt;li&gt;qual modelo usar;&lt;/li&gt;
&lt;li&gt;qual contexto enviar;&lt;/li&gt;
&lt;li&gt;qual subtarefa executar;&lt;/li&gt;
&lt;li&gt;qual resposta revisar;&lt;/li&gt;
&lt;li&gt;e quando pedir intervenção humana.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ela é o cérebro coordenador.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Camada de execução
&lt;/h3&gt;

&lt;p&gt;É onde entram ferramentas como OpenClaw e outros agentes operacionais.&lt;/p&gt;

&lt;p&gt;Essa camada executa ações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abrir arquivos;&lt;/li&gt;
&lt;li&gt;consultar APIs;&lt;/li&gt;
&lt;li&gt;navegar na web;&lt;/li&gt;
&lt;li&gt;escrever código;&lt;/li&gt;
&lt;li&gt;rodar scripts;&lt;/li&gt;
&lt;li&gt;criar documentos;&lt;/li&gt;
&lt;li&gt;enviar mensagens;&lt;/li&gt;
&lt;li&gt;interagir com sistemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ela é o corpo operacional.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Camada de memória e aprendizado
&lt;/h3&gt;

&lt;p&gt;É onde entram sistemas como Hermes Agent e arquiteturas com memória persistente.&lt;/p&gt;

&lt;p&gt;Essa camada registra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preferências;&lt;/li&gt;
&lt;li&gt;decisões anteriores;&lt;/li&gt;
&lt;li&gt;erros recorrentes;&lt;/li&gt;
&lt;li&gt;habilidades aprendidas;&lt;/li&gt;
&lt;li&gt;contexto de projetos;&lt;/li&gt;
&lt;li&gt;padrões de trabalho;&lt;/li&gt;
&lt;li&gt;e histórico de interações.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ela é a continuidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  A plataforma de IA do futuro
&lt;/h2&gt;

&lt;p&gt;A plataforma de IA do futuro provavelmente não será apenas um chatbot bonito.&lt;/p&gt;

&lt;p&gt;Também não será apenas um agente que executa comandos.&lt;/p&gt;

&lt;p&gt;Ela será uma combinação de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;orquestração;&lt;/li&gt;
&lt;li&gt;execução;&lt;/li&gt;
&lt;li&gt;memória;&lt;/li&gt;
&lt;li&gt;avaliação;&lt;/li&gt;
&lt;li&gt;segurança;&lt;/li&gt;
&lt;li&gt;governança;&lt;/li&gt;
&lt;li&gt;e experiência de usuário.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algo mais ou menos assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yd24wi8nxu0n6t44fkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yd24wi8nxu0n6t44fkr.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O grande diferencial não será apenas “ter IA”.&lt;/p&gt;

&lt;p&gt;Será saber construir sistemas em que a IA consiga trabalhar com segurança, contexto e responsabilidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Conductor é importante porque aponta para uma mudança de mentalidade.&lt;/p&gt;

&lt;p&gt;A pergunta deixa de ser:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Qual modelo é mais inteligente?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E passa a ser:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Qual sistema consegue coordenar melhor várias inteligências?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenClaw, Hermes Agent e Conductor representam peças diferentes desse quebra-cabeça.&lt;/p&gt;

&lt;p&gt;OpenClaw aponta para a execução.&lt;br&gt;&lt;br&gt;
Hermes aponta para memória e aprendizado contínuo.&lt;br&gt;&lt;br&gt;
Conductor aponta para orquestração.&lt;/p&gt;

&lt;p&gt;Separados, eles já são interessantes.&lt;/p&gt;

&lt;p&gt;Juntos, eles mostram para onde estamos indo.&lt;/p&gt;

&lt;p&gt;Estamos saindo da era do modelo único e entrando na era dos &lt;strong&gt;sistemas de agentes coordenados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Uma era em que a inteligência não estará apenas no modelo, mas na arquitetura ao redor dele.&lt;/p&gt;

&lt;p&gt;A IA do futuro não será apenas um cérebro gigante.&lt;/p&gt;

&lt;p&gt;Será uma orquestra.&lt;/p&gt;

&lt;p&gt;E o grande desafio será construir o maestro, os instrumentos, as regras de segurança e a partitura certa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Artigo do Conductor no arXiv:&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2512.04388" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2512.04388&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Página da Sakana AI sobre o Conductor:&lt;br&gt;&lt;br&gt;
&lt;a href="https://sakana.ai/learning-to-orchestrate/" rel="noopener noreferrer"&gt;https://sakana.ai/learning-to-orchestrate/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenClaw no GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/openclaw" rel="noopener noreferrer"&gt;https://github.com/openclaw&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hermes Agent — documentação oficial:&lt;br&gt;&lt;br&gt;
&lt;a href="https://hermes-agent.nousresearch.com/docs/" rel="noopener noreferrer"&gt;https://hermes-agent.nousresearch.com/docs/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hermes Agent no GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;https://github.com/NousResearch/hermes-agent&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Eu parei de rodar agentes de IA direto no meu WSL: usando Dev Containers + gVisor com Claude Code e Codex</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Wed, 20 May 2026 17:28:28 +0000</pubDate>
      <link>https://dev.to/mffdeo/eu-parei-de-rodar-agentes-de-ia-direto-no-meu-wsl-usando-dev-containers-gvisor-com-claude-code-e-3cob</link>
      <guid>https://dev.to/mffdeo/eu-parei-de-rodar-agentes-de-ia-direto-no-meu-wsl-usando-dev-containers-gvisor-com-claude-code-e-3cob</guid>
      <description>&lt;p&gt;Nos últimos tempos, comecei a usar cada vez mais agentes de IA no terminal para desenvolvimento de software: &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;Codex&lt;/strong&gt;, &lt;strong&gt;OpenCode&lt;/strong&gt; e outras ferramentas parecidas.&lt;/p&gt;

&lt;p&gt;O fluxo parece simples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;meu-projeto
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois, dentro do terminal integrado do VS Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Só que aí veio uma dúvida importante:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eu estou rodando esses agentes dentro de um ambiente seguro ou eles estão diretamente no meu sistema operacional?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A resposta, na maioria dos casos, é: &lt;strong&gt;se você só abriu o terminal do Ubuntu/WSL e digitou &lt;code&gt;claude&lt;/code&gt; ou &lt;code&gt;codex&lt;/code&gt;, provavelmente o agente está rodando direto no seu ambiente real&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E isso muda bastante o nível de risco.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que isso importa?
&lt;/h2&gt;

&lt;p&gt;Agentes de IA para programação não são apenas chats que respondem perguntas.&lt;/p&gt;

&lt;p&gt;Eles podem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ler arquivos do projeto;&lt;/li&gt;
&lt;li&gt;editar código;&lt;/li&gt;
&lt;li&gt;criar arquivos;&lt;/li&gt;
&lt;li&gt;apagar arquivos;&lt;/li&gt;
&lt;li&gt;executar comandos de terminal;&lt;/li&gt;
&lt;li&gt;instalar dependências;&lt;/li&gt;
&lt;li&gt;rodar testes;&lt;/li&gt;
&lt;li&gt;subir servidores locais;&lt;/li&gt;
&lt;li&gt;acessar a internet, dependendo das permissões;&lt;/li&gt;
&lt;li&gt;interagir com ferramentas do seu ambiente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso é poderoso.&lt;/p&gt;

&lt;p&gt;Mas também cria uma superfície de risco.&lt;/p&gt;

&lt;p&gt;Imagine alguns cenários:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o agente entende errado uma instrução e executa um comando destrutivo;&lt;/li&gt;
&lt;li&gt;você aprova um comando sem ler com atenção;&lt;/li&gt;
&lt;li&gt;um arquivo do projeto contém uma instrução maliciosa para induzir o agente a agir fora do esperado;&lt;/li&gt;
&lt;li&gt;o agente acessa arquivos que não deveria;&lt;/li&gt;
&lt;li&gt;alguma dependência ou script executado pelo agente faz mais do que você imaginava.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é questão de demonizar as ferramentas. Pelo contrário: elas são extremamente úteis.&lt;/p&gt;

&lt;p&gt;A questão é simples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se vamos dar autonomia para agentes executarem comandos, precisamos criar limites claros para onde eles podem atuar.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  O problema do terminal “normal”
&lt;/h2&gt;

&lt;p&gt;Meu fluxo antes era algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projetos/meu-projeto
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois, no terminal integrado do VS Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O problema é que esse terminal estava apontando para algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/meu-usuario/projetos/meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja: eu estava no ambiente real do meu Ubuntu/WSL.&lt;/p&gt;

&lt;p&gt;Nesse caso, o agente não está automaticamente dentro de um container só porque estou usando VS Code.&lt;/p&gt;

&lt;p&gt;Ele está rodando no mesmo ambiente em que ficam minhas ferramentas, configurações, chaves, arquivos, histórico e dependências.&lt;/p&gt;




&lt;h2&gt;
  
  
  A ideia: colocar o ambiente de trabalho dentro de um Dev Container
&lt;/h2&gt;

&lt;p&gt;O primeiro passo para melhorar isso é usar &lt;strong&gt;Dev Containers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com Dev Containers, o VS Code abre o projeto dentro de um container Docker. O editor continua confortável, mas o terminal, as extensões e as ferramentas de desenvolvimento passam a rodar dentro do container.&lt;/p&gt;

&lt;p&gt;Na prática, o caminho muda de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/meu-usuario/projetos/meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/workspaces/meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse detalhe é importante.&lt;/p&gt;

&lt;p&gt;Quando o terminal mostra &lt;code&gt;/workspaces/...&lt;/code&gt;, significa que você está dentro do Dev Container.&lt;/p&gt;

&lt;p&gt;O fluxo passa a ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VS Code
→ Dev Container
→ ambiente isolado
→ agente de IA
→ projeto montado em /workspaces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A documentação oficial do VS Code explica que Dev Containers permitem abrir uma pasta dentro de um container e usar esse container como ambiente completo de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="noopener noreferrer"&gt;https://code.visualstudio.com/docs/devcontainers/containers&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Mas Docker puro é suficiente?
&lt;/h2&gt;

&lt;p&gt;Docker já ajuda bastante, mas container tradicional não é uma barreira perfeita.&lt;/p&gt;

&lt;p&gt;Containers compartilham o kernel do host. Isso significa que eles isolam processos, filesystem, rede e permissões, mas não são a mesma coisa que uma máquina virtual completa.&lt;/p&gt;

&lt;p&gt;Por isso existem camadas extras de isolamento, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;permissões do próprio agente;&lt;/li&gt;
&lt;li&gt;sandbox nativo da ferramenta;&lt;/li&gt;
&lt;li&gt;seccomp;&lt;/li&gt;
&lt;li&gt;gVisor;&lt;/li&gt;
&lt;li&gt;microVMs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui é onde a confusão começa.&lt;/p&gt;

&lt;p&gt;Muita gente fala “use Docker com Claude Code” ou “use sandbox com agente de IA”, mas isso pode significar coisas diferentes.&lt;/p&gt;

&lt;p&gt;Pode significar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;rodar o agente dentro de um container;&lt;/li&gt;
&lt;li&gt;fazer o código gerado aparecer no host por volume montado;&lt;/li&gt;
&lt;li&gt;usar o sandbox nativo do agente;&lt;/li&gt;
&lt;li&gt;usar gVisor como runtime do Docker;&lt;/li&gt;
&lt;li&gt;usar microVMs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No meu caso, eu queria um equilíbrio entre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;continuar usando VS Code normalmente;&lt;/li&gt;
&lt;li&gt;manter o terminal integrado funcionando;&lt;/li&gt;
&lt;li&gt;usar Claude Code e Codex dentro do projeto;&lt;/li&gt;
&lt;li&gt;não rodar tudo direto no WSL;&lt;/li&gt;
&lt;li&gt;adicionar uma camada extra além do Docker padrão.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A solução foi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VS Code
→ Dev Container
→ Docker
→ gVisor / runsc-ptrace
→ Claude Code ou Codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  O que é gVisor?
&lt;/h2&gt;

&lt;p&gt;gVisor é uma camada de isolamento criada para rodar containers com uma barreira adicional entre o container e o kernel do host.&lt;/p&gt;

&lt;p&gt;Em vez de deixar as chamadas de sistema do container irem diretamente para o kernel do sistema, o gVisor intercepta e implementa parte desse comportamento em um kernel de usuário.&lt;/p&gt;

&lt;p&gt;Na prática, ele fica entre o container e o sistema operacional.&lt;/p&gt;

&lt;p&gt;Referência oficial: &lt;a href="https://gvisor.dev/" rel="noopener noreferrer"&gt;https://gvisor.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No Docker, usamos o runtime &lt;code&gt;runsc&lt;/code&gt; para executar containers com gVisor.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;runsc &lt;span class="nt"&gt;--rm&lt;/span&gt; hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Referência: &lt;a href="https://gvisor.dev/docs/user_guide/quick_start/docker/" rel="noopener noreferrer"&gt;https://gvisor.dev/docs/user_guide/quick_start/docker/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  O detalhe no WSL2: &lt;code&gt;systrap&lt;/code&gt; falhou, &lt;code&gt;ptrace&lt;/code&gt; funcionou
&lt;/h2&gt;

&lt;p&gt;Durante a configuração, um detalhe importante apareceu.&lt;/p&gt;

&lt;p&gt;O runtime padrão do gVisor usando &lt;code&gt;runsc&lt;/code&gt; falhou no meu ambiente WSL2 com um erro parecido com este:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OCI runtime start failed: starting container: starting root container: urpc method "containerManager.StartRoot" failed: EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de investigar, o problema estava na plataforma padrão usada pelo gVisor, chamada &lt;code&gt;systrap&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A solução foi registrar um runtime alternativo usando &lt;code&gt;ptrace&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;runsc &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--runtime&lt;/span&gt; runsc-ptrace &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--platform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ptrace
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;service docker restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois testei:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;runsc-ptrace &lt;span class="nt"&gt;--rm&lt;/span&gt; hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E funcionou.&lt;/p&gt;

&lt;p&gt;Então, no meu ambiente, o caminho funcional ficou:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker + gVisor usando runsc-ptrace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ptrace&lt;/code&gt; pode ser mais lento que &lt;code&gt;systrap&lt;/code&gt;, mas tende a ser mais compatível em ambientes como WSL2.&lt;/p&gt;

&lt;p&gt;Referência sobre plataformas do gVisor: &lt;a href="https://gvisor.dev/docs/user_guide/platforms/" rel="noopener noreferrer"&gt;https://gvisor.dev/docs/user_guide/platforms/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  O template &lt;code&gt;.devcontainer&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Depois disso, criei um template simples para reaproveitar em qualquer projeto.&lt;/p&gt;

&lt;p&gt;O arquivo principal é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.devcontainer/devcontainer.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com esta ideia central:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Agent Dev Container - gVisor ptrace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcr.microsoft.com/devcontainers/base:ubuntu"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"runArgs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"--runtime=runsc-ptrace"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"features"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ghcr.io/devcontainers/features/node:1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"22"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ghcr.io/devcontainers/features/python:1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.12"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"postCreateCommand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"corepack enable &amp;amp;&amp;amp; corepack prepare pnpm@10.0.0 --activate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"customizations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"vscode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ms-azuretools.vscode-docker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ms-python.python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"bradlc.vscode-tailwindcss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"remoteUser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vscode"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A parte mais importante é esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"runArgs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"--runtime=runsc-ptrace"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso força o Dev Container a subir usando o runtime do gVisor que funcionou no WSL2.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como usar em qualquer projeto
&lt;/h2&gt;

&lt;p&gt;Depois de ter Docker, gVisor e &lt;code&gt;runsc-ptrace&lt;/code&gt; configurados no sistema, não preciso repetir tudo em cada projeto.&lt;/p&gt;

&lt;p&gt;Para um projeto novo, basta copiar a pasta &lt;code&gt;.devcontainer&lt;/code&gt; para a raiz do projeto.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; caminho/para/agent-devcontainer-gvisor-template/.devcontainer meu-projeto/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;meu-projeto
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No VS Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl + Shift + P
Dev Containers: Reopen in Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando abrir o terminal integrado, verifico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se aparecer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/workspaces/meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;então estou dentro do Dev Container.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como confirmar se está usando gVisor
&lt;/h2&gt;

&lt;p&gt;Em outro terminal, fora do Dev Container, posso rodar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker inspect &lt;span class="si"&gt;$(&lt;/span&gt;docker ps &lt;span class="nt"&gt;-q&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 1&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; &lt;span class="s1"&gt;'{{.HostConfig.Runtime}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O esperado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;runsc-ptrace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se aparecer isso, o Dev Container está rodando com o runtime configurado.&lt;/p&gt;




&lt;h2&gt;
  
  
  E o Claude Code?
&lt;/h2&gt;

&lt;p&gt;O Claude Code possui sandbox nativo.&lt;/p&gt;

&lt;p&gt;No Linux/WSL2, a documentação oficial fala sobre o uso de &lt;code&gt;bubblewrap&lt;/code&gt; e &lt;code&gt;socat&lt;/code&gt; para o sandbox.&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="https://code.claude.com/docs/en/sandboxing" rel="noopener noreferrer"&gt;https://code.claude.com/docs/en/sandboxing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro do Claude Code, posso rodar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/sandbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E escolher:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sandbox BashTool, with regular permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse modo mantém o BashTool sandboxado, mas ainda usa o fluxo normal de permissões.&lt;/p&gt;

&lt;p&gt;Para mim, é um bom equilíbrio entre segurança e controle.&lt;/p&gt;

&lt;p&gt;Com isso, o fluxo fica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dev Container
→ gVisor / runsc-ptrace
→ Claude Code
→ sandbox nativo do Claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  E o Codex?
&lt;/h2&gt;

&lt;p&gt;O Codex também trabalha com a ideia de permissões e sandbox.&lt;/p&gt;

&lt;p&gt;No menu de permissões, o modo que escolhi foi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse modo permite que o Codex leia, edite arquivos e execute comandos dentro do workspace, mas exige aprovação para acessar a internet ou editar arquivos fora do projeto.&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="https://developers.openai.com/codex/agent-approvals-security" rel="noopener noreferrer"&gt;https://developers.openai.com/codex/agent-approvals-security&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na prática, isso combina bem com o Dev Container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dev Container
→ gVisor / runsc-ptrace
→ Codex
→ permissões Default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  O que não fazer
&lt;/h2&gt;

&lt;p&gt;Eu evitaria usar agentes direto em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/meu-usuario/projetos/meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;principalmente com permissões amplas.&lt;/p&gt;

&lt;p&gt;Também evitaria começar usando modos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Full Access
danger-full-access
--dangerously-skip-permissions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses modos podem fazer sentido em ambientes descartáveis e controlados, mas não são uma boa escolha inicial para o dia a dia.&lt;/p&gt;

&lt;p&gt;Para uso normal, prefiro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;workspace limitado
aprovação manual
rede controlada
ambiente isolado
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Isso resolve 100% da segurança?
&lt;/h2&gt;

&lt;p&gt;Não.&lt;/p&gt;

&lt;p&gt;Esse setup não é uma promessa de segurança perfeita.&lt;/p&gt;

&lt;p&gt;Ele é uma melhoria prática.&lt;/p&gt;

&lt;p&gt;A ideia é reduzir o risco de rodar agentes de IA diretamente no sistema principal.&lt;/p&gt;

&lt;p&gt;Ainda é importante:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;revisar comandos antes de aprovar;&lt;/li&gt;
&lt;li&gt;não expor credenciais desnecessárias;&lt;/li&gt;
&lt;li&gt;não montar pastas sensíveis no container;&lt;/li&gt;
&lt;li&gt;não usar Full Access sem necessidade;&lt;/li&gt;
&lt;li&gt;revisar o diff antes de commitar;&lt;/li&gt;
&lt;li&gt;manter dependências e imagens atualizadas;&lt;/li&gt;
&lt;li&gt;tratar agentes como ferramentas poderosas, não como usuários totalmente confiáveis.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  O template no GitHub
&lt;/h2&gt;

&lt;p&gt;Para facilitar, deixei um template simples no GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mffdeo/agent-devcontainer-gvisor-template" rel="noopener noreferrer"&gt;https://github.com/mffdeo/agent-devcontainer-gvisor-template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A ideia é copiar a pasta &lt;code&gt;.devcontainer&lt;/code&gt; para qualquer projeto e abrir com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dev Containers: Reopen in Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O template assume que você já configurou Docker, gVisor e &lt;code&gt;runsc-ptrace&lt;/code&gt; no ambiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Usar agentes de IA no terminal está ficando cada vez mais comum.&lt;/p&gt;

&lt;p&gt;Mas existe uma diferença enorme entre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rodar um agente direto no seu sistema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rodar um agente dentro de um ambiente isolado, com permissões controladas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para mim, o caminho que fez sentido foi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VS Code
→ Dev Container
→ Docker
→ gVisor / runsc-ptrace
→ Claude Code ou Codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não é o único caminho possível.&lt;/p&gt;

&lt;p&gt;Mas é um caminho prático, reproduzível e mais seguro para quem quer usar agentes de IA no desenvolvimento local sem entregar o sistema inteiro de bandeja.&lt;/p&gt;

&lt;p&gt;Se você usa Claude Code, Codex ou outros agentes no terminal, vale a pena parar alguns minutos e perguntar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Esse agente está rodando onde exatamente?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa pergunta muda tudo.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>docker</category>
      <category>security</category>
    </item>
    <item>
      <title>Comecei a construir a Stackovia Learning Series: uma trilha open source gratuita para aprender desenvolvimento moderno</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Tue, 19 May 2026 03:41:06 +0000</pubDate>
      <link>https://dev.to/mffdeo/comecei-a-construir-a-stackovia-learning-series-uma-trilha-open-source-gratuita-para-aprender-4507</link>
      <guid>https://dev.to/mffdeo/comecei-a-construir-a-stackovia-learning-series-uma-trilha-open-source-gratuita-para-aprender-4507</guid>
      <description>&lt;p&gt;Nos últimos meses eu venho estudando desenvolvimento de software com mais intensidade, tentando organizar melhor minha evolução e transformar estudo em algo mais concreto.&lt;/p&gt;

&lt;p&gt;Não queria apenas assistir aulas, fazer anotações soltas ou acumular links. Queria construir uma trilha que me obrigasse a praticar, documentar, revisar e publicar evidências reais do aprendizado.&lt;/p&gt;

&lt;p&gt;Foi assim que nasceu a Stackovia Learning Series.&lt;/p&gt;

&lt;p&gt;A Stackovia é uma série open source e gratuita de estudos em desenvolvimento moderno. A proposta é começar pelos fundamentos e evoluir, volume por volume, até temas mais avançados como full stack, DevOps, arquitetura, IA, agentes e segurança.&lt;/p&gt;

&lt;p&gt;O hub já está no ar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mffdeo.github.io/stackovia-learning/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-learning/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por que criar mais um projeto de estudos?&lt;/p&gt;

&lt;p&gt;Porque nem sempre as pessoas têm dinheiro para pagar cursos.&lt;/p&gt;

&lt;p&gt;Muita gente quer aprender tecnologia, melhorar de vida, migrar de área ou simplesmente construir algo melhor para si mesma, mas esbarra em material caro, trilhas confusas, excesso de conteúdo solto ou falta de direção.&lt;/p&gt;

&lt;p&gt;Ao mesmo tempo, eu também estou aprendendo.&lt;/p&gt;

&lt;p&gt;Então a ideia da Stackovia é unir as duas coisas:&lt;/p&gt;

&lt;p&gt;estudar com mais profundidade;&lt;br&gt;
escrever para organizar o pensamento;&lt;br&gt;
construir projetos práticos;&lt;br&gt;
transformar cada etapa em evidência pública;&lt;br&gt;
compartilhar gratuitamente com quem também estiver aprendendo.&lt;/p&gt;

&lt;p&gt;Eu não estou criando a Stackovia como alguém que “já sabe tudo”. Estou criando como alguém em evolução, documentando a caminhada com honestidade.&lt;/p&gt;

&lt;p&gt;A proposta da série&lt;/p&gt;

&lt;p&gt;A Stackovia será organizada em 11 volumes:&lt;/p&gt;

&lt;p&gt;Fundamentos do Desenvolvedor Moderno&lt;br&gt;
Frontend Profissional com React e Next.js&lt;br&gt;
Backend Profissional com FastAPI&lt;br&gt;
Full Stack: Produto Real de Ponta a Ponta&lt;br&gt;
System Design, Software Architecture e Aplicações Robustas&lt;br&gt;
Docker, AWS e DevOps Foundation&lt;br&gt;
Kubernetes e Platform Engineering&lt;br&gt;
Prompt Engineering e Fundamentos de LLMs&lt;br&gt;
AI Engineer: Embeddings, Vector DB, RAG e Multimodal&lt;br&gt;
AI Agents em Produção&lt;br&gt;
AI Red Teaming, Governança e Tech Lead Capstone&lt;/p&gt;

&lt;p&gt;A ideia não é fazer uma lista infinita de tópicos. Cada volume terá capítulos, projeto integrador, entregas práticas e evidências de portfólio.&lt;/p&gt;

&lt;p&gt;O que já está no ar&lt;/p&gt;

&lt;p&gt;O hub da série já está publicado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mffdeo.github.io/stackovia-learning/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-learning/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E o Volume 1 também já começou:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste primeiro momento, o Volume 1 está focado em fundamentos:&lt;/p&gt;

&lt;p&gt;terminal;&lt;br&gt;
organização de pastas;&lt;br&gt;
Git e GitHub;&lt;br&gt;
HTML;&lt;br&gt;
CSS;&lt;br&gt;
JavaScript básico;&lt;br&gt;
HTTP;&lt;br&gt;
segurança inicial;&lt;br&gt;
construção de portfólio.&lt;/p&gt;

&lt;p&gt;Os primeiros capítulos já estão publicados em modo preview.&lt;/p&gt;

&lt;p&gt;A ideia central: não é só estudo, é evidência&lt;/p&gt;

&lt;p&gt;Um dos princípios da Stackovia é que estudar precisa gerar algum tipo de evidência.&lt;/p&gt;

&lt;p&gt;Isso pode ser:&lt;/p&gt;

&lt;p&gt;um README bem escrito;&lt;br&gt;
um commit bem explicado;&lt;br&gt;
um diagrama;&lt;br&gt;
um checklist;&lt;br&gt;
um pequeno projeto;&lt;br&gt;
um post técnico;&lt;br&gt;
uma release;&lt;br&gt;
uma explicação clara do que foi feito e do que ainda não foi feito.&lt;/p&gt;

&lt;p&gt;A ideia é evitar aquela sensação de “estudei muita coisa, mas não consigo mostrar nada”.&lt;/p&gt;

&lt;p&gt;O papel da IA nesse processo&lt;/p&gt;

&lt;p&gt;Também tenho muito interesse em IA aplicada ao desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Mas não vejo IA apenas como “ferramenta para gerar código”. O que mais me interessa é entender como ela pode ajudar em fluxos reais:&lt;/p&gt;

&lt;p&gt;organizar contexto;&lt;br&gt;
apoiar documentação;&lt;br&gt;
revisar decisões;&lt;br&gt;
sugerir testes;&lt;br&gt;
ajudar no aprendizado;&lt;br&gt;
estruturar trilhas;&lt;br&gt;
avaliar qualidade;&lt;br&gt;
apoiar agentes;&lt;br&gt;
aumentar produtividade sem remover responsabilidade humana.&lt;/p&gt;

&lt;p&gt;A Stackovia também serve como laboratório para isso: construir com IA, mas com revisão, rastreabilidade, controle de escopo e preocupação com qualidade.&lt;/p&gt;

&lt;p&gt;Um projeto open source em construção&lt;/p&gt;

&lt;p&gt;A Stackovia ainda está no começo.&lt;/p&gt;

&lt;p&gt;O hub está online, o Volume 1 começou e os primeiros capítulos estão publicados. Ainda há muito trabalho pela frente: escrever, revisar, melhorar o site, evoluir os projetos, gerar PDFs e organizar contribuições.&lt;/p&gt;

&lt;p&gt;Mas decidi publicar cedo porque acredito que construir em público ajuda a melhorar o projeto.&lt;/p&gt;

&lt;p&gt;Feedbacks, críticas, sugestões e correções são muito bem-vindos.&lt;/p&gt;

&lt;p&gt;Links&lt;/p&gt;

&lt;p&gt;Hub da série:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-learning/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-learning/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Volume 1:&lt;br&gt;
&lt;a href="https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/" rel="noopener noreferrer"&gt;https://mffdeo.github.io/stackovia-vol01-fundamentos-dev-moderno/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositório hub:&lt;br&gt;
&lt;a href="https://github.com/mffdeo/stackovia-learning" rel="noopener noreferrer"&gt;https://github.com/mffdeo/stackovia-learning&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositório do Volume 1:&lt;br&gt;
&lt;a href="https://github.com/mffdeo/stackovia-vol01-fundamentos-dev-moderno" rel="noopener noreferrer"&gt;https://github.com/mffdeo/stackovia-vol01-fundamentos-dev-moderno&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se a ideia fizer sentido para você, fique à vontade para acompanhar, sugerir melhorias, abrir issue, compartilhar ou deixar uma estrela no GitHub.&lt;/p&gt;

&lt;p&gt;A Stackovia é, ao mesmo tempo, meu projeto de aprendizado, meu laboratório de escrita técnica e minha forma de contribuir com quem também está estudando tecnologia.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Eu achava que Node.js era o “Django do JavaScript”… até entender isso</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Fri, 03 Apr 2026 23:25:52 +0000</pubDate>
      <link>https://dev.to/mffdeo/eu-achava-que-nodejs-era-o-django-do-javascript-ate-entender-isso-4904</link>
      <guid>https://dev.to/mffdeo/eu-achava-que-nodejs-era-o-django-do-javascript-ate-entender-isso-4904</guid>
      <description>&lt;p&gt;Se você está começando no desenvolvimento web, deixa eu tentar adivinhar:&lt;/p&gt;

&lt;p&gt;Em algum momento você pensou algo como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Se Django é o principal framework do Python… então Node.js deve ser tipo isso pro JavaScript, né?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eu também pensei assim.&lt;/p&gt;

&lt;p&gt;E foi aí que começou a confusão.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤯 O momento em que tudo não fez sentido
&lt;/h2&gt;

&lt;p&gt;Eu comecei a pesquisar sobre backend e vi coisas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;NestJS&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E aí veio a dúvida:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Por que Python tem &lt;em&gt;um nome forte&lt;/em&gt; (Django)… mas JavaScript tem vários?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Parecia que eu estava comparando coisas… que não eram comparáveis.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 A virada de chave
&lt;/h2&gt;

&lt;p&gt;Depois de um tempo, caiu a ficha:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Eu estava comparando um ambiente com um framework.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E isso muda tudo.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 A base vs a construção
&lt;/h2&gt;

&lt;p&gt;Vamos simplificar ao máximo:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Node.js
&lt;/h3&gt;

&lt;p&gt;Não é um framework.&lt;/p&gt;

&lt;p&gt;É um &lt;strong&gt;ambiente que permite rodar JavaScript fora do navegador&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 Ele é o &lt;em&gt;terreno&lt;/em&gt; onde você vai construir.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 Django
&lt;/h3&gt;

&lt;p&gt;É um &lt;strong&gt;framework completo para aplicações web em Python&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 Ele já é praticamente a &lt;em&gt;casa pronta&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚖️ A comparação correta (agora sim faz sentido)
&lt;/h2&gt;

&lt;p&gt;Quando você ajusta a lente, fica claro:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Python + Django ≈ Node.js + (Express | NestJS | AdonisJS)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js sozinho não compete com Django&lt;/li&gt;
&lt;li&gt;Você precisa de um framework junto&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏗️ Duas filosofias totalmente diferentes
&lt;/h2&gt;

&lt;p&gt;Aqui é onde a escolha realmente importa 👇&lt;/p&gt;




&lt;h3&gt;
  
  
  🟦 Django — “já vem com tudo”
&lt;/h3&gt;

&lt;p&gt;Django segue a ideia de:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Não perca tempo decidindo, só construa.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Você já ganha:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sistema de autenticação&lt;/li&gt;
&lt;li&gt;ORM&lt;/li&gt;
&lt;li&gt;Painel admin&lt;/li&gt;
&lt;li&gt;Segurança pronta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Sensação: &lt;em&gt;produtividade imediata&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🟨 Node.js — “monte do seu jeito”
&lt;/h3&gt;

&lt;p&gt;No mundo Node:&lt;/p&gt;

&lt;p&gt;Você escolhe tudo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Framework (Express, NestJS…)&lt;/li&gt;
&lt;li&gt;Banco (Mongo, PostgreSQL…)&lt;/li&gt;
&lt;li&gt;ORM (Prisma, Sequelize…)&lt;/li&gt;
&lt;li&gt;Auth (JWT, OAuth…)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Sensação: &lt;em&gt;liberdade total (e um pouco de caos no começo)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 O erro mais comum de iniciantes
&lt;/h2&gt;

&lt;p&gt;Achar que:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Node.js é um framework igual ao Django”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quando na verdade:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Node.js é só o começo da stack&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 Então… qual é melhor?
&lt;/h2&gt;

&lt;p&gt;Resposta honesta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Depende do tipo de dor que você quer ter 😂&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Vá de Django se você quer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Começar rápido&lt;/li&gt;
&lt;li&gt;Menos decisões técnicas&lt;/li&gt;
&lt;li&gt;Estrutura pronta&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Vá de Node.js se você quer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Flexibilidade&lt;/li&gt;
&lt;li&gt;Trabalhar com JavaScript em tudo&lt;/li&gt;
&lt;li&gt;Entender melhor como as peças se conectam&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Conclusão (a versão que eu gostaria de ter ouvido antes)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Django é um pacote completo. Node.js é uma caixa de ferramentas.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Um te dá tudo pronto.&lt;br&gt;
O outro te dá liberdade pra montar.&lt;/p&gt;

&lt;p&gt;Nenhum é melhor universalmente — só são diferentes.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Agora me conta
&lt;/h2&gt;

&lt;p&gt;Você também já confundiu isso no começo?&lt;/p&gt;

&lt;p&gt;Ou ainda tá tentando decidir qual caminho seguir?&lt;/p&gt;

&lt;p&gt;Comenta aí — sempre tem alguém passando pela mesma dúvida que você 👇&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Construindo minha primeira CLI com Node.js (consumindo a API do GitHub)</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Mon, 30 Mar 2026 17:57:19 +0000</pubDate>
      <link>https://dev.to/mffdeo/construindo-minha-primeira-cli-com-nodejs-consumindo-a-api-do-github-4m41</link>
      <guid>https://dev.to/mffdeo/construindo-minha-primeira-cli-com-nodejs-consumindo-a-api-do-github-4m41</guid>
      <description>&lt;p&gt;Recentemente, desenvolvi uma CLI simples em Node.js para visualizar a atividade recente de usuários do GitHub direto pelo terminal.&lt;/p&gt;

&lt;p&gt;O objetivo foi praticar fundamentos de backend na prática, sem depender de bibliotecas externas, focando em entender cada etapa do processo.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 O que a aplicação faz
&lt;/h2&gt;

&lt;p&gt;A ferramenta permite executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;github-activity &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E retorna algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Pushed commits to user/repo
Opened a new issue &lt;span class="k"&gt;in &lt;/span&gt;user/repo
Starred user/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os dados são obtidos através da API pública do GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users/:username/events
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚠️ Desafio encontrado: dados incompletos da API
&lt;/h2&gt;

&lt;p&gt;Inicialmente, a ideia era exibir a quantidade exata de commits em cada push:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Pushed 3 commits to user/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, durante os testes, observei que a API de eventos do GitHub &lt;strong&gt;nem sempre retorna os dados completos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em vários &lt;code&gt;PushEvent&lt;/code&gt;, o payload vinha assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ref"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"refs/heads/main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"head"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"commit_hash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"before"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"commit_hash"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sem os campos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"commits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;number&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou seja:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não há lista de commits&lt;/li&gt;
&lt;li&gt;Não há quantidade (&lt;code&gt;size&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Apenas o intervalo (&lt;code&gt;before&lt;/code&gt; → &lt;code&gt;head&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Análise técnica
&lt;/h2&gt;

&lt;p&gt;Isso mostra que a API de eventos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Funciona como um &lt;strong&gt;feed resumido de atividades&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Não garante consistência nos dados&lt;/li&gt;
&lt;li&gt;Pode omitir informações dependendo do contexto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma alternativa mais precisa seria usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /repos/:owner/:repo/compare/:before...:head
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que retorna o número real de commits. Porém, isso exigiria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;múltiplas requisições por evento&lt;/li&gt;
&lt;li&gt;controle de rate limit&lt;/li&gt;
&lt;li&gt;maior complexidade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para este projeto, optei por manter a simplicidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Solução adotada
&lt;/h2&gt;

&lt;p&gt;Implementei um fallback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Pushed commits to user/repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando a quantidade de commits não está disponível.&lt;/p&gt;

&lt;p&gt;Isso evita exibir dados incorretos e mantém a saída consistente.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Aprendizados principais
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔹 Entrada via CLI
&lt;/h3&gt;

&lt;p&gt;Uso de &lt;code&gt;process.argv&lt;/code&gt; para capturar argumentos do terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Consumo de API
&lt;/h3&gt;

&lt;p&gt;Utilização do &lt;code&gt;fetch&lt;/code&gt; nativo do Node.js para requisições HTTP.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Manipulação de JSON
&lt;/h3&gt;

&lt;p&gt;Filtragem e transformação de dados complexos em uma saída legível.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Tratamento de erros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;usuário não encontrado&lt;/li&gt;
&lt;li&gt;falhas de requisição&lt;/li&gt;
&lt;li&gt;propriedades indefinidas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔹 Limitações de sistemas externos
&lt;/h3&gt;

&lt;p&gt;Nem sempre o problema está no código — às vezes está na fonte de dados.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Decisões de implementação
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sem bibliotecas externas&lt;/li&gt;
&lt;li&gt;Código simples e direto&lt;/li&gt;
&lt;li&gt;Foco em aprendizado ao invés de abstrações&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Próximos passos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar flags (&lt;code&gt;--limit&lt;/code&gt;, &lt;code&gt;--type&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Melhorar a formatação da saída&lt;/li&gt;
&lt;li&gt;Adicionar cores no terminal&lt;/li&gt;
&lt;li&gt;Publicar como pacote global (npm)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📌 Conclusão
&lt;/h2&gt;

&lt;p&gt;Esse projeto mostrou, na prática, que:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;APIs nem sempre entregam dados completos ou consistentes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E mais importante:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um bom software não depende de dados perfeitos — ele se adapta a eles.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔗 Repositório
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mffdeo/github-activity-cli" rel="noopener noreferrer"&gt;https://github.com/mffdeo/github-activity-cli&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>github</category>
      <category>node</category>
    </item>
    <item>
      <title>Memória Sob Demanda: Como o Engram Está Mudando a Forma como LLMs Pensam</title>
      <dc:creator>Marcos Filipe</dc:creator>
      <pubDate>Thu, 26 Mar 2026 15:31:29 +0000</pubDate>
      <link>https://dev.to/mffdeo/memoria-sob-demanda-como-o-engram-esta-mudando-a-forma-como-llms-pensam-19o7</link>
      <guid>https://dev.to/mffdeo/memoria-sob-demanda-como-o-engram-esta-mudando-a-forma-como-llms-pensam-19o7</guid>
      <description>&lt;p&gt;Você já parou para pensar que os Transformers, a arquitetura por trás de modelos como ChatGPT, Claude e DeepSeek, são ótimos em raciocínio, mas... péssimos em memória?&lt;/p&gt;

&lt;p&gt;É isso que um novo paper da Peking University e DeepSeek-AI propõe resolver. Tentei trazer aqui os principais insights, que acredito serem um grande passo para a próxima geração de modelos de linguagem.&lt;/p&gt;

&lt;p&gt;🔍 &lt;strong&gt;O Problema: Transformers Não Sabem "Lembrar"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Um Transformer não tem um mecanismo nativo para recuperar conhecimento. Toda vez que ele precisa de uma informação como "Diana, Princesa de Gales", ele gasta várias camadas computacionais para reconstruir essa informação a partir do contexto.&lt;/p&gt;

&lt;p&gt;É como se, em vez de consultar uma enciclopédia, ele tentasse redescobrir a história inteira a cada pergunta.&lt;/p&gt;

&lt;p&gt;No paper, os autores mostram que, em um modelo tradicional, são necessárias cerca de 6 camadas para formar uma representação completa dessa entidade. Isso é ineficiente: o modelo está usando raciocínio profundo para fazer algo que poderia ser resolvido com uma simples consulta a uma tabela de memória.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;A Solução: Engram (Memória Condicional)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Engram introduz um novo tipo de "órgão" no modelo: um módulo de memória estática que funciona como um banco de dados de padrões linguísticos.&lt;/p&gt;

&lt;p&gt;Como funciona na prática:&lt;/p&gt;

&lt;p&gt;O modelo identifica um padrão local (ex: "Princesa de Gales")&lt;/p&gt;

&lt;p&gt;Ele usa esse padrão como chave para buscar um vetor de memória pré-armazenado (via hashing)&lt;/p&gt;

&lt;p&gt;Esse vetor é injetado diretamente nas camadas profundas do modelo&lt;/p&gt;

&lt;p&gt;O resultado? O modelo não precisa mais gastar camadas iniciais reconstruindo informação. Ele já começa com um "atalho" para o conhecimento.&lt;/p&gt;

&lt;p&gt;📊 &lt;strong&gt;O Resultado na Prática&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os pesquisadores treinaram um modelo chamado Engram-27B e compararam com um modelo tradicional de mesmo tamanho e mesmo custo computacional (MoE-27B). Os resultados:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Domínio&lt;/th&gt;
&lt;th&gt;Ganho&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MMLU&lt;/td&gt;
&lt;td&gt;Conhecimento geral&lt;/td&gt;
&lt;td&gt;+3,4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BBH&lt;/td&gt;
&lt;td&gt;Raciocínio complexo&lt;/td&gt;
&lt;td&gt;+5,0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HumanEval&lt;/td&gt;
&lt;td&gt;Geração de código&lt;/td&gt;
&lt;td&gt;+3,0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MATH&lt;/td&gt;
&lt;td&gt;Matemática&lt;/td&gt;
&lt;td&gt;+2,4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O mais interessante? O Engram melhorou até tarefas de raciocínio, não só de memorização.&lt;/p&gt;

&lt;p&gt;Isso acontece porque, ao liberar as primeiras camadas do trabalho de reconstrução, o modelo pode usá-las para "pensar" mais profundamente. Os autores chamam isso de "aumento da profundidade efetiva" da rede.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;Por Que Isso É uma "Nova Dimensão de Esparsidade"?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Até agora, a principal forma de escalar modelos sem aumentar custo computacional era o &lt;strong&gt;MoE (Mixture of Experts)&lt;/strong&gt;, que ativa apenas alguns "especialistas" por vez.&lt;/p&gt;

&lt;p&gt;O Engram introduz uma segunda dimensão:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Abordagem&lt;/th&gt;
&lt;th&gt;Função&lt;/th&gt;
&lt;th&gt;Como funciona&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MoE&lt;/td&gt;
&lt;td&gt;Processa lógica dinâmica&lt;/td&gt;
&lt;td&gt;Ativa especialistas (cálculo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engram&lt;/td&gt;
&lt;td&gt;Recupera conhecimento&lt;/td&gt;
&lt;td&gt;Ativa memórias (busca O(1))&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Juntos, formam uma dupla poderosa. E o melhor: o Engram é tão eficiente que pode armazenar 100 bilhões de parâmetros na memória RAM do computador sem prejudicar a velocidade — algo impossível com MoE puro.&lt;/p&gt;

&lt;p&gt;🔧 &lt;strong&gt;Detalhes Técnicos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se você quer entender melhor a arquitetura:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compressão do tokenizer: Redução de 23% no vocabulário via normalização (NFKC, lowercasing)&lt;/li&gt;
&lt;li&gt;Multi-head hashing: 8 cabeças de hash para cada ordem de N-gram (2 e 3)&lt;/li&gt;
&lt;li&gt;Gating contextual: O estado oculto atual decide quanto da memória recuperada deve ser integrada&lt;/li&gt;
&lt;li&gt;Posicionamento estratégico: Inserido nas camadas 2 e 15 para equilibrar intervenção precoce com riqueza contextual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O código está disponível no GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/deepseek-ai/Engram" rel="noopener noreferrer"&gt;https://github.com/deepseek-ai/Engram&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧭 &lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Engram mostra que, assim como o cérebro humano, os modelos de IA podem se beneficiar de mecanismos especializados. Ter um sistema separado para memória de longo prazo e outro para raciocínio dinâmico não só torna os modelos mais eficientes, como libera capacidade computacional para o que realmente importa: pensar com profundidade.&lt;/p&gt;

&lt;p&gt;Essa pode ser uma das direções mais importantes para os LLMs do futuro: modelos que sabem quando pensar e quando lembrar.&lt;/p&gt;

&lt;p&gt;📚 &lt;strong&gt;Fonte e Créditos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paper original: "Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models"&lt;br&gt;
&lt;em&gt;Autores&lt;/em&gt;: Xin Cheng, Wangding Zeng, Damai Dai, et al. (Peking University &amp;amp; DeepSeek-AI)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Usei ferramentas de IA para me auxiliar na consolidação e organização das ideias.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>deepseek</category>
      <category>machinelearning</category>
      <category>arquitetura</category>
    </item>
  </channel>
</rss>
