DEV Community

Marcel Boccato
Marcel Boccato

Posted on

Diário de vibe coding: do certificado Anthropic a uma plataforma de FinOps em dias

Screenshot Sentinel Dashboard

Esse artigo não é um tutorial. É um diário :)

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.


Dia 1: o certificado e os $5 de crédito

Decidi fazer o curso oficial da Anthropic (Skilljar): Claude Code in Action. Gratuito, com certificado, e levei algumas horas para concluir.

O curso pede uma API key do Anthropic Platform para rodar os exemplos. Criei a chave, subi o servidor local, e recebi:

error: Your credit balance is too low to access the Anthropic API.
Enter fullscreen mode Exit fullscreen mode

"Mas o curso é gratuito..."

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.

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

Com o certificado em mãos no mesmo dia, parti para a prática.


Ainda no Dia 1: criação da v1.0

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

Eu utilizo o Linux Fedora 43 KDE em um Notebook Acer Predator PHN16-72.

Instalei o minikube, subi o kube-prometheus-stack via Helm:

helm install prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set grafana.adminPassword=admin123
Enter fullscreen mode Exit fullscreen mode

Seis pods subindo de uma vez. Grafana com dashboards prontos. Prometheus coletando métricas reais do Minikube.

Então criei a estrutura base com slash commands em Markdown dentro de .claude/commands/:

Comando Função
/sentinel Orquestrador principal
/collect-metrics Sub-agent A — consulta Prometheus via PromQL
/analyze-pods Sub-agent B — verifica pods via kubectl
/correlate Sub-agent C — classifica severidade

O CLAUDE.md virou a memória operacional do agente: endpoints, thresholds, namespaces, template de runbook.

Rodei /sentinel pela primeira vez e ele gerou isso:

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
Enter fullscreen mode Exit fullscreen mode

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.

v1.0 no GitHub. Mesmo dia do certificado.


Dia 2: a v1.1 e o startup automático

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.

Criei o /startup — 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:

╔══════════════════════════════════════════╗
║     Sentinel — Startup                   ║
╚══════════════════════════════════════════╝
 Prometheus    (localhost:9090)  →  ✅ STARTED
 Grafana       (localhost:3000)  →  ✅ STARTED
 AlertManager  (localhost:9093)  →  ✅ STARTED
Enter fullscreen mode Exit fullscreen mode

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

O resultado ficou assim:

Namespace Total Unhealthy
default 0 0
monitoring 6 0 (todos Running)
kube-system 8 0 (todos Running)

E o agente ainda identificou o storage-provisioner 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.

v1.1 no GitHub. Dia 2.


A semana do Gemini: quando o Claude Code saiu do ar

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.

Migrei para o Gemini. 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.

Mas à medida que o projeto crescia, os problemas apareceram:

  • UI do dashboard: o Gemini gerava HTML funcional mas com inconsistências visuais que eu precisava corrigir manualmente
  • Segurança no código: 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

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.

O Sentinel nasceu no Gemini. Mas cresceu no Claude Code.


A v2.0: quando virou plataforma

A virada aconteceu com uma pergunta: "e se eu tiver os dados já coletados antes de chamar o Claude?"

Ou sejam queria uma plataforma em RealTime e entrar de cabeça no vibecoding.

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.

A solução: um Go agent rodando continuamente em background.

// Coleta a cada 10 segundos
// Persiste no PostgreSQL
// Expõe API REST para o Claude consumir
Enter fullscreen mode Exit fullscreen mode

Com client-go 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:

Endpoint Descrição
GET /api/summary Estado do cluster: nodes, pods, CPU
GET /api/metrics Métricas por pod: CPU usage, waste
GET /api/history Histórico de custo dos últimos 30min

O Claude Code passou a consumir esses endpoints via /incident em vez de fazer as queries diretamente. Separação de camadas real: Go coleta, Claude analisa.

Screenshot Sentinel Dashboard

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.


O harness: tratando output de LLM como untrusted input

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.

Segue artigo: Harness Engineering — Martin Fowler

Uma decisão de arquitetura muito importante para colocar o conceito em prática: o harness/validador_saida.py.

Todo relatório gerado pelo Claude Code passa por um gatekeeper antes de ser gravado em disco. O validador bloqueia:

Regra Exemplos bloqueados
Comandos destrutivos rm -rf, kubectl delete, DROP TABLE, fork bomb
Estrutura obrigatória Relatórios sem ## Resumo Executivo são rejeitados
Tamanho mínimo Conteúdo menor que 100 chars é rejeitado
if result.returncode != 0:
    return {
        "status": "error",
        "message": f"Validador bloqueou a gravação: {result.stderr.strip()}",
        "file": None,
    }
Enter fullscreen mode Exit fullscreen mode

Se o validador rejeitar, o arquivo não é criado. Ponto.

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


O que o vibe coding significa na prática

Vibe coding não é "deixar a AI fazer tudo". É uma forma específica de trabalho:

Você define o quê. A AI decide o como.

Em cada etapa, eu sabia o resultado que queria e agia como SRE, tomador de decisões:

  • "Quero que o startup verifique os serviços e suba os port-forwards ausentes"
  • "Quero análise agrupada por namespace com correlação de causa raiz"
  • "Quero um gatekeeper que bloqueie comandos destrutivos antes de gravar"

O agente implementava. Eu revisava, questionava, redirecionava.

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.


O que ficou claro sobre Claude Code

Pontos fortes:

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

Limitações reais:

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

Timeline da jornada

Data Marco
8 mar 2026 Certificado Claude Code in Action — Anthropic/Skilljar
8 mar 2026 v1.0: slash commands + Prometheus + K8s
9 mar 2026 v1.1: startup automático + múltiplos namespaces
Semana 2 Migração temporária para Gemini — restrição global de tokens Anthropic
Semana 2-3 v2.0: Go agent + PostgreSQL + dashboard + harness
Semana 3 Retorno ao Claude Code + renomeação para Sentinel

Onde está hoje

O projeto é open source, Apache 2.0:

👉 github.com/boccato85/Sentinel

Stack completa:

  • Minikube / Kubernetes v1.35.1
  • kube-prometheus-stack
  • Go agent com client-go
  • PostgreSQL
  • Claude Code 2.1.76
  • MCP Servers (Prometheus + kubectl)

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.


Esse projeto faz parte de uma trilha pessoal: CKA → Claude Code → MLOps. Se quiser acompanhar, me segue aqui no dev.to.

Top comments (0)