<?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: Marcel Boccato</title>
    <description>The latest articles on DEV Community by Marcel Boccato (@boccato85).</description>
    <link>https://dev.to/boccato85</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%2F3862790%2Fbbc24de9-b0ae-4216-8c84-8997d8020c3f.jpeg</url>
      <title>DEV Community: Marcel Boccato</title>
      <link>https://dev.to/boccato85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boccato85"/>
    <language>en</language>
    <item>
      <title>Diário de vibe coding: do certificado Anthropic a uma plataforma de FinOps em dias</title>
      <dc:creator>Marcel Boccato</dc:creator>
      <pubDate>Sun, 05 Apr 2026 22:08:13 +0000</pubDate>
      <link>https://dev.to/boccato85/diario-de-vibe-coding-do-certificado-anthropic-a-uma-plataforma-de-finops-em-dias-1dib</link>
      <guid>https://dev.to/boccato85/diario-de-vibe-coding-do-certificado-anthropic-a-uma-plataforma-de-finops-em-dias-1dib</guid>
      <description>&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%2F5satzpeodhgftq9i4a4q.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%2F5satzpeodhgftq9i4a4q.png" alt="Screenshot Sentinel Dashboard" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse artigo não é um tutorial. É um diário :)&lt;/p&gt;

&lt;p&gt;Estou fazendo o curso de certificação CKA, Certified Kubernetes Administrator através da plataforma KodeKloud, e assim gostaria de iniciar no mundo "agêntico" de IA com o Claude e terminei com uma plataforma de observabilidade e FinOps para Kubernetes rodando Go, PostgreSQL e um dashboard em tempo real — sem ter planejado nada disso.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dia 1: o certificado e os $5 de crédito
&lt;/h2&gt;

&lt;p&gt;Decidi fazer o curso oficial da Anthropic (Skilljar): &lt;strong&gt;Claude Code in Action&lt;/strong&gt;. Gratuito, com certificado, e levei algumas horas para concluir.&lt;/p&gt;

&lt;p&gt;O curso pede uma API key do Anthropic Platform para rodar os exemplos. Criei a chave, subi o servidor local, e recebi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error: Your credit balance is too low to access the Anthropic API.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;"Mas o curso é gratuito..."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Não é bem assim. O curso é gratuito. As chamadas de API consomem créditos reais. São duas coisas separadas — e a plataforma não deixa isso claro o suficiente. Comprei $5 de crédito, deletei cache e sessões, recriei a key, e funcionou.&lt;/p&gt;

&lt;p&gt;Lição 1: o capitalismo sempre vence. Mas $5 dura bastante com o Haiku, o modelo de "entrada" digamos assim.&lt;/p&gt;

&lt;p&gt;Com o certificado em mãos no mesmo dia, parti para a prática.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ainda no Dia 1: criação da v1.0
&lt;/h2&gt;

&lt;p&gt;A ideia era simples: um agente Claude Code que monitorasse um cluster Kubernetes e gerasse runbooks automaticamente. Sem código manual. Só diretivas.&lt;/p&gt;

&lt;p&gt;Eu utilizo o Linux Fedora 43 KDE em um Notebook Acer Predator PHN16-72.&lt;/p&gt;

&lt;p&gt;Instalei o minikube, subi o &lt;strong&gt;kube-prometheus-stack&lt;/strong&gt; via Helm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;prometheus-stack prometheus-community/kube-prometheus-stack &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--namespace&lt;/span&gt; monitoring &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--set&lt;/span&gt; grafana.adminPassword&lt;span class="o"&gt;=&lt;/span&gt;admin123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seis pods subindo de uma vez. Grafana com dashboards prontos. Prometheus coletando métricas reais do Minikube.&lt;/p&gt;

&lt;p&gt;Então criei a estrutura base com slash commands em Markdown dentro de &lt;code&gt;.claude/commands/&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Função&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/sentinel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Orquestrador principal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/collect-metrics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sub-agent A — consulta Prometheus via PromQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/analyze-pods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sub-agent B — verifica pods via kubectl&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/correlate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sub-agent C — classifica severidade&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O &lt;code&gt;CLAUDE.md&lt;/code&gt; virou a memória operacional do agente: endpoints, thresholds, namespaces, template de runbook.&lt;/p&gt;

&lt;p&gt;Rodei &lt;code&gt;/sentinel&lt;/code&gt; pela primeira vez e ele gerou isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Severidade: WARNING
CPU: 11.4% ✅ | Memória: 45.1% ✅ | Disco: 17.65% ✅
64 Warning events identificados como residuais de restart anterior do nó
storage-provisioner: BackOff recente — requer monitoramento
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O agente separou ruído de sinal sozinho. Identificou que os 64 eventos de Warning eram residuais de um reboot do Minikube — não anomalias reais. Isso não estava no prompt. Foi raciocínio do modelo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v1.0 no GitHub. Mesmo dia do certificado.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Dia 2: a v1.1 e o startup automático
&lt;/h2&gt;

&lt;p&gt;O maior atrito da v1.0 era operacional: toda vez que abria o Claude Code, precisava lembrar de subir os três port-forwards manualmente antes de rodar qualquer comando.&lt;/p&gt;

&lt;p&gt;Criei o &lt;code&gt;/startup&lt;/code&gt; — um agente que verifica se Prometheus, Grafana e AlertManager estão acessíveis e sobe apenas os port-forwards ausentes, em background, com retry de até 10 tentativas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╔══════════════════════════════════════════╗
║     Sentinel — Startup                   ║
╚══════════════════════════════════════════╝
 Prometheus    (localhost:9090)  →  ✅ STARTED
 Grafana       (localhost:3000)  →  ✅ STARTED
 AlertManager  (localhost:9093)  →  ✅ STARTED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também expandi o &lt;code&gt;/analyze-pods&lt;/code&gt; para monitorar múltiplos namespaces em paralelo: &lt;code&gt;default&lt;/code&gt;, &lt;code&gt;monitoring&lt;/code&gt; e &lt;code&gt;kube-system&lt;/code&gt; — com resultados agrupados por namespace e correlação de causa raiz cruzada.&lt;/p&gt;

&lt;p&gt;O resultado ficou assim:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Namespace&lt;/th&gt;
&lt;th&gt;Total&lt;/th&gt;
&lt;th&gt;Unhealthy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monitoring&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0 (todos Running)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kube-system&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0 (todos Running)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E o agente ainda identificou o &lt;code&gt;storage-provisioner&lt;/code&gt; com 21 restarts versus média de 8 dos outros pods — sinalizando o componente realmente anômalo sem nenhuma instrução explícita sobre isso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v1.1 no GitHub. Dia 2.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A semana do Gemini: quando o Claude Code saiu do ar
&lt;/h2&gt;

&lt;p&gt;Na semana seguinte, senti uma grande dificuldade de utilizar o Claude, seja via web ou Code via terminal. Os tokens estavam sendo consumidos muito mais rápido, mesmo seguindo todas as boas práticas recomendadas da própria Anthropic. Reclamações começaram a se multiplicar no Reddit, X, Stack etc. Aparentemente a demanda estava sendo alta demais para absorverem. Eu uso o plano pro R$20 dólares, sei que não é grande coisa, mas mesmo para estudos estava inviável.&lt;/p&gt;

&lt;p&gt;Migrei para o &lt;strong&gt;Gemini&lt;/strong&gt;. Funcionou por um bom tempo — e foi nesse período que o Sentinel começou a ganhar as features mais complexas: o Go agent, a integração com PostgreSQL, o dashboard.&lt;/p&gt;

&lt;p&gt;Mas à medida que o projeto crescia, os problemas apareceram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI do dashboard&lt;/strong&gt;: o Gemini gerava HTML funcional mas com inconsistências visuais que eu precisava corrigir manualmente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segurança no código&lt;/strong&gt;: Utilizei o Claude Code rapidamente para ser um code review e encontrei padrões no código gerado que me preocuparam — falta de validação de input, headers de segurança ausentes, queries SQL sem sanitização adequada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando o Claude Code voltou a funcionar (deram um crédito adicional de R$ 110), migrei de volta. O custo por sessão é maior e a janela de contexto é menor — mas a qualidade e confiabilidade do código gerado, especialmente em questões de segurança, compensam.&lt;/p&gt;

&lt;p&gt;O Sentinel nasceu no Gemini. Mas cresceu no Claude Code.&lt;/p&gt;




&lt;h2&gt;
  
  
  A v2.0: quando virou plataforma
&lt;/h2&gt;

&lt;p&gt;A virada aconteceu com uma pergunta: &lt;em&gt;"e se eu tiver os dados já coletados antes de chamar o Claude?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ou sejam queria uma plataforma em RealTime e entrar de cabeça no vibecoding. &lt;/p&gt;

&lt;p&gt;Os slash commands consultavam Prometheus e kubectl em tempo real a cada execução. Isso funcionava, mas era lento e stateless — sem histórico, sem tendência, sem FinOps real.&lt;/p&gt;

&lt;p&gt;A solução: um &lt;strong&gt;Go agent&lt;/strong&gt; rodando continuamente em background.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Coleta a cada 10 segundos&lt;/span&gt;
&lt;span class="c"&gt;// Persiste no PostgreSQL&lt;/span&gt;
&lt;span class="c"&gt;// Expõe API REST para o Claude consumir&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com &lt;code&gt;client-go&lt;/code&gt; nativo, o agent coleta métricas de CPU, memória e waste por pod, persiste em transação batch no PostgreSQL e expõe três endpoints:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /api/summary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estado do cluster: nodes, pods, CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /api/metrics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Métricas por pod: CPU usage, waste&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET /api/history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Histórico de custo dos últimos 30min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O Claude Code passou a consumir esses endpoints via &lt;code&gt;/incident&lt;/code&gt; em vez de fazer as queries diretamente. Separação de camadas real: Go coleta, Claude analisa.&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%2F5satzpeodhgftq9i4a4q.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%2F5satzpeodhgftq9i4a4q.png" alt="Screenshot Sentinel Dashboard" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Node Health Map com honeycomb, Pod Distribution com donut chart, Waste Intelligence com savings opportunities por pod, ROI Timeline financeiro com Budget vs Actual nos últimos 30 minutos.&lt;/p&gt;




&lt;h2&gt;
  
  
  O harness: tratando output de LLM como untrusted input
&lt;/h2&gt;

&lt;p&gt;Bem, entre publicações no Linkedin, meu irmão me enviou um artigo interessante sobre Harness Engineering, basicamente ter segurança e confiabilidade ao redor do modelo, com infraestrutura adequada, revisões de segurança e padrões de ReACT constante (Review, ACT) além de feedback. &lt;/p&gt;

&lt;p&gt;Segue artigo: &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;Harness Engineering — Martin Fowler&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma decisão de arquitetura muito importante para colocar o conceito em prática: o &lt;code&gt;harness/validador_saida.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Todo relatório gerado pelo Claude Code passa por um gatekeeper antes de ser gravado em disco. O validador bloqueia:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Regra&lt;/th&gt;
&lt;th&gt;Exemplos bloqueados&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Comandos destrutivos&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;rm -rf&lt;/code&gt;, &lt;code&gt;kubectl delete&lt;/code&gt;, &lt;code&gt;DROP TABLE&lt;/code&gt;, fork bomb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estrutura obrigatória&lt;/td&gt;
&lt;td&gt;Relatórios sem &lt;code&gt;## Resumo Executivo&lt;/code&gt; são rejeitados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tamanho mínimo&lt;/td&gt;
&lt;td&gt;Conteúdo menor que 100 chars é rejeitado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;returncode&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Validador bloqueou a gravação: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o validador rejeitar, o arquivo não é criado. Ponto.&lt;/p&gt;

&lt;p&gt;Isso não é paranoia — é arquitetura de produção. Qualquer sistema que usa LLM para gerar ações sobre infraestrutura precisa de um gatekeeper.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que o vibe coding significa na prática
&lt;/h2&gt;

&lt;p&gt;Vibe coding não é "deixar a AI fazer tudo". É uma forma específica de trabalho:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você define o quê. A AI decide o como.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Em cada etapa, eu sabia o resultado que queria e agia como SRE, tomador de decisões:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Quero que o startup verifique os serviços e suba os port-forwards ausentes"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Quero análise agrupada por namespace com correlação de causa raiz"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Quero um gatekeeper que bloqueie comandos destrutivos antes de gravar"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O agente implementava. Eu revisava, questionava, redirecionava.&lt;/p&gt;

&lt;p&gt;O que me surpreendeu: em nenhum momento eu escrevi uma linha de código do Go agent, do dashboard, ou do harness. Mas cada decisão de arquitetura foi minha. A AI foi o meu software engineer sênior.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que ficou claro sobre Claude Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pontos fortes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qualidade e consistência do código gerado, especialmente em Go&lt;/li&gt;
&lt;li&gt;Raciocínio sobre segurança — headers HTTP corretos, sanitização, permissões de arquivo&lt;/li&gt;
&lt;li&gt;Capacidade de manter contexto de projeto via &lt;code&gt;CLAUDE.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sub-agents paralelos que genuinamente executam em paralelo&lt;/li&gt;
&lt;li&gt;Capacidade de criação UI otimizada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitações reais:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Janela de contexto menor que concorrentes — projetos grandes exigem &lt;code&gt;/compact&lt;/code&gt; frequente&lt;/li&gt;
&lt;li&gt;Custo por token mais elevado — relevante em sessões longas&lt;/li&gt;
&lt;li&gt;A instabilidade de tokens que aconteceu na semana passada mostrou que dependência total de um único provider é risco real&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Timeline da jornada
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data&lt;/th&gt;
&lt;th&gt;Marco&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8 mar 2026&lt;/td&gt;
&lt;td&gt;Certificado Claude Code in Action — Anthropic/Skilljar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 mar 2026&lt;/td&gt;
&lt;td&gt;v1.0: slash commands + Prometheus + K8s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9 mar 2026&lt;/td&gt;
&lt;td&gt;v1.1: startup automático + múltiplos namespaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semana 2&lt;/td&gt;
&lt;td&gt;Migração temporária para Gemini — restrição global de tokens Anthropic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semana 2-3&lt;/td&gt;
&lt;td&gt;v2.0: Go agent + PostgreSQL + dashboard + harness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semana 3&lt;/td&gt;
&lt;td&gt;Retorno ao Claude Code + renomeação para Sentinel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Onde está hoje
&lt;/h2&gt;

&lt;p&gt;O projeto é open source, Apache 2.0:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/boccato85/Sentinel" rel="noopener noreferrer"&gt;github.com/boccato85/Sentinel&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stack completa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minikube / Kubernetes v1.35.1&lt;/li&gt;
&lt;li&gt;kube-prometheus-stack&lt;/li&gt;
&lt;li&gt;Go agent com &lt;code&gt;client-go&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Claude Code 2.1.76&lt;/li&gt;
&lt;li&gt;MCP Servers (Prometheus + kubectl)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se você trabalha com SRE, CloudOps ou FinOps e quer explorar Claude Code na prática, esse é um ponto de partida real — não um hello world.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Esse projeto faz parte de uma trilha pessoal: CKA → Claude Code → MLOps. Se quiser acompanhar, me segue aqui no dev.to.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>finops</category>
    </item>
  </channel>
</rss>
